diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..dc8415d5b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,23 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "monthly" + groups: + actions: + patterns: + - "*" + - package-ecosystem: "github-actions" # See documentation for possible values + directory: ".github/workflows" # Location of package manifests + schedule: + interval: "monthly" + groups: + actions: + patterns: + - "*" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..b42451b50 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,29 @@ + + +## References + + + + + +## Code changes + + + +## User-facing changes + + + + + +## Backwards-incompatible changes + + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a79ee9575..50fb3c05d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,21 +19,16 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup conda - uses: conda-incubator/setup-miniconda@v2 + - name: Install Conda environment with Micromamba + uses: mamba-org/setup-micromamba@main with: - activate-environment: bqplot-test environment-file: test-environment.yml - python-version: ${{ matrix.python-version }} - mamba-version: "*" - auto-activate-base: false channels: conda-forge - name: Install the package - run: | - pip install . + run: pip install . -vvv - name: Test installation files run: | @@ -44,31 +39,29 @@ jobs: test -f $CONDA_PREFIX/share/jupyter/labextensions/bqplot/package.json test -d $CONDA_PREFIX/share/jupyter/labextensions/bqplot/static - - name: Validate the nbextension - run: jupyter nbextension list 2>&1 | grep "bqplot/extension" + - name: Debug labextension + run: jupyter labextension list - name: Validate the labextension run: jupyter labextension list 2>&1 | grep bqplot - name: Discover typos with codespell - run: | - pip install codespell - codespell --ignore-words-list="afterall,curvelinear,hist" --skip="*.csv,*.json,*.lock" + run: codespell --ignore-words-list="afterall,curvelinear,hist" --skip="./share,./.git/*,./js/node_modules/*,./js/dist/*,*.csv,*.json,*.lock,*.map,docs/*" - name: Python PEP8 check run: flake8 bqplot --ignore=E501,W504,W503 - name: JavaScript prettyfier run: | - yarn install - yarn run prettier --check . + jlpm install + jlpm run prettier --check . working-directory: js - name: Python tests run: pytest tests examples/Marks - name: JavaScript tests - run: yarn run test + run: jlpm run test working-directory: js - name: Build Python package @@ -79,12 +72,12 @@ jobs: - name: Pack JavaScript package run: | - yarn pack - mv bqplot*.tgz ../dist + jlpm pack -o bqplot.tgz + mv bqplot.tgz ../dist working-directory: js - name: Upload builds - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: dist ${{ github.run_number }} path: ./dist @@ -95,19 +88,18 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup conda - uses: conda-incubator/setup-miniconda@v2 + - name: Install Conda environment with Micromamba + uses: mamba-org/setup-micromamba@main with: - activate-environment: bqplot-test + environment-name: bqplot-test environment-file: test-environment.yml python-version: 3.9 - mamba-version: "*" auto-activate-base: false channels: conda-forge - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v4 with: name: dist ${{ github.run_number }} path: ./dist @@ -116,30 +108,31 @@ jobs: run: pip install -vv bqplot*.whl working-directory: dist - - name: Install Galata - run: yarn install + - name: Install dependencies + shell: bash -l {0} working-directory: ui-tests + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + run: jlpm install - - name: Launch JupyterLab - run: yarn run start-jlab:detached + - name: Install browser + shell: bash -l {0} + run: npx playwright install chromium working-directory: ui-tests - - name: Wait for JupyterLab - uses: ifaxity/wait-on-action@v1 - with: - resource: http-get://localhost:8888/api - timeout: 20000 - - - name: Run UI Tests - run: yarn run test + - name: Execute integration tests + shell: bash -l {0} working-directory: ui-tests + run: jlpm run test - - name: Upload UI Test artifacts + - name: Upload Playwright Test report if: always() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: - name: ui-test-output - path: ui-tests/test-output + name: bqplot-playwright-tests + path: | + ui-tests/test-results + ui-tests/playwright-report install: runs-on: ${{ matrix.os }}-latest @@ -149,29 +142,20 @@ jobs: fail-fast: false matrix: os: [ubuntu, macos, windows] - python: ['3.6', '3.9'] - include: - - python: '3.6' - dist: 'bqplot*.tar.gz' - - python: '3.9' - dist: 'bqplot*.whl' + dist: ['bqplot*.tar.gz', 'bqplot*.whl'] steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup conda - uses: conda-incubator/setup-miniconda@v2 + - name: Install Conda environment with Micromamba + uses: mamba-org/setup-micromamba@main with: - activate-environment: bqplot-test environment-file: test-environment.yml - python-version: ${{ matrix.python-version }} - mamba-version: "*" - auto-activate-base: false channels: conda-forge - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v4 with: name: dist ${{ github.run_number }} path: ./dist @@ -190,41 +174,5 @@ jobs: test -f $CONDA_PREFIX/share/jupyter/labextensions/bqplot/package.json test -d $CONDA_PREFIX/share/jupyter/labextensions/bqplot/static - - name: Validate the nbextension - run: jupyter nbextension list 2>&1 | grep "bqplot/extension" - - name: Validate the labextension run: jupyter labextension list 2>&1 | grep bqplot - - JupyterLab2-build: - runs-on: ${{ matrix.os }}-latest - needs: [build] - - strategy: - fail-fast: false - matrix: - os: [ubuntu] - python: ['3.9'] - - steps: - - - name: Checkout - uses: actions/checkout@v2 - - - name: Setup conda - uses: conda-incubator/setup-miniconda@v2 - with: - python-version: ${{ matrix.python-version }} - mamba-version: "*" - channels: conda-forge - - - uses: actions/download-artifact@v2 - with: - name: dist ${{ github.run_number }} - path: ./dist - - - name: Install JupyterLab 2 - run: mamba install yarn jupyterlab=2 - - - name: Install the labextension - run: jupyter labextension install dist/bqplot*.tgz --debug diff --git a/.github/workflows/publish_docs.yml b/.github/workflows/publish_docs.yml new file mode 100644 index 000000000..f21858f19 --- /dev/null +++ b/.github/workflows/publish_docs.yml @@ -0,0 +1,62 @@ +name: Docs + +on: + push: + branches: + - master + paths: + - docs/** + - bqplot/** + - mkdocs.yml + pull_request: + branches: + - '*' + paths: + - docs/** + - bqplot/** + - mkdocs.yml + +defaults: + run: + shell: bash -l {0} + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Conda environment with Micromamba + uses: mamba-org/setup-micromamba@main + with: + environment-file: 'docs/mkdocs-environment.yml' + channels: conda-forge + + - name: Discover typos with codespell + run: codespell --ignore-words-list="afterall,curvelinear,hist" --skip="share,.git/*,js/*,*.csv,*.json,*.lock,*.map" + + - name: Build the docs site + run: mkdocs build --site-dir dist + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./dist + + deploy: + needs: build + if: github.ref == 'refs/heads/master' + permissions: + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/update_galata_references.yaml b/.github/workflows/update_galata_references.yaml new file mode 100644 index 000000000..b759a62fa --- /dev/null +++ b/.github/workflows/update_galata_references.yaml @@ -0,0 +1,48 @@ +name: Update Galata References + +on: + issue_comment: + types: [created, edited] + +permissions: + contents: write + pull-requests: write + +defaults: + run: + shell: bash -l {0} + +jobs: + update-reference-screenshots: + name: Update Galata References + runs-on: ubuntu-latest + + if: github.event.issue.pull_request && contains(github.event.comment.body, 'please update snapshots') + + steps: + - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots-checkout@main + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Install Conda environment with Micromamba + uses: mamba-org/setup-micromamba@main + with: + environment-file: test-environment.yml + channels: conda-forge + + - name: Install bqplot + run: pip install . + + - name: Install dependencies + shell: bash -l {0} + working-directory: ui-tests + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + run: jlpm install + + - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@main + with: + npm_client: jlpm + github_token: ${{ secrets.GITHUB_TOKEN }} + start_server_script: 'null' + test_folder: ui-tests diff --git a/.gitignore b/.gitignore index 32aee2c71..59bdf5854 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,8 @@ pip-log.txt .coverage .tox nosetests.xml -ui-tests/test-output/* +ui-tests/test-results +ui-tests/playwright-report # Translations *.mo @@ -64,3 +65,10 @@ node_modules *.swp *.tsbuildinfo +*.log + +# mkdocs +site/ + +.yarn +ui-tests/.yarn diff --git a/.nblink/environment.yml b/.nblink/environment.yml new file mode 100644 index 000000000..be5c2a73a --- /dev/null +++ b/.nblink/environment.yml @@ -0,0 +1,10 @@ +name: bqplot-nblink-environment +channels: + - emscripten-forge + - conda-forge +dependencies: + - xeus-python + - bqplot + - scikit-learn + - scipy + - numpy diff --git a/.nblink/nblink-lock.json b/.nblink/nblink-lock.json new file mode 100644 index 000000000..84f6c8c1b --- /dev/null +++ b/.nblink/nblink-lock.json @@ -0,0 +1,662 @@ +{ + "id": "3199196876039978", + "lockVersion": "1.0.2", + "platform": "emscripten-wasm32", + "specs": [ + "xeus-python", + "bqplot", + "scikit-learn", + "scipy", + "numpy" + ], + "channels": [ + "emscripten-forge", + "conda-forge" + ], + "channelInfo": { + "emscripten-forge": [ + { + "url": "https://prefix.dev/emscripten-forge-dev", + "protocol": "https" + }, + { + "url": "https://repo.prefix.dev/emscripten-forge-dev", + "protocol": "https" + } + ], + "conda-forge": [ + { + "url": "https://prefix.dev/conda-forge", + "protocol": "https" + }, + { + "url": "https://repo.prefix.dev/conda-forge", + "protocol": "https" + } + ] + }, + "packages": { + "xeus-python-0.17.6-py313h027658c_3.tar.bz2": { + "name": "xeus-python", + "build": "py313h027658c_3", + "version": "0.17.6", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "92394029d395124dca27d7be2a1742650f1e15bd9dea304e8407f33f22ceb308" + }, + "size": 5083856 + }, + "xeus-5.2.6-h2072262_0.tar.bz2": { + "name": "xeus", + "build": "h2072262_0", + "version": "5.2.6", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "92b87c1993283014d660b67020e70b1d8fcaa5e80aa079df1e9999633eca6cf9" + }, + "size": 379059 + }, + "bqplot-0.12.45-pyhe01879c_0.conda": { + "name": "bqplot", + "build": "pyhe01879c_0", + "version": "0.12.45", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "3cedf673ae6d0e272807bcb9929df40e", + "sha256": "2248c46491d6cc11692d7fbc5bb61c1b6177fd50654a296c13e31434e30b8994" + }, + "size": 966021 + }, + "scikit-learn-1.8.0-np22py313h2c67255_1.tar.bz2": { + "name": "scikit-learn", + "build": "np22py313h2c67255_1", + "version": "1.8.0", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "7180f99eabffac8e4b3700060d5050374cf9d7fb00eb42863fb8f98035ae4948" + }, + "size": 8781055 + }, + "scipy-1.17.0-np22py313h759dc5e_0.tar.bz2": { + "name": "scipy", + "build": "np22py313h759dc5e_0", + "version": "1.17.0", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "9252e23b068d10ece64c962b54db2e2204de9cff14edce9aa708b3419279b087" + }, + "size": 20252970 + }, + "numpy-2.4.1-py313h6394566_0.tar.bz2": { + "name": "numpy", + "build": "py313h6394566_0", + "version": "2.4.1", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "719e8eaf8183d02ab96b0a1cf05efd0b8b606355dfcd6b3ac1397539d700e863" + }, + "size": 6904916 + }, + "python-3.13.1-h_c8de616_5_cp313.tar.bz2": { + "name": "python", + "build": "h_c8de616_5_cp313", + "version": "3.13.1", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "7f9a3ec3cc534475d23c072b60d4b0b4272fc4fbe7523e80aa88f7d491b83c86" + }, + "size": 13730039 + }, + "xeus-python-shell-lite-0.6.6-pyhd8ed1ab_0.conda": { + "name": "xeus-python-shell-lite", + "build": "pyhd8ed1ab_0", + "version": "0.6.6", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "e053ba510540bd9f6e52a72626062e33", + "sha256": "59588e3f38120c0e4df3fa4347727f3f59fdc5e4e677aa0266eb560aa646b618" + }, + "size": 7321 + }, + "xeus-python-shell-0.6.6-pyh332efcf_0.conda": { + "name": "xeus-python-shell", + "build": "pyh332efcf_0", + "version": "0.6.6", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "fb78d1cc085480f0d2b38fee492ff7ae", + "sha256": "dd7eb23e335e9baf5b83eadf97c751d649c6128d5fc14746399c138ff45d7349" + }, + "size": 7365 + }, + "pyodide-http-0.2.2-pyhcf101f3_0.conda": { + "name": "pyodide-http", + "build": "pyhcf101f3_0", + "version": "0.2.2", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "fa9bbfc44b2482fb55bbb9e106958b71", + "sha256": "7e2a6f50f86910c22ab7883aa358fe1f5b4d2e2278b8f158d421c85d27057542" + }, + "size": 16750 + }, + "xeus-python-shell-raw-0.6.6-pyhd8ed1ab_0.conda": { + "name": "xeus-python-shell-raw", + "build": "pyhd8ed1ab_0", + "version": "0.6.6", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "c753450d7e2b773bb35cfd1e2253c2c9", + "sha256": "dd308739e9531ce75f7ba20127cbe2356d00eec63610e813e8d5a06fa0f3af4c" + }, + "size": 12760 + }, + "pyjs-rt-3.2.0-py313h7595f35_0.tar.bz2": { + "name": "pyjs-rt", + "build": "py313h7595f35_0", + "version": "3.2.0", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "685501d87313eeb2de9c2adaaa3a2850998e03d1bfc55910f58840267bb9c98f" + }, + "size": 46084 + }, + "emscripten-abi-3.1.73-h267e887_12.tar.bz2": { + "name": "emscripten-abi", + "build": "h267e887_12", + "version": "3.1.73", + "subdir": "noarch", + "channel": "emscripten-forge", + "hash": { + "sha256": "50477ceddc687fdda3ab437fc95237b7f1c489e28470adc2ea453105b497eed2" + }, + "size": 11548 + }, + "python_abi-3.13.1-1_cp313.tar.bz2": { + "name": "python_abi", + "build": "1_cp313", + "version": "3.13.1", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "30a61e8347df1050a1aadbf34ece486d4a5fb173526d4c8af83f825620eb844a" + }, + "size": 2597 + }, + "nlohmann_json-abi-3.12.0-h0f90c79_1.conda": { + "name": "nlohmann_json-abi", + "build": "h0f90c79_1", + "version": "3.12.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "59659d0213082bc13be8500bab80c002", + "sha256": "2a909594ca78843258e4bda36e43d165cda844743329838a29402823c8f20dec" + }, + "size": 4335 + }, + "ipywidgets-8.1.8-pyhd8ed1ab_0.conda": { + "name": "ipywidgets", + "build": "pyhd8ed1ab_0", + "version": "8.1.8", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "d68e3f70d1f068f1b66d94822fdc644e", + "sha256": "6bb58afb7eabc8b4ac0c7e92707fb498313cc0164cf04e7ba1090dbf49af514b" + }, + "size": 114376 + }, + "pandas-2.3.3-np22py313h9d9dc1e_0.tar.bz2": { + "name": "pandas", + "build": "np22py313h9d9dc1e_0", + "version": "2.3.3", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "dbbee329c9543918eeb0d5bf306dae512df42becad06863fd0b82cf1d9e2a66e" + }, + "size": 12864256 + }, + "traitlets-5.14.3-pyhd8ed1ab_1.conda": { + "name": "traitlets", + "build": "pyhd8ed1ab_1", + "version": "5.14.3", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "019a7385be9af33791c989871317e1ed", + "sha256": "f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959" + }, + "size": 110051 + }, + "traittypes-0.2.3-pyh332efcf_0.conda": { + "name": "traittypes", + "build": "pyh332efcf_0", + "version": "0.2.3", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "d22a0bf07f57cfb1240185961d182a8d", + "sha256": "67a77ce374a792fc6d8e4d56c83c21b6cf3a7f43b6e98c1db2cbed2254144d05" + }, + "size": 13283 + }, + "joblib-1.5.3-py313h1804a44_0.tar.bz2": { + "name": "joblib", + "build": "py313h1804a44_0", + "version": "1.5.3", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "6611503184df6b81e238b032be3145c688fc66bd43c3d810cd3224a45dd2682a" + }, + "size": 537649 + }, + "threadpoolctl-3.6.0-pyhecae5ae_0.conda": { + "name": "threadpoolctl", + "build": "pyhecae5ae_0", + "version": "3.6.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "9d64911b31d57ca443e9f1e36b04385f", + "sha256": "6016672e0e72c4cf23c0cf7b1986283bd86a9c17e8d319212d78d8e9ae42fdfd" + }, + "size": 23869 + }, + "requests-2.32.5-pyhcf101f3_1.conda": { + "name": "requests", + "build": "pyhcf101f3_1", + "version": "2.32.5", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "c65df89a0b2e321045a9e01d1337b182", + "sha256": "7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5" + }, + "size": 63602 + }, + "openblas-flang-0.3.30-h4e94343_3.tar.bz2": { + "name": "openblas-flang", + "build": "h4e94343_3", + "version": "0.3.30", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "a365f0b3dcd7518c125581dbcfde3f3a210f121b70570521d7bd2a43288fa47a" + }, + "size": 5477320 + }, + "packaging-26.0-pyhcf101f3_0.conda": { + "name": "packaging", + "build": "pyhcf101f3_0", + "version": "26.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "b76541e68fea4d511b1ac46a28dcd2c6", + "sha256": "c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58" + }, + "size": 72010 + }, + "ipython-9.9.0-py313hd355c7d_0.tar.bz2": { + "name": "ipython", + "build": "py313hd355c7d_0", + "version": "9.9.0", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "e39dd7d6e89f16ce39ab2c9bdc986985287c75ec98817646d571ab6648ef105b" + }, + "size": 1177681 + }, + "backcall-0.2.0-pyh9f0ad1d_0.tar.bz2": { + "name": "backcall", + "build": "pyh9f0ad1d_0", + "version": "0.2.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "6006a6d08a3fa99268a2681c7fb55213", + "sha256": "ee62d6434090c1327a48551734e06bd10e65a64ef7f3b6e68719500dab0e42b9" + }, + "size": 13705 + }, + "decorator-5.2.1-pyhd8ed1ab_0.conda": { + "name": "decorator", + "build": "pyhd8ed1ab_0", + "version": "5.2.1", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "9ce473d1d1be1cc3810856a48b3fab32", + "sha256": "c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017" + }, + "size": 14129 + }, + "matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda": { + "name": "matplotlib-inline", + "build": "pyhd8ed1ab_0", + "version": "0.2.1", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "00e120ce3e40bad7bfc78861ce3c4a25", + "sha256": "9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603" + }, + "size": 15175 + }, + "pickleshare-0.7.5-pyhd8ed1ab_1004.conda": { + "name": "pickleshare", + "build": "pyhd8ed1ab_1004", + "version": "0.7.5", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "11a9d1d09a3615fc07c3faf79bc0b943", + "sha256": "e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b" + }, + "size": 11748 + }, + "prompt-toolkit-3.0.52-pyha770c72_0.conda": { + "name": "prompt-toolkit", + "build": "pyha770c72_0", + "version": "3.0.52", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "edb16f14d920fb3faf17f5ce582942d6", + "sha256": "4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae" + }, + "size": 273927 + }, + "pygments-2.19.2-pyhd8ed1ab_0.conda": { + "name": "pygments", + "build": "pyhd8ed1ab_0", + "version": "2.19.2", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "6b6ece66ebcae2d5f326c77ef2c5a066", + "sha256": "5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a" + }, + "size": 889287 + }, + "stack_data-0.6.3-pyhd8ed1ab_1.conda": { + "name": "stack_data", + "build": "pyhd8ed1ab_1", + "version": "0.6.3", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "b1b505328da7a6b246787df4b5a49fbc", + "sha256": "570da295d421661af487f1595045760526964f41471021056e993e73089e9c41" + }, + "size": 26988 + }, + "pexpect-4.9.0-pyhd8ed1ab_1.conda": { + "name": "pexpect", + "build": "pyhd8ed1ab_1", + "version": "4.9.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "d0d408b1f18883a944376da5cf8101ea", + "sha256": "202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a" + }, + "size": 53561 + }, + "typing_extensions-4.15.0-pyhcf101f3_0.conda": { + "name": "typing_extensions", + "build": "pyhcf101f3_0", + "version": "4.15.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "0caa1af407ecff61170c9437a808404d", + "sha256": "032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731" + }, + "size": 51692 + }, + "comm-0.2.3-pyhe01879c_0.conda": { + "name": "comm", + "build": "pyhe01879c_0", + "version": "0.2.3", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "2da13f2b299d8e1995bafbbe9689a2f7", + "sha256": "576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212" + }, + "size": 14690 + }, + "jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda": { + "name": "jupyterlab_widgets", + "build": "pyhcf101f3_1", + "version": "3.0.16", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "dbf8b81974504fa51d34e436ca7ef389", + "sha256": "5c03de243d7ae6247f39a402f4785d95e61c3be79ef18738e8f17155585d31a8" + }, + "size": 216779 + }, + "widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda": { + "name": "widgetsnbextension", + "build": "pyhd8ed1ab_0", + "version": "4.0.15", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "dc257b7e7cad9b79c1dfba194e92297b", + "sha256": "826af5e2c09e5e45361fa19168f46ff524e7a766022615678c3a670c45895d9a" + }, + "size": 889195 + }, + "python-dateutil-2.9.0.post0-pyhe01879c_2.conda": { + "name": "python-dateutil", + "build": "pyhe01879c_2", + "version": "2.9.0.post0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "5b8d21249ff20967101ffa321cab24e8", + "sha256": "d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664" + }, + "size": 233310 + }, + "pytz-2025.2-pyhd8ed1ab_0.conda": { + "name": "pytz", + "build": "pyhd8ed1ab_0", + "version": "2025.2", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "bc8e3267d44011051f2eb14d22fb0960", + "sha256": "8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0" + }, + "size": 189015 + }, + "python-tzdata-2025.3-pyhd8ed1ab_0.conda": { + "name": "python-tzdata", + "build": "pyhd8ed1ab_0", + "version": "2025.3", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "7ead57407430ba33f681738905278d03", + "sha256": "467134ef39f0af2dbb57d78cb3e4821f01003488d331a8dd7119334f4f47bfbd" + }, + "size": 143542 + }, + "setuptools-80.10.1-pyh332efcf_0.conda": { + "name": "setuptools", + "build": "pyh332efcf_0", + "version": "80.10.1", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "cb72cedd94dd923c6a9405a3d3b1c018", + "sha256": "89d5bb48047e7e27aa52a3a71d6ebf386e5ee4bdbd7ca91d653df9977eca8253" + }, + "size": 678025 + }, + "certifi-2026.1.4-pyhd8ed1ab_0.conda": { + "name": "certifi", + "build": "pyhd8ed1ab_0", + "version": "2026.1.4", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "eacc711330cd46939f66cd401ff9c44b", + "sha256": "110338066d194a715947808611b763857c15458f8b3b97197387356844af9450" + }, + "size": 150969 + }, + "charset-normalizer-3.4.4-pyhd8ed1ab_0.conda": { + "name": "charset-normalizer", + "build": "pyhd8ed1ab_0", + "version": "3.4.4", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "a22d1fd9bf98827e280a02875d9a007a", + "sha256": "b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59" + }, + "size": 50965 + }, + "idna-3.11-pyhd8ed1ab_0.conda": { + "name": "idna", + "build": "pyhd8ed1ab_0", + "version": "3.11", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "53abe63df7e10a6ba605dc5f9f961d36", + "sha256": "ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0" + }, + "size": 50721 + }, + "urllib3-2.2.2-pyhd8ed1ab_0.conda": { + "name": "urllib3", + "build": "pyhd8ed1ab_0", + "version": "2.2.2", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "92cdb6fe54b78739ad70637e4f0deb07", + "sha256": "8cd972048f297b8e0601158ce352f5ca9510dda9f2706a46560220aa58b9f038" + }, + "size": 95016 + }, + "wcwidth-0.2.14-pyhd8ed1ab_0.conda": { + "name": "wcwidth", + "build": "pyhd8ed1ab_0", + "version": "0.2.14", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "7e1e5ff31239f9cd5855714df8a3783d", + "sha256": "e311b64e46c6739e2a35ab8582c20fa30eb608da130625ed379f4467219d4813" + }, + "size": 33670 + }, + "asttokens-3.0.1-pyhd8ed1ab_0.conda": { + "name": "asttokens", + "build": "pyhd8ed1ab_0", + "version": "3.0.1", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "9673a61a297b00016442e022d689faa6", + "sha256": "ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010" + }, + "size": 28797 + }, + "executing-2.2.1-pyhd8ed1ab_0.conda": { + "name": "executing", + "build": "pyhd8ed1ab_0", + "version": "2.2.1", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "ff9efb7f7469aed3c4a8106ffa29593c", + "sha256": "210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad" + }, + "size": 30753 + }, + "pure_eval-0.2.3-pyhd8ed1ab_1.conda": { + "name": "pure_eval", + "build": "pyhd8ed1ab_1", + "version": "0.2.3", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "3bfdfb8dbcdc4af1ae3f9a8eb3948f04", + "sha256": "71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0" + }, + "size": 16668 + }, + "ptyprocess-0.7.0-pyhd8ed1ab_1.conda": { + "name": "ptyprocess", + "build": "pyhd8ed1ab_1", + "version": "0.7.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "7d9daffbb8d8e0af0f769dbbcd173a54", + "sha256": "a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83" + }, + "size": 19457 + }, + "six-1.17.0-pyhe01879c_1.conda": { + "name": "six", + "build": "pyhe01879c_1", + "version": "1.17.0", + "subdir": "noarch", + "channel": "conda-forge", + "hash": { + "md5": "3339e3b65d58accf4ca4fb8748ab16b3", + "sha256": "458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d" + }, + "size": 18455 + }, + "brotli-python-1.2.0-py313h33caa6c_0.tar.bz2": { + "name": "brotli-python", + "build": "py313h33caa6c_0", + "version": "1.2.0", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "0a6262854d45ff2409817bfcb378d6a624e97b3a64eae02bd66019acefba53fd" + }, + "size": 320172 + }, + "pysocks-1.7.1-py313h945b378_1.tar.bz2": { + "name": "pysocks", + "build": "py313h945b378_1", + "version": "1.7.1", + "subdir": "emscripten-wasm32", + "channel": "emscripten-forge", + "hash": { + "sha256": "b6ac73564022744246d67e6537ab40d7d88bf1b4a13a70336e47d2cbcc35869f" + }, + "size": 39280 + } + }, + "pipPackages": {} +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..35f85e38b --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,2 @@ +nodeLinker: node-modules +enableImmutableInstalls: false diff --git a/README.md b/README.md index 6d205f1da..381aca383 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,12 @@ # bqplot -[![Travis](https://travis-ci.com/bqplot/bqplot.svg?branch=master)](https://travis-ci.com/bqplot/bqplot) -[![Documentation](https://readthedocs.org/projects/bqplot/badge/?version=latest)](http://bqplot.readthedocs.org) -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/bqplot/bqplot/stable?filepath=examples/Index.ipynb) -[![Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jupyter-widgets/Lobby) + + + + bqplot. + + +[![notebook-link](https://img.shields.io/badge/notebook-link-e2d610?logo=jupyter&logoColor=white)](https://notebook.link/github/bqplot/bqplot/?path=examples%2FIndex.ipynb) 2-D plotting library for Project Jupyter @@ -12,32 +15,22 @@ `bqplot` is a 2-D visualization system for Jupyter, based on the constructs of the *Grammar of Graphics*. -## Usage - [![Wealth of Nations](./wealth-of-nations.gif)](https://github.com/bqplot/bqplot/blob/master/examples/Applications/Wealth%20Of%20Nations/Bubble%20Chart.ipynb) In bqplot, every component of a plot is an interactive widget. This allows the user to integrate visualizations with other Jupyter interactive widgets to create integrated GUIs with a few lines of Python code. -## Goals - -- Provide a unified framework for 2-D visualizations with a pythonic API -- Provide a sensible API for adding user interactions (panning, zooming, selection, etc) - -Two APIs are provided +## Documentation -- `Object Model`, which - is inspired by the constructs of the Grammar of Graphics (figure, marks, axes, - scales). This API is verbose but is fully customizable -- `pyplot`, which is a context-based API similar to Matplotlib's pyplot. `pyplot` provides sensible default choices for most parameters +You can follow the documentation on https://bqplot.github.io/bqplot ## Trying it online -To try out bqplot interactively in your web browser, just click on the binder +To try out bqplot interactively in your web browser, just click on the Notebook.link link: -[![Binder](docs/source/binder-logo.svg)](https://mybinder.org/v2/gh/bqplot/bqplot/stable?filepath=examples/Index.ipynb) +[![notebook-link](https://img.shields.io/badge/notebook-link-e2d610?logo=jupyter&logoColor=white)](https://notebook.link/github/bqplot/bqplot/?path=examples%2FIndex.ipynb) ### Dependencies @@ -71,12 +64,17 @@ $ jupyter labextension install @jupyter-widgets/jupyterlab-manager bqplot ##### Development installation -For a development installation (requires JupyterLab (version >= 3) and yarn): +For a development installation (requires JupyterLab (version >= 4) and yarn): ``` $ git clone https://github.com/bqplot/bqplot.git $ cd bqplot $ pip install -e . +``` + +If you're using **Jupyter Notebook < 7**, you may need to run the following to enable the nbextension: + +``` $ jupyter nbextension install --py --overwrite --symlink --sys-prefix bqplot $ jupyter nbextension enable --py --sys-prefix bqplot ``` @@ -96,7 +94,7 @@ Whenever you make a change of the JavaScript code, you will need to rebuild: ``` cd js -yarn run build +jlpm run build ``` Then refreshing the JupyterLab/Jupyter Notebook is enough to reload the changes. @@ -118,13 +116,13 @@ And run it with for Python tests: And `cd js` to run the JS tests with: ```bash -yarn run test +jlpm run test ``` Every time you make a change on your tests it's necessary to rebuild the JS side: ```bash -yarn run build +jlpm run build ``` ## Examples @@ -137,10 +135,6 @@ yarn run build [![Bqplot Screenshot](/bqplot.png)](https://github.com/bqplot/bqplot/blob/master/examples/Advanced%20Plotting/Advanced%20Plotting.ipynb) -## Documentation - -Full documentation is available at https://bqplot.readthedocs.io/ - ## Install a previous bqplot version (Only for JupyterLab <= 2) In order to install a previous bqplot version, you need to know which front-end version (JavaScript) matches with the back-end version (Python). diff --git a/bqplot/__init__.py b/bqplot/__init__.py index 858aaf222..7042a1672 100644 --- a/bqplot/__init__.py +++ b/bqplot/__init__.py @@ -12,60 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -r""" - -============== -BQPlot Package -============== - -.. currentmodule:: bqplot - - -Each plot starts with a `Figure` object. A `Figure` has a number of `Axis` -objects (representing scales) and a number of `Mark` objects. `Mark` -objects are a visual representation of the data. Scales transform data -into visual properties (typically a number of pixels, a color, etc.). :: - - from bqplot import * - from IPython.display import display - - x_data = range(10) - y_data = [i ** 2 for i in x_data] - - x_sc = LinearScale() - y_sc = LinearScale() - - ax_x = Axis(label='Test X', scale=x_sc, tick_format='0.0f') - ax_y = Axis(label='Test Y', scale=y_sc, - orientation='vertical', tick_format='0.2f') - - line = Lines(x=x_data, - y=y_data, - scales={'x': x_sc, 'y': y_sc}, - colors=['red', 'yellow']) - - fig = Figure(axes=[ax_x, ax_y], marks=[line]) - - display(fig) - -.. automodule:: bqplot.figure -.. automodule:: bqplot.scales -.. automodule:: bqplot.marks -.. automodule:: bqplot.axes -.. automodule:: bqplot.market_map -.. automodule:: bqplot.interacts -.. automodule:: bqplot.traits -.. automodule:: bqplot.toolbar - -.. automodule:: bqplot.pyplot - -""" - from .figure import * # noqa from .axes import * # noqa from .marks import * # noqa -from .scales import * # noqa +from bqscales import * # noqa from .toolbar import * # noqa +from .plotting_widgets import * # noqa from .default_tooltip import * # noqa from ._version import version_info, __version__ # noqa diff --git a/bqplot/_version.py b/bqplot/_version.py index 51f61be45..f86209ae4 100644 --- a/bqplot/_version.py +++ b/bqplot/_version.py @@ -1,4 +1,4 @@ -version_info = (0, 12, 30, 'final', 0) +version_info = (0, 13, 0, 'candidate', 0) _specifier_ = {'alpha': 'a', 'beta': 'b', 'candidate': 'rc', 'final': ''} @@ -6,4 +6,4 @@ version_info[0], version_info[1], version_info[2], '' if version_info[3] == 'final' else _specifier_[version_info[3]] + str(version_info[4])) -__frontend_version__ = '^0.5.31' +__frontend_version__ = '^0.6.0-rc.0' diff --git a/bqplot/axes.py b/bqplot/axes.py index b382bfc5f..abaf575ad 100644 --- a/bqplot/axes.py +++ b/bqplot/axes.py @@ -12,37 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -r""" - -==== -Axes -==== - -.. currentmodule:: bqplot.axes - -.. autosummary:: - :toctree: _generate/ - - Axis - ColorAxis -""" - -from traitlets import Int, Unicode, Instance, Enum, Dict, Bool +from traitlets import observe, Int, Unicode, Instance, Enum, Dict, Bool from traittypes import Array from ipywidgets import Widget, Color, widget_serialization -from .scales import Scale, ColorScale +from bqscales import Scale, ColorScale from .traits import array_serialization, array_dimension_bounds from ._version import __frontend_version__ +# Returns a decorator registering an axis class in the axis type registry. +# If no key is provided, the class name is used as a key. A key is provided +# for each core bqplot axis so that the frontend can use this key regardless +# of the kernel language. def register_axis(key=None): - """Returns a decorator registering an axis class in the axis type registry. - - If no key is provided, the class name is used as a key. A key is provided - for each core bqplot axis so that the frontend can use this key regardless - of the kernel language. - """ def wrap(axis): name = key if key is not None else axis.__module__ + axis.__name__ BaseAxis.axis_types[name] = axis @@ -63,7 +46,7 @@ class Axis(BaseAxis): """A line axis. - A line axis is the visual representation of a numerical or date scale. + A line axis is the visual representation of a **numerical** or **date scale**. Attributes ---------- @@ -85,6 +68,10 @@ class Axis(BaseAxis): If tick_values is None, number of ticks tick_values: numpy.ndarray or None (default: None) Tick values for the axis + tick_labels: dict (default: None) + Override the tick labels with a dictionary of {value: label}. + Entries are optional, and if not provided, the default tick labels + will be used. offset: dict (default: {}) Contains a scale and a value {'scale': scale or None, 'value': value of the offset} @@ -115,10 +102,7 @@ class Axis(BaseAxis): Degrees to rotate tick labels by. """ icon = 'fa-arrows' - orientation = Enum(['horizontal', 'vertical'], default_value='horizontal')\ - .tag(sync=True) - side = Enum(['bottom', 'top', 'left', 'right'], - allow_none=True, default_value=None).tag(sync=True) + side = Enum(['bottom', 'top', 'left', 'right'], default_value='bottom').tag(sync=True) label = Unicode().tag(sync=True) grid_lines = Enum(['none', 'solid', 'dashed'], default_value='solid')\ .tag(sync=True) @@ -128,6 +112,7 @@ class Axis(BaseAxis): tick_values = Array(None, allow_none=True)\ .tag(sync=True, **array_serialization)\ .valid(array_dimension_bounds(1, 1)) + tick_labels = Dict(None, allow_none=True).tag(sync=True) offset = Dict().tag(sync=True, **widget_serialization) label_location = Enum(['middle', 'start', 'end'], default_value='middle').tag(sync=True) @@ -142,7 +127,45 @@ class Axis(BaseAxis): _view_name = Unicode('Axis').tag(sync=True) _model_name = Unicode('AxisModel').tag(sync=True) - _ipython_display_ = None # We cannot display an axis outside of a figure. + + # We cannot display axes outside of a figure + # for ipywidgets <=7 + _ipython_display_ = None + + # for ipywidgets >=8 + def _repr_mimebundle_(self, **kwargs): + return {'text/plain': str(self)} + + def __init__(self, *args, **kwargs): + super(Axis, self).__init__(**kwargs) + + if kwargs.get('orientation') is not None: + self.orientation = kwargs.get('orientation') + + @property + def orientation(self): + return 'vertical' if self.side in ['right', 'left'] else 'horizontal' + + @orientation.setter + def orientation(self, orientation): + if orientation not in ['horizontal', 'vertical']: + raise ValueError('orientation must be "horizontal" or "vertical"') + + if orientation == 'horizontal' and self.side not in ['bottom', 'top']: + self.side = 'bottom' + + if orientation == 'vertical' and self.side not in ['right', 'left']: + self.side = 'left' + + @observe('side') + def _observe_side(self, change): + side = change['new'] + + if side in ['left', 'right'] and self.orientation != 'vertical': + self.orientation = 'vertical' + + if side in ['bottom', 'top'] and self.orientation != 'horizontal': + self.orientation = 'horizontal' @register_axis('bqplot.ColorAxis') @@ -150,18 +173,13 @@ class ColorAxis(Axis): """A colorbar axis. - A color axis is the visual representation of a color scale. + A color axis is the visual representation of a **color scale**. Attributes ---------- scale: ColorScale The scale represented by the axis """ - orientation = Enum(['horizontal', 'vertical'], - default_value='horizontal').tag(sync=True) - side = Enum(['bottom', 'top', 'left', 'right'], - default_value='bottom').tag(sync=True) - label = Unicode().tag(sync=True) scale = Instance(ColorScale).tag(sync=True, **widget_serialization) _view_name = Unicode('ColorAxis').tag(sync=True) _model_name = Unicode('ColorAxisModel').tag(sync=True) diff --git a/bqplot/figure.py b/bqplot/figure.py index 3baee6bee..99f5b821e 100644 --- a/bqplot/figure.py +++ b/bqplot/figure.py @@ -27,12 +27,12 @@ """ from traitlets import ( - Unicode, Instance, List, Dict, Enum, Float, Int, TraitError, default, + Bool, Unicode, Instance, List, Dict, Enum, Float, Int, TraitError, default, validate ) from ipywidgets import DOMWidget, register, widget_serialization -from .scales import Scale, LinearScale +from bqscales import Scale, LinearScale from .interacts import Interaction from .marks import Mark from .axes import Axis @@ -51,6 +51,9 @@ class Figure(DOMWidget): Besides, the Figure object has two reference scales, for positioning items in an absolute fashion in the figure canvas. + Style Attributes + ---------------- + Attributes ---------- title: string (default: '') @@ -84,45 +87,43 @@ class Figure(DOMWidget): CSS style to be applied to the title of the figure animation_duration: nonnegative int (default: 0) Duration of transition on change of data attributes, in milliseconds. - pixel_ratio: - Pixel ratio of the WebGL canvas (2 on retina screens). Set to 1 for better performance, - but less crisp edges. If set to None it will use the browser's window.devicePixelRatio. Layout Attributes + ----------------- + Attributes + ---------- + pixel_ratio: + Pixel ratio of the WebGL canvas (2 on retina screens). Set to 1 for better performance, + but less crisp edges. If set to None it will use the browser's window.devicePixelRatio. + display_toolbar: boolean (default: True) + Show or hide the integrated toolbar. fig_margin: dict (default: {top=60, bottom=60, left=60, right=60}) Dictionary containing the top, bottom, left and right margins. The user is responsible for making sure that the width and height are greater than the sum of the margins. + auto_layout: boolean (default: False) + Whether to use the auto-layout solver or not min_aspect_ratio: float - minimum width / height ratio of the figure + Minimum width / height ratio of the figure max_aspect_ratio: float - maximum width / height ratio of the figure - - Methods - ------- - - save_png: - Saves the figure as a PNG file - save_svg: - Saves the figure as an SVG file + Maximum width / height ratio of the figure - Note - ---- + !!! Note - The aspect ratios stand for width / height ratios. + The aspect ratios stand for width / height ratios. - - If the available space is within bounds in terms of min and max aspect - ratio, we use the entire available space. - - If the available space is too oblong horizontally, we use the client - height and the width that corresponds max_aspect_ratio (maximize width - under the constraints). - - If the available space is too oblong vertically, we use the client width - and the height that corresponds to min_aspect_ratio (maximize height - under the constraint). - This corresponds to maximizing the area under the constraints. + - If the available space is within bounds in terms of min and max aspect + ratio, we use the entire available space. + - If the available space is too oblong horizontally, we use the client + height and the width that corresponds max_aspect_ratio (maximize width + under the constraints). + - If the available space is too oblong vertically, we use the client width + and the height that corresponds to min_aspect_ratio (maximize height + under the constraint). + This corresponds to maximizing the area under the constraints. - Default min and max aspect ratio are both equal to 16 / 9. + Default min and max aspect ratio are both equal to 16 / 9. """ title = Unicode().tag(sync=True, display_name='Title') axes = List(Instance(Axis)).tag(sync=True, **widget_serialization) @@ -138,6 +139,7 @@ class Figure(DOMWidget): legend_text = Dict().tag(sync=True) theme = Enum(['classic', 'gg'], default_value='classic').tag(sync=True) + auto_layout = Bool(False).tag(sync=True) min_aspect_ratio = Float(0.01).tag(sync=True) max_aspect_ratio = Float(100).tag(sync=True) pixel_ratio = Float(None, allow_none=True).tag(sync=True) @@ -152,6 +154,14 @@ class Figure(DOMWidget): .tag(sync=True, display_name='Legend position') animation_duration = Int().tag(sync=True, display_name='Animation duration') + display_toolbar = Bool(default_value=True).tag(sync=True) + + def __init__(self, **kwargs): + super(Figure, self).__init__(**kwargs) + + self._upload_png_callback = None + self._upload_svg_callback = None + self.on_msg(self._handle_custom_msgs) @default('scale_x') def _default_scale_x(self): @@ -185,6 +195,36 @@ def save_svg(self, filename='bqplot.svg'): ''' self.send({"type": "save_svg", "filename": filename}) + def get_png_data(self, callback, scale=None): + ''' + Gets the Figure as a PNG memory view + + Parameters + ---------- + callback: callable + Called with the PNG data as the only positional argument. + scale: float (default: None) + Scale up the png resolution when scale > 1, when not given base this on the screen pixel ratio. + ''' + if self._upload_png_callback: + raise Exception('get_png_data already in progress') + self._upload_png_callback = callback + self.send({'type': 'upload_png', 'scale': scale}) + + def get_svg_data(self, callback): + ''' + Gets the Figure as an SVG memory view (utf-8 encoded bytes). + + Parameters + ---------- + callback: callable + Called with the SVG data (utf-8 encoded bytes) as the only positional argument. + ''' + if self._upload_svg_callback: + raise Exception('get_svg_data already in progress') + self._upload_svg_callback = callback + self.send({'type': 'upload_svg'}) + @validate('min_aspect_ratio', 'max_aspect_ratio') def _validate_aspect_ratio(self, proposal): value = proposal['value'] @@ -196,6 +236,18 @@ def _validate_aspect_ratio(self, proposal): raise TraitError('setting max_aspect_ratio < min_aspect_ratio') return value + def _handle_custom_msgs(self, _, content, buffers=None): + if content.get('event') == 'upload_png': + try: + self._upload_png_callback(buffers[0]) + finally: + self._upload_png_callback = None + elif content.get('event') == 'upload_svg': + try: + self._upload_svg_callback(buffers[0]) + finally: + self._upload_svg_callback = None + _view_name = Unicode('Figure').tag(sync=True) _model_name = Unicode('FigureModel').tag(sync=True) _view_module = Unicode('bqplot').tag(sync=True) diff --git a/bqplot/interacts.py b/bqplot/interacts.py index d33f1b4f8..1f6435b79 100644 --- a/bqplot/interacts.py +++ b/bqplot/interacts.py @@ -12,49 +12,23 @@ # See the License for the specific language governing permissions and # limitations under the License. -r""" - -========= -Interacts -========= - -.. currentmodule:: bqplot.interacts - -.. autosummary:: - :toctree: _generate/ - - BrushIntervalSelector - BrushSelector - HandDraw - IndexSelector - FastIntervalSelector - MultiSelector - OneDSelector - Interaction - PanZoom - Selector - TwoDSelector -""" - from traitlets import (Bool, Int, Float, Unicode, Dict, Instance, List, Enum, observe) from traittypes import Array from ipywidgets import Widget, Color, widget_serialization, register -from .scales import Scale +from bqscales import Scale from .traits import Date, array_serialization, _array_equal from .marks import Lines from ._version import __frontend_version__ import numpy as np +# Decorator registering an interaction class in the registry. +# If no key is provided, the class name is used as a key. A key is provided +# for each core bqplot interaction type so that the frontend can use this +# key regardless of the kernel language. def register_interaction(key=None): - """Decorator registering an interaction class in the registry. - - If no key is provided, the class name is used as a key. A key is provided - for each core bqplot interaction type so that the frontend can use this - key regardless of the kernel language. - """ def wrap(interaction): name = key if key is not None else interaction.__module__ + \ interaction.__name__ @@ -90,9 +64,15 @@ class Interaction(Widget): _model_module = Unicode('bqplot').tag(sync=True) _view_module_version = Unicode(__frontend_version__).tag(sync=True) _model_module_version = Unicode(__frontend_version__).tag(sync=True) - # We cannot display an interaction outside of a figure + + # We cannot display interactions outside of a figure + # for ipywidgets <=7 _ipython_display_ = None + # for ipywidgets >=8 + def _repr_mimebundle_(self, **kwargs): + return {'text/plain': str(self)} + @register_interaction('bqplot.HandDraw') class HandDraw(Interaction): @@ -303,7 +283,7 @@ class IndexSelector(OneDSelector): color: Color or None (default: None) Color of the line representing the index selector. line_width: nonnegative integer (default: 0) - Width of the line represetning the index selector. + Width of the line representing the index selector. """ selected = Array(None, allow_none=True)\ .tag(sync=True, **array_serialization) @@ -519,7 +499,7 @@ def __init__(self, **kwargs): def hidden_selected_changed(self, name, selected): actual_selected = {} - if(self.read_json is None): + if self.read_json is None: self.selected = self._selected else: for key in self._selected: diff --git a/bqplot/market_map.py b/bqplot/market_map.py index 9b489febb..402b8b93c 100644 --- a/bqplot/market_map.py +++ b/bqplot/market_map.py @@ -12,20 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -r""" - -========== -Market Map -========== - -.. currentmodule:: bqplot.market_map - -.. autosummary:: - :toctree: _generate/ - - MarketMap -""" - from traitlets import Int, Unicode, List, Dict, Bool, Instance, Float from traittypes import Array, DataFrame from ipywidgets import (DOMWidget, CallbackDispatcher, Color, @@ -40,7 +26,7 @@ class MarketMap(DOMWidget): - """Waffle wrapped map. + """Waffle wrapped map. A MarketMap is not a Mark, it's a custom Figure! Attributes ---------- @@ -81,13 +67,17 @@ class MarketMap(DOMWidget): formats for each of the fields for the tooltip data. Order should match the order of the tooltip_fields freeze_tooltip_location: bool (default: False) - if True, freezes the location of the tooltip. If False, tootip will + if True, freezes the location of the tooltip. If False, tooltip will follow the mouse show_groups: bool attribute to determine if the groups should be displayed. If set to True, the finer elements are blurred Map Drawing Attributes + ---------------------- + + Attributes + ---------- cols: int Suggestion for no of columns in the map.If not specified, value is inferred from the no of rows and no of cells @@ -104,7 +94,10 @@ class MarketMap(DOMWidget): more square cells for each of the groups Layout Attributes + ----------------- + Attributes + ---------- map_margin: dict (default: {top=50, bottom=50, left=50, right=50}) Dictionary containing the top, bottom, left and right margins. The user is responsible for making sure that the width and height are greater @@ -116,7 +109,10 @@ class MarketMap(DOMWidget): Display Attributes + ------------------ + Attributes + ---------- colors: list of colors Colors for each of the groups which are cycled over to cover all the groups @@ -136,7 +132,10 @@ class MarketMap(DOMWidget): CSS style for the text of each cell Other Attributes + ---------------- + Attributes + ---------- enable_select: bool boolean to control the ability to select the cells of the map by clicking @@ -144,22 +143,20 @@ class MarketMap(DOMWidget): boolean to control if the map should be aware of which cell is being hovered on. If it is set to False, tooltip will not be displayed - Note - ---- - - The aspect ratios stand for width / height ratios. + !!! Note + The aspect ratios stand for width / height ratios. - - If the available space is within bounds in terms of min and max aspect - ratio, we use the entire available space. - - If the available space is too oblong horizontally, we use the client - height and the width that corresponds max_aspect_ratio (maximize width - under the constraints). - - If the available space is too oblong vertically, we use the client width - and the height that corresponds to min_aspect_ratio (maximize height - under the constraint). - This corresponds to maximizing the area under the constraints. + - If the available space is within bounds in terms of min and max aspect + ratio, we use the entire available space. + - If the available space is too oblong horizontally, we use the client + height and the width that corresponds max_aspect_ratio (maximize width + under the constraints). + - If the available space is too oblong vertically, we use the client width + and the height that corresponds to min_aspect_ratio (maximize height + under the constraint). + This corresponds to maximizing the area under the constraints. - Default min and max aspect ratio are both equal to 16 / 9. + Default min and max aspect ratio are both equal to 16 / 9. """ names = Array([]).tag(sync=True, **array_serialization) groups = Array([]).tag(sync=True, **array_serialization) diff --git a/bqplot/marks.py b/bqplot/marks.py index 3cbc3211b..f826d11a3 100644 --- a/bqplot/marks.py +++ b/bqplot/marks.py @@ -12,31 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -r""" - -===== -Marks -===== - -.. currentmodule:: bqplot.marks - -.. autosummary:: - :toctree: _generate/ - - Mark - Lines - FlexLine - Scatter - Hist - Bars - Graph - GridHeatMap - HeatMap - Label - OHLC - Pie - Map -""" import os import json @@ -51,20 +26,18 @@ from numpy import histogram import numpy as np -from .scales import Scale, OrdinalScale, LinearScale +from bqscales import Scale, OrdinalScale, LinearScale from .traits import (Date, array_serialization, array_squeeze, array_dimension_bounds, array_supported_kinds) from ._version import __frontend_version__ from .colorschemes import CATEGORY10 +# Returns a decorator registering a mark class in the mark type registry. +# If no key is provided, the class name is used as a key. A key is provided +# for each core bqplot mark so that the frontend can use +# this key regardless of the kernel language. def register_mark(key=None): - """Returns a decorator registering a mark class in the mark type registry. - - If no key is provided, the class name is used as a key. A key is provided - for each core bqplot mark so that the frontend can use - this key regardless of the kernel language. - """ def wrap(mark): name = key if key is not None else mark.__module__ + mark.__name__ Mark.mark_types[name] = mark @@ -90,18 +63,21 @@ class Mark(Widget): Traitlet mark attributes may be decorated with metadata. - **Data Attribute Decoration** + !!! note "Data Attribute Decoration" + + Data attributes are decorated with the following values: - Data attributes are decorated with the following values: + - **scaled: bool** + Indicates whether the considered attribute is a data attribute which + must be associated with a scale in order to be taken into account. + - **rtype: string** + Range type of the associated scale. + - **atype: string** + Key in bqplot's axis registry of the recommended axis type to represent + this scale. When not specified, the default is 'bqplot.Axis'. - scaled: bool - Indicates whether the considered attribute is a data attribute which - must be associated with a scale in order to be taken into account. - rtype: string - Range type of the associated scale. - atype: string - Key in bqplot's axis registry of the recommended axis type to represent - this scale. When not specified, the default is 'bqplot.Axis'. + Style Attributes + ---------------- Attributes ---------- @@ -162,6 +138,24 @@ class Mark(Widget): places the tooltip at the center of the figure. If tooltip is linked to a click event, 'mouse' places the tooltip at the location of the click that triggered the tooltip to be visible. + + Methods + ------- + + Attributes + ---------- + on_hover(callback, remove=False) + Register a callback that will be triggered on hover. + on_click(callback, remove=False) + Register a callback that will be triggered on click. + on_legend_hover(callback, remove=False) + Register a callback that will be triggered on legend hover. + on_legend_click(callback, remove=False) + Register a callback that will be triggered on legend click. + on_element_click(callback, remove=False) + Register a callback that will be triggered on element click. + on_background_click(callback, remove=False) + Register a callback that will be triggered on background click. """ mark_types = {} scales = Dict(value_trait=Instance(Scale)).tag(sync=True, **widget_serialization) @@ -188,8 +182,15 @@ class Mark(Widget): _view_module = Unicode('bqplot').tag(sync=True) _view_module_version = Unicode(__frontend_version__).tag(sync=True) _model_module_version = Unicode(__frontend_version__).tag(sync=True) + + # We cannot display a marks outside of a figure + # for ipywidgets <=7 _ipython_display_ = None + # for ipywidgets >=8 + def _repr_mimebundle_(self, **kwargs): + return {'text/plain': str(self)} + def _get_dimension_scales(self, dimension, preserve_domain=False): """ Return the list of scales corresponding to a given dimension. @@ -290,7 +291,26 @@ class Lines(Mark): """Lines mark. - In the case of the Lines mark, scales for 'x' and 'y' MUST be provided. + !!! warning + In the case of the Lines mark, scales for 'x' and 'y' **must** be provided. + + Data Attributes + --------------- + + Attributes + ---------- + x: numpy.ndarray (default: []) + abscissas of the data points (1d or 2d array) + y: numpy.ndarray (default: []) + ordinates of the data points (1d or 2d array) + color: numpy.ndarray (default: None) + colors of the different lines based on data. If it is [], then the + colors from the colors attribute are used. Each line has a single color + and if the size of colors is less than the number of lines, the + remaining lines are given the default colors. + + Style Attributes + ---------------- Attributes ---------- @@ -323,38 +343,26 @@ class Lines(Mark): in the list will have full opacity, while others will be faded. line_style: {'solid', 'dashed', 'dotted', 'dash_dotted'} Line style. - interpolation: {'linear', 'basis', 'cardinal', 'monotone'} + interpolation: {'linear', 'basis', 'basis-open', 'basis-closed', 'bundle', 'cardinal', 'cardinal-open', + 'cardinal-closed', 'monotone', 'step-before', 'step-after'} Interpolation scheme used for interpolation between the data points provided. Please refer to the svg interpolate documentation for details about the different interpolation schemes. - marker: {'circle', 'cross', 'diamond', 'square', 'triangle-down', 'triangle-up', 'arrow', 'rectangle', 'ellipse'} + marker: {'circle', 'cross', 'diamond', 'square', 'triangle-down', 'triangle-up', 'arrow', 'rectangle', 'ellipse', 'plus', 'crosshair', 'point'} Marker shape marker_size: nonnegative int (default: 64) Default marker size in pixels - Data Attributes - - x: numpy.ndarray (default: []) - abscissas of the data points (1d or 2d array) - y: numpy.ndarray (default: []) - ordinates of the data points (1d or 2d array) - color: numpy.ndarray (default: None) - colors of the different lines based on data. If it is [], then the - colors from the colors attribute are used. Each line has a single color - and if the size of colors is less than the number of lines, the - remaining lines are given the default colors. - - Notes - ----- - The fields which can be passed to the default tooltip are: - name: label of the line - index: index of the line being hovered on - color: data attribute for the color of the line - The following are the events which can trigger interactions: - click: left click of the mouse - hover: mouse-over an element - The following are the interactions which can be linked to the above events: - tooltip: display tooltip + !!! note + - The fields which can be passed to the default tooltip are: + - **name**: label of the line + - **index**: index of the line being hovered on + - **color**: data attribute for the color of the line + - The following are the events which can trigger interactions: + - **click**: left click of the mouse + - **hover**: mouse-over an element + - The following are the interactions which can be linked to the above events: + - **tooltip**: display tooltip """ # Mark decoration icon = 'fa-line-chart' @@ -394,7 +402,7 @@ class Lines(Mark): line_style = Enum(['solid', 'dashed', 'dotted', 'dash_dotted'], default_value='solid')\ .tag(sync=True, display_name='Line style') - # TODO: Only Lines have interpolatoin but we can extend for other types of graphs + # TODO: Only Lines have interpolation but we can extend for other types of graphs interpolation = Enum(['linear', 'basis', 'basis-open', 'basis-closed', 'bundle', 'cardinal', 'cardinal-open', @@ -407,7 +415,8 @@ class Lines(Mark): default_value='none')\ .tag(sync=True, display_name='Fill') marker = Enum(['circle', 'cross', 'diamond', 'square', 'triangle-down', - 'triangle-up', 'arrow', 'rectangle', 'ellipse'], + 'triangle-up', 'arrow', 'rectangle', 'ellipse', 'plus', + 'crosshair', 'point'], default_value=None, allow_none=True)\ .tag(sync=True, display_name='Marker') marker_size = Int(64).tag(sync=True, display_name='Default size') @@ -421,24 +430,19 @@ class Lines(Mark): @register_mark('bqplot.FlexLine') class FlexLine(Mark): - """Flexible Lines mark. + """Lines mark with the possibility to change the line width and color for each segment. - In the case of the FlexLines mark, scales for 'x' and 'y' MUST be provided. - Scales for the color and width data attributes are optional. In the case - where another data attribute than 'x' or 'y' is provided but the - corresponding scale is missing, the data attribute is ignored. - - Attributes - ---------- - name: string (class-level attributes) - user-friendly name of the mark - colors: list of colors (default: CATEGORY10) - List of colors for the Lines - stroke_width: float (default: 1.5) - Default stroke width of the Lines + !!! warning + In the case of the FlexLines mark, scales for 'x' and 'y' **must** be provided. + Scales for the color and width data attributes are optional. In the case + where another data attribute than 'x' or 'y' is provided but the + corresponding scale is missing, the data attribute is ignored. Data Attributes + --------------- + Attributes + ---------- x: numpy.ndarray (default: []) abscissas of the data points (1d array) y: numpy.ndarray (default: []) @@ -447,6 +451,18 @@ class FlexLine(Mark): Array controlling the color of the data points width: numpy.ndarray or None (default: None) Array controlling the widths of the Lines. + + Style Attributes + ---------------- + + Attributes + ---------- + name: string (class-level attributes) + user-friendly name of the mark + colors: list of colors (default: CATEGORY10) + List of colors for the Lines + stroke_width: float (default: 1.5) + Default stroke width of the Lines """ # Mark decoration icon = 'fa-line-chart' @@ -567,10 +583,40 @@ class Scatter(_ScatterBase): """Scatter mark. - In the case of the Scatter mark, scales for 'x' and 'y' MUST be provided. - The scales of other data attributes are optional. In the case where another - data attribute than 'x' or 'y' is provided but the corresponding scale is - missing, the data attribute is ignored. + !!! warning + In the case of the Scatter mark, scales for 'x' and 'y' **must** be provided. + The scales of other data attributes are optional. In the case where another + data attribute than 'x' or 'y' is provided but the corresponding scale is + missing, the data attribute is ignored. + + Data Attributes + --------------- + + Attributes + ---------- + x: numpy.ndarray (default: []) + abscissas of the data points (1d array) + y: numpy.ndarray (default: []) + ordinates of the data points (1d array) + color: numpy.ndarray or None (default: None) + color of the data points (1d array). Defaults to default_color when not + provided or when a value is NaN + opacity: numpy.ndarray or None (default: None) + opacity of the data points (1d array). Defaults to default_opacity when + not provided or when a value is NaN + size: numpy.ndarray or None (default: None) + size of the data points. Defaults to default_size when not provided or + when a value is NaN + skew: numpy.ndarray or None (default: None) + skewness of the markers representing the data points. Defaults to + default_skew when not provided or when a value is NaN + rotation: numpy.ndarray or None (default: None) + orientation of the markers representing the data points. + The rotation scale's range is [0, 180] + Defaults to 0 when not provided or when a value is NaN. + + Style Attributes + ---------------- Attributes ---------- @@ -578,7 +624,7 @@ class Scatter(_ScatterBase): Font-awesome icon for that mark name: string (class-level attribute) User-friendly name of the mark - marker: {'circle', 'cross', 'diamond', 'square', 'triangle-down', 'triangle-up', 'arrow', 'rectangle', 'ellipse'} + marker: {'circle', 'cross', 'diamond', 'square', 'triangle-down', 'triangle-up', 'arrow', 'rectangle', 'ellipse', 'plus', 'crosshair', 'point'} Marker shape colors: list of colors (default: ['steelblue']) List of colors of the markers. If the list is shorter than the number @@ -627,41 +673,16 @@ class Scatter(_ScatterBase): only when enable_move is set to True. If both restrict_x and restrict_y are set to True, the point cannot be moved. - - Data Attributes - - x: numpy.ndarray (default: []) - abscissas of the data points (1d array) - y: numpy.ndarray (default: []) - ordinates of the data points (1d array) - color: numpy.ndarray or None (default: None) - color of the data points (1d array). Defaults to default_color when not - provided or when a value is NaN - opacity: numpy.ndarray or None (default: None) - opacity of the data points (1d array). Defaults to default_opacity when - not provided or when a value is NaN - size: numpy.ndarray or None (default: None) - size of the data points. Defaults to default_size when not provided or - when a value is NaN - skew: numpy.ndarray or None (default: None) - skewness of the markers representing the data points. Defaults to - default_skew when not provided or when a value is NaN - rotation: numpy.ndarray or None (default: None) - orientation of the markers representing the data points. - The rotation scale's range is [0, 180] - Defaults to 0 when not provided or when a value is NaN. - - Notes - ----- - The fields which can be passed to the default tooltip are: - All the data attributes - index: index of the marker being hovered on - The following are the events which can trigger interactions: - click: left click of the mouse - hover: mouse-over an element - The following are the interactions which can be linked to the above events: - tooltip: display tooltip - add: add new points to the scatter (can only linked to click) + !!! Note + - The fields which can be passed to the default tooltip are: + - All the data attributes (x, y, color, opacity, size, skew, rotation) + - **index**: index of the marker being hovered on + - The following are the events which can trigger interactions: + - **click**: left click of the mouse + - **hover**: mouse-over an element + - The following are the interactions which can be linked to the above events: + - **tooltip**: display tooltip + - **add**: add new points to the scatter (can only linked to click) """ # Mark decoration icon = 'fa-cloud' @@ -675,7 +696,8 @@ class Scatter(_ScatterBase): # Other attributes marker = Enum(['circle', 'cross', 'diamond', 'square', 'triangle-down', - 'triangle-up', 'arrow', 'rectangle', 'ellipse'], + 'triangle-up', 'arrow', 'rectangle', 'ellipse', 'plus', + 'crosshair', 'point'], default_value='circle').tag(sync=True, display_name='Marker') colors = List(trait=Color(default_value=None, allow_none=True), default_value=['steelblue'])\ @@ -730,17 +752,34 @@ def default_opacities(self, value): _model_name = Unicode('ScatterModel').tag(sync=True) -@register_mark('bqplot.ScatterGL') -class ScatterGL(Scatter): - _view_name = Unicode('ScatterGL').tag(sync=True) - _model_name = Unicode('ScatterGLModel').tag(sync=True) - - @register_mark('bqplot.Label') class Label(_ScatterBase): """Label mark. + Data Attributes + --------------- + + Attributes + ---------- + x: numpy.ndarray (default: []) + horizontal position of the labels, in data coordinates or in + figure coordinates + y: numpy.ndarray (default: []) + vertical position of the labels, in data coordinates or in + figure coordinates + color: numpy.ndarray or None (default: None) + label colors + size: numpy.ndarray or None (default: None) + label sizes + rotation: numpy.ndarray or None (default: None) + label rotations + opacity: numpy.ndarray or None (default: None) + label opacities + + Style Attributes + ---------------- + Attributes ---------- x_offset: int (default: 0) @@ -769,24 +808,6 @@ class Label(_ScatterBase): Restricts movement of the label to only along the y axis. This is valid only when enable_move is set to True. If both restrict_x and restrict_y are set to True, the label cannot be moved. - - Data Attributes - - x: numpy.ndarray (default: []) - horizontal position of the labels, in data coordinates or in - figure coordinates - y: numpy.ndarray (default: []) - vertical position of the labels, in data coordinates or in - figure coordinates - color: numpy.ndarray or None (default: None) - label colors - size: numpy.ndarray or None (default: None) - label sizes - rotation: numpy.ndarray or None (default: None) - label rotations - opacity: numpy.ndarray or None (default: None) - label opacities - """ # Mark decoration icon = 'fa-font' @@ -821,8 +842,21 @@ class Hist(Mark): """Histogram mark. - In the case of the Hist mark, scales for 'sample' and 'count' MUST be - provided. + !!! warning + In the case of the Hist mark, scales for 'sample' and 'count' **must** be provided. + + Data Attributes + --------------- + + Attributes + ---------- + sample: numpy.ndarray (default: []) + sample of which the histogram must be computed. + count: numpy.ndarray (read-only) + number of sample points per bin. It is a read-only attribute. + + Style Attributes + ---------------- Attributes ---------- @@ -847,21 +881,13 @@ class Hist(Mark): midpoints: list (default: []) midpoints of the bins of the histogram. It is a read-only attribute. - Data Attributes - - sample: numpy.ndarray (default: []) - sample of which the histogram must be computed. - count: numpy.ndarray (read-only) - number of sample points per bin. It is a read-only attribute. - - Notes - ----- - The fields which can be passed to the default tooltip are: - midpoint: mid-point of the bin related to the rectangle hovered on - count: number of elements in the bin hovered on - bin_start: start point of the bin - bin-end: end point of the bin - index: index of the bin + !!! Note + - The fields which can be passed to the default tooltip are: + - **midpoint**: mid-point of the bin related to the rectangle hovered on + - **count**: number of elements in the bin hovered on + - **bin_start**: start point of the bin + - **bin_end**: end point of the bin + - **index**: index of the bin """ # Mark decoration icon = 'fa-signal' @@ -907,6 +933,19 @@ class Boxplot(Mark): """Boxplot marks. + Data Attributes + --------------- + + Attributes + ---------- + : numpy.ndarray (default: []) + abscissas of the data points (1d array) + y: numpy.ndarray (default: [[]]) + Sample data points (2d array) + + Style Attributes + ---------------- + Attributes ---------- stroke: Color or None @@ -923,13 +962,6 @@ class Boxplot(Mark): If set to None, box_with is auto calculated auto_detect_outliers: bool (default: True) Flag to toggle outlier auto-detection - - Data Attributes - - x: numpy.ndarray (default: []) - abscissas of the data points (1d array) - y: numpy.ndarray (default: [[]]) - Sample data points (2d array) """ # Mark decoration @@ -955,8 +987,8 @@ class Boxplot(Mark): stroke = Color(None, allow_none=True)\ .tag(sync=True, display_name='Stroke color') - box_fill_color = Color('steelblue', sync=True, - display_name='Fill color for the box') + box_fill_color = Color('steelblue')\ + .tag(sync=True, display_name='Fill color for the box') outlier_fill_color = Color('gray').tag(sync=True, display_name='Outlier fill color') opacities = List(trait=Float(1.0, min=0, max=1, allow_none=True))\ @@ -973,10 +1005,27 @@ class Bars(Mark): """Bar mark. - In the case of the Bars mark, scales for 'x' and 'y' MUST be provided. - The scales of other data attributes are optional. In the case where another - data attribute than 'x' or 'y' is provided but the corresponding scale is - missing, the data attribute is ignored. + !!! warning + In the case of the Bars mark, scales for 'x' and 'y' **must** be provided. + The scales of other data attributes are optional. In the case where another + data attribute than 'x' or 'y' is provided but the corresponding scale is + missing, the data attribute is ignored. + + Data Attributes + --------------- + + Attributes + ---------- + x: numpy.ndarray (default: []) + abscissas of the data points (1d array) + y: numpy.ndarray (default: []) + ordinates of the values for the data points + color: numpy.ndarray or None (default: None) + color of the data points (1d array). Defaults to default_color when not + provided or when a value is NaN + + Style Attributes + ---------------- Attributes ---------- @@ -1029,22 +1078,11 @@ class Bars(Mark): label_display_horizontal_offset: float horizontal offset value for the label display - Data Attributes - - x: numpy.ndarray (default: []) - abscissas of the data points (1d array) - y: numpy.ndarray (default: []) - ordinates of the values for the data points - color: numpy.ndarray or None (default: None) - color of the data points (1d array). Defaults to default_color when not - provided or when a value is NaN - - Notes - ----- - The fields which can be passed to the default tooltip are: - All the data attributes - index: index of the bar being hovered on - sub_index: if data is two dimensional, this is the minor index + !!! Note + - The fields which can be passed to the default tooltip are: + - All the data attributes + - **index**: index of the bar being hovered on + - **sub_index**: if data is two dimensional, this is the minor index """ # Mark decoration icon = 'fa-bar-chart' @@ -1131,6 +1169,17 @@ class Bins(Bars): The following documentation is in part taken from the numpy documentation. + Data Attributes + --------------- + + Attributes + ---------- + sample: numpy.ndarray (default: []) + sample of which the histogram must be computed. + + Style Attributes + ---------------- + Attributes ---------- icon: string (class-level attribute) @@ -1159,14 +1208,11 @@ class Bins(Bars): max : float (default: None) The upper range of the bins. If not provided, lower range is simply `x.max()`. - Data Attributes - sample: numpy.ndarray (default: []) - sample of which the histogram must be computed. - Notes - ----- - The fields which can be passed to the default tooltip are: - All the `Bars` data attributes (`x`, `y`, `color`) - index: index of the bin + + !!! Note + - The fields which can be passed to the default tooltip are: + - All the `Bars` data attributes (`x`, `y`, `color`) + - **index**: index of the bin """ # Mark decoration icon = 'fa-signal' @@ -1187,10 +1233,6 @@ class Bins(Bars): .tag(sync=True, display_name='Number of bins') def __init__(self, **kwargs): - ''' - Sets listeners on the data and the binning parameters. - Adjusts `Bars` defaults to suit a histogram better. - ''' self.observe(self.bin_data, names=['sample', 'bins', 'density', 'min', 'max']) # One unique color by default @@ -1201,9 +1243,7 @@ def __init__(self, **kwargs): super(Bins, self).__init__(**kwargs) def bin_data(self, *args): - ''' - Performs the binning of `sample` data, and draws the corresponding bars - ''' + # Performs the binning of `sample` data, and draws the corresponding bars # Get range _min = self.sample.min() if self.min is None else self.min _max = self.sample.max() if self.max is None else self.max @@ -1222,6 +1262,19 @@ class OHLC(Mark): """Open/High/Low/Close marks. + Data Attributes + --------------- + + Attributes + ---------- + x: numpy.ndarray + abscissas of the data points (1d array) + y: numpy.ndarrays + Open/High/Low/Close ordinates of the data points (2d array) + + Style Attributes + ---------------- + Attributes ---------- icon: string (class-level attribute) @@ -1243,22 +1296,14 @@ class OHLC(Mark): description of y data being passed supports all permutations of the strings 'ohlc', 'oc', and 'hl' - Data Attributes - - x: numpy.ndarray - abscissas of the data points (1d array) - y: numpy.ndarrays - Open/High/Low/Close ordinates of the data points (2d array) - - Notes - ----- - The fields which can be passed to the default tooltip are: - x: the x value associated with the bar/candle - open: open value for the bar/candle - high: high value for the bar/candle - low: low value for the bar/candle - close: close value for the bar/candle - index: index of the bar/candle being hovered on + !!! Note + - The fields which can be passed to the default tooltip are: + - **x**: the x value associated with the bar/candle + - **open**: open value for the bar/candle + - **high**: high value for the bar/candle + - **low**: low value for the bar/candle + - **close**: close value for the bar/candle + - **index**: index of the bar/candle being hovered on """ # Mark decoration @@ -1280,10 +1325,10 @@ class OHLC(Mark): 'x': {'orientation': 'horizontal', 'dimension': 'x'}, 'y': {'orientation': 'vertical', 'dimension': 'y'} }).tag(sync=True) - marker = Enum(['candle', 'bar'], default_value='candle', - display_name='Marker').tag(sync=True) - stroke = Color(None, display_name='Stroke color', allow_none=True)\ - .tag(sync=True) + marker = Enum(['candle', 'bar'], default_value='candle')\ + .tag(sync=True, display_name='Marker') + stroke = Color(None, allow_none=True)\ + .tag(sync=True, display_name='Stroke color') stroke_width = Float(1.0).tag(sync=True, display_name='Stroke Width') colors = List(trait=Color(default_value=None, allow_none=True), default_value=['green', 'red'])\ @@ -1301,6 +1346,19 @@ class Pie(Mark): """Piechart mark. + Data Attributes + --------------- + + Attributes + ---------- + sizes: numpy.ndarray (default: []) + proportions of the pie slices + color: numpy.ndarray or None (default: None) + color of the data points. Defaults to colors when not provided. + + Style Attributes + ---------------- + Attributes ---------- colors: list of colors (default: CATEGORY10) @@ -1338,23 +1396,6 @@ class Pie(Mark): label font size in px, em or ex font_weight: {'bold', 'normal', 'bolder'} (default: 'normal') label font weight - - Data Attributes - - sizes: numpy.ndarray (default: []) - proportions of the pie slices - color: numpy.ndarray or None (default: None) - color of the data points. Defaults to colors when not provided. - - Notes - ----- - The fields which can be passed to the default tooltip are: - : the x value associated with the bar/candle - open: open value for the bar/candle - high: high value for the bar/candle - low: low value for the bar/candle - close: close value for the bar/candle - index: index of the bar/candle being hovered on """ # Mark decoration icon = 'fa-pie-chart' @@ -1411,6 +1452,18 @@ class Map(Mark): """Map mark. + Data Attributes + --------------- + + Attributes + ---------- + color: Dict or None (default: None) + dictionary containing the data associated with every country for the + color scale + + Style Attributes + ---------------- + Attributes ---------- colors: Dict (default: {}) @@ -1419,10 +1472,10 @@ class Map(Mark): the corresponding colors as values. The key `default_color` controls the items for which no color is specified. selected_styles: Dict (default: {'selected_fill': 'Red', - 'selected_stroke': None, 'selected_stroke_width': 2.0}) + selected_stroke: None, 'selected_stroke_width': 2.0}) Dictionary containing the styles for selected subunits hovered_styles: Dict (default: {'hovered_fill': 'Orange', - 'hovered_stroke': None, 'hovered_stroke_width': 2.0}) + hovered_stroke: None, 'hovered_stroke_width': 2.0}) Dictionary containing the styles for hovered subunits hover_highlight: bool (default: True) boolean to control if the map should be aware of which country is being @@ -1430,12 +1483,6 @@ class Map(Mark): map_data: dict (default: topo_load("map_data/WorldMap.json")) a topojson-formatted dictionary with the objects to map under the key 'subunits'. - - Data Attributes - - color: Dict or None (default: None) - dictionary containing the data associated with every country for the - color scale """ # Mark decoration @@ -1490,29 +1537,11 @@ class GridHeatMap(Mark): If rows and columns are not passed, and scales for them are also not passed, then ordinal scales are generated for the rows and columns. - Attributes - ---------- - row_align: Enum(['start', 'end']) - This is only valid if the number of entries in `row` exactly match the - number of rows in `color` and the `row_scale` is not `OrdinalScale`. - `start` aligns the row values passed to be aligned with the start - of the tiles and `end` aligns the row values to the end of the tiles. - column_align: Enum(['start', end']) - This is only valid if the number of entries in `column` exactly - match the number of columns in `color` and the `column_scale` is - not `OrdinalScale`. `start` aligns the column values passed to - be aligned with the start of the tiles and `end` aligns the - column values to the end of the tiles. - anchor_style: dict (default: {}) - Controls the style for the element which serves as the anchor during - selection. - display_format: string (default: None) - format for displaying values. If None, then values are not displayed - font_style: dict - CSS style for the text of each cell - Data Attributes + --------------- + Attributes + ---------- color: numpy.ndarray or None (default: None) color of the data points (2d array). The number of elements in this array correspond to the number of cells created in the heatmap. @@ -1532,6 +1561,30 @@ class GridHeatMap(Mark): end points of the cells. Refer to the property `column_align`. If this property is None, then a uniformly spaced grid is generated in the column direction. + + Style Attributes + ---------------- + + Attributes + ---------- + row_align: Enum(['start', 'end']) + This is only valid if the number of entries in `row` exactly match the + number of rows in `color` and the `row_scale` is not `OrdinalScale`. + `start` aligns the row values passed to be aligned with the start + of the tiles and `end` aligns the row values to the end of the tiles. + column_align: Enum(['start', end']) + This is only valid if the number of entries in `column` exactly + match the number of columns in `color` and the `column_scale` is + not `OrdinalScale`. `start` aligns the column values passed to + be aligned with the start of the tiles and `end` aligns the + column values to the end of the tiles. + anchor_style: dict (default: {}) + Controls the style for the element which serves as the anchor during + selection. + display_format: string (default: None) + format for displaying values. If None, then values are not displayed + font_style: dict + CSS style for the text of each cell """ # Scaled attributes row = Array(None, allow_none=True).tag(sync=True, scaled=True, @@ -1571,11 +1624,11 @@ def __init__(self, **kwargs): # Adding scales in case they are not passed too. scales = kwargs.pop('scales', {}) - if(scales.get('row', None) is None): + if scales.get('row', None) is None: row_scale = OrdinalScale(reverse=True) scales['row'] = row_scale - if(scales.get('column', None) is None): + if scales.get('column', None) is None: column_scale = OrdinalScale() scales['column'] = column_scale kwargs['scales'] = scales @@ -1618,12 +1671,11 @@ class HeatMap(Mark): """HeatMap mark. + Data Attributes + --------------- Attributes ---------- - - Data Attributes - color: numpy.ndarray or None (default: None) color of the data points (2d array). x: numpy.ndarray or None (default: None) @@ -1669,11 +1721,11 @@ def __init__(self, **kwargs): # Adding default x and y data if they are not passed. # Adding scales in case they are not passed too. - if(scales.get('x', None) is None): + if scales.get('x', None) is None: x_scale = LinearScale() scales['x'] = x_scale - if(scales.get('y', None) is None): + if scales.get('y', None) is None: y_scale = LinearScale() scales['y'] = y_scale kwargs['scales'] = scales @@ -1687,6 +1739,23 @@ def __init__(self, **kwargs): class Graph(Mark): """Graph with nodes and links. + Data Attributes + --------------- + + Attributes + ---------- + x: numpy.ndarray (default: []) + abscissas of the node data points (1d array) + y: numpy.ndarray (default: []) + ordinates of the node data points (1d array) + color: numpy.ndarray or None (default: None) + color of the node data points (1d array). + link_color: numpy.ndarray of shape(len(nodes), len(nodes)) + link data passed as 2d matrix + + Style Attributes + ---------------- + Attributes ---------- node_data: List @@ -1711,17 +1780,6 @@ class Graph(Mark): highlights incoming and outgoing links when hovered on a node colors: list (default: CATEGORY10) list of node colors - - Data Attributes - - x: numpy.ndarray (default: []) - abscissas of the node data points (1d array) - y: numpy.ndarray (default: []) - ordinates of the node data points (1d array) - color: numpy.ndarray or None (default: None) - color of the node data points (1d array). - link_color: numpy.ndarray of shape(len(nodes), len(nodes)) - link data passed as 2d matrix """ charge = Int(-600).tag(sync=True) static = Bool(False).tag(sync=True) @@ -1787,13 +1845,13 @@ class Image(Mark): If no scales are passed, uses the parent Figure scales. + Data Attributes + --------------- + Attributes ---------- image: Instance of ipywidgets.Image Image to be displayed - - Data Attributes - x: tuple (default: (0, 1)) abscissas of the left and right-hand side of the image in the format (x0, x1) diff --git a/bqplot/plotting_widgets.py b/bqplot/plotting_widgets.py new file mode 100644 index 000000000..4e6066774 --- /dev/null +++ b/bqplot/plotting_widgets.py @@ -0,0 +1,207 @@ +from ipywidgets import Layout +from traitlets import List, Enum, Int, Bool +from traittypes import DataFrame +from bqplot import Figure, LinearScale, Lines, Label +from bqplot.marks import CATEGORY10 +import numpy as np + + +class Radar(Figure): + """ + Radar chart created from a pandas Dataframe. Each column of the df will be + represented as a loop in the radar chart. Each row of the df will be + represented as a spoke of the radar chart + + Attributes + ---------- + data: DataFrame + data for the radar + band_type: {"circle", "polygon"} (default: "circle") + type of bands to display in the radar + num_bands: Int (default: 5) + number of bands on the radar. As of now, this attribute is not + dynamic and it has to set in the constructor + data_range: List (default: [0, 1]) + range of data + fill: Bool(default: True) + flag which lets us fill the radar loops or not + """ + + data = DataFrame() + data_range = List([0, 1]).tag(sync=True) + band_type = Enum( + ["circle", "polygon"], default_value="circle", allow_none=True + ).tag(sync=True) + colors = List(default_value=CATEGORY10).tag(sync=True) + num_bands = Int(default_value=5).tag(sync=True) + fill = Bool(default_value=False).tag(sync=True) + + def __init__(self, **kwargs): + super(Radar, self).__init__(**kwargs) + self.scales = {"x": LinearScale(), "y": LinearScale()} + # set some defaults for the figure + self.layout = Layout(min_width="600px", min_height="600px") + self.max_aspect_ratio = 1 + self.preserve_aspect = True + + # marks for the radar figure + + # spokes (straight lines going away from the center) + self.spokes = Lines( + scales=self.scales, colors=["#ccc"], stroke_width=0.5 + ) + + # bands + self.bands = Lines( + colors=["#ccc"], scales=self.scales, stroke_width=0.5 + ) + + # loops of the radar + self.loops = Lines( + scales=self.scales, + display_legend=True, + colors=self.colors, + stroke_width=2, + fill="inside" if self.fill else "none", + marker="circle", + marker_size=50, + ) + + self.band_labels = Label( + scales=self.scales, + default_size=12, + font_weight="normal", + apply_clip=False, + colors=["#ccc"], + align="middle", + ) + + self.spoke_labels = Label( + scales=self.scales, + default_size=14, + font_weight="bold", + apply_clip=False, + colors=["#ccc"], + align="middle", + ) + + self.marks = [ + self.spokes, + self.bands, + self.loops, + self.band_labels, + self.spoke_labels, + ] + + # handlers for data updates + self.observe(self.update_data, "data") + self.observe(self.update_bands, ["band_type", "num_bands"]) + self.observe(self.update_fill, "fill") + + self.loops.on_legend_click(self.on_legend_click) + self.loops.on_background_click(self.reset) + + self.update_bands(None) + self.update_data(None) + + def update_bands(self, *args): + band_data = np.linspace( + self.data_range[0], self.data_range[1], self.num_bands + 1 + ) + self.scaled_band_data = ( + (band_data - self.data_range[0]) + / (self.data_range[1] - self.data_range[0]) + )[:, np.newaxis] + + n = len(self.data.index) + + if self.band_type == "circle": + t = np.linspace(0, 2 * np.pi, 1000) + band_data_x, band_data_y = ( + self.scaled_band_data * np.cos(t), + self.scaled_band_data * np.sin(t), + ) + elif self.band_type == "polygon": + t = np.linspace(0, 2 * np.pi, n + 1) + band_data_x, band_data_y = ( + self.scaled_band_data * np.sin(t), + self.scaled_band_data * np.cos(t), + ) + + with self.bands.hold_sync(): + self.bands.x = band_data_x + self.bands.y = band_data_y + + with self.band_labels.hold_sync(): + self.band_labels.x = self.scaled_band_data[:, 0] + self.band_labels.y = [0.0] * (self.num_bands + 1) + self.band_labels.text = ["{:.0%}".format(b) for b in band_data] + + def update_data(self, *args): + self.update_bands(None) + rows = list(self.data.index) + n = len(rows) + + # spokes representing each data set + self.spoke_data_t = np.linspace(0, 2 * np.pi, n + 1)[:-1] + spoke_data_x, spoke_data_y = ( + np.sin(self.spoke_data_t), + np.cos(self.spoke_data_t), + ) + + # Update mark data based on data changes + with self.spokes.hold_sync(): + self.spokes.x = np.column_stack( + [self.scaled_band_data[1] * spoke_data_x, spoke_data_x] + ) + self.spokes.y = np.column_stack( + [self.scaled_band_data[1] * spoke_data_y, spoke_data_y] + ) + + scaled_data = (self.data.values - self.data_range[0]) / ( + self.data_range[1] - self.data_range[0] + ) + data_x = scaled_data * np.sin(self.spoke_data_t)[:, np.newaxis] + data_y = scaled_data * np.cos(self.spoke_data_t)[:, np.newaxis] + + # update data lines + with self.loops.hold_sync(): + self.loops.x = np.column_stack([data_x.T, data_x.T[:, 0]]) + self.loops.y = np.column_stack([data_y.T, data_y.T[:, 0]]) + if self.fill: + self.loops.fill = "inside" + self.loops.fill_opacities = [0.2] * len(self.loops.y) + else: + self.loops.fill = "none" + self.loops.fill_opacities = [0.0] * len(self.loops.y) + self.loops.labels = [str(c) for c in self.data.columns] + + # update spoke labels + t = np.linspace(0, 2 * np.pi, n + 1) + with self.spoke_labels.hold_sync(): + self.spoke_labels.text = [str(row) for row in rows] + self.spoke_labels.x = np.sin(t) + self.spoke_labels.y = np.cos(t) + + def update_fill(self, *args): + if self.fill: + with self.loops.hold_sync(): + self.loops.fill = "inside" + self.loops.fill_opacities = [0.2] * len(self.loops.y) + else: + self.loops.fill = "none" + self.loops.fill_opacities = [0.0] * len(self.loops.y) + + def on_legend_click(self, line, target): + selected_ix = target["data"]["index"] + n = len(line.y) + opacities = line.opacities + if opacities is None or len(opacities) == 0: + opacities = [1.0] * n + + new_opacities = [0.1] * n + new_opacities[selected_ix] = 1 + line.opacities = new_opacities + + def reset(self, line, target): + line.opacities = [1.0] * len(line.y) diff --git a/bqplot/pyplot.py b/bqplot/pyplot.py index 48422857f..f62fe32c8 100644 --- a/bqplot/pyplot.py +++ b/bqplot/pyplot.py @@ -12,61 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -r""" - -====== -Pyplot -====== - -.. currentmodule:: bqplot.pyplot - -.. autosummary:: - :toctree: _generate/ - - figure - show - axes - - plot - scatter - hist - bar - ohlc - geo - - clear - close - current_figure - - scales - xlim - ylim - - axes - xlabel - ylabel - -""" import sys from collections import OrderedDict from IPython.display import display -from ipywidgets import VBox from ipywidgets import Image as ipyImage from numpy import arange, issubdtype, array, column_stack, shape from .figure import Figure -from .scales import Scale, LinearScale, Mercator +from bqscales import Scale, LinearScale, Mercator from .axes import Axis -from .marks import (Lines, Scatter, ScatterGL, Hist, Bars, OHLC, Pie, Map, Image, +from .marks import (Lines, Scatter, Hist, Bars, OHLC, Pie, Map, Image, Label, HeatMap, GridHeatMap, topo_load, Boxplot, Bins) -from .toolbar import Toolbar from .interacts import (BrushIntervalSelector, FastIntervalSelector, BrushSelector, IndexSelector, MultiSelector, LassoSelector) from traitlets.utils.sentinel import Sentinel import functools -SCATTER_SIZE_LIMIT = 10 * 1000 # above this limit, ScatterGL will be used by default - Keep = Sentinel('Keep', 'bqplot.pyplot', ''' Used in bqplot.pyplot to specify that the same scale should be used for a certain dimension. @@ -98,7 +59,8 @@ 'm': 'magenta', 'y': 'yellow', 'k': 'black'} MARKER_CODES = {'o': 'circle', 'v': 'triangle-down', '^': 'triangle-up', - 's': 'square', 'd': 'diamond', '+': 'cross'} + 's': 'square', 'd': 'diamond', '+': 'cross', 'p': 'plus', + 'x': 'crosshair', '.': 'point'} PY2 = sys.version_info[0] == 2 @@ -109,8 +71,8 @@ string_types = str, +# Determine whether `v` can be hashed. def hashable(data, v): - """Determine whether `v` can be hashed.""" try: data[v] except (TypeError, KeyError, IndexError): @@ -152,13 +114,8 @@ def show(key=None, display_toolbar=True): figure = current_figure() else: figure = _context['figure_registry'][key] - if display_toolbar: - if not hasattr(figure, 'pyplot'): - figure.pyplot = Toolbar(figure=figure) - figure.pyplot_vbox = VBox([figure, figure.pyplot]) - display(figure.pyplot_vbox) - else: - display(figure) + figure.display_toolbar = display_toolbar + display(figure) def figure(key=None, fig=None, **kwargs): @@ -210,7 +167,7 @@ def figure(key=None, fig=None, **kwargs): # from the possible dimensions in the figure to the list of scales with # respect to which axes have been drawn for this figure. # Used to automatically generate axis. - if(getattr(_context['figure'], 'axis_registry', None) is None): + if getattr(_context['figure'], 'axis_registry', None) is None: setattr(_context['figure'], 'axis_registry', {}) return _context['figure'] @@ -397,7 +354,7 @@ def axes(mark=None, options={}, **kwargs): # An axis must be created. We fetch the type from the registry # the key being provided in the scaled attribute decoration key = mark.class_traits()[name].get_metadata('atype') - if(key is not None): + if key is not None: axis_type = Axis.axis_types[key] axis = axis_type(scale=scales[name], **axis_args) axes[name] = axis @@ -709,7 +666,7 @@ def plot(*args, **kwargs): else: kwargs['x'] = _infer_x_for_line(args[0]) elif len(args) == 2: - if type(args[1]) == str: + if isinstance(args[1], str): kwargs['y'] = args[0] kwargs['x'] = _infer_x_for_line(args[0]) marker_str = args[1].strip() @@ -719,7 +676,7 @@ def plot(*args, **kwargs): elif len(args) == 3: kwargs['x'] = args[0] kwargs['y'] = args[1] - if type(args[2]) == str: + if isinstance(args[2], str): marker_str = args[2].strip() if marker_str: @@ -816,7 +773,7 @@ def ohlc(*args, **kwargs): @_process_data('color', 'opacity', 'size', 'skew', 'rotation') -def scatter(x, y, use_gl=None, **kwargs): +def scatter(x, y, **kwargs): """Draw a scatter in the current context figure. Parameters @@ -826,9 +783,6 @@ def scatter(x, y, use_gl=None, **kwargs): The x-coordinates of the data points. y: numpy.ndarray, 1d The y-coordinates of the data points. - use_gl: If true, will use the ScatterGL mark (pixelized but faster), if false a normal - Scatter mark is used. If None, a choised is made automatically depending on the length - of x. options: dict (default: {}) Options for the scales to be created. If a scale labeled 'x' is required for that mark, options['x'] contains optional keyword @@ -840,11 +794,7 @@ def scatter(x, y, use_gl=None, **kwargs): """ kwargs['x'] = x kwargs['y'] = y - if use_gl is None: - mark_class = ScatterGL if len(x) >= SCATTER_SIZE_LIMIT else Scatter - else: - mark_class = ScatterGL if use_gl else Scatter - return _draw_mark(mark_class, **kwargs) + return _draw_mark(Scatter, **kwargs) @_process_data() @@ -1340,7 +1290,7 @@ def _get_attribute_dimension(trait_name, mark_type=None): as is. Returns `None` if the `trait_name` is not valid for `mark_type`. """ - if(mark_type is None): + if mark_type is None: return trait_name scale_metadata = mark_type.class_traits()['scales_metadata']\ .default_args[0] diff --git a/bqplot/scales.py b/bqplot/scales.py index b4fdd73e3..c52c10501 100644 --- a/bqplot/scales.py +++ b/bqplot/scales.py @@ -1,562 +1 @@ -# Copyright 2015 Bloomberg Finance L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -r""" - -====== -Scales -====== - -.. currentmodule:: bqplot.scales - -.. autosummary:: - :toctree: _generate/ - - Scale - LinearScale - LogScale - DateScale - OrdinalScale - ColorScale - DateColorScale - OrdinalColorScale - GeoScale - Mercator - AlbersUSA - Gnomonic - Stereographic -""" - -from ipywidgets import Widget, Color -from traitlets import Unicode, List, Enum, Float, Bool, Type, Tuple - -import numpy as np -from .traits import Date -from ._version import __frontend_version__ - - -def register_scale(key=None): - """Returns a decorator to register a scale type in the scale type - registry. - - If no key is provided, the class name is used as a key. A key is - provided for each core bqplot scale type so that the frontend can use - this key regardless of the kernel language. - """ - def wrap(scale): - label = key if key is not None else scale.__module__ + scale.__name__ - Scale.scale_types[label] = scale - return scale - return wrap - - -class Scale(Widget): - - """The base scale class. - - Scale objects represent a mapping between data (the domain) and a visual - quantity (The range). - - Attributes - ---------- - scale_types: dict (class-level attribute) - A registry of existing scale types. - domain_class: type (default: Float) - traitlet type used to validate values in of the domain of the scale. - reverse: bool (default: False) - whether the scale should be reversed. - allow_padding: bool (default: True) - indicates whether figures are allowed to add data padding to this scale - or not. - precedence: int (class-level attribute) - attribute used to determine which scale takes precedence in cases when - two or more scales have the same rtype and dtype. - """ - scale_types = {} - precedence = 1 - domain_class = Type(Float) - reverse = Bool().tag(sync=True) - allow_padding = Bool(True).tag(sync=True) - - _view_name = Unicode('Scale').tag(sync=True) - _model_name = Unicode('ScaleModel').tag(sync=True) - _view_module = Unicode('bqplot').tag(sync=True) - _model_module = Unicode('bqplot').tag(sync=True) - _view_module_version = Unicode(__frontend_version__).tag(sync=True) - _model_module_version = Unicode(__frontend_version__).tag(sync=True) - _ipython_display_ = None # We cannot display a scale outside of a figure - - -class GeoScale(Scale): - - """The base projection scale class for Map marks. - - The GeoScale represents a mapping between topographic data and a - 2d visual representation. - """ - _view_name = Unicode('GeoScale').tag(sync=True) - _model_name = Unicode('GeoScaleModel').tag(sync=True) - - -@register_scale('bqplot.Mercator') -class Mercator(GeoScale): - - """A geographical projection scale commonly used for world maps. - - The Mercator projection is a cylindrical map projection which ensures that - any course of constant bearing is a straight line. - - Attributes - ---------- - scale_factor: float (default: 190) - Specifies the scale value for the projection - center: tuple (default: (0, 60)) - Specifies the longitude and latitude where the map is centered. - rotate: tuple (default: (0, 0)) - Degree of rotation in each axis. - rtype: (Number, Number) (class-level attribute) - This attribute should not be modified. The range type of a geo - scale is a tuple. - dtype: type (class-level attribute) - the associated data type / domain type - """ - - scale_factor = Float(190).tag(sync=True) - center = Tuple((0, 60)).tag(sync=True) - rotate = Tuple((0, 0)).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('Mercator').tag(sync=True) - _model_name = Unicode('MercatorModel').tag(sync=True) - - -@register_scale('bqplot.Albers') -class Albers(GeoScale): - - """A geographical scale which is an alias for a conic equal area projection. - - The Albers projection is a conic equal area map. It does not preserve scale - or shape, though it is recommended for chloropleths since it preserves the - relative areas of geographic features. Default values are US-centric. - - Attributes - ---------- - scale_factor: float (default: 250) - Specifies the scale value for the projection - rotate: tuple (default: (96, 0)) - Degree of rotation in each axis. - parallels: tuple (default: (29.5, 45.5)) - Sets the two parallels for the conic projection. - center: tuple (default: (0, 60)) - Specifies the longitude and latitude where the map is centered. - precision: float (default: 0.1) - Specifies the threshold for the projections adaptive resampling to the - specified value in pixels. - rtype: (Number, Number) (class-level attribute) - This attribute should not be modified. The range type of a geo - scale is a tuple. - dtype: type (class-level attribute) - the associated data type / domain type - """ - - scale_factor = Float(250).tag(sync=True) - rotate = Tuple((96, 0)).tag(sync=True) - center = Tuple((0, 60)).tag(sync=True) - parallels = Tuple((29.5, 45.5)).tag(sync=True) - precision = Float(0.1).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('Albers').tag(sync=True) - _model_name = Unicode('AlbersModel').tag(sync=True) - - -@register_scale('bqplot.AlbersUSA') -class AlbersUSA(GeoScale): - - """A composite projection of four Albers projections meant specifically for - the United States. - - Attributes - ---------- - scale_factor: float (default: 1200) - Specifies the scale value for the projection - translate: tuple (default: (600, 490)) - rtype: (Number, Number) (class-level attribute) - This attribute should not be modified. The range type of a geo - scale is a tuple. - dtype: type (class-level attribute) - the associated data type / domain type - """ - - scale_factor = Float(1200).tag(sync=True) - translate = Tuple((600, 490)).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('AlbersUSA').tag(sync=True) - _model_name = Unicode('AlbersUSAModel').tag(sync=True) - - -@register_scale('bqplot.EquiRectangular') -class EquiRectangular(GeoScale): - - """An elementary projection that uses the identity function. - - The projection is neither equal-area nor conformal. - - Attributes - ---------- - scale_factor: float (default: 145) - Specifies the scale value for the projection - center: tuple (default: (0, 60)) - Specifies the longitude and latitude where the map is centered. - """ - - scale_factor = Float(145.0).tag(sync=True) - center = Tuple((0, 60)).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('EquiRectangular').tag(sync=True) - _model_name = Unicode('EquiRectangularModel').tag(sync=True) - - -@register_scale('bqplot.Orthographic') -class Orthographic(GeoScale): - - """A perspective projection that depicts a hemisphere as it appears from - outer space. - - The projection is neither equal-area nor conformal. - - Attributes - ---------- - scale_factor: float (default: 145) - Specifies the scale value for the projection - center: tuple (default: (0, 60)) - Specifies the longitude and latitude where the map is centered. - rotate: tuple (default: (96, 0)) - Degree of rotation in each axis. - clip_angle: float (default: 90.) - Specifies the clipping circle radius to the specified angle in degrees. - precision: float (default: 0.1) - Specifies the threshold for the projections adaptive resampling to the - specified value in pixels. - """ - - scale_factor = Float(145.0).tag(sync=True) - center = Tuple((0, 60)).tag(sync=True) - rotate = Tuple((0, 0)).tag(sync=True) - clip_angle = Float(90.0, min=0.0, max=360.0).tag(sync=True) - precision = Float(0.1).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('Orthographic').tag(sync=True) - _model_name = Unicode('OrthographicModel').tag(sync=True) - - -@register_scale('bqplot.Gnomonic') -class Gnomonic(GeoScale): - - """A perspective projection which displays great circles as straight lines. - - The projection is neither equal-area nor conformal. - - Attributes - ---------- - scale_factor: float (default: 145) - Specifies the scale value for the projection - center: tuple (default: (0, 60)) - Specifies the longitude and latitude where the map is centered. - precision: float (default: 0.1) - Specifies the threshold for the projections adaptive resampling to the - specified value in pixels. - clip_angle: float (default: 89.999) - Specifies the clipping circle radius to the specified angle in degrees. - """ - - scale_factor = Float(145.0).tag(sync=True) - center = Tuple((0, 60)).tag(sync=True) - precision = Float(0.1).tag(sync=True) - clip_angle = Float(89.999, min=0.0, max=360.0).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('Gnomonic').tag(sync=True) - _model_name = Unicode('GnomonicModel').tag(sync=True) - - -@register_scale('bqplot.Stereographic') -class Stereographic(GeoScale): - - """A perspective projection that uses a bijective and smooth map at every - point except the projection point. - - The projection is not an equal-area projection but it is conformal. - - Attributes - ---------- - scale_factor: float (default: 250) - Specifies the scale value for the projection - rotate: tuple (default: (96, 0)) - Degree of rotation in each axis. - center: tuple (default: (0, 60)) - Specifies the longitude and latitude where the map is centered. - precision: float (default: 0.1) - Specifies the threshold for the projections adaptive resampling to the - specified value in pixels. - clip_angle: float (default: 90.) - Specifies the clipping circle radius to the specified angle in degrees. - """ - - scale_factor = Float(145.0).tag(sync=True) - center = Tuple((0, 60)).tag(sync=True) - precision = Float(0.1).tag(sync=True) - rotate = Tuple((96, 0)).tag(sync=True) - clip_angle = Float(179.9999, min=0.0, max=360.0).tag(sync=True) - rtype = '(Number, Number)' - dtype = np.number - _view_name = Unicode('Stereographic').tag(sync=True) - _model_name = Unicode('StereographicModel').tag(sync=True) - - -@register_scale('bqplot.LinearScale') -class LinearScale(Scale): - - """A linear scale. - - An affine mapping from a numerical domain to a numerical range. - - Attributes - ---------- - min: float or None (default: None) - if not None, min is the minimal value of the domain - max: float or None (default: None) - if not None, max is the maximal value of the domain - rtype: string (class-level attribute) - This attribute should not be modified. The range type of a linear - scale is numerical. - dtype: type (class-level attribute) - the associated data type / domain type - precedence: int (class-level attribute, default_value=2) - attribute used to determine which scale takes precedence in cases when - two or more scales have the same rtype and dtype. - default_value is 2 because for the same range and domain types, - LinearScale should take precedence. - stabilized: bool (default: False) - if set to False, the domain of the scale is tied to the data range - if set to True, the domain of the scale is updated only when - the data range is beyond certain thresholds, given by the attributes - mid_range and min_range. - mid_range: float (default: 0.8) - Proportion of the range that is spanned initially. - Used only if stabilized is True. - min_range: float (default: 0.6) - Minimum proportion of the range that should be spanned by the data. - If the data span falls beneath that level, the scale is reset. - min_range must be <= mid_range. - Used only if stabilized is True. - """ - rtype = 'Number' - dtype = np.number - precedence = 2 - min = Float(None, allow_none=True).tag(sync=True) - max = Float(None, allow_none=True).tag(sync=True) - stabilized = Bool(False).tag(sync=True) - min_range = Float(0.6, min=0.0, max=1.0).tag(sync=True) - mid_range = Float(0.8, min=0.1, max=1.0).tag(sync=True) - - _view_name = Unicode('LinearScale').tag(sync=True) - _model_name = Unicode('LinearScaleModel').tag(sync=True) - - -@register_scale('bqplot.LogScale') -class LogScale(Scale): - - """A log scale. - - A logarithmic mapping from a numerical domain to a numerical range. - - Attributes - ---------- - min: float or None (default: None) - if not None, min is the minimal value of the domain - max: float or None (default: None) - if not None, max is the maximal value of the domain - rtype: string (class-level attribute) - This attribute should not be modified by the user. - The range type of a linear scale is numerical. - dtype: type (class-level attribute) - the associated data type / domain type - """ - rtype = 'Number' - dtype = np.number - min = Float(None, allow_none=True).tag(sync=True) - max = Float(None, allow_none=True).tag(sync=True) - - _view_name = Unicode('LogScale').tag(sync=True) - _model_name = Unicode('LogScaleModel').tag(sync=True) - - -@register_scale('bqplot.DateScale') -class DateScale(Scale): - - """A date scale, with customizable formatting. - - An affine mapping from dates to a numerical range. - - Attributes - ---------- - min: Date or None (default: None) - if not None, min is the minimal value of the domain - max: Date (default: None) - if not None, max is the maximal value of the domain - domain_class: type (default: Date) - traitlet type used to validate values in of the domain of the scale. - rtype: string (class-level attribute) - This attribute should not be modified by the user. - The range type of a linear scale is numerical. - dtype: type (class-level attribute) - the associated data type / domain type - """ - rtype = 'Number' - dtype = np.datetime64 - domain_class = Type(Date) - min = Date(default_value=None, allow_none=True).tag(sync=True) - max = Date(default_value=None, allow_none=True).tag(sync=True) - - _view_name = Unicode('DateScale').tag(sync=True) - _model_name = Unicode('DateScaleModel').tag(sync=True) - - -@register_scale('bqplot.OrdinalScale') -class OrdinalScale(Scale): - - """An ordinal scale. - - A mapping from a discrete set of values to a numerical range. - - Attributes - ---------- - domain: list (default: []) - The discrete values mapped by the ordinal scale - rtype: string (class-level attribute) - This attribute should not be modified by the user. - The range type of a linear scale is numerical. - dtype: type (class-level attribute) - the associated data type / domain type - """ - rtype = 'Number' - dtype = np.str_ - domain = List().tag(sync=True) - - _view_name = Unicode('OrdinalScale').tag(sync=True) - _model_name = Unicode('OrdinalScaleModel').tag(sync=True) - - -@register_scale('bqplot.ColorScale') -class ColorScale(Scale): - - """A color scale. - - A mapping from numbers to colors. The relation is affine by part. - - Attributes - ---------- - scale_type: {'linear'} - scale type - colors: list of colors (default: []) - list of colors - min: float or None (default: None) - if not None, min is the minimal value of the domain - max: float or None (default: None) - if not None, max is the maximal value of the domain - mid: float or None (default: None) - if not None, mid is the value corresponding to the mid color. - scheme: string (default: 'RdYlGn') - Colorbrewer color scheme of the color scale. - extrapolation: {'constant', 'linear'} (default: 'constant') - How to extrapolate values outside the [min, max] domain. - rtype: string (class-level attribute) - The range type of a color scale is 'Color'. This should not be modified. - dtype: type (class-level attribute) - the associated data type / domain type - """ - rtype = 'Color' - dtype = np.number - scale_type = Enum(['linear'], default_value='linear').tag(sync=True) - colors = List(trait=Color(default_value=None, allow_none=True))\ - .tag(sync=True) - min = Float(None, allow_none=True).tag(sync=True) - max = Float(None, allow_none=True).tag(sync=True) - mid = Float(None, allow_none=True).tag(sync=True) - scheme = Unicode('RdYlGn').tag(sync=True) - extrapolation = Enum(['constant', 'linear'], default_value='constant').tag(sync=True) - - _view_name = Unicode('ColorScale').tag(sync=True) - _model_name = Unicode('ColorScaleModel').tag(sync=True) - - -@register_scale('bqplot.DateColorScale') -class DateColorScale(ColorScale): - - """A date color scale. - - A mapping from dates to a numerical domain. - - Attributes - ---------- - min: Date or None (default: None) - if not None, min is the minimal value of the domain - max: Date or None (default: None) - if not None, max is the maximal value of the domain - mid: Date or None (default: None) - if not None, mid is the value corresponding to the mid color. - rtype: string (class-level attribute) - This attribute should not be modified by the user. - The range type of a color scale is 'Color'. - dtype: type (class-level attribute) - the associated data type / domain type - """ - dtype = np.datetime64 - domain_class = Type(Date) - - min = Date(default_value=None, allow_none=True).tag(sync=True) - mid = Date(default_value=None, allow_none=True).tag(sync=True) - max = Date(default_value=None, allow_none=True).tag(sync=True) - - _view_name = Unicode('DateColorScale').tag(sync=True) - _model_name = Unicode('DateColorScaleModel').tag(sync=True) - - -@register_scale('bqplot.OrdinalColorScale') -class OrdinalColorScale(ColorScale): - - """An ordinal color scale. - - A mapping from a discrete set of values to colors. - - Attributes - ---------- - domain: list (default: []) - The discrete values mapped by the ordinal scales. - rtype: string (class-level attribute) - This attribute should not be modified by the user. - The range type of a color scale is 'color'. - dtype: type (class-level attribute) - the associated data type / domain type - """ - rtype = 'Color' - dtype = np.str_ - domain = List().tag(sync=True) - - _view_name = Unicode('OrdinalColorScale').tag(sync=True) - _model_name = Unicode('OrdinalColorScaleModel').tag(sync=True) +from bqscales import * # noqa diff --git a/bqplot/traits.py b/bqplot/traits.py index 95f4efb3f..f1ba70020 100644 --- a/bqplot/traits.py +++ b/bqplot/traits.py @@ -32,7 +32,7 @@ import pandas as pd import warnings import datetime as dt -import six + # Date @@ -83,9 +83,7 @@ def validate(self, obj, value): self.error(obj, value) def __init__(self, default_value=dt.datetime.today(), **kwargs): - args = (default_value,) - self.default_value = default_value - super(Date, self).__init__(args=args, **kwargs) + super(Date, self).__init__(default_value=default_value, **kwargs) self.tag(**date_serialization) @@ -94,10 +92,10 @@ def convert_to_date(array, fmt='%m-%d-%Y'): # returned as such. If it is an np.ndarray of dtype 'object' then conversion # to string is tried according to the fmt parameter. - if(isinstance(array, np.ndarray) and np.issubdtype(array.dtype, np.datetime64)): + if isinstance(array, np.ndarray) and np.issubdtype(array.dtype, np.datetime64): # no need to perform any conversion in this case return array - elif(isinstance(array, list) or (isinstance(array, np.ndarray) and array.dtype == 'object')): + elif isinstance(array, list) or (isinstance(array, np.ndarray) and array.dtype == 'object'): return_value = [] # Pandas to_datetime handles all the cases where the passed in # data could be any of the combinations of @@ -105,13 +103,13 @@ def convert_to_date(array, fmt='%m-%d-%Y'): # Because of the coerce=True flag, any non-compatible datetime type # will be converted to pd.NaT. By this comparison, we can figure # out if it is date castable or not. - if(len(np.shape(array)) == 2): + if len(np.shape(array)) == 2: for elem in array: temp_val = pd.to_datetime( elem, errors='coerce', infer_datetime_format=True) temp_val = elem if isinstance(temp_val[0], type(pd.NaT)) else temp_val return_value.append(temp_val) - elif(isinstance(array, list)): + elif isinstance(array, list): temp_val = pd.to_datetime( array, errors='coerce', infer_datetime_format=True) return_value = array if isinstance(temp_val[0], type(pd.NaT)) else temp_val @@ -120,7 +118,7 @@ def convert_to_date(array, fmt='%m-%d-%Y'): array, errors='coerce', infer_datetime_format=True) return_value = array if isinstance(temp_val[0], type(pd.NaT)) else temp_val return return_value - elif(isinstance(array, np.ndarray)): + elif isinstance(array, np.ndarray): warnings.warn("Array could not be converted into a date") return array @@ -130,8 +128,16 @@ def array_from_json(value, obj=None): # this will accept regular json data, like an array of values, which can be useful it you want # to link bqplot to other libraries that use that if isinstance(value, list): - if len(value) > 0 and isinstance(value[0], dict) and 'value' in value[0]: - return np.array([array_from_json(k) for k in value]) + if len(value) > 0 and (isinstance(value[0], dict) and 'value' in value[0]): + subarrays = [array_from_json(k) for k in value] + if len(subarrays) > 0: + expected_length = len(subarrays[0]) + # if a 'ragged' array, we should explicitly pass dtype=object + if any(len(k) != expected_length for k in subarrays[1:]): + return np.array(subarrays, dtype=object) + return np.array(subarrays) + elif len(value) > 0 and isinstance(value[0], list): + return np.array(value, dtype=object) else: return np.array(value) elif 'value' in value: @@ -156,7 +162,7 @@ def array_to_json(ar, obj=None, force_contiguous=True): if ar.dtype.kind == 'O': # Try to serialize the array of objects - is_string = np.vectorize(lambda x: isinstance(x, six.string_types)) + is_string = np.vectorize(lambda x: isinstance(x, str)) is_timestamp = np.vectorize(lambda x: isinstance(x, pd.Timestamp)) is_array_like = np.vectorize(lambda x: isinstance(x, (list, np.ndarray))) @@ -239,7 +245,9 @@ def dataframe_to_json(df, obj): if df is None: return None else: - return df.to_dict(orient='records') + # Replacing NaNs with None as it's not valid JSON + cleandf = df.fillna(np.nan).replace([np.nan], [None]) + return cleandf.to_dict(orient='records') dataframe_serialization = dict(to_json=dataframe_to_json, from_json=dataframe_from_json) diff --git a/custom_theme/404.html b/custom_theme/404.html new file mode 100644 index 000000000..7be5e4d8e --- /dev/null +++ b/custom_theme/404.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block content %} + +
+
+

404

+

We are actively working on documentation pages. Please come back + soon!

+

+ Go Back +

+
+
+ +{% endblock %} \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 30bb436b5..000000000 --- a/docs/Makefile +++ /dev/null @@ -1,194 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext api - -default: html - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/bqplot.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/bqplot.qhc" - -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/bqplot" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/bqplot" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/api/axes.md b/docs/api/axes.md new file mode 100644 index 000000000..cb996b2e5 --- /dev/null +++ b/docs/api/axes.md @@ -0,0 +1,3 @@ + +::: bqplot.axes + handler: python diff --git a/docs/api/figure.md b/docs/api/figure.md new file mode 100644 index 000000000..e7fda1cb1 --- /dev/null +++ b/docs/api/figure.md @@ -0,0 +1,2 @@ +::: bqplot.Figure + handler: python diff --git a/docs/api/interactions.md b/docs/api/interactions.md new file mode 100644 index 000000000..c14396d89 --- /dev/null +++ b/docs/api/interactions.md @@ -0,0 +1,3 @@ + +::: bqplot.interacts + handler: python diff --git a/docs/api/market_map.md b/docs/api/market_map.md new file mode 100644 index 000000000..6af200a1d --- /dev/null +++ b/docs/api/market_map.md @@ -0,0 +1,2 @@ +::: bqplot.market_map.MarketMap + handler: python diff --git a/docs/api/marks.md b/docs/api/marks.md new file mode 100644 index 000000000..6168725a4 --- /dev/null +++ b/docs/api/marks.md @@ -0,0 +1,2 @@ +::: bqplot.marks + handler: python diff --git a/docs/api/pyplot.md b/docs/api/pyplot.md new file mode 100644 index 000000000..e615e2d30 --- /dev/null +++ b/docs/api/pyplot.md @@ -0,0 +1,2 @@ +::: bqplot.pyplot + handler: python diff --git a/docs/api/scales.md b/docs/api/scales.md new file mode 100644 index 000000000..445e9968d --- /dev/null +++ b/docs/api/scales.md @@ -0,0 +1,48 @@ + +::: bqscales.Scale + handler: python + +::: bqscales.LinearScale + handler: python + +::: bqscales.LogScale + handler: python + +::: bqscales.DateScale + handler: python + +::: bqscales.OrdinalScale + handler: python + +::: bqscales.ColorScale + handler: python + +::: bqscales.DateColorScale + handler: python + +::: bqscales.OrdinalColorScale + handler: python + +::: bqscales.GeoScale + handler: python + +::: bqscales.Orthographic + handler: python + +::: bqscales.Mercator + handler: python + +::: bqscales.Albers + handler: python + +::: bqscales.AlbersUSA + handler: python + +::: bqscales.Gnomonic + handler: python + +::: bqscales.Stereographic + handler: python + +::: bqscales.EquiRectangular + handler: python diff --git a/docs/api/toolbar.md b/docs/api/toolbar.md new file mode 100644 index 000000000..365ace58e --- /dev/null +++ b/docs/api/toolbar.md @@ -0,0 +1,2 @@ +::: bqplot.toolbar.Toolbar + handler: python diff --git a/docs/api/tooltip.md b/docs/api/tooltip.md new file mode 100644 index 000000000..9c90a8207 --- /dev/null +++ b/docs/api/tooltip.md @@ -0,0 +1,2 @@ +::: bqplot.Tooltip + handler: python diff --git a/docs/assets/images/bars-image1.png b/docs/assets/images/bars-image1.png new file mode 100644 index 000000000..6930747c5 Binary files /dev/null and b/docs/assets/images/bars-image1.png differ diff --git a/docs/assets/images/bars-image2.png b/docs/assets/images/bars-image2.png new file mode 100644 index 000000000..6c1eb0462 Binary files /dev/null and b/docs/assets/images/bars-image2.png differ diff --git a/docs/assets/images/bars-image3.png b/docs/assets/images/bars-image3.png new file mode 100644 index 000000000..54026ebce Binary files /dev/null and b/docs/assets/images/bars-image3.png differ diff --git a/docs/assets/images/bars-image4.png b/docs/assets/images/bars-image4.png new file mode 100644 index 000000000..f775c1835 Binary files /dev/null and b/docs/assets/images/bars-image4.png differ diff --git a/docs/assets/images/bars-image5.png b/docs/assets/images/bars-image5.png new file mode 100644 index 000000000..77a861e79 Binary files /dev/null and b/docs/assets/images/bars-image5.png differ diff --git a/docs/assets/images/bqplot-image1.png b/docs/assets/images/bqplot-image1.png new file mode 100644 index 000000000..43891b864 Binary files /dev/null and b/docs/assets/images/bqplot-image1.png differ diff --git a/docs/assets/images/bqplot-image2.png b/docs/assets/images/bqplot-image2.png new file mode 100644 index 000000000..55dc69678 Binary files /dev/null and b/docs/assets/images/bqplot-image2.png differ diff --git a/docs/assets/images/figure-image1.png b/docs/assets/images/figure-image1.png new file mode 100644 index 000000000..b45e58e23 Binary files /dev/null and b/docs/assets/images/figure-image1.png differ diff --git a/docs/assets/images/gridheatmap-image1.png b/docs/assets/images/gridheatmap-image1.png new file mode 100644 index 000000000..bd94bc606 Binary files /dev/null and b/docs/assets/images/gridheatmap-image1.png differ diff --git a/docs/assets/images/gridheatmap-image2.png b/docs/assets/images/gridheatmap-image2.png new file mode 100644 index 000000000..162dfbf51 Binary files /dev/null and b/docs/assets/images/gridheatmap-image2.png differ diff --git a/docs/assets/images/gridheatmap-image3.png b/docs/assets/images/gridheatmap-image3.png new file mode 100644 index 000000000..d32b7cc17 Binary files /dev/null and b/docs/assets/images/gridheatmap-image3.png differ diff --git a/docs/assets/images/gridheatmap-image4.png b/docs/assets/images/gridheatmap-image4.png new file mode 100644 index 000000000..2fc976449 Binary files /dev/null and b/docs/assets/images/gridheatmap-image4.png differ diff --git a/docs/assets/images/gridheatmap-image5.png b/docs/assets/images/gridheatmap-image5.png new file mode 100644 index 000000000..9ea323c58 Binary files /dev/null and b/docs/assets/images/gridheatmap-image5.png differ diff --git a/docs/assets/images/label-image1.png b/docs/assets/images/label-image1.png new file mode 100644 index 000000000..50c8bdd32 Binary files /dev/null and b/docs/assets/images/label-image1.png differ diff --git a/docs/assets/images/label-image2.png b/docs/assets/images/label-image2.png new file mode 100644 index 000000000..4f464eec9 Binary files /dev/null and b/docs/assets/images/label-image2.png differ diff --git a/docs/assets/images/label-image3.png b/docs/assets/images/label-image3.png new file mode 100644 index 000000000..8e02e8488 Binary files /dev/null and b/docs/assets/images/label-image3.png differ diff --git a/docs/assets/images/lines-image1.png b/docs/assets/images/lines-image1.png new file mode 100644 index 000000000..e4d6cc055 Binary files /dev/null and b/docs/assets/images/lines-image1.png differ diff --git a/docs/assets/images/lines-image2.png b/docs/assets/images/lines-image2.png new file mode 100644 index 000000000..1273b3feb Binary files /dev/null and b/docs/assets/images/lines-image2.png differ diff --git a/docs/assets/images/lines-image3.png b/docs/assets/images/lines-image3.png new file mode 100644 index 000000000..42a1d8ce7 Binary files /dev/null and b/docs/assets/images/lines-image3.png differ diff --git a/docs/assets/images/lines-image4.png b/docs/assets/images/lines-image4.png new file mode 100644 index 000000000..ee5fe01cd Binary files /dev/null and b/docs/assets/images/lines-image4.png differ diff --git a/docs/assets/images/lines-image5.png b/docs/assets/images/lines-image5.png new file mode 100644 index 000000000..eea3aaf34 Binary files /dev/null and b/docs/assets/images/lines-image5.png differ diff --git a/docs/assets/images/lines-image6.png b/docs/assets/images/lines-image6.png new file mode 100644 index 000000000..00e47d4ce Binary files /dev/null and b/docs/assets/images/lines-image6.png differ diff --git a/docs/assets/images/logo.png b/docs/assets/images/logo.png new file mode 100644 index 000000000..b73e95e1a Binary files /dev/null and b/docs/assets/images/logo.png differ diff --git a/docs/assets/images/maps-image1.png b/docs/assets/images/maps-image1.png new file mode 100644 index 000000000..7cc71141c Binary files /dev/null and b/docs/assets/images/maps-image1.png differ diff --git a/docs/assets/images/maps-image2.png b/docs/assets/images/maps-image2.png new file mode 100644 index 000000000..2fb0a41df Binary files /dev/null and b/docs/assets/images/maps-image2.png differ diff --git a/docs/assets/images/maps-image3.png b/docs/assets/images/maps-image3.png new file mode 100644 index 000000000..48fcefd60 Binary files /dev/null and b/docs/assets/images/maps-image3.png differ diff --git a/docs/assets/images/maps-image4.png b/docs/assets/images/maps-image4.png new file mode 100644 index 000000000..f8e597130 Binary files /dev/null and b/docs/assets/images/maps-image4.png differ diff --git a/docs/assets/images/pyplot-image1.png b/docs/assets/images/pyplot-image1.png new file mode 100644 index 000000000..92679c667 Binary files /dev/null and b/docs/assets/images/pyplot-image1.png differ diff --git a/docs/assets/images/pyplot-image2.png b/docs/assets/images/pyplot-image2.png new file mode 100644 index 000000000..433503fe2 Binary files /dev/null and b/docs/assets/images/pyplot-image2.png differ diff --git a/docs/assets/images/pyplot-image3.png b/docs/assets/images/pyplot-image3.png new file mode 100644 index 000000000..f4930dab2 Binary files /dev/null and b/docs/assets/images/pyplot-image3.png differ diff --git a/docs/assets/images/scatter-image1.png b/docs/assets/images/scatter-image1.png new file mode 100644 index 000000000..c55799867 Binary files /dev/null and b/docs/assets/images/scatter-image1.png differ diff --git a/docs/assets/images/scatter-image2.png b/docs/assets/images/scatter-image2.png new file mode 100644 index 000000000..ba6d2d6ef Binary files /dev/null and b/docs/assets/images/scatter-image2.png differ diff --git a/docs/assets/images/scatter-image3.png b/docs/assets/images/scatter-image3.png new file mode 100644 index 000000000..06b53dc47 Binary files /dev/null and b/docs/assets/images/scatter-image3.png differ diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 000000000..41c595148 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,27 @@ +# Contributing to bqplot + +## Conforming with linters + +This projects uses both [eslint](https://eslint.org/) and [prettier](https://github.com/prettier/prettier) and the plugin that creates the integration between both, [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) to lint its code. + +Currently there has been an active effort on making the project comply to all eslint rules so the eslint rules are currently not enforced. + +Prettier rules are enforced though and you can run them in the `js` folder with: + +```bash + jlpm prettier --write . +``` + +The configuration of this project linters were based in the [widgets-cookiecutter](https://github.com/jupyter-widgets/widget-ts-cookiecutter/tree/master/%7B%7Bcookiecutter.github_project_name%7D%7D). + +## Governance and code of conduct + +Bqplot is subject to the [bqplot governance](https://github.com/bqplot/governance/blob/master/governance.md) and the [bqplot code of conduct](https://github.com/bqplot/governance/blob/master/code_of_conduct.md). + +## Questions + +Should you have any question, please do not hesitate to reach out to us on the [ipywidgets gitter chat](https://gitter.im/jupyter-widgets/Lobby). + +## Help/Documentation + +- Talk to us on the `ipywidgets` Gitter chat: [![Join the chat at https://gitter.im/ipython/ipywidgets](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ipython/ipywidgets?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) diff --git a/docs/environment.yml b/docs/environment.yml deleted file mode 100644 index ac89744e6..000000000 --- a/docs/environment.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: bqplot_docs -channels: - - conda-forge -dependencies: - - python=3.5 - - traitlets - - traittypes - - widgetsnbextension - - numpy - - pandas - - bqplot - - nbsphinx diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..35f47ceae --- /dev/null +++ b/docs/index.md @@ -0,0 +1,132 @@ +site_name: bqplot +site_description: bqplot: 2-D interactive visualization system for the Jupyter notebook +site_url: https://bqplot.github.io/bqplot + +# bqplot + +![bqplot](https://raw.githubusercontent.com/bqplot/design/master/bqplot-logo-nobackground.svg#only-light) +![bqplot](https://raw.githubusercontent.com/bqplot/design/master/bqplot-logo-dark-nobackground.svg#only-dark) + +`bqplot` is a python based 2-D visualization system for Jupyter, based on the constructs of _Grammar of Graphics_. In `bqplot` every component of the plot is an interactive widget. This allows the user to seamlessly integrate `bqplot` with other Jupyter widgets to create rich visualizations by using just python code! + +## Key Features + +* __Core Plotting__ Support for core plotting is provided +* __Responsive__ Built using the same machinery that powers Jupyter widgets + * Most of the attributes of `figure` and `mark` objects are implemented as [__traitlets__](https://traitlets.readthedocs.io/en/stable/) which make the plots respond to data updates. __After rendering the charts the attributes of the figures and marks can be updated in notebook cells down (or in callbacks) and changes are automatically reflected in the chart!__ +* __Selectors__ Selectors enable selecting slices of data + * __1D selectors__ Select slices of data along one dimension (x or y) + * __2D selectors__ Select slices of data along two dimensions (x and y) using rectangular brushing + * __Lasso__ Select slices of data along two dimensions (x and y) using a lasso +* __Jupyter Widget Integration__ Seamless integration and linking with Jupyter widgets +* __Extensibility__ `Object Model` can be extended to build reusable compound plotting widgets and widget libraries +* __Dashboards/Apps__ Build rich interactive dashboards and apps by integrating `bqplot` with other Jupyter widget libraries and `voila` dashboarding tool + +While `bqplot` provides support for static plotting for most of the chart types, it really shines in interactive plotting where data attributes are updated in an event-driven fashion (using ipywidgets, click handlers etc.) + +## Python API + +Two APIs are provided in bqplot: + +* [__Pyplot__](usage/pyplot.md) + * Context-based API similar to matplotlib's pyplot + * Provides sensible default choices for most parameters + * Concise API + * Preferred API for most usecases + +* [__Object Model__](usage/object-model.md) + * Based on the constructs of Grammar of Graphics + * Users need to explicitly create [`Scale`](api/scales.md), [`Mark`](api/marks.md), [`Axis`](api/axes.md) and [`Figure`](api/figure.md) objects + * Verbose API + * Fully customizable + * Extensible + + +## Usage + +### __pyplot__ + +`pyplot` is the best way to get started on `bqplot`. Creating a plot involves 3 steps: + + * Create a figure object + * Create one or more marks (marks will be added to the above figure by default) + * Render the figure which is an instance of `DOMWidget` + +```py +import bqplot.pyplot as plt +import numpy as np + +fig = plt.figure(title="Sine") + +# create data vectors +x = np.linspace(-10, 10, 200) +y = np.sin(x) + +# create line mark +line = plt.plot(x, y) + +# renders the figure in the output cell (with toolbar for panzoom, save etc.) +plt.show() +``` +![plot](assets/images/bqplot-image1.png) + +### __Object Model__ + +`Object Model` is a verbose (but fully customizable) API for creating plots. Creating a plot involves the following steps: + +* Create `scales` for data attributes (x, y, color etc.) +* Create `marks` using the above scales +* Create `axes` objects using the above scales +* Finally create the `figure` object and pass the `marks` and `axes` as parameters + +```py +import numpy as np +import bqplot as bq + +x = np.linspace(-10, 10, 200) +y = np.sin(x) + +# create scales +xs = bq.LinearScale() +ys = bq.LinearScale() + +# create mark objects +line = bq.Lines(x=x, y=y, scales={"x": xs, "y": ys}) + +# create axes objects +xax = bq.Axis(scale=xs, grid_lines="solid", label="X") +yax = bq.Axis(scale=ys, orientation="vertical", grid_lines="solid") + +# create the figure object (renders in the output cell) +bq.Figure(marks=[line], axes=[xax, yax], title="Sine") +``` +![plot](assets/images/bqplot-image1.png) + +## Plot Enhancements +To enhance the plots (colors, grid lines, axes labels, ticks, legends etc.) you need to pass in additional parameters to the plotting widget constructors/methods. Let's look at an example: + +```py hl_lines="1 7 8 9 10 14 15 16 17" +fig = plt.figure(title="Sine", legend_location="top-left") +x = np.linspace(-10, 10, 100) +# multi line chart +y = [np.sin(x), np.cos(x)] + +# customize axes +axes_options = { + "x": {"label": "X"}, + "y": {"label": "Y", "tick_format": ".2f"} +} +curves = plt.plot( + x, + y, + colors=["red", "green"], + display_legend=True, + axes_options=axes_options, + labels=["Sine", "Cosine"] +) +fig +``` +![plot](assets/images/bqplot-image2.png) + +## Next Steps +Have a look at [__Usage__](usage/pyplot.md) section for more details on how to configure and customize various plots diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 000000000..535b1018f --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,118 @@ +# Installation + +Using pip +```shell +pip install bqplot +``` + +Using conda +```shell +conda install -c conda-forge bqplot +``` + +If you are using JupyterLab <= 2 +```shell +jupyter labextension install @jupyter-widgets/jupyterlab-manager bqplot +``` + +### Development installation + +Development installation (requires JupyterLab version >= 4 and yarn): +``` +$ git clone https://github.com/bqplot/bqplot.git +$ cd bqplot +$ pip install -e . +$ jupyter nbextension install --py --overwrite --symlink --sys-prefix bqplot +$ jupyter nbextension enable --py --sys-prefix bqplot +``` + +Note for developers: the `--symlink` argument on Linux or OS X allows one to +modify the JavaScript code in-place. This feature is not available +with Windows. + +For the experimental JupyterLab extension, install the Python package, make sure the Jupyter widgets extension is installed, and install the bqplot extension: + +``` +$ pip install "ipywidgets>=7.6" +$ jupyter labextension develop . --overwrite +``` + +Whenever you make a change of the JavaScript code, you will need to rebuild: + +``` +cd js +jlpm run build +``` +Refreshing the JupyterLab/Jupyter Notebook is enough to reload the changes. + +### Running tests + +You can install the dependencies necessary to run the tests with: + +```bash + conda env update -f test-environment.yml +``` + +And run it with for Python tests: + +```bash + pytest +``` + +And `cd js` to run the JS tests with: + +```bash +jlpm run test +``` + +Every time you make a change on your tests it's necessary to rebuild the JS side: + +```bash +jlpm run build +``` + +### Installation Of Older Versions + +(Only for JupyterLab <= 2) +In order to install a previous bqplot version, you need to know which front-end version (JavaScript) matches with the back-end version (Python). + +For example, in order to install bqplot `0.11.9`, you need the labextension version `0.4.9`. + +``` +$ pip install bqplot==0.11.9 +$ jupyter labextension install bqplot@0.4.9 +``` + +Versions lookup table: + +| `back-end (Python)` | `front-end (JavaScript)` | +|---------------------|--------------------------| +| 0.12.14 | 0.5.14 | +| 0.12.13 | 0.5.13 | +| 0.12.12 | 0.5.12 | +| 0.12.11 | 0.5.11 | +| 0.12.10 | 0.5.10 | +| 0.12.9 | 0.5.9 | +| 0.12.8 | 0.5.8 | +| 0.12.7 | 0.5.7 | +| 0.12.6 | 0.5.6 | +| 0.12.4 | 0.5.4 | +| 0.12.3 | 0.5.3 | +| 0.12.2 | 0.5.2 | +| 0.12.1 | 0.5.1 | +| 0.12.0 | 0.5.0 | +| 0.11.9 | 0.4.9 | +| 0.11.8 | 0.4.8 | +| 0.11.7 | 0.4.7 | +| 0.11.6 | 0.4.6 | +| 0.11.5 | 0.4.5 | +| 0.11.4 | 0.4.5 | +| 0.11.3 | 0.4.4 | +| 0.11.2 | 0.4.3 | +| 0.11.1 | 0.4.1 | +| 0.11.0 | 0.4.0 | + +### License + +This software is licensed under the Apache 2.0 license. See the [LICENSE](LICENSE) file +for details. diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index ca53c2625..000000000 --- a/docs/make.bat +++ /dev/null @@ -1,263 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source -set I18NSPHINXOPTS=%SPHINXOPTS% source -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - echo. coverage to run coverage check of the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -REM Check if sphinx-build is available and fallback to Python version if any -%SPHINXBUILD% 2> nul -if errorlevel 9009 goto sphinx_python -goto sphinx_ok - -:sphinx_python - -set SPHINXBUILD=python -m sphinx.__init__ -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -:sphinx_ok - - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\bqplot.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\bqplot.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "coverage" ( - %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage - if errorlevel 1 exit /b 1 - echo. - echo.Testing of coverage in the sources finished, look at the ^ -results in %BUILDDIR%/coverage/python.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/docs/migrate.md b/docs/migrate.md new file mode 100644 index 000000000..53f851205 --- /dev/null +++ b/docs/migrate.md @@ -0,0 +1,122 @@ +# Migration Guide + +## Migrate your code from bqplot 0.12 to 0.13 + +Starting from 0.13, bqplot has been split into multiple packages: + +- [bqscales](https://github.com/bqplot/bqscales): contains all the bqplot scales +- [bqplot-gl](https://github.com/bqplot/bqplot-gl): contains the WebGL-based marks (ScatterGL, LinesGL) +- [bqplot](https://github.com/bqplot/bqplot): the core bqplot package + +### bqscales imports + +For backward compatibility, **bqplot** depends on **bqscales** and exposes all the scales in its API. +Though this may be removed at some point, so you should update your imports: + +=== "0.12" + ```py hl_lines="1" + from bqplot as import LinearScale, Axis, Lines, Figure + import numpy as np + + x = np.linspace(-10, 10, 100) + y = np.sin(x) + + xs = LinearScale() + ys = LinearScale() + + xax = Axis(scale=xs, label="X") + yax = Axis(scale=ys, orientation="vertical", label="Y") + + line = Lines(x=x, y=y, scales={"x": xs, "y": ys}) + + fig = Figure(marks=[line], axes=[xax, yax], title="Line Chart") + + fig + ``` + +=== "0.13" + ```py hl_lines="1 2" + from bqscales import LinearScale + from bqplot as import Axis, Lines, Figure + import numpy as np + + x = np.linspace(-10, 10, 100) + y = np.sin(x) + + xs = LinearScale() + ys = LinearScale() + + xax = Axis(scale=xs, label="X") + yax = Axis(scale=ys, orientation="vertical", label="Y") + + line = Lines(x=x, y=y, scales={"x": xs, "y": ys}) + + fig = Figure(marks=[line], axes=[xax, yax], title="Line Chart") + + fig + ``` + +### bqplot-gl imports + +In order to use WebGL-based marks, you will need to install bqplot-gl: + +```bash + pip install bqplot-gl +``` + +You will then need to update your imports: + +=== "0.12" + ```py hl_lines="1" + from bqplot import LinearScale, ScatterGL, Axis, Figure + + import numpy as np + import pandas as pd + + n_points = 150_000 + + np.random.seed(0) + y = np.cumsum(np.random.randn(n_points)) + 100. + + sc_x = LinearScale() + sc_y = LinearScale() + + scatter = ScatterGL( + x=np.arange(len(y)), y=y, + default_size=1, + scales={'x': sc_x, 'y': sc_y} + ) + ax_x = Axis(scale=sc_x, label='Index') + ax_y = Axis(scale=sc_y, orientation='vertical', label='Points') + + fig = Figure(marks=[scatter], axes=[ax_x, ax_y], title='Scatter powered by WebGL') + fig + ``` + +=== "0.13" + ```py hl_lines="1 2" + from bqplot import LinearScale, Axis, Figure + from bqplot_gl import ScatterGL + + import numpy as np + import pandas as pd + + n_points = 150_000 + + np.random.seed(0) + y = np.cumsum(np.random.randn(n_points)) + 100. + + sc_x = LinearScale() + sc_y = LinearScale() + + scatter = ScatterGL( + x=np.arange(len(y)), y=y, + default_size=1, + scales={'x': sc_x, 'y': sc_y} + ) + ax_x = Axis(scale=sc_x, label='Index') + ax_y = Axis(scale=sc_y, orientation='vertical', label='Points') + + fig = Figure(marks=[scatter], axes=[ax_x, ax_y], title='Scatter powered by WebGL') + fig + ``` diff --git a/docs/mkdocs-environment.yml b/docs/mkdocs-environment.yml new file mode 100644 index 000000000..4ae45d1ad --- /dev/null +++ b/docs/mkdocs-environment.yml @@ -0,0 +1,14 @@ +name: mkdocs +channels: + - conda-forge +dependencies: + - python + - pip + - codespell + - pandas + - jupyter + - bqscales + - bqplot + - pip: + - mkdocs-material + - mkdocstrings[python] diff --git a/docs/source/api_documentation.rst b/docs/source/api_documentation.rst deleted file mode 100644 index dfd1cf8b8..000000000 --- a/docs/source/api_documentation.rst +++ /dev/null @@ -1,4 +0,0 @@ -API Reference Documentation -=========================== - -.. automodule:: bqplot diff --git a/docs/source/binder-logo.svg b/docs/source/binder-logo.svg deleted file mode 100644 index bd8e188ee..000000000 --- a/docs/source/binder-logo.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/source/conf.py b/docs/source/conf.py deleted file mode 100644 index 45d05e67e..000000000 --- a/docs/source/conf.py +++ /dev/null @@ -1,286 +0,0 @@ -# -*- coding: utf-8 -*- -# -# bqplot documentation build configuration file, created by -# sphinx-quickstart on Thu Oct 8 15:45:33 2015. -# -# NOTE: This file has been edited manually from the auto-generated one from -# sphinx. Do NOT delete and re-generate. If any changes from sphinx are -# needed, generate a scratch one and merge by hand any new fields needed. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('../../bqplot/')) - -# We load the bqplot release info into a dict by explicit execution -_release = {} -exec(compile(open('../../bqplot/_version.py').read(), '../../bqplot/_version.py', 'exec'), _release) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'sphinx.ext.autosummary', - 'sphinx.ext.viewcode', - 'sphinx.ext.napoleon', - 'nbsphinx', -] - -autosummary_generate = True - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -source_suffix = '.rst' - -# Add dev disclaimer. -if _release['version_info'][-1] == 'dev': - rst_prolog = """ - .. note:: - - This documentation is for a development version of bqplot. There may be - significant differences from the latest stable release. - - """ - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'bqplot' -copyright = u'2015, Bloomberg LP' -author = u'The BQplot Development Team' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '.'.join(map(str, _release['version_info'][:2])) -# The full version, including alpha/beta/rc tags. -release = _release['__version__'] - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -#html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'bqplotdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ('index', 'bqplot.tex', u'bqplot Documentation', - u'Bloomberg LP', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'bqplot', u'bqplot Documentation', - [u'Bloomberg LP'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'bqplot', u'bqplot Documentation', - u'Bloomberg LP', 'bqplot', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index 5508f08bd..000000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -============================ -bqplot: Plotting for Jupyter -============================ - -.. toctree:: - - introduction - usage - api_documentation diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst deleted file mode 100644 index 1d4148511..000000000 --- a/docs/source/introduction.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. _introduction: - -Introduction -============ - -bqplot is a Grammar of Graphics-based interactive plotting framework for the Jupyter notebook. - -.. image:: ../../wealth-of-nations.gif - -In bqplot, every single attribute of the plot is an interactive widget. This allows the user to integrate any plot with IPython widgets to create a complex and feature rich GUI from just a few simple lines of Python code. - -Goals ------ - - - provide a unified framework for 2-D visualizations with a pythonic API. - - provide a sensible API for adding user interactions (panning, zooming, selection, etc) - -Two APIs are provided - - - Users can build custom visualizations using the internal object model, which is inspired by the constructs of the Grammar of Graphics (figure, marks, axes, scales), and enrich their visualization with our Interaction Layer. - - Or they can use the context-based API similar to Matplotlib's pyplot, which provides sensible default choices for most parameters. - -Installation ------------- - -Using pip: - -.. code:: bash - - pip install bqplot - jupyter nbextension enable --py --sys-prefix bqplot # can be skipped for notebook version 5.3 and above - -Using conda - -.. code:: bash - - conda install -c conda-forge bqplot diff --git a/docs/source/usage.ipynb b/docs/source/usage.ipynb deleted file mode 100644 index 0d4439286..000000000 --- a/docs/source/usage.ipynb +++ /dev/null @@ -1,94 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Usage\n", - "\n", - "## Examples\n", - "\n", - "Using the pyplot API" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from bqplot import pyplot as plt\n", - "\n", - "plt.figure(1, title='Line Chart')\n", - "np.random.seed(0)\n", - "n = 200\n", - "x = np.linspace(0.0, 10.0, n)\n", - "y = np.cumsum(np.random.randn(n))\n", - "plt.plot(x, y)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the bqplot internal object model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from IPython.display import display\n", - "from bqplot import (\n", - "OrdinalScale, LinearScale, Bars, Lines, Axis, Figure\n", - ")\n", - "\n", - "size = 20\n", - "np.random.seed(0)\n", - "\n", - "x_data = np.arange(size)\n", - "\n", - "x_ord = OrdinalScale()\n", - "y_sc = LinearScale()\n", - "\n", - "bar = Bars(x=x_data, y=np.random.randn(2, size), scales={'x': x_ord, 'y':\n", - "y_sc}, type='stacked')\n", - "line = Lines(x=x_data, y=np.random.randn(size), scales={'x': x_ord, 'y': y_sc},\n", - " stroke_width=3, colors=['red'], display_legend=True, labels=['Line chart'])\n", - "\n", - "ax_x = Axis(scale=x_ord, grid_lines='solid', label='X')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f',\n", - " grid_lines='solid', label='Y')\n", - "\n", - "Figure(marks=[bar, line], axes=[ax_x, ax_y], title='API Example',\n", - " legend_location='bottom-right')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/usage/advanced/compound-widgets.md b/docs/usage/advanced/compound-widgets.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/advanced/compound-widgets.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/advanced/dashboards.md b/docs/usage/advanced/dashboards.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/advanced/dashboards.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/advanced/linking-ipywidgets.md b/docs/usage/advanced/linking-ipywidgets.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/advanced/linking-ipywidgets.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/axes.md b/docs/usage/axes.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/axes.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/figure.md b/docs/usage/figure.md new file mode 100644 index 000000000..2e9239e06 --- /dev/null +++ b/docs/usage/figure.md @@ -0,0 +1,74 @@ +`Figure` is the canvas (SVG node) on which marks and axes are rendered. `Figure` extends [__DOMWidget__](https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20Custom.html?highlight=DomWidget#DOMWidget,-ValueWidget-and-Widget), so it can be directly rendered in the output cell of the notebook. `Figure` contains the `axes`, `marks` and optionally `interaction` objects (selectors, pan-zoom etc.) + +`Figure` API documentation can be accessed using the following links: + +1. [Figure](../api/figure.md) class +2. [`figure`](../api/pyplot.md#bqplot.pyplot.figure) method in `pyplot` + +In this section, we'll be focusing on pyplot API to create and configure `figure` objects. + +Figure can be created in `pyplot` like so: + +```py +import bqplot.pyplot as plt + +fig = plt.figure() +``` + +### Attributes + +#### [Style Attributes](../api/figure.md#bqplot.Figure--style-attributes) +Style attributes can be used for styling the figure (title, backgrounds, legends) etc. +#### [Layout Attributes](../api/figure.md#bqplot.Figure--layout-attributes) +Layout attributes can be used for controlling the dimensions and margins + +### Code Examples +Let's look a few examples to configure the figure using the `pyplot` API: + +#### Width And Height +Set the `height` and `width` of the figure by passing in a `layout` attribute like so: +```py +fig = plt.figure(layout=dict(height="500px", width="1000px")) +``` + +!!! warning + Note that `width` and `height` have to be set in pixels (e.g. "500px" instead of 500) + + +One more approach is shown below: + +```py +fig = plt.figure() + +fig.layout.width = "1000px" +fig.layout.height = "500px" +``` + +#### Background Styling +Since bqplot figures are SVG nodes any CSS styles applicable to SVG can be passed as a `dict` to the `background_style` attribute, like so: + +``` +background_style = {"stroke": "blue", + "fill": "red", + "fill-opacity": .3} +fig = plt.figure(title="Figure", background_style=background_style) +fig +``` + +#### Figure Margin +Margins surrounding the figure can be set (during construction only) using the `fig_margin` attribute. Figure margins can be used to allow space for items like long tick labels, color bar (when using color scales) etc. + +```py +fig_margin = dict(top=60, bottom=100, left=60, right=60) # (1)! +fig = plt.figure(fig_margin=fig_margin) +fig +``` + +1. Note that __all__ the four dimensions must be set in the dict + +![plot](../assets/images/figure-image1.png) + +As you can see in the image above the grey region is the figure margin. + +#### Interactions +Refer to the [Interaction](interactions/index.md) document for more details diff --git a/docs/usage/interactions/hand-draw.md b/docs/usage/interactions/hand-draw.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/interactions/hand-draw.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/interactions/mark-interactions.md b/docs/usage/interactions/mark-interactions.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/interactions/mark-interactions.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/interactions/panzoom.md b/docs/usage/interactions/panzoom.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/interactions/panzoom.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/interactions/selectors.md b/docs/usage/interactions/selectors.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/interactions/selectors.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/marks/bars.md b/docs/usage/marks/bars.md new file mode 100644 index 000000000..adef6ac12 --- /dev/null +++ b/docs/usage/marks/bars.md @@ -0,0 +1,226 @@ +The `Bars` mark provides the following features: + +* Plot a single or multiple arrays of y-values for a single array of __categorical__ x-values +* Support for horizontal bar charts +* Support for stacked and grouped bar charts + +### Attributes + +#### [Data Attributes](../../api/marks.md#bqplot.marks.Bars--data-attributes) + +#### [Style Attributes](../../api/marks.md#bqplot.marks.Bars--style-attributes) + + +Let's now look at examples of constructing bar charts using the `pyplot` API + +### pyplot +The function for plotting bar charts in `pyplot` is [`plt.bar`](../../api/pyplot.md#bqplot.pyplot.bar). It takes two main arguments: + +1. __x__ vector of x values +2. __y__ vector of y values (_For stacked/grouped bar charts `y` should be a list of arrays or a 2-d array_) + +For further customization, any of the attributes above can be passed as keyword args. + +### Code Examples +#### Simple Bar Chart +```py hl_lines="9" +import bqplot.pyplot as plt +import numpy as np + +fig = plt.figure(title="Bar Chart") + +x = list("ABCDE") +y = np.random.rand(5) + +bar = plt.bar(x, y) + +fig +``` +![plot](../../assets/images/bars-image1.png) +!!! tip + To render bar charts professionally it's better to disable `x` grid lines. Also set the opacity to be slightly less than 1 to make the bars a bit transparent, like so: + ```py + axes_options = {"x": {"grid_lines": "none"}} + bar = plt.bar(x, y, axes_options=axes_options, opacities=[.9]) + ``` + + +Attributes can be updated in separate notebook cells or in callbacks when an event is triggered! +```py +# update the line color and opacity +bar.colors = ["red"] +bar.opacities = [.5] +``` +#### Bar Spacing +Use the `padding` attribute (between 0 and 1) to increase or decrease the spacing between bars. +`padding` values close to 0 means almost no padding between bars, thereby making the bars fat! + +=== "During Construction" + ```py + bar = plt.bar(x, y, padding=0.3) + ``` + +=== "Update After Construction" + ```py + bar.padding = 0.3 + ``` + +#### Horizontal Bar Chart +Use [`plt.barh`](../../api/pyplot.md#bqplot.pyplot.barh) method to create a horizontal bar chart, like so: + +```py hl_lines="7" +fig = plt.figure(title="Horizontal Bar Chart") + +x = list("ABCDE") +y = np.random.rand(5) + +axes_options = {"x": {"grid_lines": "none"}} +bar = plt.barh(x, y, colors=["salmon"], axes_options=axes_options, opacities=[.9]) + +fig +``` +![plot](../../assets/images/bars-image2.png) + +#### Stacked/Grouped Bar Charts +Use the `type` attribute for stacked/grouped bar charts, like so: + +=== "Stacked" + + ```py hl_lines="5" + fig = plt.figure(title="Stacked Bar Chart") + x = list("ABCDE") + y = np.random.rand(3, 5) # 2d array + + stacked_bar = plt.bar(x, y, type="stacked", padding=.4, + colors=["orangered", "steelblue", "limegreen"]) + + fig + ``` + ![plot](../../assets/images/bars-image3.png) + +=== "Grouped" + + ```py hl_lines="5" + fig = plt.figure(title="Stacked Bar Chart") + x = list("ABCDE") + y = np.random.rand(3, 5) # 2d array + + grouped_bar = plt.bar(x, y, type="grouped", padding=.4, + colors=["orangered", "steelblue", "limegreen"]) + + fig + ``` + ![plot](../../assets/images/bars-image4.png) + + +#### Using `color` data attribute +Using `color` __data__ attribute we can encode a third dimension (apart from `x` and `y`) using color scales, like so: + +```py hl_lines="3 4 10 12" +import bqplot as bq + +# provide enough bottom margin to accommodate the color bar +fig = plt.figure(fig_margin = dict(top=50, bottom=80, left=50, right=50)) + +x = list("ABCDE") +y, color = np.random.rand(2, 5) + +# add a 'reds' scheme color scale +plt.scales(scales={"color": bq.ColorScale(scheme="Reds", min=0, max=1)}) + +bar = plt.bar(x, y, color=color, padding=0.2) + +fig +``` +![plot](../../assets/images/bars-image5.png) + +#### Interactions +##### Tooltips +Tooltips can be added by setting the `tooltip` attribute to a [Tooltip](../../api/tooltip.md) instance + +```py hl_lines="6 7" +import bqplot as bq + +fig = plt.figure() +x = np.arange(1, 11) +y = np.random.rand(10) +tooltip = bq.Tooltip(fields=["x", "y"], formats=["", ".2f"]) +bar = plt.bar(x, y, tooltip=tooltip) +fig +``` + +##### Selecting Bars +Discrete bar(s) can be selected via mouse clicks or a continuous set of bars can be selected by using __Selectors__. +The `selected` attribute of the bar mark will be __automatically__ updated in both the cases. Note that `selected` attribute is a `list` of __indices__ of the selected bars! + +!!! tip + Use the `selected_style` and `unselected_style` attributes (which are dicts) to apply CSS styling for selected and un-selected bars respectively + +Callbacks can be registered on changes to `selected` attribute. + +=== "Discrete Selection" + To select discrete set of bars set `interactions = {"click": "select"}`. Single bar can be selected by a mouse click. Mouse click + `command` key (mac) (or `control` key (windows)) lets you select multiple bars. + ```py hl_lines="5 6" + fig = plt.figure() + x = list("ABCDEFGHIJ") + y = np.random.rand(10) + bar = plt.bar(x, y, + interactions={"click": "select"}, + unselected_style={"opacity": "0.5"}) + + # callback to invoke when points are selected + def on_select(*args): + selected_indices = bar.selected + if selected_indices is not None: + selected_x = bar.x[selected_indices] + selected_y = bar.y[selected_indices] + + # do something with selected data + print(selected_x, selected_y) + + # register callback on selected attribute + bar.observe(on_select, names=["selected"]) + + fig + ``` + +=== "Continuous Selection" + Use [BrushIntervalSelector](../../api/interactions.md#bqplot.interacts.BrushIntervalSelector) to select bars in a continuous rectangular range. + Check [Selectors](../interactions/selectors.md) page for more details on how to setup and use various selectors. + + Let's look at an example. + + + ```py hl_lines="9 10" + import bqplot as bq + + fig = plt.figure() + x = list("ABCDEFGHIJ") + y = np.random.rand(10) + bar = plt.bar(x, y, unselected_style={"opacity": "0.3"}) + xs = bar.scales["x"] + + selector = bq.interacts.BrushIntervalSelector(scale=xs, marks=[bar]) + fig.interaction = selector + + # callback to invoke when points are selected + def on_select(*args): + selected_indices = bar.selected + if selected_indices is not None: + selected_x = bar.x[selected_indices] + selected_y = bar.y[selected_indices] + + # do something with selected data + + # register callback on selected attribute + bar.observe(on_select, names=["selected"]) + + fig + ``` + +For an advanced real world example of slicing datasets using bar charts, checkout the [Logs Analytics](https://github.com/bqplot/bqplot-gallery/blob/main/notebooks/logs_analytics/logs_analytics.ipynb) dashboard in [`bqplot-gallery`](https://github.com/bqplot/bqplot-gallery). +### Example Notebooks +For detailed examples of bar plots, refer to the following example notebooks + +1. [pyplot](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Pyplot/Bars.ipynb) +2. [Object Model](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/Bars.ipynb) \ No newline at end of file diff --git a/docs/usage/marks/gridheatmap.md b/docs/usage/marks/gridheatmap.md new file mode 100644 index 000000000..31eff6da5 --- /dev/null +++ b/docs/usage/marks/gridheatmap.md @@ -0,0 +1,169 @@ +The `GridHeatMap` mark provides the following features: + +* Plot a single 2d array of color values for a single array x-values and y-values + +### Attributes + +#### [Data Attributes](../../api/marks.md#bqplot.marks.GridHeatMap--data-attributes) + +#### [Style Attributes](../../api/marks.md#bqplot.marks.GridHeatMap--style-attributes) + + +Let's now look at examples of constructing grid heat maps using the `pyplot` API + +### pyplot +The function for plotting gridheatmap charts in `pyplot` is [`plt.gridheatmap`](../../api/pyplot.md#bqplot.pyplot.gridheatmap). It takes two main arguments: + +1. __color__ vector of color values +1. __row__ vector of labels for rows of the data +2. __column__ vector of labels for the columns of the data + +For further customization, any of the attributes above can be passed as keyword args. + +### Code Examples +#### Simple Grid Heat Map +```py hl_lines="9" +import bqplot.pyplot as plt +import numpy as np + +data = np.random.randn(10, 10) +row = list("ABCDEFGHIJ") +column = np.arange(10) + +fig = plt.figure(title="Grid Heat Map", padding_y=0) +grid_map = plt.gridheatmap(color=data, row=row, column=column) +fig +``` +![plot](../../assets/images/gridheatmap-image1.png) + +Attributes can be updated in separate notebook cells or in callbacks when an event is triggered! +```py +# update the line color and opacity +grid_map.opacity = 0.3 +``` + +#### Cell Text Values +Often colors might obscure the values of each cell in the map. To avoid confusion, we can plot the explicit numeric values over each cell. Any CSS styles applicable to text can be passed as a `dict` to the `font_style` attribute to style the text. + +=== "During Construction" + ```py + grid_map = plt.gridheatmap( + color=data, + row=row, + column=column, + display_format=".2f", + font_style={"font-size": "16px", "fill": "black", "font-weight": "bold"} + ) + ``` + +=== "Update After Construction" + ```py + grid_map.display_format = ".2f" + grid_map.font_style = { + "font-size": "16px", + "fill": "black", + "font-weight": "bold" + } + ``` +![plot](../../assets/images/gridheatmap-image2.png) + +#### Non-Uniform Cells +Grid Heat Maps will adjust to any scalar non-uniform inputs in either the column or row arguments. For example, if we have an uneven grid where certain cells vary in size, Grid Heat Maps will reflect this size on the plot as shown below. + +```py +row = np.arange(10) +row[5:] = np.arange(6, 11) +column = np.arange(10) +column[7:] = np.arange(8, 11) + +fig = plt.figure(title="Non-Uniform Cells", + padding_y=0) + +grid_map = plt.gridheatmap(color=data, + row=row, + column=column) +fig +``` +![plot](../../assets/images/gridheatmap-image3.png) + + +#### Alternative Color Schemes +By adjusting the scales for the color values used in the heatmap, we can change the plot to use any color scheme we desire. +Using `color` __data__ attribute we can encode a third dimension (apart from `x` and `y`) using color scales, like so: + +```py +import bqplot as bq + +fig = plt.figure(title='Alternative Colors', padding_y=0) +grid_map = plt.gridheatmap( + color=data, + row=row, + column=column, + scales={"color": bq.ColorScale(scheme="Blues")} +) + +fig +``` +![plot](../../assets/images/gridheatmap-image4.png) + +#### Interactions +##### Tooltips +Tooltips can be added by setting the `tooltip` attribute to a [Tooltip](../../api/tooltip.md) instance + +```py +import bqplot as bq + +row = list("ABCDEFGHIJ") +column = np.arange(10) +tooltip = bq.Tooltip(fields=["row", "column", "color"], + formats=["", ".2f", ".2f"]) + +fig = plt.figure(title="Tooltip", padding_y=0.0) +grid_map = plt.gridheatmap( + data, + row=row, + column=column, + tooltip=tooltip +) +fig +``` + +##### Selecting Cells +Discrete cell(s) can be selected via mouse clicks. The `selected` attribute of the gridheatmap mark will be __automatically__ updated. Note that `selected` attribute is a `list` of __indices__ of the rows and columns for the selected cells! + +!!! tip + Use the `selected_style` and `unselected_style` attributes (which are dicts) to apply CSS styling for selected and un-selected cells respectively + +Callbacks can be registered on changes to `selected` attribute. To select discrete set of cells set `interactions = {"click": "select"}`. Single cells can be selected by a mouse click. Mouse click + `command` key (mac) (or `control` key (windows)) lets you select multiple cells. + ```py + fig = plt.figure(title="Cell Selection", padding_y=0) + row = list("ABCDEFGHIJ") + column = np.arange(10) + + grid_map = plt.gridheatmap( + data, + row=row, + column=column, + interactions={"click": "select"}, + unselected_style={"opacity": "0.5"} + ) + + # callback to invoke when cells are selected + def on_select(*args): + selected_indices = grid_map.selected + + # do something with selected data + print(selected_indices) + + # register callback on selected attribute + grid_map.observe(on_select, names=["selected"]) + + fig + ``` + ![plot](../../assets/images/gridheatmap-image5.png) + +### Example Notebooks +For detailed examples of gridheatmap plots, refer to the following example notebooks + +1. [pyplot](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Pyplot/GridHeatMap.ipynb) +2. [Object Model](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/GridHeatMap.ipynb) \ No newline at end of file diff --git a/docs/usage/marks/heatmap.md b/docs/usage/marks/heatmap.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/marks/heatmap.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/marks/index.md b/docs/usage/marks/index.md new file mode 100644 index 000000000..94f7d6cfc --- /dev/null +++ b/docs/usage/marks/index.md @@ -0,0 +1,34 @@ +__Marks__ are the core plotting components (e.g. lines, bars, pie, scatter) etc. All `Marks` extend the [`Mark`](../../api/marks/#bqplot.marks.Mark) class. +__Marks__ take one or more _data_ attributes and _style_ attributes (styling, colors etc.). Most of these attributes are eventful (instances of __traitlets__). + +For each data attribute a corresponding [`Scale`](../../api/scales.md) object needs to passed when constructing `Mark` objects, like so: + +```py title="Lines mark using Object Model" +import bqplot as bq +import numpy as np + +# data attributes +x = np.linspace(-10, 10, 100) +y = np.sin(x) + +# scales for each data attribute +xs = bq.LinearScale() +ys = bq.LinearScale() + +line = bq.Lines(x, y, scales={"x": xs, "y": ys}) +``` + +A preferred approach is to use [__pyplot__](../pyplot.md) which sets meaningful defaults when constructing marks. __Most of the time you don't need to create scales explicitly__. Let's look at an example: + +```py title="Lines mark using pyplot" +import bqplot as bq +import numpy as np + +# data attributes +x = np.linspace(-10, 10, 100) +y = np.sin(x) + +line = plt.plot(x, y) +``` + +Take a look at specific mark documents for more details on customizing/rendering various marks in `bqplot` \ No newline at end of file diff --git a/docs/usage/marks/label.md b/docs/usage/marks/label.md new file mode 100644 index 000000000..f856c5beb --- /dev/null +++ b/docs/usage/marks/label.md @@ -0,0 +1,103 @@ +The `Label` mark provides the following features: + +* Plot a single or multiple labels for an array of x-values and y-values + +### Attributes + +#### [Data Attributes](../../api/marks.md#bqplot.marks.Label--data-attributes) + +#### [Style Attributes](../../api/marks.md#bqplot.marks.Label--style-attributes) + + +Let's now look at examples of adding labels using the `pyplot` API + +### pyplot +The function for plotting labels in `pyplot` is [`plt.label`](../../api/pyplot.md#bqplot.pyplot.label). It takes three main arguments: + +1. __text__ vector of text label values +2. __x__ vector of x values representing the x coordinates for the labels +3. __y__ vector of y values representing the y coordinates for the labels + +For further customization, any of the attributes above can be passed as keyword args. + +### Code Examples +#### Simple Label +```py +import numpy as np +import bqplot.pyplot as plt + +fig = plt.figure(title="Basic Label Example") +x = np.linspace(0, 2 * np.pi) +y = np.sin(x) + +line = plt.plot(x, y) +label = plt.label( + text=["Max", "Min"], + x=[.5 * np.pi, 1.5 * np.pi], + y=[1, -1] +) +fig +``` +![plot](../../assets/images/label-image1.png) +!!! tip + To render labels professionally it's better to offset the label to avoid obscuring the true graph below. To do so, set the `x_offset` and `y_offset` attributes (which accepts values in pixels), like so: + ```py + label.x_offset = 10 + label.y_offset = 10 + ``` + +Attributes can also be updated in separate notebook cells or in callbacks when an event is triggered! +```py +# update the label color +label.colors = ['red', 'blue'] +``` + +#### Figure Coordinates +Use the coordinates relative to the figure to more easily plot labels for important features. +```py +fig = plt.figure() +y = np.cumsum(np.random.randn(100)) +line = plt.plot(np.arange(y.size), y_data) +label = plt.label( + ["Halfway Point"], + default_size=26, + font_weight="bolder", + colors=["orange"] +) + +label.x = [0.5] +label.y = [0.5] +``` +![plot](../../assets/images/label-image2.png) + +Further, we can use values expressed in the units of the data. For example, if we consider a time series, we might want to label a specific date. Rather than calculating the position of the data with respect to the figure, we can simply pass in the date to the label function. +```py +fig = plt.figure() +y = pd.Series( + np.cumsum(np.random.randn(150)) + 100, + name="Time Series", + index=pd.date_range(start="01-01-2007", periods=150), +) + +lines = plt.plot(y.index, y) +label = plt.label(["Special Day"], + x=[np.datetime64("2007-02-14")], + colors=["orange"]) + +labels.y = [0.5] +fig +``` +![plot](../../assets/images/label-image3.png) + +#### Interactions +##### Movable Labels +Labels can be dynamically moved in the figure by enabling the `enable_move` flag attribute as shown below: +``` +labels.enable_move = True +``` + +### Example Notebooks +For detailed examples of bar plots, refer to the following example notebooks + +1. [pyplot](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Pyplot/Label.ipynb) +2. [Object Model](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/Label.ipynb) diff --git a/docs/usage/marks/lines.md b/docs/usage/marks/lines.md new file mode 100644 index 000000000..69f3368c2 --- /dev/null +++ b/docs/usage/marks/lines.md @@ -0,0 +1,218 @@ +The Lines mark provides the following features: + +* Plot a single or multiple arrays of y-values for a single or multiple arrays of x-values +* Style the line mark in different ways, by setting different attributes such as the colors, line_style, markers, stroke_width etc. +* Specify a marker at each point passed to the line. The marker can be a shape which is at the data points between which the line is interpolated and can be set through the `marker` attribute +* Fill lines with colors (in-between or below) to create __area__ charts + +### Attributes + +#### [Data Attributes](../../../api/marks/#bqplot.marks.Lines--data-attributes) + +#### [Style Attributes](../../../api/marks/#bqplot.marks.Lines--style-attributes) +!!! tip "Note" + Lines are implemented as __multi-line__ charts by default. Hence, style attributes like `colors`, `opacities` etc. are lists not strings! + +### Line Styling +Following line styling options are supported: + +* `colors`: color the line with a specific color. Note that `colors` is a list which supports multi-line charts by default! +* `line_style`: Following styling options are supported: {__solid__, __dashed__, __dotted__, __dash_dotted__} +* `marker`: Following marker options are supported: {__circle__, __cross__, __diamond__, __square__, __triangle-down__, __triangle-up__, __arrow__, __rectangle__, __ellipse__, __plus__, __crosshair__, __point__} + +Let's now look at examples of constructing lines using `pyplot` API + +### pyplot +The function for plotting lines is `pyplot` is `plt.plot`. It takes three arguments: + +1. __x__ vector of x values +2. __y__ vector of y values. For multi-line chart `y` should be a list of arrays or a 2-d array +3. __marker_str__ _matplotlib_ style [marker strings](#marker-strings) for styling the lines + +For further customization, any of the attributes above can be passed as keyword args. + +### Code Examples +#### Simple Line Chart +```py +import bqplot.pyplot as plt +import numpy as np + +fig = plt.figure() + +x = np.arange(-10, 10, .1) +y = np.sin(x) +line = plt.plot(x, y) +fig +``` +![plot](../../assets/images/lines-image1.png) + + +Attributes can be updated in separate notebook cells or in callbacks when an event is triggered! +```py +# update the line color and opacity +line.colors = ["red"] +line.opacities = [.5] +``` +!!! tip "In Place Updates" + The output cell containing the chart will be automatically updated whenever the figure or mark attributes are updated! The figure or marks should __never__ be recreated! + +#### Multi Line Chart +To generate a multi-line chart `y` should be a __list__ of arrays or a 2d numpy array. +```py hl_lines="7" +import bqplot.pyplot as plt +import numpy as np + +fig = plt.figure() + +x = np.arange(10) +y = [x ** 2, x ** 2 + 5 * x] +line = plt.plot(x, y) +fig +``` +![plot](../../assets/images/lines-image2.png) + +#### Time Series +If the dates are of type `numpy.datetime64` then `pyplot` automatically infers a date scale for the `x` attribute. Otherwise a `DateScale` need to be explicitly specified using the `plt.scales` function + +```py title="Time Series" hl_lines="12" +import bqplot as bq +import pandas as pd + +import bqplot.pyplot as plt +import numpy as np + +x = pd.date_range(start="2022-01-01", periods=100) +y = np.random.randn(100).cumsum() + +fig = plt.figure(title="Time Series") +# create a date scale for x (not needed if dates are numpy.datetime64) +plt.scales(scales={"x": bq.DateScale()}) +time_series_line = plt.plot(x, y, "r", stroke_width=1, + fill="bottom", # (1)! + fill_colors=["red"], + fill_opacities=[.4]) +fig +``` + +1. Adds a __fill__ below the line + +![plot](../../assets/images/lines-image3.png) + + +#### Marker Strings +`pyplot` supports the following marker strings a la `matplotlib`. Marker strings can be passed as a __third argument__ in `plt.plot` function. +Following codes are supported: + +##### Color + +| **Code** | **Value** | +|--|--| +|__b__|blue| +|__g__|green| +|__r__|red| +|__c__|cyan| +|__m__|magenta| +|__y__|yellow| +|__k__|black| + +##### Line Style +| **Code** | **Value** | +|--|--| +|__:__|dotted| +|__-.__|dash_dotted| +|__--__|dashed| +|__-__|solid| + + +##### Marker +| **Code** | **Value** | +|--|--| +|__o__|circle| +|__v__|triangle-down| +|__^__|triangle-up| +|__s__|square| +|__d__|diamond| +|__+__|+| +|__p__|cross| +|__x__|plus| +|__.__|crosshair| + +To create a marker string you can combine the one or more of the the three types of codes above in any order, like so: + +Let's look at a code example: +```py hl_lines="4" +fig = plt.figure() +x = np.arange(10) +y = 5 * x + 6 +styled_line = plt.plot(x, y, "ms:") # (1)! +fig +``` + +1. Magenta dotted line with a square marker + +![plot](../../assets/images/lines-image4.png) + +!!! tip "Few more examples of marker strings" + * __ms__ magenta line with square marker + * __yo__ yellow line with circle marker + * __--__ dashed line + * __-.d__ dash-dotted line with diamond marker + * __g+:__ green dotted line with plus marker + +#### Legends +To display legends you need to set the following attributes of `plt.plot` function: + +1. `labels` +2. `display_legend` + +Let's look an example: +```py hl_lines="7 8" +fig = plt.figure(title="Random Walks") +x = np.arange(100) +# three random walks +y = np.random.randn(3, 100).cumsum(axis=1) +lines = plt.plot( + x, y, + labels=["Line1", "Line2", "Line 3"], + display_legend=True +) +fig +``` +![plot](../../assets/images/lines-image5.png) + + +!!! tip "Legend Location" + Location of the legend can be configured by setting the attribute `legend_location` in the `figure` constructor, like so: + ```py + fig = plt.figure(legend_location="top-left") + ``` +#### Area Charts +Area charts can be constructed from line charts by passing in the following attributes: + +* `fill` +* `fill_color` +* `fill_opacities` + +```py hl_lines="12 13" +import bqplot as bq +import numpy as np + +fig = plt.figure(title="Stacked Area Chart") +x = np.arange(100) +y1 = np.random.randn(100).cumsum() + 10 +y2 = y1 + np.random.rand(100) * 5 +y3 = y2 + np.random.rand(100) * 5 +y4 = y3 + np.random.rand(100) * 5 + +lines = plt.plot(x, [y1, y2, y3, y4], stroke_width=0, + fill="between", + fill_opacities=[.8] * 4) +fig +``` +![plot](../../assets/images/lines-image6.png) + +### Example Notebooks +For detailed examples of line plots, refer to the following example notebooks + +1. [pyplot](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Pyplot/Lines.ipynb) +2. [Object Model](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/Lines.ipynb) \ No newline at end of file diff --git a/docs/usage/marks/map.md b/docs/usage/marks/map.md new file mode 100644 index 000000000..0bee781d6 --- /dev/null +++ b/docs/usage/marks/map.md @@ -0,0 +1,147 @@ +The `Map` mark provides the following features: + +* Plot a geographical map using various [geo scales/projections](../../api/scales.md#bqscales.Orthographic) +* Use [ColorScale](../../api/scales.md#bqscales.ColorScale) to create choropleths +* Support interactions like tooltips, selections etc. + +### Attributes + +#### [Data Attributes](../../api/marks.md#bqplot.marks.Map--data-attributes) + +#### [Style Attributes](../../api/marks.md#bqplot.marks.Map--style-attributes) + + +Let's look at examples of constructing maps using the `pyplot` API + +### pyplot +The function for plotting bar charts in `pyplot` is [`plt.geo`](../../api/pyplot.md#bqplot.pyplot.geo). It takes one main argument: + +1. __map_data__ Name of the map or json file required for the map data + +Following map data are supported by default. For custom map data, a geo json file must be provided + +| Map Data String| Description | +|---------------------|--------------------------| +| `WorldMap` | World Map | +| `USStatesMap` | US States | +| `USCountiesMap` | US Counties | +| `EuropeMap` | Europe | + +!!! tip + Panzoom is enabled by default. Click and drag on the white region surrounding the map to pan and use the mouse to zoom in and out. Double click on the white region to reset the map. + +### Code Examples +#### World Map +```py hl_lines="4 5" +import bqplot.pyplot as plt + +fig = plt.figure(title="World Map") +plt.geo(map_data="WorldMap", + colors={"default_color": "steelblue"}) +fig +``` +!!! Tip + Style attribute `colors` represents color of the items of the map when no color data is passed. + The dictionary should be indexed by the __id of the element__ and have the corresponding colors as values. + The key `default_color` controls the items for which no color is specified. + +![plot](../../assets/images/maps-image1.png) + +#### Choropleth +To render a choropleth, `color` data attribute needs to be passed. __Note that `color` must be a dictionary whose keys are element ids__ + +```py hl_lines="3 6" +fig = plt.figure(title="Choropleth") + +plt.scales(scales={"color": bq.ColorScale(scheme="Greens")}) +chloro_map = plt.geo( + map_data="WorldMap", + color={643: 105, 4: 21, 398: 23, 156: 42, 124: 78, 76: 98}, + colors={"default_color": "Grey"}, +) +fig +``` +![plot](../../assets/images/maps-image2.png) + +#### US Map +```py hl_lines="2" +fig = plt.figure(title="US States Map") +plt.scales(scales={"projection": bq.AlbersUSA()}) +states_map = plt.geo(map_data="USStatesMap", colors={"default_color": "steelblue"}) +fig +``` +![plot](../../assets/images/maps-image3.png) + + +#### Advanced Projections +Use [geo scale](../../api/scales.md#bqscales.Orthographic) to customize the projections, like so: + +```py hl_lines="4 5" +import bqplot as bq + +fig = plt.figure(title="Advanced World Map") +geo_scale = bq.Orthographic(scale_factor=375, center=[0, 25], rotate=(-50, 0)) +plt.scales(scales={"projection": geo_scale}) +map_mark = plt.geo( + map_data="WorldMap", + colors={682: "green", 356: "red", 643: "blue", "default_color": "orange"}, +) +fig +``` +![plot](../../assets/images/maps-image4.png) + + +#### Interactions +##### Tooltips +Tooltips can be added by setting the `tooltip` attribute to a [Tooltip](../../api/tooltip.md) instance + +```py hl_lines="2 5" +fig = plt.figure(title="Interactions") +tooltip = bq.Tooltip(fields=["id", "name"]) +map = plt.geo( + map_data="WorldMap", + tooltip=tooltip +) +fig +``` + +##### Selecting Map Element(s) +Map element(s) can be selected via mouse clicks. The `selected` attribute of the map mark will be __automatically__ updated. Note that `selected` attribute is a `list` of __ids__ of the selected elements. + +!!! tip + Use the `selected_style` and `unselected_style` attributes (which are dicts) to apply CSS styling for selected and un-selected elements respectively + +Callbacks can be registered on changes to `selected` attribute. + +To select elements set `interactions = {"click": "select"}`. Single element can be selected by a mouse click. Mouse click + `command` key (mac) (or `control` key (windows)) lets you select multiple elements. +```py hl_lines="6" +fig = plt.figure(title="World Map") +tooltip = bq.Tooltip(fields=["id", "name"]) +map = plt.geo( + map_data="WorldMap", + tooltip=tooltip, + interactions={"click": "select", "hover": "tooltip"}, # (1)! +) + +# callback to invoke when elements are selected +def on_select(*args): + selected_ids = map.selected + if selected_ids is not None: + # do something with selected elements + print(selected_ids) + +# register callback on selected attribute +map.observe(on_select, names=["selected"]) + +fig +``` + +1. We have enabled __both__ selections and tooltip here! + +For an advanced example of maps and choropleths, checkout the [Wealth Of Nations Choropleth](https://github.com/bqplot/bqplot-gallery/blob/main/notebooks/wealth_of_nations/choropleth.ipynb) dashboard in [`bqplot-gallery`](https://github.com/bqplot/bqplot-gallery). + +### Example Notebooks +For detailed examples of maps, refer to the following example notebooks + +1. [pyplot](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Pyplot/Map.ipynb) +2. [Object Model](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/Map.ipynb) \ No newline at end of file diff --git a/docs/usage/marks/market.md b/docs/usage/marks/market.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/marks/market.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/marks/pie.md b/docs/usage/marks/pie.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/marks/pie.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/marks/scatter.md b/docs/usage/marks/scatter.md new file mode 100644 index 000000000..d45acb1b8 --- /dev/null +++ b/docs/usage/marks/scatter.md @@ -0,0 +1,238 @@ + +The Scatter mark provides the following features: + +* Multi-dimensional scatter chart with with support for data attributes encoding `x`, `y`, `color`, `size` etc. +* Support for various marker types (circle, square, diamond etc.) +* Interactive updates with the ability to add new points by clicking on the chart, update points by moving the points etc. +* Filter data by using brush selectors + +### Attributes + +#### [Data Attributes](../../../api/marks/#bqplot.marks.Scatter--data-attributes) + +#### [Style Attributes](../../../api/marks/#bqplot.marks.Scatter--style-attributes) + +### pyplot +The function for plotting scatter charts in `pyplot` is [`plt.scatter`](../../api/pyplot.md#bqplot.pyplot.scatter). It takes two main arguments: + +1. __x__ 1d array of x values +2. __y__ 1d array of y values + +For further customization, any of the data/style attributes above can be passed as keyword arguments. + +### Code Examples +#### Simple Scatter Chart +```py hl_lines="7" +import bqplot.pyplot as plt +import numpy as np + +fig = plt.figure() + +x, y = np.random.rand(2, 20) +scatter = plt.scatter(x, y, stroke="black") +fig +``` +![plot](../../assets/images/scatter-image1.png) +!!! tip + Adding a black stroke around the dots renders them well + + +Attributes can be updated in separate notebook cells or in callbacks when an event is triggered! +```py +scatter.marker = "cross" # (1)! +scatter.fill = False # (2)! +``` + +1. make the marker `cross` +2. no fill inside the marker +!!! tip "In Place Updates" + The output cell containing the chart will be automatically updated whenever the figure or mark attributes are updated! The figure or marks should __never__ be recreated! + +#### Labels +Labels for dots can be added by using the `names` attribute + +```py hl_lines="5" +fig = plt.figure() + +x, y = np.random.rand(2, 10) +names = [f"dot{i+1}" for i in range(10)] +line = plt.scatter(x, y, colors=["red"], names=names, apply_clip=False) +plt.show() + +``` + +!!! tip + Setting the [Mark](../../api/marks.md) style attribute `apply_clip` to `False` prevents labels from getting clipped off the figure + +![plot](../../assets/images/scatter-image2.png) + +#### Multiple Dimensions +Multiple dimensions can be encoded in a scatter chart by using additional [data attributes](../../../api/marks/#bqplot.marks.Scatter--data-attributes) like `size`, `color` etc. + +Below is an example of a scatter plot of returns (dummy data) of two stocks with color encoding the chronology + +```py hl_lines="15 16 17 21" +import pandas as pd + +# prepare dummy returns data for two stocks +import pandas as pd + +# prepare dummy returns data for two stocks +dates = pd.date_range(start="2023-01-01", periods=30) +returns = np.random.randn(30, 2) * 0.01 +df = pd.DataFrame(returns, index=dates, columns=["Stock1", "Stock2"]) + +dates, returns1, returns2 = df.index, df["Stock1"], df["Stock2"] + +fig = plt.figure(fig_margin=dict(top=60, bottom=60, left=60, right=120)) # (1)! + +axes_options = { + "x": dict(label="Stock 1", tick_format=".0%"), + "y": dict(label="Stock 2", tick_format=".0%"), + "color": dict( # (2)! + tick_format="%b-%d", num_ticks=5, label="Date", + orientation="vertical", side="right" + ), +} +scatter = plt.scatter( + returns1, returns2, color=dates, + stroke="black", + axes_options=axes_options, +) +fig +``` + +1. Provide enough right margin to accommodate the color bar +2. Color bar attributes + +![plot](../../assets/images/scatter-image3.png) + +For a comprehensive example of encoding multi-dimensional data in a bubble chart, checkout the [Wealth Of Nations](https://github.com/bqplot/bqplot-gallery/blob/main/notebooks/wealth_of_nations/bubble_chart.ipynb) notebook in [`bqplot-gallery`](https://github.com/bqplot/bqplot-gallery). + + +#### Interactions +##### Tooltips +Tooltips can be added by setting the `tooltip` attribute to a [Tooltip](../../api/tooltip.md) instance + +```py hl_lines="5 7" +import bqplot as bq + +fig = plt.figure() +x, y = np.random.rand(2, 20) +tooltip = bq.Tooltip(fields=["x", "y"], formats=[".2f", ".2f"]) +scatter = plt.scatter(x, y, colors=["green"], stroke="black", + tooltip=tooltip) +fig +``` + +##### Adding/Moving points +New points can be added by clicking on the chart and existing points can be moved using a mouse pointer. `x` and `y` data attributes will be __automatically__ updated as new points are added or existing points are moved around! + +By implementing and registering callback functions we can achieve the desired behavior when points are added or updated. + +=== "Add points" + Set `interactions = {"click": "add"}` to add points on mouse clicks. `x` and `y` data attributes will be __automatically__ updated when new points are added! + ```py hl_lines="4" + fig = plt.figure() + x, y = np.random.rand(2, 20) + scatter = plt.scatter(x, y, colors=["green"], stroke="black", + interactions={"click": "add"}) + + # callback to invoke when new points are added + def on_add(*args): + pass + + # register callback on x and y changes + scatter.observe(on_add, names=["x", "y"]) + + fig + ``` +=== "Update points" + Set `enable_move=True` to move points. `x` and `y` data attributes will be __automatically__ updated as points are moved around! + ```py hl_lines="4" + fig = plt.figure() + x, y = np.random.rand(2, 20) + scatter = plt.scatter(x, y, colors=["green"], stroke="black", + enable_move=True) + + # callback to invoke when points are moved around + def on_move(*args): + pass + + # register callback on x and y changes + scatter.observe(on_move, names=["x", "y"]) + + fig + ``` +##### Selecting Points +Discrete points can be selected via mouse clicks or a continuous __region__ of points can be selected by using __Selectors__. +The `selected` attribute of scatter will be __automatically__ updated in both the cases. Note that `selected` attribute is a `list` of __indices__ of the selected points! + +!!! tip + Use the `selected_style` and `unselected_style` attributes (which are dicts) to apply CSS styling for selected and un-selected points respectively + + +Callbacks can be registered on changes to `selected` attribute. + +=== "Discrete Selection" + To select discrete set of points set `interactions = {"click": "select"}`. Single point can be selected by a mouse click. Mouse click + `command` key (mac) (or `control` key (windows)) lets you select multiple points. + ```py hl_lines="4 5" + fig = plt.figure() + x, y = np.random.rand(2, 20) + scatter = plt.scatter(x, y, colors=["green"], stroke="black", + interactions={"click": "select"}, + unselected_style={"opacity": "0.3"}) + + # callback to invoke when points are selected + def on_select(*args): + selected_indices = scatter.selected + if selected_indices is not None: + selected_x = scatter.x[selected_indices] + selected_y = scatter.y[selected_indices] + + # do something with selected data + + # register callback on selected attribute + scatter.observe(on_select, names=["selected"]) + + fig + ``` + +=== "Continuous Region Selection" + Use [BrushSelector](../../api/interactions.md#bqplot.interacts.BrushSelector) to select points in a rectangular region or a [Lasso Selector](../../api/interactions.md#bqplot.interacts.LassoSelector) + to select points in a closed free-form region. Check [Selectors](../interactions/selectors.md) page for more details on how to setup and use various selectors. + + Let's look at an example using a brush selector. + + ```py hl_lines="9 10" + import bqplot as bq + + fig = plt.figure() + x, y = np.random.rand(2, 20) + scatter = plt.scatter(x, y, colors=["green"], stroke="black", + unselected_style={"opacity": "0.3"}) + xs, ys = scatter.scales["x"], scatter.scales["y"] + + selector = bq.interacts.BrushSelector(x_scale=xs, y_scale=ys, marks=[scatter]) + fig.interaction = selector + + # callback to invoke when points are selected + def on_select(*args): + selected_indices = scatter.selected + if selected_indices is not None: + selected_x = scatter.x[selected_indices] + selected_y = scatter.y[selected_indices] + + # do something with selected data + + # register callback on selected attribute + scatter.observe(on_select, names=["selected"]) + + fig + ``` + +### Example Notebooks +For detailed examples of scatter plots, refer to the following example notebooks + +1. [pyplot](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Pyplot/Scatter.ipynb) +2. [Object Model](https://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/Scatter.ipynb) \ No newline at end of file diff --git a/docs/usage/object-model.md b/docs/usage/object-model.md new file mode 100644 index 000000000..0d12dd6cc --- /dev/null +++ b/docs/usage/object-model.md @@ -0,0 +1,108 @@ +`bqplot` is based on _Grammar of Graphics_ paradigm. The Object Model provides the user an object-oriented interface for building plots. This means the API is verbose but fully customizable. + +Following are the core components of the `Object Model`: + +1. [Scales](../api/scales.md) +2. [Marks](../api/marks.md) +3. [Axes](../api/axes.md) +4. [Figure](../api/figure.md) + + +The following are the steps to build a Figure in bqplot using the Object Model: + +1. Build the scales for `x` and `y` quantities using the `Scale` classes (Scales map the data into pixels in the figure) +2. Build the marks using the `Mark` classes. Marks represent the core plotting objects (lines, scatter, bars, pies etc.). Marks take the scale objects created in step 1 as arguments +3. Build the axes for `x` and `y` scales +4. Finally create a figure using `Figure` class. Figure takes marks and axes as inputs. +__Figure object is a instance of `DOMWidget` and can be rendered like any other jupyter widgets__ + +Let's look a few examples (`pyplot` usage available [here](pyplot.md#line-chart)): + +#### Line Chart +```py +# first, create two vectors x and y to plot using a Lines mark +import bqplot as bq +import numpy as np + +x = np.linspace(-10, 10, 100) +y = np.sin(x) + +# 1. Create the scales +xs = bq.LinearScale() +ys = bq.LinearScale() + +# 2. Create the axes for x and y +xax = bq.Axis(scale=xs, label="X") +yax = bq.Axis(scale=ys, orientation="vertical", label="Y") + +# 3. Create a Lines mark by passing in the scales +line = bq.Lines(x=x, y=y, scales={"x": xs, "y": ys}) + +# 4. Create a Figure object by assembling marks and axes +fig = bq.Figure(marks=[line], axes=[xax, yax], title="Line Chart") + +# 5. Render the figure using display or just as is +fig +``` +![plot](../assets/images/pyplot-image1.png) + +#### Bar Chart +For creating other marks (like scatter, pie, bars, etc.), only step 3 needs to be changed. Lets look a simple example to create a bar chart: +```py hl_lines="6 16" +# create two vectors x and y to plot a bar chart +x = list("ABCDE") +y = np.random.rand(5) + +# 1. Create the scales +xs = bq.OrdinalScale() # ordinal scale to represent categorical data +ys = bq.LinearScale() + +# 2. Create the axes for x and y +xax = bq.Axis(scale=xs, label="X", grid_lines="none") # no grid lines needed for x +yax = bq.Axis( + scale=ys, orientation="vertical", label="Y", tick_format=".0%" +) # note the use of tick_format to format ticks + +# 3. Create a Bars mark by passing in the scales +bar = bq.Bars(x=x, y=y, scales={"x": xs, "y": ys}, padding=0.5) + +# 4. Create a Figure object by assembling marks and axes +bq.Figure(marks=[bar], axes=[xax, yax], title="Bar Chart") +``` +![plot](../assets/images/pyplot-image2.png) + +#### Multiple Marks +Multiple marks can be rendered in a figure. It's as easy as passing a list of marks when constructing the `Figure` object! +```py hl_lines="23" +x = np.linspace(-10, 10, 25) +y = 3 * x + 5 +y_noise = y + 10 * np.random.randn(25) # add some random noise to y + +# 1. Create the scales +xs = bq.LinearScale() +ys = bq.LinearScale() + +# 2. Create the axes for x and y +xax = bq.Axis(scale=xs, label="X") +yax = bq.Axis(scale=ys, orientation="vertical", label="Y") + +# 3. Create a Lines and Scatter marks by passing in the scales +# additional attributes (stroke_width, colors etc.) can be passed as attributes +# to the mark objects as needed +line = bq.Lines(x=x, y=y, scales={"x": xs, "y": ys}, colors=["green"], stroke_width=3) +scatter = bq.Scatter( + x=x, y=y_noise, scales={"x": xs, "y": ys}, colors=["red"], stroke="black" +) + +# 4. Create a Figure object by assembling marks and axes +# pass both the marks (line and scatter) as a list to the marks attribute +bq.Figure(marks=[line, scatter], axes=[xax, yax], title="Scatter and Line") +``` +![plot](../assets/images/pyplot-image3.png) + +#### Summary + +__Object Model__ is a verbose but fully customizable object-oriented API for plotting. Lower level constructs like scales, axes etc. have to explicitly constructed. +For detailed usage refer to the [example notebooks](https://github.com/bqplot/bqplot/tree/master/examples/Marks/Object%20Model) using `Object Model`. + +__Object Model__ can be used to build reusable plotting widgets and widget libraries. More details can be found in [here] diff --git a/docs/usage/pyplot.md b/docs/usage/pyplot.md new file mode 100644 index 000000000..7578de6a1 --- /dev/null +++ b/docs/usage/pyplot.md @@ -0,0 +1,109 @@ +[`pyplot`](../api/pyplot.md) is a context based functional API offering meaningful defaults. It's a concise API and very similar to matplotlib's pyplot. __Users new to bqplot should use `pyplot` as a starting point__. + +Steps for building plots in `pyplot`: + +1. Create a figure object using `plt.figure` +* (Optional steps) + * Scales can be customized using `plt.scales` function (by default `LinearScale` instances are created for all data attributes) + * Axes options can customized by passing a dict to axes_options argument in the marks' functions +* Create marks using pyplot functions like `plt.plot`, `plt.bar`, `plt.scatter` etc. (All the marks created will be automatically added to the figure object created in step 1) +* Render the figure object using the following approaches: + * Using plt.show function which renders the figure in the current context along with toolbar for panzoom etc. + * Using `display` on the figure object created in step 1 (toolbar doesn't show up in this case) + +`pyplot` comes with many helper functions. A few are listed below: + +* `plt.xlim`: sets the domain bounds of the current __x__ scale +* `plt.ylim`: sets the domain bounds of the current __y__ scale +* `plt.grids`: shows/hides the axis grid lines +* `plt.xlabel`: sets the X-Axis label +* `plt.ylabel`: sets the Y-Axis label +* `plt.hline`: draws a horizontal line at a specified level +* `plt.vline`: draws a vertical line at a specified level + +Let's look at a few examples (`Object Model` usage available [here](object-model.md#line-chart)): + +#### Line Chart + +```py +import bqplot.pyplot as plt +import numpy as np + +# create data vectors x and y to plot using a Lines mark +x = np.linspace(-10, 10, 100) +y = np.sin(x) + +# 1. Create the figure object +fig = plt.figure(title="Line Chart") + +# 2. By default axes are created with basic defaults. If you want to customize the axes create +# a dict and pass it to axes_options argument in the marks +axes_opts = {"x": {"label": "X"}, "y": {"label": "Y"}} + +# 3. Create a Lines mark by calling plt.plot function +line = plt.plot( + x=x, y=y, axes_options=axes_opts +) # note that custom axes options are passed to the mark function + +# 4. Render the figure using plt.show() (displays toolbar as well) +plt.show() +``` +![plot](../assets/images/pyplot-image1.png) + +#### Bar Chart + +For creating other marks (like scatter, pie, bars, etc.), only step 3 needs to be changed. Lets look an example to create a bar chart: +```py hl_lines="15" +# first, create data vectors x and y to plot a bar chart +x = list("ABCDE") +y = np.random.rand(5) + +# 1. Create the figure object +fig = plt.figure(title="Bar Chart") + +# 2. Customize the axes options +axes_opts = { + "x": {"label": "X", "grid_lines": "none"}, + "y": {"label": "Y", "tick_format": ".0%"}, +} + +# 3. Create a Bars mark by calling plt.bar function +bar = plt.bar(x=x, y=y, padding=0.5, axes_options=axes_opts) + +# 4. directly display the figure object created in step 1 (note that the toolbar no longer shows up) +fig +``` +![plot](../assets/images/pyplot-image2.png) + +#### Multiple Marks + +Multiple marks can be rendered in the same figure. It's as easy as creating marks one after another. They'll all be added to the same figure! + +```py +# first, let's create two vectors x and y +x = np.linspace(-10, 10, 25) +y = 3 * x + 5 +y_noise = y + 10 * np.random.randn(25) # add some random noise to y + +# 1. Create the figure object +fig = plt.figure(title="Scatter and Line") + +# 3. Create line and scatter marks +# additional attributes (stroke_width, colors etc.) can be passed as attributes +# to the mark objects as needed +line = plt.plot(x=x, y=y, colors=["green"], stroke_width=3) +scatter = plt.scatter(x=x, y=y_noise, colors=["red"], stroke="black") + +# setting x and y axis labels using pyplot functions. Note that these functions +# should be called only after creating the marks +plt.xlabel("X") +plt.ylabel("Y") + +# 4. render the figure +fig +``` +![plot](../assets/images/pyplot-image3.png) + +#### Summary + +__pyplot__ is a simple and intuitive API. It's available for all the marks except MarketMap. It should be used in almost all the cases by default since it offers a concise API compared to the Object Model. For detailed usage refer to the [mark examples using pyplot](https://github.com/bqplot/bqplot/tree/master/examples/Marks/Pyplot) diff --git a/docs/usage/scales.md b/docs/usage/scales.md new file mode 100644 index 000000000..d4cfe06ca --- /dev/null +++ b/docs/usage/scales.md @@ -0,0 +1 @@ +# This docs does not exist yet! diff --git a/docs/usage/updating-plots.md b/docs/usage/updating-plots.md new file mode 100644 index 000000000..d5554ec76 --- /dev/null +++ b/docs/usage/updating-plots.md @@ -0,0 +1,68 @@ +In `bqplot` almost all the attributes of plotting widgets (Figure, Mark, Scale, Axis) are implemented as __traitlets__, so the plots are responsive to data updates. All you need to do is update the attributes __in place__ without having to recreate the `figure` and `mark` objects. + +__Updating the attributes of `figure` and `marks` automatically triggers a re-draw of the plots on the front-end.__ + +Let's look at an example: + +```py +import numpy as np +import bqplot.pyplot as plt + +x = np.linspace(-10, 10, 100) +y = np.sin(x) + +fig = plt.figure() +curve = plt.plot(x, y) +fig +``` + +#### Updating Single Data Attribute +Let's look at the correct (and incorrect) way of updating the plots: + +!!! success "Correct" + __Only__ update the `figure` and `mark` attributes like so: + ```py + curve.y = np.cos(x) + fig.title = "Cosine" + ``` +!!! failure "Incorrect" + __Do not__ create `figure` and `mark` objects again to update the plots! + ```py + fig = plt.figure(title="Cosine") + curve = plt.plot(x, np.cos(y)) + ``` + +#### Updating Multiple Data Attributes +We can update multiple attributes of the `mark` object simultaneously by using the `hold_sync` method like so. (This makes only one round trip from the python kernel to the front end) +!!! success "Efficient" + Only __one__ network trip + ```py + # use the hold_sync() context manager + with curve.hold_sync(): + curve.x = np.linspace(-20, 20, 200) + curve.y = np.cos(x) + ``` + +!!! failure "Inefficient" + Makes __two__ network trips + ```py + curve.x = np.linspace(-20, 20, 200) + curve.y = np.cos(x) + ``` + +#### Animations +We can enable __animated__ data updates by passing in `animation_duration` (in milliseconds) to the figure. Let's look at an example to update a scatter plot + +```py hl_lines="3" +x, y = np.random.rand(2, 10) + +fig = plt.figure(animation_duration=1000) # 1000 ms or 1s +scat = plt.scatter(x=x, y=y) +fig +``` + +```py +# update the scatter plot to use animations (1s duration) +with scat.hold_sync(): + scat.x, scat.y = np.random.rand(2, 10) +``` \ No newline at end of file diff --git a/examples/Advanced Plotting/Advanced Plotting.ipynb b/examples/Advanced Plotting/Advanced Plotting.ipynb index 833022adf..63aad634e 100644 --- a/examples/Advanced Plotting/Advanced Plotting.ipynb +++ b/examples/Advanced Plotting/Advanced Plotting.ipynb @@ -26,11 +26,11 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Multiple Marks')\n", + "fig = plt.figure(title=\"Multiple Marks\")\n", "\n", "# create multiple marks. they'll be added to the same figure\n", "bar_chart = plt.bar([1, 2, 3, 4, 5], [2, 9, 10, 40, 40])\n", - "line_chart = plt.plot([1, 2, 3, 4, 5], [10, 5, 30, 60, 20], 'rs-')\n", + "line_chart = plt.plot([1, 2, 3, 4, 5], [10, 5, 30, 60, 20], \"rs-\")\n", "\n", "fig" ] @@ -48,8 +48,8 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Histogram')\n", - "hist = plt.hist(sample=np.random.randn(100), bins=10, colors=['orange'])\n", + "fig = plt.figure(title=\"Histogram\")\n", + "hist = plt.hist(sample=np.random.randn(100), bins=10, colors=[\"orange\"])\n", "fig" ] }, @@ -59,7 +59,7 @@ "metadata": {}, "outputs": [], "source": [ - "x_axis = plt.axes()['sample']\n", + "x_axis = plt.axes()[\"sample\"]\n", "\n", "# Set the tick values to be the mid points of the bins\n", "x_axis.tick_values = hist.midpoints" @@ -78,7 +78,7 @@ "metadata": {}, "outputs": [], "source": [ - "dates = np.arange('2005-02', '2005-03', dtype='datetime64[D]')\n", + "dates = np.arange(\"2005-02\", \"2005-03\", dtype=\"datetime64[D]\")\n", "size = len(dates)\n", "prices = 100 + 5 * np.cumsum(np.random.randn(size))" ] @@ -90,10 +90,12 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "plt.scales(scales={'y': LogScale()})\n", - "axes_options = {'x': dict(label='Date', grid_lines='dashed', num_ticks=4),\n", - " 'y': dict(label='Log Price', tick_format='0.1f')}\n", - "logline = plt.plot(dates, prices, 'm', axes_options=axes_options)\n", + "plt.scales(scales={\"y\": LogScale()})\n", + "axes_options = {\n", + " \"x\": dict(label=\"Date\", grid_lines=\"dashed\", num_ticks=4),\n", + " \"y\": dict(label=\"Log Price\", tick_format=\"0.1f\"),\n", + "}\n", + "logline = plt.plot(dates, prices, \"m\", axes_options=axes_options)\n", "fig" ] }, @@ -111,7 +113,7 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(np.arange(100), np.random.randn(100).cumsum(), 'r')\n", + "line = plt.plot(np.arange(100), np.random.randn(100).cumsum(), \"r\")\n", "fig" ] }, @@ -122,8 +124,8 @@ "outputs": [], "source": [ "## changing the min/max od x scale\n", - "line.scales['x'].min = -10\n", - "line.scales['x'].max = 110" + "line.scales[\"x\"].min = -10\n", + "line.scales[\"x\"].max = 110" ] }, { @@ -142,8 +144,8 @@ "fig = plt.figure()\n", "x = np.arange(50)\n", "y = np.cumsum(np.random.randn(50) * 100.0)\n", - "line1 = plt.plot(x, y, 'b')\n", - "line2 = plt.plot(x, y * 2, 'r', preserve_domain={'y': True})\n", + "line1 = plt.plot(x, y, \"b\")\n", + "line2 = plt.plot(x, y * 2, \"r\", preserve_domain={\"y\": True})\n", "fig" ] }, @@ -153,7 +155,7 @@ "metadata": {}, "outputs": [], "source": [ - "line2.preserve_domain={}" + "line2.preserve_domain = {}" ] }, { @@ -173,9 +175,11 @@ "y = np.cumsum(np.random.randn(50) * 100.0)\n", "\n", "fig = plt.figure()\n", - "plt.scales(scales={'color': ColorScale(colors=['red', 'white', 'green'], mid=0.0)})\n", + "plt.scales(scales={\"color\": ColorScale(colors=[\"red\", \"white\", \"green\"], mid=0.0)})\n", "scat1 = plt.scatter(x, y, color=y)\n", - "scat2 = plt.scatter(x, y * 2, color=y * 2, preserve_domain={'color': True}, marker='cross')\n", + "scat2 = plt.scatter(\n", + " x, y * 2, color=y * 2, preserve_domain={\"color\": True}, marker=\"cross\"\n", + ")\n", "fig" ] }, @@ -196,8 +200,8 @@ "y = np.cumsum(np.random.randn(50) * 100.0)\n", "\n", "fig = plt.figure()\n", - "plt.scales(scales={'x': LinearScale(reverse=True)})\n", - "line = plt.plot(x, y, 'b')\n", + "plt.scales(scales={\"x\": LinearScale(reverse=True)})\n", + "line = plt.plot(x, y, \"b\")\n", "fig" ] }, @@ -218,14 +222,19 @@ "y = np.cumsum(np.random.randn(3, 10), axis=1)\n", "\n", "fig = plt.figure()\n", - "axes_options = {'x': dict(set_ticks=True, grid_lines='none'),\n", - " 'y': dict(grid_lines='none')}\n", - "plt.scales(scales={'x': OrdinalScale(domain=list(range(20)))})\n", - "bar_chart = plt.bar(x, y=y, \n", - " colors=['hotpink', 'orange', 'green'],\n", - " labels=['One', 'Two', 'Three'],\n", - " axes_options=axes_options,\n", - " display_legend=True)\n", + "axes_options = {\n", + " \"x\": dict(set_ticks=True, grid_lines=\"none\"),\n", + " \"y\": dict(grid_lines=\"none\"),\n", + "}\n", + "plt.scales(scales={\"x\": OrdinalScale(domain=list(range(20)))})\n", + "bar_chart = plt.bar(\n", + " x,\n", + " y=y,\n", + " colors=[\"hotpink\", \"orange\", \"green\"],\n", + " labels=[\"One\", \"Two\", \"Three\"],\n", + " axes_options=axes_options,\n", + " display_legend=True,\n", + ")\n", "fig" ] }, @@ -246,9 +255,11 @@ "y1, y2 = np.random.randn(2, 100).cumsum(axis=1)\n", "\n", "fig = plt.figure()\n", - "plt.scales(scales={'x': LinearScale(min=10, max=90)})\n", - "line1 = plt.plot(x, y1, 'r', labels=['Clipped Line'], display_legend=True)\n", - "line2 = plt.plot(x, y2, 'g', apply_clip=False, labels=['Non clipped line'], display_legend=True)\n", + "plt.scales(scales={\"x\": LinearScale(min=10, max=90)})\n", + "line1 = plt.plot(x, y1, \"r\", labels=[\"Clipped Line\"], display_legend=True)\n", + "line2 = plt.plot(\n", + " x, y2, \"g\", apply_clip=False, labels=[\"Non clipped line\"], display_legend=True\n", + ")\n", "fig" ] } diff --git a/examples/Advanced Plotting/Animations.ipynb b/examples/Advanced Plotting/Animations.ipynb index c5dd43d0d..e42bd9271 100644 --- a/examples/Advanced Plotting/Animations.ipynb +++ b/examples/Advanced Plotting/Animations.ipynb @@ -31,7 +31,7 @@ "metadata": {}, "outputs": [], "source": [ - "axes_options = {'x': {'label': 'x'}, 'y': {'label': 'y'}}" + "axes_options = {\"x\": {\"label\": \"x\"}, \"y\": {\"label\": \"y\"}}" ] }, { @@ -41,10 +41,10 @@ "outputs": [], "source": [ "x = np.arange(100)\n", - "y = np.cumsum(np.random.randn(2, 100), axis=1) #two random walks\n", + "y = np.cumsum(np.random.randn(2, 100), axis=1) # two random walks\n", "\n", "fig = plt.figure(animation_duration=1000)\n", - "lines = plt.plot(x=x, y=y, colors=['red', 'green'], axes_options=axes_options)\n", + "lines = plt.plot(x=x, y=y, colors=[\"red\", \"green\"], axes_options=axes_options)\n", "fig" ] }, @@ -73,7 +73,7 @@ "source": [ "fig = plt.figure(animation_duration=1000)\n", "x, y = np.random.rand(2, 20)\n", - "scatt = plt.scatter(x, y, colors=['blue'], axes_options=axes_options)\n", + "scatt = plt.scatter(x, y, colors=[\"blue\"], axes_options=axes_options)\n", "fig" ] }, @@ -83,7 +83,7 @@ "metadata": {}, "outputs": [], "source": [ - "#data updates\n", + "# data updates\n", "scatt.x = np.random.rand(20) * 10\n", "scatt.y = np.random.rand(20)" ] @@ -106,8 +106,15 @@ "data = np.random.rand(6)\n", "\n", "fig = plt.figure(animation_duration=1000)\n", - "pie = plt.pie(data, radius=180, sort=False, display_labels='outside', display_values=True,\n", - " values_format='.0%', labels=list('ABCDEFGHIJ'))\n", + "pie = plt.pie(\n", + " data,\n", + " radius=180,\n", + " sort=False,\n", + " display_labels=\"outside\",\n", + " display_values=True,\n", + " values_format=\".0%\",\n", + " labels=list(\"ABCDEFGHIJ\"),\n", + ")\n", "fig" ] }, @@ -135,7 +142,7 @@ "metadata": {}, "outputs": [], "source": [ - "#make pie a donut\n", + "# make pie a donut\n", "with pie.hold_sync():\n", " pie.radius = 180\n", " pie.inner_radius = 120" @@ -155,7 +162,7 @@ "outputs": [], "source": [ "n = 10\n", - "x = list('ABCDEFGHIJ')\n", + "x = list(\"ABCDEFGHIJ\")\n", "y1, y2 = np.random.rand(2, n)" ] }, @@ -166,7 +173,7 @@ "outputs": [], "source": [ "fig = plt.figure(animation_duration=1000)\n", - "bar = plt.bar(x, [y1, y2], padding=0.2, type='grouped')\n", + "bar = plt.bar(x, [y1, y2], padding=0.2, type=\"grouped\")\n", "fig" ] }, @@ -201,12 +208,23 @@ "y = np.cumsum(np.random.randn(20))\n", "y1 = np.random.rand(20)\n", "\n", - "line = Lines(x=x, y=y, scales={'x': xs, 'y': ys1}, colors=['magenta'], marker='square')\n", - "bar = Bars(x=x, y=y1, scales={'x': xs, 'y': ys2}, colorpadding=0.2, colors=['steelblue'])\n", + "line = Lines(x=x, y=y, scales={\"x\": xs, \"y\": ys1}, colors=[\"magenta\"], marker=\"square\")\n", + "bar = Bars(\n", + " x=x, y=y1, scales={\"x\": xs, \"y\": ys2}, colorpadding=0.2, colors=[\"steelblue\"]\n", + ")\n", "\n", - "xax = Axis(scale=xs, label='x', grid_lines='solid')\n", - "yax1 = Axis(scale=ys1, orientation='vertical', tick_format='0.1f', label='y', grid_lines='solid')\n", - "yax2 = Axis(scale=ys2, orientation='vertical', side='right', tick_format='0.0%', label='y1', grid_lines='none')\n", + "xax = Axis(scale=xs, label=\"x\", grid_lines=\"solid\")\n", + "yax1 = Axis(\n", + " scale=ys1, orientation=\"vertical\", tick_format=\"0.1f\", label=\"y\", grid_lines=\"solid\"\n", + ")\n", + "yax2 = Axis(\n", + " scale=ys2,\n", + " orientation=\"vertical\",\n", + " side=\"right\",\n", + " tick_format=\"0.0%\",\n", + " label=\"y1\",\n", + " grid_lines=\"none\",\n", + ")\n", "\n", "Figure(marks=[bar, line], axes=[xax, yax1, yax2], animation_duration=1000)" ] diff --git a/examples/Advanced Plotting/Axis Properties.ipynb b/examples/Advanced Plotting/Axis Properties.ipynb index b7e86a85b..2b125ebbc 100644 --- a/examples/Advanced Plotting/Axis Properties.ipynb +++ b/examples/Advanced Plotting/Axis Properties.ipynb @@ -38,7 +38,7 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(np.arange(10), np.arange(10), colors=['hotpink', 'orange'])\n", + "line = plt.plot(np.arange(10), np.arange(10), colors=[\"hotpink\", \"orange\"])\n", "fig" ] }, @@ -49,10 +49,10 @@ "outputs": [], "source": [ "# set the grid lines of axes to dashed\n", - "xax, yax = plt.axes()['x'], plt.axes()['y']\n", + "xax, yax = plt.axes()[\"x\"], plt.axes()[\"y\"]\n", "\n", - "xax.grid_lines = 'dashed'\n", - "yax.grid_lines = 'dashed'" + "xax.grid_lines = \"dashed\"\n", + "yax.grid_lines = \"dashed\"" ] }, { @@ -62,8 +62,8 @@ "outputs": [], "source": [ "# Change the side of the axis\n", - "yax.side = 'right'\n", - "xax.side = 'top'" + "yax.side = \"right\"\n", + "xax.side = \"top\"" ] }, { @@ -73,8 +73,8 @@ "outputs": [], "source": [ "# change the orientation of axes\n", - "yax.orientation = 'horizontal'\n", - "xax.orientation = 'vertical'" + "yax.orientation = \"horizontal\"\n", + "xax.orientation = \"vertical\"" ] }, { @@ -84,8 +84,8 @@ "outputs": [], "source": [ "# Change the format of the ticks on the axis\n", - "yax.tick_format = '0.2f'\n", - "xax.tick_format = '0.0f'" + "yax.tick_format = \"0.2f\"\n", + "xax.tick_format = \"0.0f\"" ] }, { @@ -96,8 +96,8 @@ "source": [ "# Change the color of the axis\n", "with xax.hold_sync():\n", - " xax.color = 'orangered'\n", - " xax.label_color = 'orangered'" + " xax.color = \"orangered\"\n", + " xax.label_color = \"orangered\"" ] }, { @@ -107,7 +107,7 @@ "outputs": [], "source": [ "# change the grid colors\n", - "xax.grid_color = 'red'" + "xax.grid_color = \"red\"" ] }, { @@ -124,8 +124,8 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "axes_options = {'x': {'label': 'X'}, 'y': {'label': 'Y'}}\n", - "line = plt.plot(x, y1, colors=['orangered'], axes_options=axes_options)\n", + "axes_options = {\"x\": {\"label\": \"X\"}, \"y\": {\"label\": \"Y\"}}\n", + "line = plt.plot(x, y1, colors=[\"orangered\"], axes_options=axes_options)\n", "fig" ] }, @@ -135,11 +135,11 @@ "metadata": {}, "outputs": [], "source": [ - "xax, yax = plt.axes()['x'], plt.axes()['y']\n", + "xax, yax = plt.axes()[\"x\"], plt.axes()[\"y\"]\n", "\n", "# moving the label along the axis\n", - "xax.label_location = 'end'\n", - "yax.label_location = 'start'" + "xax.label_location = \"end\"\n", + "yax.label_location = \"start\"" ] }, { @@ -149,8 +149,8 @@ "outputs": [], "source": [ "# moving the label perpendicular to the axis\n", - "yax.label_offset = '6ex'\n", - "xax.label_offset = '-1em'" + "yax.label_offset = \"6ex\"\n", + "xax.label_offset = \"-1em\"" ] }, { @@ -163,13 +163,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x[:20], y1[:20], 'm')\n", + "line = plt.plot(x[:20], y1[:20], \"m\")\n", "fig" ] }, @@ -179,7 +177,7 @@ "metadata": {}, "outputs": [], "source": [ - "xax, yax = plt.axes()['x'], plt.axes()['y']" + "xax, yax = plt.axes()[\"x\"], plt.axes()[\"y\"]" ] }, { @@ -209,7 +207,36 @@ "outputs": [], "source": [ "# Setting the style for the text of the ticks\n", - "xax.tick_style = {'stroke': 'orangered', 'font-size': 14}" + "xax.tick_style = {\"stroke\": \"orangered\", \"font-size\": 14}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tick labels\n", + "The tick label dictionary can override a label " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Roman labeling\n", + "xax.tick_labels = {\n", + " 1: 'I',\n", + " 3: 'III',\n", + " 5: 'V',\n", + " 7: 'VII',\n", + " 9: 'IX',\n", + " 11: 'XI',\n", + " 13: 'XIII',\n", + " 15: 'XV',\n", + " 17: 'XVII',\n", + " 19: 'XIX'\n", + "}" ] }, { @@ -230,13 +257,15 @@ "sc_y = LinearScale(reverse=True)\n", "sc_y2 = LinearScale()\n", "\n", - "sc1 = Scatter(x=x[:10], y=y1[:10], \n", - " scales={'x': sc_x, 'y': sc_y},\n", - " default_size=100)\n", + "sc1 = Scatter(x=x[:10], y=y1[:10], scales={\"x\": sc_x, \"y\": sc_y}, default_size=100)\n", "\n", - "sc2 = Scatter(x=x[:10], y=y2[:10],\n", - " colors=['dodgerblue'],\n", - " marker='cross', scales={'x': sc_x, 'y': sc_y2})" + "sc2 = Scatter(\n", + " x=x[:10],\n", + " y=y2[:10],\n", + " colors=[\"dodgerblue\"],\n", + " marker=\"cross\",\n", + " scales={\"x\": sc_x, \"y\": sc_y2},\n", + ")" ] }, { @@ -253,17 +282,36 @@ "outputs": [], "source": [ "## Setting offset for axis in terms of figure scales\n", - "xax = Axis(label='Test X', scale=sc_x, \n", - " grid_lines='solid', offset=dict(value=0.2), label_location=\"start\")\n", + "xax = Axis(\n", + " label=\"Test X\",\n", + " scale=sc_x,\n", + " grid_lines=\"solid\",\n", + " offset=dict(value=0.2),\n", + " label_location=\"start\",\n", + ")\n", "\n", - "yax = Axis(label='Test Y', scale=sc_y, \n", - " orientation='vertical', tick_format='0.2f', \n", - " grid_lines='solid', label_location=\"end\")\n", + "yax = Axis(\n", + " label=\"Test Y\",\n", + " scale=sc_y,\n", + " orientation=\"vertical\",\n", + " tick_format=\"0.2f\",\n", + " grid_lines=\"solid\",\n", + " label_location=\"end\",\n", + ")\n", "\n", - "yax2 = Axis(label='Test Y2', scale=sc_y2, orientation='vertical', side='right', \n", - " tick_format='0.2f')\n", - "Figure(axes=[xax, yax, yax2], marks=[sc1, sc2], legend_location='top-right',\n", - " padding_x=0.025)" + "yax2 = Axis(\n", + " label=\"Test Y2\",\n", + " scale=sc_y2,\n", + " orientation=\"vertical\",\n", + " side=\"right\",\n", + " tick_format=\"0.2f\",\n", + ")\n", + "Figure(\n", + " axes=[xax, yax, yax2],\n", + " marks=[sc1, sc2],\n", + " legend_location=\"top-right\",\n", + " padding_x=0.025,\n", + ")" ] }, { @@ -307,7 +355,7 @@ "source": [ "# add a fig margin to allow place for color bar\n", "fig = plt.figure(fig_margin=dict(top=80, left=80, right=80, bottom=80))\n", - "scatter = plt.scatter(x, y1, color=y2, stroke='black')\n", + "scatter = plt.scatter(x, y1, color=y2, stroke=\"black\")\n", "fig" ] }, @@ -324,8 +372,8 @@ "metadata": {}, "outputs": [], "source": [ - "xax, yax, cax = plt.axes()['x'], plt.axes()['y'], plt.axes()['color']\n", - "cax.side = 'top'" + "xax, yax, cax = plt.axes()[\"x\"], plt.axes()[\"y\"], plt.axes()[\"color\"]\n", + "cax.side = \"top\"" ] }, { @@ -335,8 +383,8 @@ "outputs": [], "source": [ "with cax.hold_sync():\n", - " cax.orientation = 'vertical'\n", - " cax.side = 'right'" + " cax.orientation = \"vertical\"\n", + " cax.side = \"right\"" ] }, { @@ -345,8 +393,8 @@ "metadata": {}, "outputs": [], "source": [ - "yax.side = 'right'\n", - "cax.side = 'left'" + "yax.side = \"right\"\n", + "cax.side = \"left\"" ] } ], diff --git a/examples/Advanced Plotting/Plotting Dates.ipynb b/examples/Advanced Plotting/Plotting Dates.ipynb index d8e68f4b3..d5fb2af39 100644 --- a/examples/Advanced Plotting/Plotting Dates.ipynb +++ b/examples/Advanced Plotting/Plotting Dates.ipynb @@ -4,7 +4,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -23,15 +22,16 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'],\n", - " index=pd.date_range(start='01-01-2007', periods=150))" + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")" ] }, { @@ -48,7 +48,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, @@ -61,14 +60,13 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x=x_data, y=price_data['Security 1'])\n", + "line = plt.plot(x=x_data, y=price_data[\"Security 1\"])\n", "fig" ] }, @@ -86,13 +84,13 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "import datetime\n", + "\n", "ref_date = datetime.datetime(2010, 1, 1)\n", "num_items = range(250)\n", "\n", @@ -104,14 +102,13 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x=date_x, y=price_data['Security 1'])\n", + "line = plt.plot(x=date_x, y=price_data[\"Security 1\"])\n", "fig" ] }, @@ -129,7 +126,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -143,14 +139,13 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x=date_x, y=price_data['Security 1'])\n", + "line = plt.plot(x=date_x, y=price_data[\"Security 1\"])\n", "fig" ] }, @@ -168,13 +163,12 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ - "date_format = '%m-%d-%Y'\n", + "date_format = \"%m-%d-%Y\"\n", "x_data = price_data.index.values\n", "date_x = convert_to_date(x_data)" ] @@ -183,14 +177,13 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x=date_x, y=price_data['Security 1'])\n", + "line = plt.plot(x=date_x, y=price_data[\"Security 1\"])\n", "fig" ] }, @@ -208,7 +201,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -221,14 +213,13 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x=date_x, y=price_data['Security 1'])\n", + "line = plt.plot(x=date_x, y=price_data[\"Security 1\"])\n", "fig" ] }, @@ -246,16 +237,17 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ - "date_format = '%m-%d-%Y'\n", + "date_format = \"%m-%d-%Y\"\n", "x_data = price_data.index.values\n", "\n", - "data_2 = price_data.iloc[30: ,]\n", + "data_2 = price_data.iloc[\n", + " 30:,\n", + "]\n", "x_data_2 = data_2.index.values" ] }, @@ -263,27 +255,25 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ - "y_data = pd.concat([price_data['Security 1'], data_2['Security 2']], axis=1).values.T" + "y_data = pd.concat([price_data[\"Security 1\"], data_2[\"Security 2\"]], axis=1).values.T" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fig = plt.figure()\n", - "line = plt.plot(x=date_x, y=y_data, colors=['hotpink', 'orange'])\n", + "line = plt.plot(x=date_x, y=y_data, colors=[\"hotpink\", \"orange\"])\n", "fig" ] } diff --git a/examples/Applications/Equity Index Performance/Time Series.ipynb b/examples/Applications/Equity Index Performance/Time Series.ipynb index 7961a83bc..042aa0d0e 100644 --- a/examples/Applications/Equity Index Performance/Time Series.ipynb +++ b/examples/Applications/Equity Index Performance/Time Series.ipynb @@ -4,8 +4,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### US Equity market performance from 1995 to 2020\n", - "In this visualization we'll look S&P 500 Index performance from 1995 to 2020. The visulization consists of two charts:\n", + "### US Equity market performance from 1995 to 2021\n", + "In this visualization we'll look S&P 500 Index performance from 1995 to 2021. The visualization consists of two charts:\n", "* Time Series Chart of Index prices\n", "* Histogram of the log returns\n", "\n", @@ -27,7 +27,7 @@ "import numpy as np\n", "import pandas as pd\n", "\n", - "import ipywidgets as widgets\n", + "from ipywidgets import *\n", "from bqplot import DateScale, LinearScale\n", "import bqplot.pyplot as plt\n", "from bqplot.interacts import FastIntervalSelector" @@ -39,75 +39,104 @@ "metadata": {}, "outputs": [], "source": [ - "format_date = lambda d: d.strftime('%m/%d/%Y')\n", + "def regress(x, y):\n", + " b = np.cov(x, y)[0, 1] / np.var(x)\n", + " a = y.mean() - b * x.mean()\n", + " return a, b\n", "\n", - "spx_prices = pd.read_csv('spx_prices.csv', index_col=0, parse_dates=True, squeeze=True)\n", - "log_returns = np.log(spx_prices / spx_prices.shift(1))\n", - "dates = spx_prices.index" + "def trend_score(x, y):\n", + " \"\"\"computes trend score as a cube of correlation coeff\"\"\"\n", + " return np.corrcoef(x, y)[0, 1] ** 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "spx_prices = pd.read_csv(\"spx_prices.csv\", index_col=0, \n", + " squeeze=True, parse_dates=True)\n", + "dates = spx_prices.index\n", + "prices = spx_prices\n", + "log_returns = np.log(prices / prices.shift(1)).dropna()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "scrolled": true + "scrolled": false }, "outputs": [], "source": [ - "fig_title_tmpl = 'S&P Index Prices (from {start} to {end})'\n", - "fig_title = fig_title_tmpl.format(start=format_date(dates[0]), \n", - " end=format_date(dates[-1]))\n", - "time_series_fig = plt.figure(title=fig_title,\n", - " layout=widgets.Layout(width='1300px', height='500px'))\n", + "fig_title_tmpl = \"S&P Index Prices (from {} to {})\"\n", + "fig_title = fig_title_tmpl.format(dates[0].strftime(\"%m/%d/%Y\"), \n", + " dates[-1].strftime(\"%m/%d/%Y\"))\n", + "time_series_fig = plt.figure(title=fig_title, \n", + " layout=Layout(width=\"1300px\",\n", + " height=\"500px\"))\n", "\n", - "plt.scales(scales={'x': DateScale()})\n", - "axes_options = {'y': {'tick_format': ','}}\n", - "time_series = plt.plot(dates, spx_prices, colors=['dodgerblue'], \n", + "plt.scales(scales={\"x\": DateScale()})\n", + "axes_options = {\"y\": {\"tick_format\": \",\"}}\n", + "time_series = plt.plot(dates, prices, colors=[\"deepskyblue\"], \n", " stroke_width=1.5, axes_options=axes_options)\n", - "return_label = plt.label([], x=[], y=[spx_prices.max() * .9], \n", - " align='middle', default_size=36, \n", - " font_weight='bolder', colors=['green'])\n", + "return_label = plt.label([], x=[], y=[prices.max() * .9], \n", + " align=\"middle\", default_size=36, \n", + " font_weight=\"bolder\", colors=[\"orange\"])\n", "trend_line = plt.plot([], [])\n", "intsel = FastIntervalSelector(scale=time_series.scales['x'], marks=[time_series])\n", "time_series_fig.interaction = intsel\n", "\n", - "hist_fig = plt.figure(title='Histogram Of Returns',\n", - " layout=widgets.Layout(width='900px',\n", - " height='450px',\n", - " margin='0px 150px 0px 150px'))\n", - "plt.scales(scales={'x': LinearScale(min=-.1, max=.1)})\n", - "hist = plt.hist(log_returns, colors=['salmon'], bins=75)\n", + "hist_fig = plt.figure(title=\"Histogram Of Daily Returns\",\n", + " layout=Layout(width=\"900px\",\n", + " height=\"450px\",\n", + " margin=\"0px 150px 0px 150px\"))\n", + "plt.scales(scales={\"x\": LinearScale(min=-.1, max=.1)})\n", + "hist = plt.hist(log_returns, colors=[\"salmon\"], bins=75)\n", "for axis in hist_fig.axes:\n", - " axis.grid_lines = 'none'\n", - " if axis.orientation != 'vertical':\n", - " axis.tick_format = '.0%'\n", + " axis.grid_lines = \"none\"\n", + " if axis.orientation != \"vertical\":\n", + " axis.tick_format = \".0%\"\n", + "\n", + "def update_trend_line(*args):\n", + " selected_idx = time_series.selected\n", + " if selected_idx is not None:\n", + " x = np.array(selected_idx)\n", + " y = time_series.y[selected_idx]\n", "\n", - "def update_hist(*args):\n", - " selected_ix = time_series.selected\n", - " if selected_ix is not None:\n", - " s, e = selected_ix[0], selected_ix[-1]\n", - " spx_prices_slice = spx_prices[s:e]\n", - " pct_return = spx_prices[e] / spx_prices[s] - 1\n", + " a, b = regress(x, y)\n", + " ts = trend_score(x, y)\n", + " end_points = [selected_idx[0], selected_idx[-1]]\n", + " pct_return = prices[end_points[1]] / prices[end_points[0]] - 1\n", " \n", - " # update the position of the total return label\n", " with return_label.hold_sync():\n", " return_label.text = ['{:.0%}'.format(pct_return)]\n", - " return_label.x = [time_series.x[(s + e) // 2]]\n", - " return_label.colors = ['red'] if pct_return < 0. else ['green']\n", + " return_label.x = [time_series.x[(end_points[0] + end_points[1]) // 2]]\n", " \n", - " time_series_fig.title = fig_title_tmpl.format(start=format_date(dates[s]),\n", - " end=format_date(dates[e]))\n", + " with trend_line.hold_sync():\n", + " trend_line.x = time_series.x[end_points]\n", + " trend_line.y = a + b * np.array(end_points)\n", + " if np.abs(ts) < .1:\n", + " trend_line.colors = ['yellow']\n", + " elif ts > .1:\n", + " trend_line.colors = ['lime']\n", + " else:\n", + " trend_line.colors = ['red'] \n", + " trend_line.stroke_width = 2 + 6 * np.abs(ts)\n", + " time_series_fig.title = fig_title_tmpl.format(*[dates[i].strftime('%m/%d/%Y') \\\n", + " for i in end_points])\n", " # update hist with returns\n", - " hist.sample = np.log(spx_prices_slice / spx_prices_slice.shift(1))\n", + " hist.sample = np.log(y[1:] / y[:-1])\n", "\n", - "time_series.observe(update_hist, 'selected')\n", - "widgets.VBox([time_series_fig, hist_fig])" + "time_series.observe(update_trend_line, 'selected')\n", + "VBox([time_series_fig, hist_fig])" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -121,7 +150,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/examples/Applications/Equity Index Performance/spx_prices.csv b/examples/Applications/Equity Index Performance/spx_prices.csv index a3cd9d0fd..7451fcb62 100644 --- a/examples/Applications/Equity Index Performance/spx_prices.csv +++ b/examples/Applications/Equity Index Performance/spx_prices.csv @@ -6439,3 +6439,361 @@ date,adjclose 2020-07-28,3218.43994140625 2020-07-29,3258.43994140625 2020-07-30,3246.219970703125 +2020-07-31,3271.1201171875 +2020-08-03,3294.610107421875 +2020-08-04,3306.510009765625 +2020-08-05,3327.77001953125 +2020-08-06,3349.159912109375 +2020-08-07,3351.280029296875 +2020-08-10,3360.469970703125 +2020-08-11,3333.68994140625 +2020-08-12,3380.35009765625 +2020-08-13,3373.429931640625 +2020-08-14,3372.85009765625 +2020-08-17,3381.989990234375 +2020-08-18,3389.780029296875 +2020-08-19,3374.85009765625 +2020-08-20,3385.510009765625 +2020-08-21,3397.159912109375 +2020-08-24,3431.280029296875 +2020-08-25,3443.6201171875 +2020-08-26,3478.72998046875 +2020-08-27,3484.550048828125 +2020-08-28,3508.010009765625 +2020-08-31,3500.31005859375 +2020-09-01,3526.64990234375 +2020-09-02,3580.840087890625 +2020-09-03,3455.06005859375 +2020-09-04,3426.9599609375 +2020-09-08,3331.840087890625 +2020-09-09,3398.9599609375 +2020-09-10,3339.18994140625 +2020-09-11,3340.969970703125 +2020-09-14,3383.5400390625 +2020-09-15,3401.199951171875 +2020-09-16,3385.489990234375 +2020-09-17,3357.010009765625 +2020-09-18,3319.469970703125 +2020-09-21,3281.06005859375 +2020-09-22,3315.570068359375 +2020-09-23,3236.919921875 +2020-09-24,3246.590087890625 +2020-09-25,3298.4599609375 +2020-09-28,3351.60009765625 +2020-09-29,3335.469970703125 +2020-09-30,3363.0 +2020-10-01,3380.800048828125 +2020-10-02,3348.419921875 +2020-10-05,3408.60009765625 +2020-10-06,3360.969970703125 +2020-10-07,3419.43994140625 +2020-10-08,3446.830078125 +2020-10-09,3477.139892578125 +2020-10-12,3534.219970703125 +2020-10-13,3511.929931640625 +2020-10-14,3488.669921875 +2020-10-15,3483.340087890625 +2020-10-16,3483.81005859375 +2020-10-19,3426.919921875 +2020-10-20,3443.1201171875 +2020-10-21,3435.56005859375 +2020-10-22,3453.489990234375 +2020-10-23,3465.389892578125 +2020-10-26,3400.969970703125 +2020-10-27,3390.679931640625 +2020-10-28,3271.030029296875 +2020-10-29,3310.110107421875 +2020-10-30,3269.9599609375 +2020-11-02,3310.239990234375 +2020-11-03,3369.159912109375 +2020-11-04,3443.43994140625 +2020-11-05,3510.449951171875 +2020-11-06,3509.43994140625 +2020-11-09,3550.5 +2020-11-10,3545.530029296875 +2020-11-11,3572.659912109375 +2020-11-12,3537.010009765625 +2020-11-13,3585.14990234375 +2020-11-16,3626.909912109375 +2020-11-17,3609.530029296875 +2020-11-18,3567.7900390625 +2020-11-19,3581.8701171875 +2020-11-20,3557.5400390625 +2020-11-23,3577.590087890625 +2020-11-24,3635.409912109375 +2020-11-25,3629.64990234375 +2020-11-27,3638.35009765625 +2020-11-30,3621.6298828125 +2020-12-01,3662.449951171875 +2020-12-02,3669.010009765625 +2020-12-03,3666.719970703125 +2020-12-04,3699.1201171875 +2020-12-07,3691.9599609375 +2020-12-08,3702.25 +2020-12-09,3672.820068359375 +2020-12-10,3668.10009765625 +2020-12-11,3663.4599609375 +2020-12-14,3647.489990234375 +2020-12-15,3694.6201171875 +2020-12-16,3701.169921875 +2020-12-17,3722.47998046875 +2020-12-18,3709.409912109375 +2020-12-21,3694.919921875 +2020-12-22,3687.260009765625 +2020-12-23,3690.010009765625 +2020-12-24,3703.06005859375 +2020-12-28,3735.360107421875 +2020-12-29,3727.0400390625 +2020-12-30,3732.0400390625 +2020-12-31,3756.070068359375 +2021-01-04,3700.64990234375 +2021-01-05,3726.860107421875 +2021-01-06,3748.139892578125 +2021-01-07,3803.7900390625 +2021-01-08,3824.679931640625 +2021-01-11,3799.610107421875 +2021-01-12,3801.18994140625 +2021-01-13,3809.840087890625 +2021-01-14,3795.5400390625 +2021-01-15,3768.25 +2021-01-19,3798.909912109375 +2021-01-20,3851.85009765625 +2021-01-21,3853.070068359375 +2021-01-22,3841.469970703125 +2021-01-25,3855.360107421875 +2021-01-26,3849.6201171875 +2021-01-27,3750.77001953125 +2021-01-28,3787.3798828125 +2021-01-29,3714.239990234375 +2021-02-01,3773.860107421875 +2021-02-02,3826.31005859375 +2021-02-03,3830.169921875 +2021-02-04,3871.739990234375 +2021-02-05,3886.830078125 +2021-02-08,3915.590087890625 +2021-02-09,3911.22998046875 +2021-02-10,3909.8798828125 +2021-02-11,3916.3798828125 +2021-02-12,3934.830078125 +2021-02-16,3932.590087890625 +2021-02-17,3931.330078125 +2021-02-18,3913.969970703125 +2021-02-19,3906.7099609375 +2021-02-22,3876.5 +2021-02-23,3881.3701171875 +2021-02-24,3925.429931640625 +2021-02-25,3829.340087890625 +2021-02-26,3811.14990234375 +2021-03-01,3901.820068359375 +2021-03-02,3870.2900390625 +2021-03-03,3819.719970703125 +2021-03-04,3768.469970703125 +2021-03-05,3841.93994140625 +2021-03-08,3821.35009765625 +2021-03-09,3875.43994140625 +2021-03-10,3898.81005859375 +2021-03-11,3939.340087890625 +2021-03-12,3943.340087890625 +2021-03-15,3968.93994140625 +2021-03-16,3962.7099609375 +2021-03-17,3974.1201171875 +2021-03-18,3915.4599609375 +2021-03-19,3913.10009765625 +2021-03-22,3940.590087890625 +2021-03-23,3910.52001953125 +2021-03-24,3889.139892578125 +2021-03-25,3909.52001953125 +2021-03-26,3974.5400390625 +2021-03-29,3971.090087890625 +2021-03-30,3958.550048828125 +2021-03-31,3972.889892578125 +2021-04-01,4019.8701171875 +2021-04-05,4077.909912109375 +2021-04-06,4073.93994140625 +2021-04-07,4079.949951171875 +2021-04-08,4097.169921875 +2021-04-09,4128.7998046875 +2021-04-12,4127.990234375 +2021-04-13,4141.58984375 +2021-04-14,4124.66015625 +2021-04-15,4170.419921875 +2021-04-16,4185.47021484375 +2021-04-19,4163.259765625 +2021-04-20,4134.93994140625 +2021-04-21,4173.419921875 +2021-04-22,4134.97998046875 +2021-04-23,4180.169921875 +2021-04-26,4187.6201171875 +2021-04-27,4186.72021484375 +2021-04-28,4183.18017578125 +2021-04-29,4211.47021484375 +2021-04-30,4181.169921875 +2021-05-03,4192.66015625 +2021-05-04,4164.66015625 +2021-05-05,4167.58984375 +2021-05-06,4201.6201171875 +2021-05-07,4232.60009765625 +2021-05-10,4188.43017578125 +2021-05-11,4152.10009765625 +2021-05-12,4063.0400390625 +2021-05-13,4112.5 +2021-05-14,4173.85009765625 +2021-05-17,4163.2900390625 +2021-05-18,4127.830078125 +2021-05-19,4115.68017578125 +2021-05-20,4159.1201171875 +2021-05-21,4155.85986328125 +2021-05-24,4197.0498046875 +2021-05-25,4188.1298828125 +2021-05-26,4195.990234375 +2021-05-27,4200.8798828125 +2021-05-28,4204.10986328125 +2021-06-01,4202.0400390625 +2021-06-02,4208.1201171875 +2021-06-03,4192.85009765625 +2021-06-04,4229.89013671875 +2021-06-07,4226.52001953125 +2021-06-08,4227.259765625 +2021-06-09,4219.5498046875 +2021-06-10,4239.18017578125 +2021-06-11,4247.43994140625 +2021-06-14,4255.14990234375 +2021-06-15,4246.58984375 +2021-06-16,4223.7001953125 +2021-06-17,4221.85986328125 +2021-06-18,4166.4501953125 +2021-06-21,4224.7900390625 +2021-06-22,4246.43994140625 +2021-06-23,4241.83984375 +2021-06-24,4266.490234375 +2021-06-25,4280.7001953125 +2021-06-28,4290.60986328125 +2021-06-29,4291.7998046875 +2021-06-30,4297.5 +2021-07-01,4319.93994140625 +2021-07-02,4352.33984375 +2021-07-06,4343.5400390625 +2021-07-07,4358.1298828125 +2021-07-08,4320.81982421875 +2021-07-09,4369.5498046875 +2021-07-12,4384.6298828125 +2021-07-13,4369.2099609375 +2021-07-14,4374.2998046875 +2021-07-15,4360.02978515625 +2021-07-16,4327.16015625 +2021-07-19,4258.490234375 +2021-07-20,4323.06005859375 +2021-07-21,4358.68994140625 +2021-07-22,4367.47998046875 +2021-07-23,4411.7900390625 +2021-07-26,4422.2998046875 +2021-07-27,4401.4599609375 +2021-07-28,4400.64013671875 +2021-07-29,4419.14990234375 +2021-07-30,4395.259765625 +2021-08-02,4387.16015625 +2021-08-03,4423.14990234375 +2021-08-04,4402.66015625 +2021-08-05,4429.10009765625 +2021-08-06,4436.52001953125 +2021-08-09,4432.35009765625 +2021-08-10,4436.75 +2021-08-11,4442.41015625 +2021-08-12,4460.830078125 +2021-08-13,4468.0 +2021-08-16,4479.7099609375 +2021-08-17,4448.080078125 +2021-08-18,4400.27001953125 +2021-08-19,4405.7998046875 +2021-08-20,4441.669921875 +2021-08-23,4479.52978515625 +2021-08-24,4486.22998046875 +2021-08-25,4496.18994140625 +2021-08-26,4470.0 +2021-08-27,4509.3701171875 +2021-08-30,4528.7900390625 +2021-08-31,4522.68017578125 +2021-09-01,4524.08984375 +2021-09-02,4536.9501953125 +2021-09-03,4535.43017578125 +2021-09-07,4520.02978515625 +2021-09-08,4514.06982421875 +2021-09-09,4493.27978515625 +2021-09-10,4458.580078125 +2021-09-13,4468.72998046875 +2021-09-14,4443.0498046875 +2021-09-15,4480.7001953125 +2021-09-16,4473.75 +2021-09-17,4432.990234375 +2021-09-20,4357.72998046875 +2021-09-21,4354.18994140625 +2021-09-22,4395.64013671875 +2021-09-23,4448.97998046875 +2021-09-24,4455.47998046875 +2021-09-27,4443.10986328125 +2021-09-28,4352.6298828125 +2021-09-29,4359.4599609375 +2021-09-30,4307.5400390625 +2021-10-01,4357.0400390625 +2021-10-04,4300.4599609375 +2021-10-05,4345.72021484375 +2021-10-06,4363.5498046875 +2021-10-07,4399.759765625 +2021-10-08,4391.33984375 +2021-10-11,4361.18994140625 +2021-10-12,4350.64990234375 +2021-10-13,4363.7998046875 +2021-10-14,4438.259765625 +2021-10-15,4471.3701171875 +2021-10-18,4486.4599609375 +2021-10-19,4519.6298828125 +2021-10-20,4536.18994140625 +2021-10-21,4549.77978515625 +2021-10-22,4544.89990234375 +2021-10-25,4566.47998046875 +2021-10-26,4574.7900390625 +2021-10-27,4551.68017578125 +2021-10-28,4596.419921875 +2021-10-29,4605.3798828125 +2021-11-01,4613.669921875 +2021-11-02,4630.64990234375 +2021-11-03,4660.56982421875 +2021-11-04,4680.06005859375 +2021-11-05,4697.52978515625 +2021-11-08,4701.7001953125 +2021-11-09,4685.25 +2021-11-10,4646.7099609375 +2021-11-11,4649.27001953125 +2021-11-12,4682.85009765625 +2021-11-15,4682.7998046875 +2021-11-16,4700.89990234375 +2021-11-17,4688.669921875 +2021-11-18,4704.5400390625 +2021-11-19,4697.9599609375 +2021-11-22,4682.93994140625 +2021-11-23,4690.7001953125 +2021-11-24,4701.4599609375 +2021-11-26,4594.6201171875 +2021-11-29,4655.27001953125 +2021-11-30,4567.0 +2021-12-01,4513.0400390625 +2021-12-02,4577.10009765625 +2021-12-03,4538.43017578125 +2021-12-06,4591.669921875 +2021-12-07,4686.75 +2021-12-08,4701.2099609375 +2021-12-09,4667.4501953125 +2021-12-10,4712.02001953125 +2021-12-13,4668.97021484375 +2021-12-14,4634.08984375 +2021-12-15,4709.85009765625 +2021-12-16,4668.669921875 +2021-12-17,4620.64013671875 +2021-12-20,4568.02001953125 +2021-12-21,4649.22998046875 +2021-12-22,4696.56005859375 +2021-12-23,4725.7900390625 +2021-12-27,4791.18994140625 +2021-12-28,4786.35009765625 +2021-12-29,4793.06005859375 +2021-12-30,4778.72998046875 diff --git a/examples/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb b/examples/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb index 2fa71baf6..989f8d66d 100644 --- a/examples/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb +++ b/examples/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Tutorial for building a feature vector distribution plot \n", + "## Tutorial for building a feature vector distribution plot\n", "\n", "In this tutorial we will build an interactive widget using bqplot and ipywidgets. bqplot is a powerful interactive plotting library for jupyter. Its main power comes from how well integrated it is into the ipywidgets library. There are a few things you should understand before diving into this tutorial.\n", "\n", @@ -24,11 +24,11 @@ "\n", "If you are used to matplotlib, the paradigm of how axis and scales are used in bqplot can be somewhat counterintuitive at first, so take some time to read the documentation and play around until you understand them. Once you do, they are very powerful when you want to link multiple plots together.\n", "\n", - "* Axis: Axis describe what the lines around a figure will look like. Only figures have axis, marks don't. \n", + "* Axis: Axis describe what the lines around a figure will look like. Only figures have axis, marks don't.\n", "\n", - "* Scales: The scale describes how ranges should be displayed ie. linear or logarithmic. Scales are used by both axis and marks. Their max and min can auto aujust to the data, or be set. Be careful, you can add an axis to a figure that has a different scale than the one a mark you are adding to the figure has. \n", + "* Scales: The scale describes how ranges should be displayed ie. linear or logarithmic. Scales are used by both axis and marks. Their max and min can auto aujust to the data, or be set. Be careful, you can add an axis to a figure that has a different scale than the one a mark you are adding to the figure has.\n", "\n", - "* Tooltips: These allow you to add information on hover. They only accept three fields 'name', 'x' and 'y'. So in this tutorial we put all of the infomration we want to show into the name column as a string.\n", + "* Tooltips: These allow you to add information on hover. They only accept three fields 'name', 'x' and 'y'. So in this tutorial we put all of the information we want to show into the name column as a string.\n", "\n", "\n", "\n", @@ -52,44 +52,44 @@ "# simple function to return the bins for the plot\n", "def get_h_bins(df, bins, f_lim):\n", " if f_lim:\n", - " return np.arange(f_lim['min'], f_lim['max'], (f_lim['max']-f_lim['min'])/float(bins))\n", - " scale_max = int(df.describe().loc['max'].max()+1)\n", - " scale_min = int(df.describe().loc['min'].min()-1) \n", - " return np.arange(scale_min, scale_max, (scale_max-scale_min)/float(bins))\n", - "\n", - "def feature_vector_distribution(features, label_column,\n", - " bins=25,\n", - " group_columns=None, \n", - " f_lim=None,\n", - " colors=None):\n", + " return np.arange(\n", + " f_lim[\"min\"], f_lim[\"max\"], (f_lim[\"max\"] - f_lim[\"min\"]) / float(bins)\n", + " )\n", + " scale_max = int(df.describe().loc[\"max\"].max() + 1)\n", + " scale_min = int(df.describe().loc[\"min\"].min() - 1)\n", + " return np.arange(scale_min, scale_max, (scale_max - scale_min) / float(bins))\n", + "\n", + "\n", + "def feature_vector_distribution(\n", + " features, label_column, bins=25, group_columns=None, f_lim=None, colors=None\n", + "):\n", " \"\"\"\n", " features (dataframe): a data frame of feature vectors along with a label column and other metadata\n", - " label_column (str): the name of the column in the features dataframe that refers to the label infomration\n", + " label_column (str): the name of the column in the features dataframe that refers to the label information\n", " bins (int): the number of bins in the histograms\n", " group_columns (list): if you want other metadata in the tooltip, these columns will be added\n", - " f_lim (dict): this sets the limits for max and min of the plots to a constant \n", - " {'max':10, 'min':10}. otherwise defaults to the values of the current features \n", - " which can be misleading. \n", + " f_lim (dict): this sets the limits for max and min of the plots to a constant\n", + " {'max':10, 'min':10}. otherwise defaults to the values of the current features\n", + " which can be misleading.\n", " colors (list): list of colors to use. Internally has a list of 10. If the labels\n", " are longer you will need to pass your own\n", - " \n", + "\n", " \"\"\"\n", - " dist = '640px'\n", - " third_dist = '213px'\n", + " dist = \"640px\"\n", + " third_dist = \"213px\"\n", "\n", " if f_lim:\n", - " sc_x = LinearScale(min=f_lim['min'], max=f_lim['max'])\n", - " sc_y = LinearScale(min=f_lim['min'], max=f_lim['max'])\n", + " sc_x = LinearScale(min=f_lim[\"min\"], max=f_lim[\"max\"])\n", + " sc_y = LinearScale(min=f_lim[\"min\"], max=f_lim[\"max\"])\n", " else:\n", " sc_x = LinearScale()\n", " sc_y = LinearScale()\n", - " \n", "\n", " scale_y = LinearScale(min=0)\n", - " \n", + "\n", " x_ord_legend = OrdinalScale()\n", " y_lin_legend = LinearScale()\n", - " \n", + "\n", " if group_columns is None:\n", " count_column = features.columns[1]\n", " group_columns = []\n", @@ -97,144 +97,200 @@ " count_column = group_columns[0]\n", "\n", " if colors is None:\n", - " colors = [\"#E6B0AA\", \"#C39BD3\", \"#73C6B6\", \"#F7DC6F\", \"#F0B27A\",\n", - " \"#D0D3D4\", \"#85929E\", \"#6E2C00\", \"#1A5276\", \"#17202A\"]\n", - " box_color = 'black'\n", - " \n", - " feature_x = Dropdown(description='Feature 1')\n", - " feature_y = Dropdown(description='Feature 2')\n", - "\n", - " feature_x.options = [x for x in features.columns if x not in [label_column]+group_columns]\n", - " feature_y.options = [x for x in features.columns if x not in [label_column]+group_columns]\n", + " colors = [\n", + " \"#E6B0AA\",\n", + " \"#C39BD3\",\n", + " \"#73C6B6\",\n", + " \"#F7DC6F\",\n", + " \"#F0B27A\",\n", + " \"#D0D3D4\",\n", + " \"#85929E\",\n", + " \"#6E2C00\",\n", + " \"#1A5276\",\n", + " \"#17202A\",\n", + " ]\n", + " box_color = \"black\"\n", + "\n", + " feature_x = Dropdown(description=\"Feature 1\")\n", + " feature_y = Dropdown(description=\"Feature 2\")\n", + "\n", + " feature_x.options = [\n", + " x for x in features.columns if x not in [label_column] + group_columns\n", + " ]\n", + " feature_y.options = [\n", + " x for x in features.columns if x not in [label_column] + group_columns\n", + " ]\n", "\n", " feature1 = feature_x.options[0]\n", " feature2 = feature_y.options[1]\n", - " \n", + "\n", " feature_y.value = feature2\n", "\n", - " tt = Tooltip(fields=['name'], labels=[', '.join(['index', label_column]+group_columns)])\n", - " \n", + " tt = Tooltip(\n", + " fields=[\"name\"], labels=[\", \".join([\"index\", label_column] + group_columns)]\n", + " )\n", + "\n", " scatters = []\n", " hists_y = []\n", " hists_x = []\n", "\n", - "\n", " h_bins_x = get_h_bins(features[[feature1]], bins, f_lim)\n", " h_bins_y = get_h_bins(features[[feature2]], bins, f_lim)\n", "\n", " for index, group in enumerate(features.groupby([label_column])):\n", - " \n", + "\n", " # put the label column and any group column data in the tooltip\n", " names = []\n", " for row in range(group[1].shape[0]):\n", - " names.append('{},'.format(row)+','.join([str(x) for x in group[1][[label_column]+group_columns].iloc[row].values]))\n", - " \n", + " names.append(\n", + " \"{},\".format(row)\n", + " + \",\".join(\n", + " [\n", + " str(x)\n", + " for x in group[1][[label_column] + group_columns]\n", + " .iloc[row]\n", + " .values\n", + " ]\n", + " )\n", + " )\n", + "\n", " # create a scatter plot for each group\n", - " scatters.append(Scatter(x=group[1][feature1].values,\n", - " y=group[1][feature2].values,\n", - " names=names,\n", - " display_names=False,\n", - " opacities=[0.5],\n", - " default_size=30,\n", - " scales={'x': sc_x, 'y': sc_y}, \n", - " colors=[colors[index]],\n", - " tooltip=tt,\n", - " ))\n", - " \n", + " scatters.append(\n", + " Scatter(\n", + " x=group[1][feature1].values,\n", + " y=group[1][feature2].values,\n", + " names=names,\n", + " display_names=False,\n", + " opacities=[0.5],\n", + " default_size=30,\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " colors=[colors[index]],\n", + " tooltip=tt,\n", + " )\n", + " )\n", + "\n", " # create a histograms using a bar chart for each group\n", " # histogram plot for bqplot does not have enough options (no setting range, no setting orientation)\n", " h_y, h_x = np.histogram(group[1][feature1].values, bins=h_bins_x)\n", - " hists_x.append(Bars(x=h_x,\n", - " y=h_y,\n", - " opacities=[0.3]*bins,\n", - " scales={'x': sc_x, 'y': scale_y},\n", - " colors=[colors[index]],\n", - " orientation='vertical'))\n", - " \n", - " \n", + " hists_x.append(\n", + " Bars(\n", + " x=h_x,\n", + " y=h_y,\n", + " opacities=[0.3] * bins,\n", + " scales={\"x\": sc_x, \"y\": scale_y},\n", + " colors=[colors[index]],\n", + " orientation=\"vertical\",\n", + " )\n", + " )\n", + "\n", " h_y, h_x = np.histogram(group[1][feature2].values, bins=h_bins_y)\n", - " hists_y.append(Bars(x=h_x,\n", - " y=h_y,\n", - " opacities=[0.3]*bins,\n", - " scales={'x': sc_x, 'y': scale_y},\n", - " colors=[colors[index]],\n", - " orientation='horizontal'))\n", - " \n", + " hists_y.append(\n", + " Bars(\n", + " x=h_x,\n", + " y=h_y,\n", + " opacities=[0.3] * bins,\n", + " scales={\"x\": sc_x, \"y\": scale_y},\n", + " colors=[colors[index]],\n", + " orientation=\"horizontal\",\n", + " )\n", + " )\n", "\n", " # legend will show the names of the labels as well as a total count of each\n", - " legend_bar = Bars(x=features.groupby(label_column).count()[count_column].index,\n", - " y=features.groupby(label_column).count()[count_column].values,\n", - " colors=colors,\n", - " opacities=[0.3]*6,\n", - " scales={'x': x_ord_legend, 'y':y_lin_legend},\n", - " orientation='horizontal')\n", - "\n", - " ax_x_legend = Axis(scale=x_ord_legend, \n", - " tick_style={'font-size':24}, \n", - " label='', \n", - " orientation='vertical',\n", - " tick_values=features.groupby(label_column).count()[count_column].index)\n", - "\n", - " ax_y_legend = Axis(scale=y_lin_legend,\n", - " orientation='horizontal',\n", - " label='Total', \n", - " color=box_color,\n", - " num_ticks=4)\n", - "\n", - " #these are blank axes that are used to fill in the border for the top and right of the figures\n", - " ax_top = Axis(scale=sc_x, color=box_color, side='top', tick_style={'font-size':0})\n", - " ax_right = Axis(scale=sc_x, color=box_color, side='right', tick_style={'font-size':0})\n", - " ax_left = Axis(scale=sc_x, color=box_color, side='left', tick_style={'font-size':0})\n", - " ax_bottom = Axis(scale=sc_x, color=box_color, side='bottom', tick_style={'font-size':0})\n", - " ax_top = Axis(scale=sc_x, color=box_color, side='top', num_ticks=0)\n", - " ax_right = Axis(scale=sc_x, color=box_color, side='right', num_ticks=0)\n", - " ax_left = Axis(scale=sc_x, color=box_color, side='left', num_ticks=0)\n", - " ax_bottom = Axis(scale=sc_x, color=box_color, side='bottom', num_ticks=0)\n", - "\n", - " #scatter plot axis\n", + " legend_bar = Bars(\n", + " x=features.groupby(label_column).count()[count_column].index,\n", + " y=features.groupby(label_column).count()[count_column].values,\n", + " colors=colors,\n", + " opacities=[0.3] * 6,\n", + " scales={\"x\": x_ord_legend, \"y\": y_lin_legend},\n", + " orientation=\"horizontal\",\n", + " )\n", + "\n", + " ax_x_legend = Axis(\n", + " scale=x_ord_legend,\n", + " tick_style={\"font-size\": 24},\n", + " label=\"\",\n", + " orientation=\"vertical\",\n", + " tick_values=features.groupby(label_column).count()[count_column].index,\n", + " )\n", + "\n", + " ax_y_legend = Axis(\n", + " scale=y_lin_legend,\n", + " orientation=\"horizontal\",\n", + " label=\"Total\",\n", + " color=box_color,\n", + " num_ticks=4,\n", + " )\n", + "\n", + " # these are blank axes that are used to fill in the border for the top and right of the figures\n", + " ax_top = Axis(scale=sc_x, color=box_color, side=\"top\", tick_style={\"font-size\": 0})\n", + " ax_right = Axis(\n", + " scale=sc_x, color=box_color, side=\"right\", tick_style={\"font-size\": 0}\n", + " )\n", + " ax_left = Axis(\n", + " scale=sc_x, color=box_color, side=\"left\", tick_style={\"font-size\": 0}\n", + " )\n", + " ax_bottom = Axis(\n", + " scale=sc_x, color=box_color, side=\"bottom\", tick_style={\"font-size\": 0}\n", + " )\n", + " ax_top = Axis(scale=sc_x, color=box_color, side=\"top\", num_ticks=0)\n", + " ax_right = Axis(scale=sc_x, color=box_color, side=\"right\", num_ticks=0)\n", + " ax_left = Axis(scale=sc_x, color=box_color, side=\"left\", num_ticks=0)\n", + " ax_bottom = Axis(scale=sc_x, color=box_color, side=\"bottom\", num_ticks=0)\n", + "\n", + " # scatter plot axis\n", " ax_x = Axis(label=feature1, scale=sc_x, color=box_color)\n", - " ax_y = Axis(label=feature2, scale=sc_y, orientation='vertical', color=box_color)\n", - "\n", - " #count column of histogram\n", - " ax_count_vert = Axis(label='', scale=scale_y, orientation='vertical', color=box_color, num_ticks=5)\n", - " ax_count_horiz = Axis(label='', scale=scale_y, orientation='horizontal', color=box_color, num_ticks=5)\n", - "\n", - " #histogram bin axis\n", - " ax_hist_x = Axis(label='', scale=sc_x, orientation='vertical', color=box_color)\n", - " ax_hist_y = Axis(label='', scale=sc_x, orientation='horizontal', color=box_color)\n", - "\n", - " #create figures for each plot\n", - " f_scatter = Figure(axes=[ax_x, ax_y, ax_top, ax_right],\n", - " background_style={'fill':'white'}, #css is inserted directly\n", - " marks=scatters, \n", - " min_aspect_ratio=1,\n", - " max_aspect_ratio=1,\n", - " fig_margin = {\"top\":0, \"bottom\":60, \"left\":60, \"right\":0},\n", - " )\n", - "\n", - " f_hists_y = Figure(axes=[ax_left, ax_count_horiz, ax_top, ax_right], \n", - " background_style={'fill':'white'},\n", - " marks=hists_y, \n", - " min_aspect_ratio=.33,\n", - " max_aspect_ratio=.33,\n", - " fig_margin = {\"top\":0, \"bottom\":60, \"left\":10, \"right\":0},\n", - " )\n", - "\n", - " f_hists_x = Figure(axes=[ax_count_vert, ax_bottom, ax_top, ax_right],\n", - " background_style={'fill':'white'}, \n", - " marks=hists_x,\n", - " min_aspect_ratio=3, \n", - " max_aspect_ratio=3,\n", - " fig_margin = {\"top\":20, \"bottom\":10, \"left\":60, \"right\":0},\n", - " )\n", - "\n", - " f_legend = Figure(marks=[legend_bar], axes=[ax_x_legend, ax_y_legend], title='',\n", - " legend_location ='bottom-right',\n", - " background_style = {'fill':'white'},\n", - " min_aspect_ratio=1,\n", - " max_aspect_ratio=1,\n", - " fig_margin = {\"top\":10, \"bottom\":30, \"left\":20, \"right\":20})\n", - "\n", + " ax_y = Axis(label=feature2, scale=sc_y, orientation=\"vertical\", color=box_color)\n", + "\n", + " # count column of histogram\n", + " ax_count_vert = Axis(\n", + " label=\"\", scale=scale_y, orientation=\"vertical\", color=box_color, num_ticks=5\n", + " )\n", + " ax_count_horiz = Axis(\n", + " label=\"\", scale=scale_y, orientation=\"horizontal\", color=box_color, num_ticks=5\n", + " )\n", + "\n", + " # histogram bin axis\n", + " ax_hist_x = Axis(label=\"\", scale=sc_x, orientation=\"vertical\", color=box_color)\n", + " ax_hist_y = Axis(label=\"\", scale=sc_x, orientation=\"horizontal\", color=box_color)\n", + "\n", + " # create figures for each plot\n", + " f_scatter = Figure(\n", + " axes=[ax_x, ax_y, ax_top, ax_right],\n", + " background_style={\"fill\": \"white\"}, # css is inserted directly\n", + " marks=scatters,\n", + " min_aspect_ratio=1,\n", + " max_aspect_ratio=1,\n", + " fig_margin={\"top\": 0, \"bottom\": 60, \"left\": 60, \"right\": 0},\n", + " )\n", + "\n", + " f_hists_y = Figure(\n", + " axes=[ax_left, ax_count_horiz, ax_top, ax_right],\n", + " background_style={\"fill\": \"white\"},\n", + " marks=hists_y,\n", + " min_aspect_ratio=0.33,\n", + " max_aspect_ratio=0.33,\n", + " fig_margin={\"top\": 0, \"bottom\": 60, \"left\": 10, \"right\": 0},\n", + " )\n", + "\n", + " f_hists_x = Figure(\n", + " axes=[ax_count_vert, ax_bottom, ax_top, ax_right],\n", + " background_style={\"fill\": \"white\"},\n", + " marks=hists_x,\n", + " min_aspect_ratio=3,\n", + " max_aspect_ratio=3,\n", + " fig_margin={\"top\": 20, \"bottom\": 10, \"left\": 60, \"right\": 0},\n", + " )\n", + "\n", + " f_legend = Figure(\n", + " marks=[legend_bar],\n", + " axes=[ax_x_legend, ax_y_legend],\n", + " title=\"\",\n", + " legend_location=\"bottom-right\",\n", + " background_style={\"fill\": \"white\"},\n", + " min_aspect_ratio=1,\n", + " max_aspect_ratio=1,\n", + " fig_margin={\"top\": 10, \"bottom\": 30, \"left\": 20, \"right\": 20},\n", + " )\n", "\n", " # we already set the ratios, but it is necessary to set the size explicitly anyway\n", " # this is kind of cool, inserts this into the style in html\n", @@ -267,13 +323,17 @@ " ax_y.label = feature_y.value\n", "\n", " # when the user selects a different feature, switch the data plotted\n", - " feature_x.observe(change_x_feature, 'value')\n", - " feature_y.observe(change_y_feature, 'value')\n", - "\n", - " #return the stacked figures to be plotted\n", - " return VBox([ HBox([feature_x, feature_y]),\n", - " HBox([f_hists_x, f_legend]), \n", - " HBox([f_scatter, f_hists_y])])" + " feature_x.observe(change_x_feature, \"value\")\n", + " feature_y.observe(change_y_feature, \"value\")\n", + "\n", + " # return the stacked figures to be plotted\n", + " return VBox(\n", + " [\n", + " HBox([feature_x, feature_y]),\n", + " HBox([f_hists_x, f_legend]),\n", + " HBox([f_scatter, f_hists_y]),\n", + " ]\n", + " )" ] }, { @@ -308,27 +368,23 @@ "\n", "digits = load_iris()\n", "data = scale(digits.data)\n", - "n_features=4\n", - "#n_pca=3\n", - "#pca = PCA(n_components=n_pca).fit(data)\n", - "df = pd.DataFrame(data, columns=['feature_{}'.format(x) for x in range(n_features)])\n", - "df['leaf'] = digits.target\n", - "df['extra_info'] = [np.random.randint(100) for x in range(digits.target.shape[0])]" + "n_features = 4\n", + "# n_pca=3\n", + "# pca = PCA(n_components=n_pca).fit(data)\n", + "df = pd.DataFrame(data, columns=[\"feature_{}\".format(x) for x in range(n_features)])\n", + "df[\"leaf\"] = digits.target\n", + "df[\"extra_info\"] = [np.random.randint(100) for x in range(digits.target.shape[0])]" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ - "feature_vector_distribution(df, 'leaf',\n", - " group_columns=['extra_info'],\n", - " bins=25,\n", - " f_lim = {'min':-3, 'max':3}\n", - " )" + "feature_vector_distribution(\n", + " df, \"leaf\", group_columns=[\"extra_info\"], bins=25, f_lim={\"min\": -3, \"max\": 3}\n", + ")" ] }, { @@ -355,26 +411,24 @@ "digits = load_digits()\n", "data = scale(digits.data)\n", "\n", - "n_pca=10\n", + "n_pca = 10\n", "pca = PCA(n_components=n_pca).fit(data)\n", - "df = pd.DataFrame(pca.transform(data), columns=['pca_{}'.format(x) for x in range(n_pca)])\n", - "df['digit'] = digits.target\n", - "df['test'] = [np.random.randint(100) for x in range(digits.target.shape[0])]" + "df = pd.DataFrame(\n", + " pca.transform(data), columns=[\"pca_{}\".format(x) for x in range(n_pca)]\n", + ")\n", + "df[\"digit\"] = digits.target\n", + "df[\"test\"] = [np.random.randint(100) for x in range(digits.target.shape[0])]" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ - "feature_vector_distribution(df, 'digit',\n", - " group_columns=['test'],\n", - " bins=20,\n", - " f_lim = {'min':-7, 'max':7}\n", - " )" + "feature_vector_distribution(\n", + " df, \"digit\", group_columns=[\"test\"], bins=20, f_lim={\"min\": -7, \"max\": 7}\n", + ")" ] } ], diff --git a/examples/Applications/Index.ipynb b/examples/Applications/Index.ipynb index c01880335..a62eb596b 100644 --- a/examples/Applications/Index.ipynb +++ b/examples/Applications/Index.ipynb @@ -6,21 +6,28 @@ "source": [ "## Applications\n", "\n", - "Index of advanced applications and dashboards built using `bqplot` and `ipywidgets`. \n", + "Index of advanced applications and dashboards built using `bqplot` and `ipywidgets`.\n", "\n", "Some of these examples will not be rendered well in the output cell of the notebook. These can be rendered on full screen using [voila](https://github.com/voila-dashboards/voila).\n", "\n", - "1. [Logs Analytics](Logs%20Analytics/Logs%20Dashboard.ipynb)\n", - "2. Wealth Of Nations\n", + "## General\n", + "* [Logs Analytics](Logs%20Analytics/Logs%20Dashboard.ipynb)\n", + "* Wealth Of Nations\n", " * [Bubble Chart](Wealth%20Of%20Nations/Bubble%20Chart.ipynb)\n", " * [Choropleth](Wealth%20Of%20Nations/Choropleth.ipynb)\n", - "3. [US Equity Index Performance](Equity%20Index%20Performance/Time%20Series.ipynb)" + "\n", + "## Data Science and Machine Learning\n", + "\n", + "\n", + "## Finance\n", + "* [US Equity Index Performance](Equity%20Index%20Performance/Time%20Series.ipynb)\n", + "* [Yield Curve PCA](Yield%20Curve%20PCA/Yield%20Curve%20PCA.ipynb)" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -34,9 +41,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.9.7" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/examples/Applications/Logs Analytics/Logs Dashboard.ipynb b/examples/Applications/Logs Analytics/Logs Dashboard.ipynb index 869309ed4..cf481c658 100644 --- a/examples/Applications/Logs Analytics/Logs Dashboard.ipynb +++ b/examples/Applications/Logs Analytics/Logs Dashboard.ipynb @@ -40,13 +40,13 @@ " map integer http status to string status code\n", " \"\"\"\n", " if x >= 200 and x < 300:\n", - " return 'SUCCESS'\n", + " return \"SUCCESS\"\n", " elif x >= 300 and x < 400:\n", - " return 'REDIRECT'\n", + " return \"REDIRECT\"\n", " elif x >= 400 and x < 500:\n", - " return 'CLIENT ERROR'\n", + " return \"CLIENT ERROR\"\n", " elif x >= 500:\n", - " return 'SERVER ERROR'" + " return \"SERVER ERROR\"" ] }, { @@ -59,11 +59,13 @@ " \"\"\"\n", " get event counts by hour\n", " \"\"\"\n", - " return log_data_slice['status_code']\\\n", - " .groupby(lambda x: x.hour)\\\n", - " .count()\\\n", - " .reindex(np.arange(24))\\\n", - " .fillna(0)" + " return (\n", + " log_data_slice[\"status_code\"]\n", + " .groupby(lambda x: x.hour)\n", + " .count()\n", + " .reindex(np.arange(24))\n", + " .fillna(0)\n", + " )" ] }, { @@ -73,20 +75,30 @@ "outputs": [], "source": [ "# load data into pandas and do some munging\n", - "log_data = pd.read_csv('access.log', sep=' ', header=None)\n", + "log_data = pd.read_csv(\"access.log\", sep=\" \", header=None)\n", "log_data.drop([1, 2], axis=1, inplace=True)\n", - "log_data.columns = ['ip_address', 'timestamp', 'request', 'status', 'col1', 'url', 'agent', 'col2']\n", + "log_data.columns = [\n", + " \"ip_address\",\n", + " \"timestamp\",\n", + " \"request\",\n", + " \"status\",\n", + " \"col1\",\n", + " \"url\",\n", + " \"agent\",\n", + " \"col2\",\n", + "]\n", "\n", - "log_data.index = pd.to_datetime(log_data['timestamp'].str.replace('[\\[\\]]', ''), \n", - " format='%d/%b/%Y:%H:%M:%S')\n", - "log_data.drop('timestamp', axis=1, inplace=True)\n", + "log_data.index = pd.to_datetime(\n", + " log_data[\"timestamp\"].str.replace(\"[\\[\\]]\", \"\"), format=\"%d/%b/%Y:%H:%M:%S\"\n", + ")\n", + "log_data.drop(\"timestamp\", axis=1, inplace=True)\n", "\n", "# add extra columns for easy querying\n", - "log_data['status_code'] = log_data['status'].map(get_status_code)\n", - "log_data['category'] = log_data['request'].str.extract('categoryId=(.*)&', expand=False)\n", - "log_data['product'] = log_data['request'].str.extract('productId=(.*)&', expand=False)\n", - "log_data['hour'] = log_data.index.map(lambda x: x.hour)\n", - "log_data['day'] = log_data.index.strftime('%Y-%m-%d')" + "log_data[\"status_code\"] = log_data[\"status\"].map(get_status_code)\n", + "log_data[\"category\"] = log_data[\"request\"].str.extract(\"categoryId=(.*)&\", expand=False)\n", + "log_data[\"product\"] = log_data[\"request\"].str.extract(\"productId=(.*)&\", expand=False)\n", + "log_data[\"hour\"] = log_data.index.map(lambda x: x.hour)\n", + "log_data[\"day\"] = log_data.index.strftime(\"%Y-%m-%d\")" ] }, { @@ -95,16 +107,16 @@ "metadata": {}, "outputs": [], "source": [ - "all_days = log_data['day'].value_counts().index\n", + "all_days = log_data[\"day\"].value_counts().index\n", "all_hours = np.arange(24)\n", - "all_categories = list(log_data['category'].value_counts().index)\n", - "all_products = list(log_data['product'].value_counts().index)\n", - "all_status_codes = list(log_data['status_code'].value_counts().index)\n", + "all_categories = list(log_data[\"category\"].value_counts().index)\n", + "all_products = list(log_data[\"product\"].value_counts().index)\n", + "all_status_codes = list(log_data[\"status_code\"].value_counts().index)\n", "\n", "category_colors = dict(zip(all_categories, bq.CATEGORY10))\n", - "status_label_colors = dict([('SUCCESS', '#006d2c'), \n", - " ('CLIENT ERROR', '#fc8d59'), \n", - " ('SERVER ERROR', '#a63603')])" + "status_label_colors = dict(\n", + " [(\"SUCCESS\", \"#006d2c\"), (\"CLIENT ERROR\", \"#fc8d59\"), (\"SERVER ERROR\", \"#a63603\")]\n", + ")" ] }, { @@ -116,79 +128,106 @@ "outputs": [], "source": [ "# daily events bar chart\n", - "daily_events_fig = plt.figure(title='Daily Events', \n", - " animation_duration=1000,\n", - " layout=widgets.Layout(width='900px', height='500px'))\n", + "daily_events_fig = plt.figure(\n", + " title=\"Daily Events\",\n", + " animation_duration=1000,\n", + " layout=widgets.Layout(width=\"900px\", height=\"500px\"),\n", + ")\n", "\n", - "plt.scales(scales={'x': bq.DateScale()})\n", + "plt.scales(scales={\"x\": bq.DateScale()})\n", "\n", "# intsel = BrushIntervalSelector(scale=, marks=[hist])\n", - "bar_axes_options = {'x': {'grid_lines': 'none'},\n", - " 'y': {'tick_format': ','}}\n", - "common_bar_options = dict(interactions={'click': 'select'},\n", - " selected_style={'stroke': 'Red',\n", - " 'stroke-width': 4},\n", - " axes_options=bar_axes_options)\n", - "daily_events_bar = plt.bar(pd.to_datetime(all_days), [],\n", - " colors=['dodgerblue'], \n", - " opacities=[.8] * len(all_days),\n", - " **common_bar_options)\n", + "bar_axes_options = {\"x\": {\"grid_lines\": \"none\"}, \"y\": {\"tick_format\": \",\"}}\n", + "common_bar_options = dict(\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"stroke\": \"Red\", \"stroke-width\": 4},\n", + " axes_options=bar_axes_options,\n", + ")\n", + "daily_events_bar = plt.bar(\n", + " pd.to_datetime(all_days),\n", + " [],\n", + " colors=[\"dodgerblue\"],\n", + " opacities=[0.8] * len(all_days),\n", + " **common_bar_options\n", + ")\n", "\n", "num_days = len(all_days)\n", - "filtered_daily_events_bar = plt.bar(pd.to_datetime(all_days),\n", - " np.zeros(num_days),\n", - " colors=['lightgreen'], \n", - " opacities=[.8] * num_days,\n", - " axes_options=bar_axes_options)\n", + "filtered_daily_events_bar = plt.bar(\n", + " pd.to_datetime(all_days),\n", + " np.zeros(num_days),\n", + " colors=[\"lightgreen\"],\n", + " opacities=[0.8] * num_days,\n", + " axes_options=bar_axes_options,\n", + ")\n", "\n", "# hourly events line chart\n", - "hourly_events_fig = plt.figure(title='Hourly Events',\n", - " animation_duration=1000,\n", - " layout=widgets.Layout(width='600px', height='500px'))\n", + "hourly_events_fig = plt.figure(\n", + " title=\"Hourly Events\",\n", + " animation_duration=1000,\n", + " layout=widgets.Layout(width=\"600px\", height=\"500px\"),\n", + ")\n", "\n", - "plt.scales(scales={'x': bq.OrdinalScale()})\n", - "hourly_events_bar = plt.bar(all_hours,[],\n", - " colors=['goldenrod'],\n", - " opacities=[.8] * 24,\n", - " padding=.2,\n", - " **common_bar_options)\n", + "plt.scales(scales={\"x\": bq.OrdinalScale()})\n", + "hourly_events_bar = plt.bar(\n", + " all_hours,\n", + " [],\n", + " colors=[\"goldenrod\"],\n", + " opacities=[0.8] * 24,\n", + " padding=0.2,\n", + " **common_bar_options\n", + ")\n", "\n", - "filtered_hourly_events_bar = plt.bar(all_hours, [],\n", - " colors=['lightgreen'],\n", - " opacities=[.8] * 24,\n", - " padding=.2,\n", - " axes_options=bar_axes_options)\n", + "filtered_hourly_events_bar = plt.bar(\n", + " all_hours,\n", + " [],\n", + " colors=[\"lightgreen\"],\n", + " opacities=[0.8] * 24,\n", + " padding=0.2,\n", + " axes_options=bar_axes_options,\n", + ")\n", "\n", - "products_fig = plt.figure(title='Events By Product', \n", - " animation_duration=1000,\n", - " fig_margin=dict(top=60, bottom=20, left=100, right=40),\n", - " layout=widgets.Layout(width='550px', height='500px'))\n", - "products_bar = plt.bar(all_products, [],\n", - " colors=['salmon'],\n", - " orientation='horizontal',\n", - " opacities=[.8] * len(all_products),\n", - " padding=.2,\n", - " **common_bar_options)\n", + "products_fig = plt.figure(\n", + " title=\"Events By Product\",\n", + " animation_duration=1000,\n", + " fig_margin=dict(top=60, bottom=20, left=100, right=40),\n", + " layout=widgets.Layout(width=\"550px\", height=\"500px\"),\n", + ")\n", + "products_bar = plt.bar(\n", + " all_products,\n", + " [],\n", + " colors=[\"salmon\"],\n", + " orientation=\"horizontal\",\n", + " opacities=[0.8] * len(all_products),\n", + " padding=0.2,\n", + " **common_bar_options\n", + ")\n", "\n", - "common_pie_args = dict(display_labels='outside',\n", - " interactions={'click': 'select'},\n", - " selected_style={'stroke': 'white',\n", - " 'stroke-width': 3},\n", - " inner_radius=80,\n", - " apply_clip=False)\n", + "common_pie_args = dict(\n", + " display_labels=\"outside\",\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"stroke\": \"white\", \"stroke-width\": 3},\n", + " inner_radius=80,\n", + " apply_clip=False,\n", + ")\n", "# categories pie chart\n", - "categories_fig = plt.figure(title='Events By Category', animation_duration=1000,\n", - " layout=widgets.Layout(width='550px', height='500px'))\n", + "categories_fig = plt.figure(\n", + " title=\"Events By Category\",\n", + " animation_duration=1000,\n", + " layout=widgets.Layout(width=\"550px\", height=\"500px\"),\n", + ")\n", "categories_pie = plt.pie([], labels=all_categories, **common_pie_args)\n", "\n", "# status codes pie chart\n", - "status_codes_fig = plt.figure(title='Events By Status', animation_duration=1000,\n", - " layout=widgets.Layout(width='550px', height='500px'))\n", + "status_codes_fig = plt.figure(\n", + " title=\"Events By Status\",\n", + " animation_duration=1000,\n", + " layout=widgets.Layout(width=\"550px\", height=\"500px\"),\n", + ")\n", "status_codes_pie = plt.pie([], labels=all_status_codes, **common_pie_args)\n", "\n", "# buttons for updating and resetting filters\n", - "update_btn = widgets.Button(description='Update', button_style='Success')\n", - "reset_btn = widgets.Button(description='Reset', button_style='Success')" + "update_btn = widgets.Button(description=\"Update\", button_style=\"Success\")\n", + "reset_btn = widgets.Button(description=\"Reset\", button_style=\"Success\")" ] }, { @@ -197,9 +236,15 @@ "metadata": {}, "outputs": [], "source": [ - "fields = ['day', 'hour', 'product', 'category', 'status_code']\n", + "fields = [\"day\", \"hour\", \"product\", \"category\", \"status_code\"]\n", "field_vals = [all_days, all_hours, all_products, all_categories, all_status_codes]\n", - "plots = [daily_events_bar, hourly_events_bar, products_bar, categories_pie, status_codes_pie]" + "plots = [\n", + " daily_events_bar,\n", + " hourly_events_bar,\n", + " products_bar,\n", + " categories_pie,\n", + " status_codes_pie,\n", + "]" ] }, { @@ -225,7 +270,7 @@ "source": [ "def apply_filters(df, filters):\n", " filtered_df = df\n", - " \n", + "\n", " for k, v in filters.items():\n", " if v and len(v) > 0:\n", " filtered_df = filtered_df[filtered_df[k].isin(v)]\n", @@ -239,37 +284,39 @@ "outputs": [], "source": [ "def update_plots(*args):\n", - " global filters, filtered_log_data \n", - " filters = generate_filters() \n", + " global filters, filtered_log_data\n", + " filters = generate_filters()\n", " filtered_log_data = apply_filters(log_data, filters)\n", - " \n", - " daily_events = filtered_log_data\\\n", - " .resample('D')\\\n", - " .count()['status_code']\\\n", - " .reindex(pd.to_datetime(all_days))\\\n", + "\n", + " daily_events = (\n", + " filtered_log_data.resample(\"D\")\n", + " .count()[\"status_code\"]\n", + " .reindex(pd.to_datetime(all_days))\n", " .fillna(0)\n", + " )\n", " daily_events_bar.y = daily_events\n", - " \n", - " hourly_events_bar.y = get_events_by_hour(filtered_log_data) \n", - " \n", - " products_bar.y = filtered_log_data['product']\\\n", - " .value_counts()\\\n", - " .reindex(all_products)\\\n", - " .fillna(0)\n", - " \n", - " events_by_category = filtered_log_data['category'].value_counts()\n", - " \n", + "\n", + " hourly_events_bar.y = get_events_by_hour(filtered_log_data)\n", + "\n", + " products_bar.y = (\n", + " filtered_log_data[\"product\"].value_counts().reindex(all_products).fillna(0)\n", + " )\n", + "\n", + " events_by_category = filtered_log_data[\"category\"].value_counts()\n", + "\n", " with categories_pie.hold_sync():\n", " categories_pie.labels = list(events_by_category.index)\n", " categories_pie.sizes = events_by_category\n", " categories_pie.colors = [category_colors[d] for d in categories_pie.labels]\n", - " \n", - " events_by_status_code = filtered_log_data['status_code'].value_counts()\n", - " \n", + "\n", + " events_by_status_code = filtered_log_data[\"status_code\"].value_counts()\n", + "\n", " with status_codes_pie.hold_sync():\n", " status_codes_pie.labels = list(events_by_status_code.index)\n", " status_codes_pie.sizes = events_by_status_code.values\n", - " status_codes_pie.colors = [status_label_colors[d] for d in status_codes_pie.labels]" + " status_codes_pie.colors = [\n", + " status_label_colors[d] for d in status_codes_pie.labels\n", + " ]" ] }, { @@ -282,10 +329,13 @@ " for plot in plots:\n", " plot.selected = None\n", " update_plots(None)\n", - " \n", + "\n", + "\n", "update_btn.on_click(lambda btn: update_plots(None))\n", "reset_btn.on_click(lambda btn: reset_filters())\n", - "btns_layout = widgets.VBox([update_btn, reset_btn], layout=widgets.Layout(overflow_x='hidden'))" + "btns_layout = widgets.VBox(\n", + " [update_btn, reset_btn], layout=widgets.Layout(overflow_x=\"hidden\")\n", + ")" ] }, { @@ -300,7 +350,7 @@ "\n", "parent_plots = widgets.HBox([daily_events_fig, hourly_events_fig])\n", "child_plots = widgets.HBox([products_fig, categories_fig, status_codes_fig])\n", - "widgets.VBox([widgets.HBox([parent_plots, btns_layout]),child_plots])" + "widgets.VBox([widgets.HBox([parent_plots, btns_layout]), child_plots])" ] } ], diff --git a/examples/Applications/Mobile Patent Suits.ipynb b/examples/Applications/Mobile Patent Suits.ipynb index d7a41f611..cead2ba63 100644 --- a/examples/Applications/Mobile Patent Suits.ipynb +++ b/examples/Applications/Mobile Patent Suits.ipynb @@ -20,34 +20,34 @@ "source": [ "# mobile patent suits - http://bl.ocks.org/mbostock/1153292\n", "suits = [\n", - " {'source': 'Microsoft', 'target': 'Amazon', 'type': 'licensing'},\n", - " {'source': 'Microsoft', 'target': 'HTC', 'type': 'licensing'},\n", - " {'source': 'Samsung', 'target': 'Apple', 'type': 'suit'},\n", - " {'source': 'Motorola', 'target': 'Apple', 'type': 'suit'},\n", - " {'source': 'Nokia', 'target': 'Apple', 'type': 'resolved'},\n", - " {'source': 'HTC', 'target': 'Apple', 'type': 'suit'},\n", - " {'source': 'Kodak', 'target': 'Apple', 'type': 'suit'},\n", - " {'source': 'Microsoft', 'target': 'Barnes & Noble', 'type': 'suit'},\n", - " {'source': 'Microsoft', 'target': 'Foxconn', 'type': 'suit'},\n", - " {'source': 'Oracle', 'target': 'Google', 'type': 'suit'},\n", - " {'source': 'Apple', 'target': 'HTC', 'type': 'suit'},\n", - " {'source': 'Microsoft', 'target': 'Inventec', 'type': 'suit'},\n", - " {'source': 'Samsung', 'target': 'Kodak', 'type': 'resolved'},\n", - " {'source': 'LG', 'target': 'Kodak', 'type': 'resolved'},\n", - " {'source': 'RIM', 'target': 'Kodak', 'type': 'suit'},\n", - " {'source': 'Sony', 'target': 'LG', 'type': 'suit'},\n", - " {'source': 'Kodak', 'target': 'LG', 'type': 'resolved'},\n", - " {'source': 'Apple', 'target': 'Nokia', 'type': 'resolved'},\n", - " {'source': 'Qualcomm', 'target': 'Nokia', 'type': 'resolved'},\n", - " {'source': 'Apple', 'target': 'Motorola', 'type': 'suit'},\n", - " {'source': 'Microsoft', 'target': 'Motorola', 'type': 'suit'},\n", - " {'source': 'Motorola', 'target': 'Microsoft', 'type': 'suit'},\n", - " {'source': 'Huawei', 'target': 'ZTE', 'type': 'suit'},\n", - " {'source': 'Ericsson', 'target': 'ZTE', 'type': 'suit'},\n", - " {'source': 'Kodak', 'target': 'Samsung', 'type': 'resolved'},\n", - " {'source': 'Apple', 'target': 'Samsung', 'type': 'suit'},\n", - " {'source': 'Kodak', 'target': 'RIM', 'type': 'suit'},\n", - " {'source': 'Nokia', 'target': 'Qualcomm', 'type': 'suit'},\n", + " {\"source\": \"Microsoft\", \"target\": \"Amazon\", \"type\": \"licensing\"},\n", + " {\"source\": \"Microsoft\", \"target\": \"HTC\", \"type\": \"licensing\"},\n", + " {\"source\": \"Samsung\", \"target\": \"Apple\", \"type\": \"suit\"},\n", + " {\"source\": \"Motorola\", \"target\": \"Apple\", \"type\": \"suit\"},\n", + " {\"source\": \"Nokia\", \"target\": \"Apple\", \"type\": \"resolved\"},\n", + " {\"source\": \"HTC\", \"target\": \"Apple\", \"type\": \"suit\"},\n", + " {\"source\": \"Kodak\", \"target\": \"Apple\", \"type\": \"suit\"},\n", + " {\"source\": \"Microsoft\", \"target\": \"Barnes & Noble\", \"type\": \"suit\"},\n", + " {\"source\": \"Microsoft\", \"target\": \"Foxconn\", \"type\": \"suit\"},\n", + " {\"source\": \"Oracle\", \"target\": \"Google\", \"type\": \"suit\"},\n", + " {\"source\": \"Apple\", \"target\": \"HTC\", \"type\": \"suit\"},\n", + " {\"source\": \"Microsoft\", \"target\": \"Inventec\", \"type\": \"suit\"},\n", + " {\"source\": \"Samsung\", \"target\": \"Kodak\", \"type\": \"resolved\"},\n", + " {\"source\": \"LG\", \"target\": \"Kodak\", \"type\": \"resolved\"},\n", + " {\"source\": \"RIM\", \"target\": \"Kodak\", \"type\": \"suit\"},\n", + " {\"source\": \"Sony\", \"target\": \"LG\", \"type\": \"suit\"},\n", + " {\"source\": \"Kodak\", \"target\": \"LG\", \"type\": \"resolved\"},\n", + " {\"source\": \"Apple\", \"target\": \"Nokia\", \"type\": \"resolved\"},\n", + " {\"source\": \"Qualcomm\", \"target\": \"Nokia\", \"type\": \"resolved\"},\n", + " {\"source\": \"Apple\", \"target\": \"Motorola\", \"type\": \"suit\"},\n", + " {\"source\": \"Microsoft\", \"target\": \"Motorola\", \"type\": \"suit\"},\n", + " {\"source\": \"Motorola\", \"target\": \"Microsoft\", \"type\": \"suit\"},\n", + " {\"source\": \"Huawei\", \"target\": \"ZTE\", \"type\": \"suit\"},\n", + " {\"source\": \"Ericsson\", \"target\": \"ZTE\", \"type\": \"suit\"},\n", + " {\"source\": \"Kodak\", \"target\": \"Samsung\", \"type\": \"resolved\"},\n", + " {\"source\": \"Apple\", \"target\": \"Samsung\", \"type\": \"suit\"},\n", + " {\"source\": \"Kodak\", \"target\": \"RIM\", \"type\": \"suit\"},\n", + " {\"source\": \"Nokia\", \"target\": \"Qualcomm\", \"type\": \"suit\"},\n", "]" ] }, @@ -58,23 +58,44 @@ "outputs": [], "source": [ "# transform data into nodes and links\n", - "nodes = list(set(chain(*((suit['source'], suit['target']) for suit in suits))))\n", + "nodes = list(set(chain(*((suit[\"source\"], suit[\"target\"]) for suit in suits))))\n", "\n", "# set custom node attrs\n", - "node_data = [{'label': node, 'shape_attrs': {'r': 6}, 'label_display': 'outside'} for node in nodes]\n", + "node_data = [\n", + " {\"label\": node, \"shape_attrs\": {\"r\": 6}, \"label_display\": \"outside\"}\n", + " for node in nodes\n", + "]\n", "# for links, source and target should be indices into the nodes list\n", "nodes_index_map = {node: i for i, node in enumerate(nodes)}\n", - "link_data = [{'source': nodes_index_map[s['source']], \n", - " 'target': nodes_index_map[s['target']], \n", - " 'value': s['type']} for s in suits]\n", + "link_data = [\n", + " {\n", + " \"source\": nodes_index_map[s[\"source\"]],\n", + " \"target\": nodes_index_map[s[\"target\"]],\n", + " \"value\": s[\"type\"],\n", + " }\n", + " for s in suits\n", + "]\n", "\n", "# encode suit type with link color\n", - "link_color_scale = OrdinalColorScale(domain=['licensing', 'suit', 'resolved'], \n", - " colors=['limegreen', 'dodgerblue', 'orangered'])\n", - "graph = Graph(node_data=node_data, link_data=link_data, link_type='arc', \n", - " scales={'link_color': link_color_scale}, colors=['gray'], \n", - " directed=True, link_distance=100, charge=-600)\n", - "Figure(marks=[graph], layout=Layout(height='900px', width='1000px'), title='Mobile Patent Suits')" + "link_color_scale = OrdinalColorScale(\n", + " domain=[\"licensing\", \"suit\", \"resolved\"],\n", + " colors=[\"limegreen\", \"dodgerblue\", \"orangered\"],\n", + ")\n", + "graph = Graph(\n", + " node_data=node_data,\n", + " link_data=link_data,\n", + " link_type=\"arc\",\n", + " scales={\"link_color\": link_color_scale},\n", + " colors=[\"gray\"],\n", + " directed=True,\n", + " link_distance=100,\n", + " charge=-600,\n", + ")\n", + "Figure(\n", + " marks=[graph],\n", + " layout=Layout(height=\"900px\", width=\"1000px\"),\n", + " title=\"Mobile Patent Suits\",\n", + ")" ] } ], diff --git a/examples/Applications/Neural Network.ipynb b/examples/Applications/Neural Network.ipynb index 5228b29d2..a2c4dc879 100644 --- a/examples/Applications/Neural Network.ipynb +++ b/examples/Applications/Neural Network.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This application demonstrates how to build a simple neural network using the Graph mark. \n", - "Interactions can be enabled by adding event handlers (click, hover etc) on the nodes of the network. \n", + "This application demonstrates how to build a simple neural network using the Graph mark.\n", + "Interactions can be enabled by adding event handlers (click, hover etc) on the nodes of the network.\n", "See the [Mark Interactions notebook](../Interactions/Mark%20Interactions.ipynb) and the [Scatter Notebook](../Marks/Object%20Model/Scatter.ipynb) for details." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -23,36 +23,41 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class NeuralNet(Figure):\n", " def __init__(self, **kwargs):\n", - " self.height = kwargs.get('height', 600)\n", - " self.width = kwargs.get('width', 960)\n", - " self.directed_links = kwargs.get('directed_links', False)\n", - " \n", - " self.num_inputs = kwargs['num_inputs']\n", - " self.num_hidden_layers = kwargs['num_hidden_layers']\n", - " self.nodes_output_layer = kwargs['num_outputs']\n", - " self.layer_colors = kwargs.get('layer_colors', \n", - " ['Orange'] * (len(self.num_hidden_layers) + 2))\n", - " \n", + " self.height = kwargs.get(\"height\", 600)\n", + " self.width = kwargs.get(\"width\", 960)\n", + " self.directed_links = kwargs.get(\"directed_links\", False)\n", + "\n", + " self.num_inputs = kwargs[\"num_inputs\"]\n", + " self.num_hidden_layers = kwargs[\"num_hidden_layers\"]\n", + " self.nodes_output_layer = kwargs[\"num_outputs\"]\n", + " self.layer_colors = kwargs.get(\n", + " \"layer_colors\", [\"Orange\"] * (len(self.num_hidden_layers) + 2)\n", + " )\n", + "\n", " self.build_net()\n", " super(NeuralNet, self).__init__(**kwargs)\n", - " \n", + "\n", " def build_net(self):\n", " # create nodes\n", " self.layer_nodes = []\n", - " self.layer_nodes.append(['x' + str(i+1) for i in range(self.num_inputs)])\n", - " \n", + " self.layer_nodes.append([\"x\" + str(i + 1) for i in range(self.num_inputs)])\n", + "\n", " for i, h in enumerate(self.num_hidden_layers):\n", - " self.layer_nodes.append(['h' + str(i+1) + ',' + str(j+1) for j in range(h)])\n", - " self.layer_nodes.append(['y' + str(i+1) for i in range(self.nodes_output_layer)])\n", - " \n", + " self.layer_nodes.append(\n", + " [\"h\" + str(i + 1) + \",\" + str(j + 1) for j in range(h)]\n", + " )\n", + " self.layer_nodes.append(\n", + " [\"y\" + str(i + 1) for i in range(self.nodes_output_layer)]\n", + " )\n", + "\n", " self.flattened_layer_nodes = list(chain(*self.layer_nodes))\n", - " \n", + "\n", " # build link matrix\n", " i = 0\n", " node_indices = {}\n", @@ -62,79 +67,71 @@ " i += 1\n", "\n", " n = len(self.flattened_layer_nodes)\n", - " self.link_matrix = np.empty((n,n))\n", + " self.link_matrix = np.empty((n, n))\n", " self.link_matrix[:] = np.nan\n", "\n", " for i in range(len(self.layer_nodes) - 1):\n", " curr_layer_nodes_indices = [node_indices[d] for d in self.layer_nodes[i]]\n", - " next_layer_nodes = [node_indices[d] for d in self.layer_nodes[i+1]]\n", + " next_layer_nodes = [node_indices[d] for d in self.layer_nodes[i + 1]]\n", " for s, t in product(curr_layer_nodes_indices, next_layer_nodes):\n", " self.link_matrix[s, t] = 1\n", - " \n", + "\n", " # set node x locations\n", - " self.nodes_x = np.repeat(np.linspace(0, 100, \n", - " len(self.layer_nodes) + 1, \n", - " endpoint=False)[1:], \n", - " [len(n) for n in self.layer_nodes])\n", + " self.nodes_x = np.repeat(\n", + " np.linspace(0, 100, len(self.layer_nodes) + 1, endpoint=False)[1:],\n", + " [len(n) for n in self.layer_nodes],\n", + " )\n", "\n", " # set node y locations\n", " self.nodes_y = np.array([])\n", " for layer in self.layer_nodes:\n", " n = len(layer)\n", - " ys = np.linspace(0, 100, n+1, endpoint=False)[1:]\n", + " ys = np.linspace(0, 100, n + 1, endpoint=False)[1:]\n", " self.nodes_y = np.append(self.nodes_y, ys[::-1])\n", - " \n", + "\n", " # set node colors\n", " n_layers = len(self.layer_nodes)\n", - " self.node_colors = np.repeat(np.array(self.layer_colors[:n_layers]), \n", - " [len(layer) for layer in self.layer_nodes]).tolist()\n", - " \n", + " self.node_colors = np.repeat(\n", + " np.array(self.layer_colors[:n_layers]),\n", + " [len(layer) for layer in self.layer_nodes],\n", + " ).tolist()\n", + "\n", " xs = LinearScale(min=0, max=100)\n", " ys = LinearScale(min=0, max=100)\n", - " \n", - " self.graph = Graph(node_data=[{'label': d, \n", - " 'label_display': 'none'} for d in self.flattened_layer_nodes], \n", - " link_matrix=self.link_matrix, \n", - " link_type='line',\n", - " colors=self.node_colors,\n", - " directed=self.directed_links,\n", - " scales={'x': xs, 'y': ys}, \n", - " x=self.nodes_x, \n", - " y=self.nodes_y,\n", - " # color=2 * np.random.rand(len(self.flattened_layer_nodes)) - 1\n", - " )\n", - " self.graph.hovered_style = {'stroke': '1.5'}\n", - " self.graph.unhovered_style = {'opacity': '0.4'}\n", - " \n", - " self.graph.selected_style = {'opacity': '1',\n", - " 'stroke': 'red',\n", - " 'stroke-width': '2.5'}\n", + "\n", + " self.graph = Graph(\n", + " node_data=[\n", + " {\"label\": d, \"label_display\": \"none\"}\n", + " for d in self.flattened_layer_nodes\n", + " ],\n", + " link_matrix=self.link_matrix,\n", + " link_type=\"line\",\n", + " colors=self.node_colors,\n", + " directed=self.directed_links,\n", + " scales={\"x\": xs, \"y\": ys},\n", + " x=self.nodes_x,\n", + " y=self.nodes_y,\n", + " # color=2 * np.random.rand(len(self.flattened_layer_nodes)) - 1\n", + " )\n", + " self.graph.hovered_style = {\"stroke\": \"1.5\"}\n", + " self.graph.unhovered_style = {\"opacity\": \"0.4\"}\n", + "\n", + " self.graph.selected_style = {\n", + " \"opacity\": \"1\",\n", + " \"stroke\": \"red\",\n", + " \"stroke-width\": \"2.5\",\n", + " }\n", " self.marks = [self.graph]\n", - " self.title = 'Neural Network'\n", - " self.layout.width = str(self.width) + 'px'\n", - " self.layout.height = str(self.height) + 'px'" + " self.title = \"Neural Network\"\n", + " self.layout.width = str(self.width) + \"px\"\n", + " self.layout.height = str(self.height) + \"px\"" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b2d75468c39d4bcf896561f72febb74d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "NeuralNet(fig_margin={'top': 60, 'bottom': 60, 'left': 60, 'right': 60}, layout=Layout(height='600px', width='…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "NeuralNet(num_inputs=3, num_hidden_layers=[10, 10, 8, 5], num_outputs=1)" ] diff --git a/examples/Applications/Outlier Detection.ipynb b/examples/Applications/Outlier Detection.ipynb index f6f2c3c9c..63ecfb7ca 100644 --- a/examples/Applications/Outlier Detection.ipynb +++ b/examples/Applications/Outlier Detection.ipynb @@ -21,8 +21,15 @@ "metadata": {}, "outputs": [], "source": [ - "from bqplot import (DateScale, ColorScale, HeatMap, \n", - " Figure, LinearScale, OrdinalScale, Axis)\n", + "from bqplot import (\n", + " DateScale,\n", + " ColorScale,\n", + " HeatMap,\n", + " Figure,\n", + " LinearScale,\n", + " OrdinalScale,\n", + " Axis,\n", + ")\n", "from scipy.stats import percentileofscore\n", "from scipy.interpolate import interp1d\n", "import bqplot.pyplot as plt\n", @@ -32,28 +39,33 @@ "import numpy as np\n", "import pandas as pd\n", "\n", + "\n", "def quantile_space(x, q1=0.1, q2=0.9):\n", - " '''\n", + " \"\"\"\n", " Returns a function that squashes quantiles between q1 and q2\n", - " '''\n", + " \"\"\"\n", " q1_x, q2_x = np.percentile(x, [q1, q2])\n", " qs = np.percentile(x, np.linspace(0, 100, 100))\n", + "\n", " def get_quantile(t):\n", " return np.interp(t, qs, np.linspace(0, 100, 100))\n", + "\n", " def f(y):\n", " return np.interp(get_quantile(y), [0, q1, q2, 100], [-1, 0, 0, 1])\n", + "\n", " return f\n", "\n", + "\n", "class DNA(VBox):\n", - " \n", + "\n", " colors = List()\n", " q1 = Float()\n", " q2 = Float()\n", - " \n", + "\n", " def __init__(self, data, **kwargs):\n", " self.data = data\n", " date_x, date_y = False, False\n", - " transpose = kwargs.pop('transpose', False)\n", + " transpose = kwargs.pop(\"transpose\", False)\n", " if transpose is True:\n", " if type(data.index) is DatetimeIndex:\n", " self.x_scale = DateScale()\n", @@ -66,59 +78,85 @@ " if type(data.columns) is DatetimeIndex:\n", " date_y = True\n", " x, y = data.index.values, list(data.columns.values)\n", - " \n", - " self.q1, self.q2 = kwargs.pop('quantiles', (1, 99))\n", - " \n", - " self.quant_func = quantile_space(self.data.values.flatten(), q1=self.q1, q2=self.q2)\n", - " self.colors = kwargs.pop('colors', ['Red', 'Black', 'Green'])\n", - " \n", + "\n", + " self.q1, self.q2 = kwargs.pop(\"quantiles\", (1, 99))\n", + "\n", + " self.quant_func = quantile_space(\n", + " self.data.values.flatten(), q1=self.q1, q2=self.q2\n", + " )\n", + " self.colors = kwargs.pop(\"colors\", [\"Red\", \"Black\", \"Green\"])\n", + "\n", " self.x_scale = DateScale() if date_x is True else LinearScale()\n", " self.y_scale = DateScale() if date_y is True else OrdinalScale(padding_y=0)\n", " self.color_scale = ColorScale(colors=self.colors)\n", - " self.heat_map = HeatMap(color=self.quant_func(self.data.T), x=x, y=y, scales={'x': self.x_scale, 'y': self.y_scale,\n", - " 'color': self.color_scale})\n", + " self.heat_map = HeatMap(\n", + " color=self.quant_func(self.data.T),\n", + " x=x,\n", + " y=y,\n", + " scales={\"x\": self.x_scale, \"y\": self.y_scale, \"color\": self.color_scale},\n", + " )\n", " self.x_ax = Axis(scale=self.x_scale)\n", - " self.y_ax = Axis(scale=self.y_scale, orientation='vertical')\n", - " show_axes = kwargs.pop('show_axes', True)\n", + " self.y_ax = Axis(scale=self.y_scale, orientation=\"vertical\")\n", + " show_axes = kwargs.pop(\"show_axes\", True)\n", " self.axes = [self.x_ax, self.y_ax] if show_axes is True else []\n", - " \n", - " self.height = kwargs.pop('height', '800px')\n", - " self.layout = kwargs.pop('layout', Layout(width='100%', height=self.height, flex='1'))\n", - " self.fig_margin = kwargs.pop('fig_margin', {'top': 60, 'bottom': 60, 'left': 150, 'right': 0})\n", - " kwargs.setdefault('padding_y', 0.0)\n", - " \n", + "\n", + " self.height = kwargs.pop(\"height\", \"800px\")\n", + " self.layout = kwargs.pop(\n", + " \"layout\", Layout(width=\"100%\", height=self.height, flex=\"1\")\n", + " )\n", + " self.fig_margin = kwargs.pop(\n", + " \"fig_margin\", {\"top\": 60, \"bottom\": 60, \"left\": 150, \"right\": 0}\n", + " )\n", + " kwargs.setdefault(\"padding_y\", 0.0)\n", + "\n", " self.create_interaction(**kwargs)\n", - " \n", - " self.figure = Figure(marks=[self.heat_map], axes=self.axes, fig_margin=self.fig_margin, \n", - " layout=self.layout, min_aspect_ratio=0.,**kwargs)\n", - " \n", - " super(VBox, self).__init__(children=[self.range_slider, self.figure], layout=Layout(align_items='center',\n", - " width='100%',\n", - " height='100%'),\n", - " **kwargs)\n", - " \n", + "\n", + " self.figure = Figure(\n", + " marks=[self.heat_map],\n", + " axes=self.axes,\n", + " fig_margin=self.fig_margin,\n", + " layout=self.layout,\n", + " min_aspect_ratio=0.0,\n", + " **kwargs\n", + " )\n", + "\n", + " super(VBox, self).__init__(\n", + " children=[self.range_slider, self.figure],\n", + " layout=Layout(align_items=\"center\", width=\"100%\", height=\"100%\"),\n", + " **kwargs\n", + " )\n", + "\n", " def create_interaction(self, **kwargs):\n", - " self.range_slider = IntRangeSlider(description='Filter Range', value=(self.q1, self.q2), layout=Layout(width='100%'))\n", - " self.range_slider.observe(self.slid_changed, 'value')\n", - " self.observe(self.changed, ['q1', 'q2'])\n", - " \n", - " \n", + " self.range_slider = IntRangeSlider(\n", + " description=\"Filter Range\",\n", + " value=(self.q1, self.q2),\n", + " layout=Layout(width=\"100%\"),\n", + " )\n", + " self.range_slider.observe(self.slid_changed, \"value\")\n", + " self.observe(self.changed, [\"q1\", \"q2\"])\n", + "\n", " def slid_changed(self, new):\n", " self.q1 = self.range_slider.value[0]\n", " self.q2 = self.range_slider.value[1]\n", - " \n", + "\n", " def changed(self, new):\n", " self.range_slider.value = (self.q1, self.q2)\n", - " \n", - " self.quant_func = quantile_space(self.data.values.flatten(), q1=self.q1, q2=self.q2)\n", + "\n", + " self.quant_func = quantile_space(\n", + " self.data.values.flatten(), q1=self.q1, q2=self.q2\n", + " )\n", " self.heat_map.color = self.quant_func(self.data.T)\n", - " \n", - " def get_filtered_df(self, fill_type='median'):\n", + "\n", + " def get_filtered_df(self, fill_type=\"median\"):\n", " q1_x, q2_x = np.percentile(self.data, [self.q1, self.q2])\n", - " if fill_type == 'median':\n", - " return self.data[(self.data >= q1_x) & (self.data <= q2_x)].apply(lambda x: x.fillna(x.median()))\n", - " elif fill_type == 'mean':\n", - " return self.data[(self.data >= q1_x) & (self.data <= q2_x)].apply(lambda x: x.fillna(x.mean()))\n", + " if fill_type == \"median\":\n", + " return self.data[(self.data >= q1_x) & (self.data <= q2_x)].apply(\n", + " lambda x: x.fillna(x.median())\n", + " )\n", + " elif fill_type == \"mean\":\n", + " return self.data[(self.data >= q1_x) & (self.data <= q2_x)].apply(\n", + " lambda x: x.fillna(x.mean())\n", + " )\n", " else:\n", " raise ValueError(\"fill_type must be one of ('median', 'mean')\")" ] @@ -146,16 +184,17 @@ "outputs": [], "source": [ "def num_to_col_letters(num):\n", - " letters = ''\n", + " letters = \"\"\n", " while num:\n", " mod = (num - 1) % 26\n", " letters += chr(mod + 65)\n", " num = (num - 1) // 26\n", - " return ''.join(reversed(letters))\n", + " return \"\".join(reversed(letters))\n", + "\n", "\n", "letters = []\n", "\n", - "for i in range(1, size+1):\n", + "for i in range(1, size + 1):\n", " letters.append(num_to_col_letters(i))" ] }, @@ -174,7 +213,9 @@ "metadata": {}, "outputs": [], "source": [ - "data_dna = DNA(data, title='DNA of our Data', height='1400px', colors=['Red', 'White', 'Green'])\n", + "data_dna = DNA(\n", + " data, title=\"DNA of our Data\", height=\"1400px\", colors=[\"Red\", \"White\", \"Green\"]\n", + ")\n", "data_dna" ] }, @@ -204,9 +245,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "data_clean = data_dna.get_filtered_df()" @@ -225,7 +264,7 @@ "metadata": {}, "outputs": [], "source": [ - "data_mean = data_dna.get_filtered_df(fill_type='mean')" + "data_mean = data_dna.get_filtered_df(fill_type=\"mean\")" ] }, { @@ -241,7 +280,7 @@ "metadata": {}, "outputs": [], "source": [ - "DNA(data_clean, title='Cleaned Data', height='1200px', colors=['Red', 'White', 'Green'])" + "DNA(data_clean, title=\"Cleaned Data\", height=\"1200px\", colors=[\"Red\", \"White\", \"Green\"])" ] } ], diff --git a/examples/Applications/Visualizing the US Elections.ipynb b/examples/Applications/Visualizing the US Elections.ipynb deleted file mode 100644 index 2367a12fe..000000000 --- a/examples/Applications/Visualizing the US Elections.ipynb +++ /dev/null @@ -1,420 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualizing the 2016 General Election Polls" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from __future__ import print_function\n", - "import pandas as pd\n", - "import numpy as np\n", - "from ipywidgets import VBox, HBox\n", - "import os\n", - "\n", - "codes = pd.read_csv(os.path.abspath('../data_files/state_codes.csv'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "try:\n", - " from pollster import Pollster\n", - "except ImportError:\n", - " print('Pollster not found. Installing Pollster..')\n", - " try:\n", - " import subprocess\n", - " subprocess.check_call(['pip', 'install', 'pollster==0.1.6'])\n", - " except:\n", - " print(\"The pip installation failed. Please manually install Pollster and re-run this notebook.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def get_candidate_data(question):\n", - " clinton, trump, undecided, other = 0., 0., 0., 0.\n", - " for candidate in question['subpopulations'][0]['responses']:\n", - " if candidate['last_name'] == 'Clinton':\n", - " clinton = candidate['value']\n", - " elif candidate['last_name'] == 'Trump':\n", - " trump = candidate['value']\n", - " elif candidate['choice'] == 'Undecided':\n", - " undecided = candidate['value']\n", - " else:\n", - " other = candidate['value']\n", - " return clinton, trump, other, undecided\n", - "\n", - "def get_row(question, partisan='Nonpartisan', end_date='2016-06-21'):\n", - " # if question['topic'] != '2016-president':\n", - " if ('2016' in question['topic']) and ('Presidential' in question['topic']):\n", - " hillary, donald, other, undecided = get_candidate_data(question)\n", - " return [{'Name': question['name'], 'Partisan': partisan, 'State': question['state'],\n", - " 'Date': np.datetime64(end_date), 'Trump': donald, 'Clinton': hillary, 'Other': other,\n", - " 'Undecided': undecided}]\n", - " else:\n", - " return\n", - "\n", - "def analyze_polls(polls):\n", - " global data\n", - " for poll in polls:\n", - " for question in poll.questions:\n", - " resp = get_row(question, partisan=poll.partisan, end_date=poll.end_date)\n", - " if resp is not None:\n", - " data = data.append(resp)\n", - " return" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "try:\n", - " from pollster import Pollster\n", - " pollster = Pollster()\n", - " \n", - " # Getting data from Pollster. This might take a second.\n", - " raw_data = pollster.charts(topic='2016-president')\n", - " \n", - " data = pd.DataFrame(columns=['Name', 'Partisan', 'State', 'Date', 'Trump', 'Clinton', 'Other',\n", - " 'Undecided'])\n", - " \n", - " for i in raw_data:\n", - " analyze_polls(i.polls())\n", - "except:\n", - " raise ValueError('Please install Pollster and run the functions above')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def get_state_party(code):\n", - " state = codes[codes['FIPS']==code]['USPS'].values[0]\n", - " if data[data['State']==state].shape[0] == 0:\n", - " return None\n", - " polls = data[(data['State']==state) & (data['Trump'] > 0.) & (data['Clinton'] > 0.)].sort_values(by='Date')\n", - " if polls.shape[0] == 0:\n", - " return None\n", - " if (polls.tail(1)['Trump'] > polls.tail(1)['Clinton']).values[0]:\n", - " return 'Republican'\n", - " else:\n", - " return 'Democrat'\n", - "\n", - "def get_color_data():\n", - " color_data = {}\n", - " for i in codes['FIPS']:\n", - " color_data[i] = get_state_party(i)\n", - " return color_data\n", - "\n", - "def get_state_data(code):\n", - " state = codes[codes['FIPS']==code]['USPS'].values[0]\n", - " if data[data['State']==state].shape[0] == 0:\n", - " return None\n", - " polls = data[(data['State']==state) & (data['Trump'] > 0.) & (data['Clinton'] > 0.)].sort_values(by='Date')\n", - " return polls" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from bqplot import *\n", - "from ipywidgets import Layout" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "dt_x = DateScale()\n", - "sc_y = LinearScale()\n", - "\n", - "time_series = Lines(scales={'x': dt_x, 'y': sc_y}, colors=['#E91D0E', '#2aa1ec'], marker='circle')\n", - "\n", - "ax_x = Axis(scale=dt_x, label='Date')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='Percentage')\n", - "\n", - "ts_fig = Figure(marks=[time_series], axes=[ax_x, ax_y], title='General Election - State Polls', \n", - " layout=Layout(min_width='650px', min_height='400px'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "sc_geo = AlbersUSA()\n", - "sc_c1 = OrdinalColorScale(domain=['Democrat', 'Republican'], colors=['#2aa1ec', '#E91D0E'])\n", - "\n", - "color_data = get_color_data()\n", - "\n", - "map_styles = {'color': color_data,\n", - " 'scales': {'projection': sc_geo, 'color': sc_c1}, 'colors': {'default_color': 'Grey'}}\n", - "\n", - "axis = ColorAxis(scale=sc_c1)\n", - "\n", - "states_map = Map(map_data=topo_load('map_data/USStatesMap.json'), tooltip=ts_fig, **map_styles)\n", - "map_fig = Figure(marks=[states_map], axes=[axis],title='General Election Polls - State Wise')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def hover_callback(name, value):\n", - " polls = get_state_data(value['data']['id'])\n", - " if polls is None or polls.shape[0] == 0:\n", - " time_series.y = [0.]\n", - " return\n", - " time_series.x, time_series.y = polls['Date'].values.astype(np.datetime64), [polls['Trump'].values, polls['Clinton'].values]\n", - " ts_fig.title = str(codes[codes['FIPS']==value['data']['id']]['Name'].values[0]) + ' Polls - Presidential Election'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "states_map.on_hover(hover_callback)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "scrolled": false - }, - "outputs": [], - "source": [ - "national = data[(data['State']=='US') & (data['Trump'] > 0.) & (data['Clinton'] > 0.)].sort_values(by='Date')\n", - "\n", - "dt_x = DateScale()\n", - "sc_y = LinearScale()\n", - "\n", - "clinton_scatter = Scatter(x=national['Date'].values.astype(np.datetime64), y=national['Clinton'],\n", - " scales={'x': dt_x, 'y': sc_y}, \n", - " colors=['#2aa1ec'])\n", - "\n", - "trump_scatter = Scatter(x=national['Date'].values.astype(np.datetime64), y=national['Trump'],\n", - " scales={'x': dt_x, 'y': sc_y},\n", - " colors=['#E91D0E'])\n", - "\n", - "ax_x = Axis(scale=dt_x, label='Date', tick_format='%b-%Y', num_ticks=8)\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='Percentage')\n", - "\n", - "scat_fig = Figure(marks=[clinton_scatter, trump_scatter], axes=[ax_x, ax_y], title='General Election - National Polls')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Hover on the map to visualize the poll data for that state." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "VBox([map_fig, scat_fig])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualizing the County Results of the 2008 Elections" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "county_data = pd.read_csv(os.path.abspath('../data_files/2008-election-results.csv'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "winner = np.array(['McCain'] * county_data.shape[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "winner[(county_data['Obama'] > county_data['McCain']).values] = 'Obama'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "scrolled": true - }, - "outputs": [], - "source": [ - "sc_geo_county = AlbersUSA()\n", - "sc_c1_county = OrdinalColorScale(domain=['McCain', 'Obama'], colors=['Red', 'DeepSkyBlue'])\n", - "\n", - "color_data_county = dict(zip(county_data['FIPS'].values.astype(int), list(winner)))\n", - "\n", - "map_styles_county = {'color': color_data_county,\n", - " 'scales': {'projection': sc_geo_county, 'color': sc_c1_county}, 'colors': {'default_color': 'Grey'}}\n", - "\n", - "axis_county = ColorAxis(scale=sc_c1_county)\n", - "\n", - "county_map = Map(map_data=topo_load('map_data/USCountiesMap.json'), **map_styles_county)\n", - "county_fig = Figure(marks=[county_map], axes=[axis_county],title='US Elections 2008 - Example',\n", - " layout=Layout(min_width='800px', min_height='550px'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "names_sc = OrdinalScale(domain=['Obama', 'McCain'])\n", - "vote_sc_y = LinearScale(min=0, max=100.)\n", - "\n", - "names_ax = Axis(scale=names_sc, label='Candidate')\n", - "vote_ax = Axis(scale=vote_sc_y, orientation='vertical', label='Percentage')\n", - "\n", - "vote_bars = Bars(scales={'x': names_sc, 'y': vote_sc_y}, colors=['#2aa1ec', '#E91D0E'])\n", - "\n", - "bar_fig = Figure(marks=[vote_bars], axes=[names_ax, vote_ax], title='Vote Margin',\n", - " layout=Layout(min_width='600px', min_height='400px'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def county_hover(name, value):\n", - " if (county_data['FIPS'] == value['data']['id']).sum() == 0:\n", - " bar_fig.title = ''\n", - " vote_bars.y = [0., 0.]\n", - " return\n", - " votes = county_data[county_data['FIPS'] == value['data']['id']]\n", - " dem_vote = float(votes['Obama %'].values[0])\n", - " rep_vote = float(votes['McCain %'].values[0])\n", - " vote_bars.x, vote_bars.y = ['Obama', 'McCain'], [dem_vote, rep_vote]\n", - " bar_fig.title = 'Vote % - ' + value['data']['name']\n", - " \n", - "county_map.on_hover(county_hover)\n", - "county_map.tooltip = bar_fig" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Hover on the map to visualize the voting percentage for each candidate in that county" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "county_fig" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.0" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/examples/Applications/Wealth Of Nations/Bubble Chart.ipynb b/examples/Applications/Wealth Of Nations/Bubble Chart.ipynb index 957a9f121..e9ffaee96 100644 --- a/examples/Applications/Wealth Of Nations/Bubble Chart.ipynb +++ b/examples/Applications/Wealth Of Nations/Bubble Chart.ipynb @@ -38,7 +38,7 @@ }, "outputs": [], "source": [ - "data = pd.read_json('nations.json')" + "data = pd.read_json(\"nations.json\")" ] }, { @@ -48,18 +48,20 @@ "outputs": [], "source": [ "def clean_data(data):\n", - " for column in ['income', 'lifeExpectancy', 'population']:\n", + " for column in [\"income\", \"lifeExpectancy\", \"population\"]:\n", " data = data.drop(data[data[column].apply(len) <= 4].index)\n", " return data\n", "\n", + "\n", "def extrap_interp(data):\n", " data = np.array(data)\n", - " x_range = np.arange(1800, 2009, 1.)\n", + " x_range = np.arange(1800, 2009, 1.0)\n", " y_range = np.interp(x_range, data[:, 0], data[:, 1])\n", " return y_range\n", "\n", + "\n", "def extrap_data(data):\n", - " for column in ['income', 'lifeExpectancy', 'population']:\n", + " for column in [\"income\", \"lifeExpectancy\", \"population\"]:\n", " data[column] = data[column].apply(extrap_interp)\n", " return data" ] @@ -82,9 +84,15 @@ }, "outputs": [], "source": [ - "income_min, income_max = np.min(data['income'].apply(np.min)), np.max(data['income'].apply(np.max))\n", - "life_exp_min, life_exp_max = np.min(data['lifeExpectancy'].apply(np.min)), np.max(data['lifeExpectancy'].apply(np.max))\n", - "pop_min, pop_max = np.min(data['population'].apply(np.min)), np.max(data['population'].apply(np.max))" + "income_min, income_max = np.min(data[\"income\"].apply(np.min)), np.max(\n", + " data[\"income\"].apply(np.max)\n", + ")\n", + "life_exp_min, life_exp_max = np.min(data[\"lifeExpectancy\"].apply(np.min)), np.max(\n", + " data[\"lifeExpectancy\"].apply(np.max)\n", + ")\n", + "pop_min, pop_max = np.min(data[\"population\"].apply(np.min)), np.max(\n", + " data[\"population\"].apply(np.max)\n", + ")" ] }, { @@ -95,9 +103,9 @@ "source": [ "def get_data(year):\n", " year_index = year - 1800\n", - " income = data['income'].apply(lambda x: x[year_index])\n", - " life_exp = data['lifeExpectancy'].apply(lambda x: x[year_index])\n", - " pop = data['population'].apply(lambda x: x[year_index])\n", + " income = data[\"income\"].apply(lambda x: x[year_index])\n", + " life_exp = data[\"lifeExpectancy\"].apply(lambda x: x[year_index])\n", + " pop = data[\"population\"].apply(lambda x: x[year_index])\n", " return income, life_exp, pop" ] }, @@ -108,67 +116,116 @@ "outputs": [], "source": [ "time_interval = 100\n", - "fig_layout = widgets.Layout(width='1000px', height='700px', overflow_x='hidden')\n", - "fig = plt.figure(layout=fig_layout, fig_margin=dict(top=60, bottom=80, left=40, right=20),\n", - " title='Health and Wealth of Nations', animation_duration=time_interval)\n", - "\n", - "plt.scales(scales={'x': bq.LogScale(min=min(200, income_min), max=income_max),\n", - " 'y': bq.LinearScale(min=life_exp_min, max=life_exp_max),\n", - " 'color': bq.OrdinalColorScale(domain=data['region'].unique().tolist(), \n", - " colors=bq.CATEGORY10[:6]),\n", - " 'size': bq.LinearScale(min=pop_min, max=pop_max)})\n", + "fig_layout = widgets.Layout(width=\"1000px\", height=\"700px\", overflow_x=\"hidden\")\n", + "fig = plt.figure(\n", + " layout=fig_layout,\n", + " fig_margin=dict(top=60, bottom=80, left=40, right=20),\n", + " title=\"Health and Wealth of Nations\",\n", + " animation_duration=time_interval,\n", + ")\n", + "\n", + "plt.scales(\n", + " scales={\n", + " \"x\": bq.LogScale(min=min(200, income_min), max=income_max),\n", + " \"y\": bq.LinearScale(min=life_exp_min, max=life_exp_max),\n", + " \"color\": bq.OrdinalColorScale(\n", + " domain=data[\"region\"].unique().tolist(), colors=bq.CATEGORY10[:6]\n", + " ),\n", + " \"size\": bq.LinearScale(min=pop_min, max=pop_max),\n", + " }\n", + ")\n", "\n", "# add custom x tick values\n", "ticks = [2, 4, 6, 8, 10]\n", - "income_ticks = [t * 100 for t in ticks] + [t * 1000 for t in ticks] + [t * 10000 for t in ticks]\n", + "income_ticks = (\n", + " [t * 100 for t in ticks] + [t * 1000 for t in ticks] + [t * 10000 for t in ticks]\n", + ")\n", "\n", "# custom axis options\n", - "axes_options = {'x': dict(label='Income per Capita', label_location='end', \n", - " label_offset='-2ex', tick_format='~s', \n", - " tick_values=income_ticks),\n", - " 'y': dict(label='Life Expectancy', orientation='vertical', \n", - " side='left', label_location='end', label_offset='-1em'),\n", - " 'color': dict(label='Region')\n", - " }\n", - "\n", - "tooltip = bq.Tooltip(fields=['name', 'x', 'y'], \n", - " labels=['Country Name', 'Income per Capita', 'Life Expectancy'])\n", - "\n", - "year_label = bq.Label(x=[0.75], y=[0.10], default_size=46, font_weight='bolder', \n", - " colors=['orange'], text=[str(initial_year)], enable_move=True)\n", + "axes_options = {\n", + " \"x\": dict(\n", + " label=\"Income per Capita\",\n", + " label_location=\"end\",\n", + " label_offset=\"-2ex\",\n", + " tick_format=\"~s\",\n", + " tick_values=income_ticks,\n", + " ),\n", + " \"y\": dict(\n", + " label=\"Life Expectancy\",\n", + " orientation=\"vertical\",\n", + " side=\"left\",\n", + " label_location=\"end\",\n", + " label_offset=\"-1em\",\n", + " ),\n", + " \"color\": dict(label=\"Region\"),\n", + "}\n", + "\n", + "tooltip = bq.Tooltip(\n", + " fields=[\"name\", \"x\", \"y\"],\n", + " labels=[\"Country Name\", \"Income per Capita\", \"Life Expectancy\"],\n", + ")\n", + "\n", + "year_label = bq.Label(\n", + " x=[0.75],\n", + " y=[0.10],\n", + " default_size=46,\n", + " font_weight=\"bolder\",\n", + " colors=[\"orange\"],\n", + " text=[str(initial_year)],\n", + " enable_move=True,\n", + ")\n", "\n", "# Start with the first year's data\n", "cap_income, life_exp, pop = get_data(initial_year)\n", "\n", - "wealth_scat = plt.scatter(cap_income, life_exp, color=data['region'], size=pop,\n", - " names=data['name'], display_names=False,\n", - " default_size=20000, tooltip=tooltip, stroke='Black',\n", - " axes_options=axes_options, unhovered_style={'opacity': 0.5})\n", - "nation_line = plt.plot(data['income'][0], data['lifeExpectancy'][0],\n", - " colors=['Gray'], visible=False)\n", + "wealth_scat = plt.scatter(\n", + " cap_income,\n", + " life_exp,\n", + " color=data[\"region\"],\n", + " size=pop,\n", + " names=data[\"name\"],\n", + " display_names=False,\n", + " default_size=20000,\n", + " tooltip=tooltip,\n", + " stroke=\"Black\",\n", + " axes_options=axes_options,\n", + " unhovered_style={\"opacity\": 0.5},\n", + ")\n", + "nation_line = plt.plot(\n", + " data[\"income\"][0], data[\"lifeExpectancy\"][0], colors=[\"Gray\"], visible=False\n", + ")\n", "\n", "# slider for the year\n", - "year_slider = widgets.IntSlider(min=1800, max=2008, description='Year', value=initial_year)\n", + "year_slider = widgets.IntSlider(\n", + " min=1800, max=2008, description=\"Year\", value=initial_year\n", + ")\n", "\n", "# register callbacks\n", "def hover_changed(change):\n", " if change.new is not None:\n", - " nation_line.x = data[data['name'] == wealth_scat.names[change.new]]['income'].values[0]\n", - " nation_line.y = data[data['name'] == wealth_scat.names[change.new]]['lifeExpectancy'].values[0]\n", + " nation_line.x = data[data[\"name\"] == wealth_scat.names[change.new]][\n", + " \"income\"\n", + " ].values[0]\n", + " nation_line.y = data[data[\"name\"] == wealth_scat.names[change.new]][\n", + " \"lifeExpectancy\"\n", + " ].values[0]\n", " nation_line.visible = True\n", " else:\n", " nation_line.visible = False\n", - " \n", - "wealth_scat.observe(hover_changed, 'hovered_point')\n", + "\n", + "\n", + "wealth_scat.observe(hover_changed, \"hovered_point\")\n", + "\n", "\n", "def year_changed(change):\n", " wealth_scat.x, wealth_scat.y, wealth_scat.size = get_data(year_slider.value)\n", " year_label.text = [str(year_slider.value)]\n", "\n", - "year_slider.observe(year_changed, 'value')\n", + "\n", + "year_slider.observe(year_changed, \"value\")\n", "\n", "play_button = widgets.Play(min=1800, max=2008, interval=time_interval)\n", - "widgets.jslink((play_button, 'value'), (year_slider, 'value'))\n", + "widgets.jslink((play_button, \"value\"), (year_slider, \"value\"))\n", "\n", "widgets.VBox([widgets.HBox([play_button, year_slider]), fig])" ] diff --git a/examples/Applications/Wealth Of Nations/Choropleth.ipynb b/examples/Applications/Wealth Of Nations/Choropleth.ipynb index c76b0d097..6b783113a 100644 --- a/examples/Applications/Wealth Of Nations/Choropleth.ipynb +++ b/examples/Applications/Wealth Of Nations/Choropleth.ipynb @@ -42,9 +42,9 @@ }, "outputs": [], "source": [ - "data = pd.read_json('nations.json')\n", - "country_codes = pd.read_csv('world_map_codes.csv')\n", - "country_code_map = dict(zip(country_codes['ISON3'], country_codes['Name']))" + "data = pd.read_json(\"nations.json\")\n", + "country_codes = pd.read_csv(\"world_map_codes.csv\")\n", + "country_code_map = dict(zip(country_codes[\"ISON3\"], country_codes[\"Name\"]))" ] }, { @@ -53,11 +53,13 @@ "metadata": {}, "outputs": [], "source": [ - "country_data = data.merge(country_codes, \n", - " left_on='name', \n", - " right_on='Name')[['name', 'ISON3', 'region', 'income', 'lifeExpectancy', 'population']]\\\n", - " .rename(columns={'ISON3': 'id'})\\\n", - " .set_index('id')" + "country_data = (\n", + " data.merge(country_codes, left_on=\"name\", right_on=\"Name\")[\n", + " [\"name\", \"ISON3\", \"region\", \"income\", \"lifeExpectancy\", \"population\"]\n", + " ]\n", + " .rename(columns={\"ISON3\": \"id\"})\n", + " .set_index(\"id\")\n", + ")" ] }, { @@ -67,12 +69,10 @@ "outputs": [], "source": [ "def get_time_series(col):\n", - " time_series_df = country_data[col]\\\n", - " .apply(dict)\\\n", - " .apply(pd.Series)\n", + " time_series_df = country_data[col].apply(dict).apply(pd.Series)\n", " time_series_df.index.name = None\n", - " time_series_df.columns = time_series_df.columns.astype('int')\n", - " \n", + " time_series_df.columns = time_series_df.columns.astype(\"int\")\n", + "\n", " return time_series_df" ] }, @@ -82,9 +82,9 @@ "metadata": {}, "outputs": [], "source": [ - "income_time_series = get_time_series('income')\n", - "life_exp_time_series = get_time_series('lifeExpectancy')\n", - "pop_time_series = get_time_series('population')" + "income_time_series = get_time_series(\"income\")\n", + "life_exp_time_series = get_time_series(\"lifeExpectancy\")\n", + "pop_time_series = get_time_series(\"population\")" ] }, { @@ -96,7 +96,10 @@ "outputs": [], "source": [ "income_min, income_max = income_time_series.min().min(), income_time_series.max().max()\n", - "life_exp_min, life_exp_max = life_exp_time_series.min().min(), life_exp_time_series.max().max()\n", + "life_exp_min, life_exp_max = (\n", + " life_exp_time_series.min().min(),\n", + " life_exp_time_series.max().max(),\n", + ")\n", "pop_min, pop_max = pop_time_series.min().min(), pop_time_series.max().max()" ] }, @@ -108,51 +111,72 @@ }, "outputs": [], "source": [ - "data_dict = {'Income': income_time_series,\n", - " 'Population': pop_time_series,\n", - " 'Life Expectancy': life_exp_time_series}\n", + "data_dict = {\n", + " \"Income\": income_time_series,\n", + " \"Population\": pop_time_series,\n", + " \"Life Expectancy\": life_exp_time_series,\n", + "}\n", "\n", - "min_max_dict = {'Income': (np.log(income_min), np.log(income_max)), \n", - " 'Population': (np.log(pop_min), np.log(pop_max)),\n", - " 'Life Expectancy': (life_exp_min, life_exp_max)}\n", + "min_max_dict = {\n", + " \"Income\": (np.log(income_min), np.log(income_max)),\n", + " \"Population\": (np.log(pop_min), np.log(pop_max)),\n", + " \"Life Expectancy\": (life_exp_min, life_exp_max),\n", + "}\n", "\n", - "color_scheme_dict = {'Income': 'Greens',\n", - " 'Population': 'Blues',\n", - " 'Life Expectancy': 'Oranges'}\n", + "color_scheme_dict = {\n", + " \"Income\": \"Greens\",\n", + " \"Population\": \"Blues\",\n", + " \"Life Expectancy\": \"Oranges\",\n", + "}\n", "\n", - "data_type_dropdown = widgets.Dropdown(description='Data Type', \n", - " options=['Income', 'Life Expectancy', 'Population'],\n", - " value='Population')\n", + "data_type_dropdown = widgets.Dropdown(\n", + " description=\"Data Type\",\n", + " options=[\"Income\", \"Life Expectancy\", \"Population\"],\n", + " value=\"Population\",\n", + ")\n", "\n", - "year_slider = widgets.IntSlider(description='year', min=1800, max=2008, \n", - " continuous_update=False,\n", - " layout=widgets.Layout(width='300px'))\n", + "year_slider = widgets.IntSlider(\n", + " description=\"year\",\n", + " min=1800,\n", + " max=2008,\n", + " continuous_update=False,\n", + " layout=widgets.Layout(width=\"300px\"),\n", + ")\n", "\n", "play_button = widgets.Play(min=1800, max=2008, interval=10)\n", - "widgets.jslink((play_button, 'value'), (year_slider, 'value'))\n", + "widgets.jslink((play_button, \"value\"), (year_slider, \"value\"))\n", "\n", "# world map\n", - "world_map_fig_title_tmpl = 'World {data_type} for year {year}'\n", - "world_map_fig = plt.figure(layout=widgets.Layout(width='1000px', height='500px'),\n", - " fig_margin=dict(top=45, bottom=10, left=20, right=20))\n", - "tooltip = bq.Tooltip(fields=['name'], labels=['Country'])\n", + "world_map_fig_title_tmpl = \"World {data_type} for year {year}\"\n", + "world_map_fig = plt.figure(\n", + " layout=widgets.Layout(width=\"1000px\", height=\"500px\"),\n", + " fig_margin=dict(top=45, bottom=10, left=20, right=20),\n", + ")\n", + "tooltip = bq.Tooltip(fields=[\"name\"], labels=[\"Country\"])\n", "\n", - "plt.scales(scales={'projection': bq.Mercator(), 'color': bq.ColorScale()})\n", + "plt.scales(scales={\"projection\": bq.Mercator(), \"color\": bq.ColorScale()})\n", "\n", - "world_map = plt.geo(map_data='WorldMap', tooltip=tooltip, \n", - " interactions={'click': 'select', 'hover': 'tooltip'},\n", - " axes_options={'color': {'visible': False}},\n", - " selected_styles={'selected_fill': 'yellow'},\n", - " colors={'default_color': 'Grey'})\n", + "world_map = plt.geo(\n", + " map_data=\"WorldMap\",\n", + " tooltip=tooltip,\n", + " interactions={\"click\": \"select\", \"hover\": \"tooltip\"},\n", + " axes_options={\"color\": {\"visible\": False}},\n", + " selected_styles={\"selected_fill\": \"yellow\"},\n", + " colors={\"default_color\": \"Grey\"},\n", + ")\n", "\n", "# data time series fig\n", - "ts_fig_title_tmpl = '{data_type} Time Series'\n", - "time_series_fig = plt.figure(layout=widgets.Layout(width='1000px', height='400px'),\n", - " fig_margin=dict(top=40, bottom=30, left=60, right=40))\n", - "country_time_series = plt.plot(list(pop_time_series.columns), [], \n", - " axes_options={'x': {'label': 'Year'},\n", - " 'y': {'tick_format': '~s'}},\n", - " display_legend=True)\n", + "ts_fig_title_tmpl = \"{data_type} Time Series\"\n", + "time_series_fig = plt.figure(\n", + " layout=widgets.Layout(width=\"1000px\", height=\"400px\"),\n", + " fig_margin=dict(top=40, bottom=30, left=60, right=40),\n", + ")\n", + "country_time_series = plt.plot(\n", + " list(pop_time_series.columns),\n", + " [],\n", + " axes_options={\"x\": {\"label\": \"Year\"}, \"y\": {\"tick_format\": \"~s\"}},\n", + " display_legend=True,\n", + ")\n", "\n", "# link widgets\n", "def on_data_type_update(*args):\n", @@ -160,53 +184,70 @@ " # reset color and selected attributes of world_map\n", " world_map.color = {}\n", " world_map.selected = []\n", - " \n", + "\n", " data_type = data_type_dropdown.value\n", " data_time_series = data_dict[data_type]\n", - " \n", + "\n", " scale_min, scale_max = min_max_dict[data_type]\n", - " color_scale = world_map.scales['color']\n", + " color_scale = world_map.scales[\"color\"]\n", " color_scale.scheme = color_scheme_dict[data_type]\n", " color_scale.min = scale_min\n", " color_scale.max = scale_max\n", " year_slider.value = initial_year\n", "\n", - "data_type_dropdown.observe(on_data_type_update, 'value')\n", - " \n", + "\n", + "data_type_dropdown.observe(on_data_type_update, \"value\")\n", + "\n", + "\n", "def update_color(*args):\n", " data_type = data_type_dropdown.value\n", " year = year_slider.value\n", - " \n", + "\n", " if year in data_time_series.columns:\n", - " if data_type in ['Population', 'Income']:\n", + " if data_type in [\"Population\", \"Income\"]:\n", " color_data = np.log(data_time_series[year])\n", " else:\n", " color_data = data_time_series[year]\n", " world_map.color = dict(color_data)\n", " else:\n", " world_map.color = {}\n", - " \n", - " world_map_fig.title = world_map_fig_title_tmpl.format(data_type=data_type, year=year)\n", "\n", - "year_slider.observe(update_color, 'value')\n", + " world_map_fig.title = world_map_fig_title_tmpl.format(\n", + " data_type=data_type, year=year\n", + " )\n", + "\n", + "\n", + "year_slider.observe(update_color, \"value\")\n", + "\n", "\n", "def plot_time_series_for_country(*args):\n", " if world_map.selected is not None and len(world_map.selected) > 0:\n", " selected_countries = world_map.selected\n", " country_time_series.y = data_time_series.loc[selected_countries]\n", - " country_time_series.labels = [country_code_map[c_id] for c_id in selected_countries]\n", + " country_time_series.labels = [\n", + " country_code_map[c_id] for c_id in selected_countries\n", + " ]\n", " else:\n", " country_time_series.labels = []\n", " country_time_series.y = []\n", " time_series_fig.title = ts_fig_title_tmpl.format(data_type=data_type_dropdown.value)\n", - "world_map.observe(plot_time_series_for_country, 'selected')\n", - " \n", + "\n", + "\n", + "world_map.observe(plot_time_series_for_country, \"selected\")\n", + "\n", "on_data_type_update(None)\n", "\n", - "widgets.VBox([world_map_fig, \n", - " widgets.HBox([time_series_fig, \n", - " widgets.VBox([data_type_dropdown, year_slider, play_button])])\n", - " ])" + "widgets.VBox(\n", + " [\n", + " world_map_fig,\n", + " widgets.HBox(\n", + " [\n", + " time_series_fig,\n", + " widgets.VBox([data_type_dropdown, year_slider, play_button]),\n", + " ]\n", + " ),\n", + " ]\n", + ")" ] } ], diff --git a/examples/Basic Plotting/Basic Plotting.ipynb b/examples/Basic Plotting/Basic Plotting.ipynb index c93ff4d0d..88c2c3780 100644 --- a/examples/Basic Plotting/Basic Plotting.ipynb +++ b/examples/Basic Plotting/Basic Plotting.ipynb @@ -17,10 +17,10 @@ "outputs": [], "source": [ "size = 100\n", - "scale = 100.\n", + "scale = 100.0\n", "np.random.seed(0)\n", "x_data = np.arange(size)\n", - "y_data = np.cumsum(np.random.randn(size) * scale)" + "y_data = np.cumsum(np.random.randn(size) * scale)" ] }, { @@ -36,7 +36,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='First Example')\n", + "fig = plt.figure(title=\"First Example\")\n", "plt.plot(y_data)\n", "fig" ] @@ -70,7 +70,7 @@ "metadata": {}, "outputs": [], "source": [ - "dates = np.arange('2005-02', '2005-03', dtype='datetime64[D]')\n", + "dates = np.arange(\"2005-02\", \"2005-03\", dtype=\"datetime64[D]\")\n", "size = len(dates)\n", "prices = scale + 5 * np.cumsum(np.random.randn(size))" ] @@ -81,11 +81,18 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Changing Styles', background_style={'fill': 'lightgreen'},\n", - " title_style={'font-size': '20px','fill': 'DarkOrange'})\n", - "axes_options = {'x': {'label': 'Date', 'tick_format': '%m/%d'},\n", - " 'y': {'label': 'Price', 'tick_format': '0.0f'}}\n", - "plt.plot(dates, prices, 'b', axes_options=axes_options) # third argument is the marker string\n", + "fig = plt.figure(\n", + " title=\"Changing Styles\",\n", + " background_style={\"fill\": \"lightgreen\"},\n", + " title_style={\"font-size\": \"20px\", \"fill\": \"DarkOrange\"},\n", + ")\n", + "axes_options = {\n", + " \"x\": {\"label\": \"Date\", \"tick_format\": \"%m/%d\"},\n", + " \"y\": {\"label\": \"Price\", \"tick_format\": \"0.0f\"},\n", + "}\n", + "plt.plot(\n", + " dates, prices, \"b\", axes_options=axes_options\n", + ") # third argument is the marker string\n", "fig" ] }, @@ -103,10 +110,12 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "axes_options = {'x': {'label': 'Date', 'tick_format': '%m/%d'},\n", - " 'y': {'label': 'Price', 'tick_format': '0.0f'}}\n", + "axes_options = {\n", + " \"x\": {\"label\": \"Date\", \"tick_format\": \"%m/%d\"},\n", + " \"y\": {\"label\": \"Price\", \"tick_format\": \"0.0f\"},\n", + "}\n", "\n", - "plt.scatter(x_data, y_data, colors=['red'], stroke='black')\n", + "plt.scatter(x_data, y_data, colors=[\"red\"], stroke=\"black\")\n", "fig" ] }, @@ -144,8 +153,10 @@ "import string\n", "\n", "fig = plt.figure(padding_x=0)\n", - "axes_options = {'x': {'label': 'X'}, 'y': {'label': 'Y'}}\n", - "plt.bar(x=list(string.ascii_uppercase), y=np.abs(y_data[:20]), axes_options=axes_options)\n", + "axes_options = {\"x\": {\"label\": \"X\"}, \"y\": {\"label\": \"Y\"}}\n", + "plt.bar(\n", + " x=list(string.ascii_uppercase), y=np.abs(y_data[:20]), axes_options=axes_options\n", + ")\n", "fig" ] } diff --git a/examples/Basic Plotting/Pyplot.ipynb b/examples/Basic Plotting/Pyplot.ipynb index ee39e7b96..1c7aab4a6 100644 --- a/examples/Basic Plotting/Pyplot.ipynb +++ b/examples/Basic Plotting/Pyplot.ipynb @@ -27,7 +27,7 @@ "size = 100\n", "y_data = np.cumsum(np.random.randn(size) * 100.0)\n", "y_data_2 = np.cumsum(np.random.randn(size))\n", - "y_data_3 = np.cumsum(np.random.randn(size) * 100.)\n", + "y_data_3 = np.cumsum(np.random.randn(size) * 100.0)\n", "\n", "x = np.linspace(0.0, 10.0, size)" ] @@ -38,11 +38,13 @@ "metadata": {}, "outputs": [], "source": [ - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'],\n", - " index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "\n", - "symbol = 'Security 1'\n", + "symbol = \"Security 1\"\n", "dates_all = price_data.index.values\n", "final_prices = price_data[symbol].values.flatten()" ] @@ -53,7 +55,7 @@ "metadata": {}, "outputs": [], "source": [ - "price_data.index.names = ['date']" + "price_data.index.names = [\"date\"]" ] }, { @@ -78,7 +80,7 @@ "source": [ "plt.figure()\n", "plt.plot(x, y_data)\n", - "plt.xlabel('Time')\n", + "plt.xlabel(\"Time\")\n", "plt.show()" ] }, @@ -88,7 +90,7 @@ "metadata": {}, "outputs": [], "source": [ - "_ = plt.ylabel('Stock Price')" + "_ = plt.ylabel(\"Stock Price\")" ] }, { @@ -98,7 +100,7 @@ "outputs": [], "source": [ "# Setting the title for the current figure\n", - "plt.title('Brownian Increments')" + "plt.title(\"Brownian Increments\")" ] }, { @@ -108,7 +110,7 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.plot('Security 1', data=price_data)\n", + "plt.plot(\"Security 1\", data=price_data)\n", "plt.show()" ] }, @@ -125,8 +127,8 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure(title='Scatter Plot with colors')\n", - "plt.scatter(y_data_2, y_data_3, color=y_data, stroke='black')\n", + "plt.figure(title=\"Scatter Plot with colors\")\n", + "plt.scatter(y_data_2, y_data_3, color=y_data, stroke=\"black\")\n", "plt.show()" ] }, @@ -155,7 +157,7 @@ "outputs": [], "source": [ "## adding a vertical line at x=4 with stroke_width and colors being passed.\n", - "plt.vline(4., stroke_width=2, colors=['orangered'])\n", + "plt.vline(4.0, stroke_width=2, colors=[\"orangered\"])\n", "plt.show()" ] }, @@ -166,7 +168,13 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.scatter('Security 1', 'Security 2', color='date', data=price_data.reset_index(), stroke='black')\n", + "plt.scatter(\n", + " \"Security 1\",\n", + " \"Security 2\",\n", + " color=\"date\",\n", + " data=price_data.reset_index(),\n", + " stroke=\"black\",\n", + ")\n", "plt.show()" ] }, @@ -184,7 +192,7 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.hist(y_data, colors=['OrangeRed'])\n", + "plt.hist(y_data, colors=[\"OrangeRed\"])\n", "plt.show()" ] }, @@ -195,8 +203,8 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.hist('Security 1', data=price_data, colors=['MediumSeaGreen'])\n", - "plt.xlabel('Hello')\n", + "plt.hist(\"Security 1\", data=price_data, colors=[\"MediumSeaGreen\"])\n", + "plt.xlabel(\"Hello\")\n", "plt.show()" ] }, @@ -214,7 +222,28 @@ "outputs": [], "source": [ "plt.figure()\n", - "bar_x=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U']\n", + "bar_x = [\n", + " \"A\",\n", + " \"B\",\n", + " \"C\",\n", + " \"D\",\n", + " \"E\",\n", + " \"F\",\n", + " \"G\",\n", + " \"H\",\n", + " \"I\",\n", + " \"J\",\n", + " \"K\",\n", + " \"L\",\n", + " \"M\",\n", + " \"N\",\n", + " \"P\",\n", + " \"Q\",\n", + " \"R\",\n", + " \"S\",\n", + " \"T\",\n", + " \"U\",\n", + "]\n", "plt.bar(bar_x, y_data_3)\n", "plt.show()" ] @@ -226,7 +255,7 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.bar('date', 'Security 2', data=price_data.reset_index()[:10])\n", + "plt.bar(\"date\", \"Security 2\", data=price_data.reset_index()[:10])\n", "plt.show()" ] }, @@ -256,7 +285,7 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.pie('Security 2', color='Security 1', data=price_data[:4])\n", + "plt.pie(\"Security 2\", color=\"Security 1\", data=price_data[:4])\n", "plt.show()" ] }, @@ -273,28 +302,34 @@ "metadata": {}, "outputs": [], "source": [ - "dates = np.arange(dt.datetime(2014, 1, 2), dt.datetime(2014, 1, 30), dt.timedelta(days=1))\n", + "dates = np.arange(\n", + " dt.datetime(2014, 1, 2), dt.datetime(2014, 1, 30), dt.timedelta(days=1)\n", + ")\n", "\n", - "prices = np.array([[ 187.21 , 187.4 , 185.2 , 185.53 ],\n", - " [ 185.83 , 187.35 , 185.3 , 186.64 ],\n", - " [ 187.15 , 187.355 , 185.3 , 186. ],\n", - " [ 186.39 , 190.35 , 186.38 , 189.71 ],\n", - " [ 189.33 , 189.4175, 187.26 , 187.97 ],\n", - " [ 189.02 , 189.5 , 186.55 , 187.38 ],\n", - " [ 188.31 , 188.57 , 186.28 , 187.26 ],\n", - " [ 186.26 , 186.95 , 183.86 , 184.16 ],\n", - " [ 185.06 , 186.428 , 183.8818, 185.92 ],\n", - " [ 185.82 , 188.65 , 185.49 , 187.74 ],\n", - " [ 187.53 , 188.99 , 186.8 , 188.76 ],\n", - " [ 188.04 , 190.81 , 187.86 , 190.09 ],\n", - " [ 190.23 , 190.39 , 186.79 , 188.43 ],\n", - " [ 181.28 , 183.5 , 179.67 , 182.25 ],\n", - " [ 181.43 , 183.72 , 180.71 , 182.73 ],\n", - " [ 181.25 , 182.8141, 179.64 , 179.64 ],\n", - " [ 179.605 , 179.65 , 177.66 , 177.9 ],\n", - " [ 178.05 , 178.45 , 176.16 , 176.85 ],\n", - " [ 175.98 , 178.53 , 175.89 , 176.4 ],\n", - " [ 177.17 , 177.86 , 176.36 , 177.36 ]])\n", + "prices = np.array(\n", + " [\n", + " [187.21, 187.4, 185.2, 185.53],\n", + " [185.83, 187.35, 185.3, 186.64],\n", + " [187.15, 187.355, 185.3, 186.0],\n", + " [186.39, 190.35, 186.38, 189.71],\n", + " [189.33, 189.4175, 187.26, 187.97],\n", + " [189.02, 189.5, 186.55, 187.38],\n", + " [188.31, 188.57, 186.28, 187.26],\n", + " [186.26, 186.95, 183.86, 184.16],\n", + " [185.06, 186.428, 183.8818, 185.92],\n", + " [185.82, 188.65, 185.49, 187.74],\n", + " [187.53, 188.99, 186.8, 188.76],\n", + " [188.04, 190.81, 187.86, 190.09],\n", + " [190.23, 190.39, 186.79, 188.43],\n", + " [181.28, 183.5, 179.67, 182.25],\n", + " [181.43, 183.72, 180.71, 182.73],\n", + " [181.25, 182.8141, 179.64, 179.64],\n", + " [179.605, 179.65, 177.66, 177.9],\n", + " [178.05, 178.45, 176.16, 176.85],\n", + " [175.98, 178.53, 175.89, 176.4],\n", + " [177.17, 177.86, 176.36, 177.36],\n", + " ]\n", + ")\n", "\n", "plt.figure()\n", "plt.ohlc(dates, prices)\n", @@ -333,7 +368,7 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.geo(map_data='WorldMap')\n", + "plt.geo(map_data=\"WorldMap\")\n", "plt.show()" ] }, @@ -405,7 +440,12 @@ "outputs": [], "source": [ "## adding grid lines and changing the side of the axis in the figure above\n", - "_ = plt.axes(options={'x': {'grid_lines': 'solid'}, 'y': {'side': 'right', 'grid_lines': 'dashed'}})" + "_ = plt.axes(\n", + " options={\n", + " \"x\": {\"grid_lines\": \"solid\"},\n", + " \"y\": {\"side\": \"right\", \"grid_lines\": \"dashed\"},\n", + " }\n", + ")" ] }, { @@ -429,8 +469,8 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(x, y_data_3, colors=['orangered'])\n", - "plt.scatter(x, y_data, stroke='black')\n", + "plt.plot(x, y_data_3, colors=[\"orangered\"])\n", + "plt.scatter(x, y_data, stroke=\"black\")\n", "plt.show()" ] }, @@ -448,9 +488,11 @@ "outputs": [], "source": [ "mark_x = np.arange(10)\n", - "plt.figure(title='Using Marker Strings')\n", - "plt.plot(mark_x, 3 * mark_x + 5, 'g-.s') # color=green, line_style=dash_dotted, marker=square\n", - "plt.plot(mark_x ** 2, 'm:d') # color=magenta, line_style=None, marker=diamond\n", + "plt.figure(title=\"Using Marker Strings\")\n", + "plt.plot(\n", + " mark_x, 3 * mark_x + 5, \"g-.s\"\n", + ") # color=green, line_style=dash_dotted, marker=square\n", + "plt.plot(mark_x ** 2, \"m:d\") # color=magenta, line_style=None, marker=diamond\n", "plt.show()" ] }, @@ -473,9 +515,13 @@ "plt.plot(x, y_data)\n", "\n", "## preserving the x scale and changing the y scale\n", - "plt.scales(scales={'x': plt.Keep})\n", - "plt.plot(x, y_data_2, colors=['orange'], axes_options={'y': {'side': 'right', 'color': 'orange',\n", - " 'grid_lines': 'none'}})\n", + "plt.scales(scales={\"x\": plt.Keep})\n", + "plt.plot(\n", + " x,\n", + " y_data_2,\n", + " colors=[\"orange\"],\n", + " axes_options={\"y\": {\"side\": \"right\", \"color\": \"orange\", \"grid_lines\": \"none\"}},\n", + ")\n", "plt.show()" ] }, @@ -504,8 +550,13 @@ "outputs": [], "source": [ "## adds the label to the figure created above\n", - "_ = plt.label(['Pie Day'], x=[np.datetime64('2007-03-14')], y=[final_prices.mean()], scales=line.scales,\n", - " colors=['orangered'])" + "_ = plt.label(\n", + " [\"Pie Day\"],\n", + " x=[np.datetime64(\"2007-03-14\")],\n", + " y=[final_prices.mean()],\n", + " scales=line.scales,\n", + " colors=[\"orangered\"],\n", + ")" ] }, { @@ -522,7 +573,7 @@ "outputs": [], "source": [ "plt.figure(1)\n", - "plt.plot(x,y_data_3)\n", + "plt.plot(x, y_data_3)\n", "plt.show()" ] }, @@ -533,7 +584,7 @@ "outputs": [], "source": [ "plt.figure(2)\n", - "plt.plot(x[:20],y_data_3[:20])\n", + "plt.plot(x[:20], y_data_3[:20])\n", "plt.show()" ] }, @@ -551,8 +602,8 @@ "outputs": [], "source": [ "## adds the new line to the first figure\n", - "fig = plt.figure(1, title='New title')\n", - "plt.plot(x,y_data, colors=['orangered'])\n", + "fig = plt.figure(1, title=\"New title\")\n", + "plt.plot(x, y_data, colors=[\"orangered\"])\n", "fig" ] }, @@ -610,7 +661,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Deleting a figure and all its views. " + "### Deleting a figure and all its views." ] }, { @@ -652,12 +703,15 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "plt.scatter(y_data_2, y_data_3, colors=['orange'], stroke='black')\n", + "plt.scatter(y_data_2, y_data_3, colors=[\"orange\"], stroke=\"black\")\n", "\n", "label = widgets.Label()\n", "\n", + "\n", "def callback(name, value):\n", " label.value = str(value)\n", + "\n", + "\n", "## click and drag on the figure to see the selector\n", "plt.brush_selector(callback)\n", "\n", @@ -682,9 +736,11 @@ "plt.plot(np.arange(n), y_data_3)\n", "label = widgets.Label()\n", "\n", + "\n", "def callback(name, value):\n", " label.value = str(value)\n", "\n", + "\n", "## click on the figure to activate the selector\n", "plt.int_selector(callback)\n", "\n", @@ -706,8 +762,10 @@ "source": [ "# click and drag on chart to make a selection\n", "def callback(name, value):\n", - " label.value = 'Brushing: ' + str(value)\n", - "_ = plt.brush_int_selector(callback, 'brushing')" + " label.value = \"Brushing: \" + str(value)\n", + "\n", + "\n", + "_ = plt.brush_int_selector(callback, \"brushing\")" ] } ], diff --git a/examples/Index.ipynb b/examples/Index.ipynb index b2ea381c0..0d22ee3cb 100644 --- a/examples/Index.ipynb +++ b/examples/Index.ipynb @@ -50,8 +50,7 @@ "* Map: Geographical map mark ([Object Model](Marks/Object%20Model/Map.ipynb), [Pyplot](Marks/Pyplot/Map.ipynb))\n", "* Market Map: Tile map mark ([Object Model](Marks/Object%20Model/Market%20Map.ipynb), Pyplot)\n", "* Pie: Pie mark ([Object Model](Marks/Object%20Model/Pie.ipynb), [Pyplot](Marks/Pyplot/Pie.ipynb))\n", - "* Scatter: Scatter mark ([Object Model](Marks/Object%20Model/Scatter.ipynb), [Pyplot](Marks/Pyplot/Scatter.ipynb))\n", - "* Mega Scatter: webgl-based Scatter mark ([Scatter Mega](Marks/Object%20Model/ScatterMega.ipynb))" + "* Scatter: Scatter mark ([Object Model](Marks/Object%20Model/Scatter.ipynb), [Pyplot](Marks/Pyplot/Scatter.ipynb))" ] }, { @@ -119,8 +118,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For more help, \n", - "- Reach out to us via the `ipywidgets` gitter chat \n", + "For more help,\n", + "- Reach out to us via the `ipywidgets` gitter chat\n", "[![https://gitter.im/ipython/ipywidgets](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ipython/ipywidgets?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n", "\n", "\n", @@ -135,7 +134,8 @@ "outputs": [], "source": [ "from IPython.display import YouTubeVideo\n", - "YouTubeVideo('eVET9IYgbao')" + "\n", + "YouTubeVideo(\"eVET9IYgbao\")" ] } ], @@ -155,7 +155,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.9.5" } }, "nbformat": 4, diff --git a/examples/Interactions/Interaction Layer.ipynb b/examples/Interactions/Interaction Layer.ipynb index e5ffefd92..60e25458f 100644 --- a/examples/Interactions/Interaction Layer.ipynb +++ b/examples/Interactions/Interaction Layer.ipynb @@ -9,8 +9,8 @@ "import pandas as pd\n", "import numpy as np\n", "\n", - "symbol = 'Security 1'\n", - "symbol2 = 'Security 2'" + "symbol = \"Security 1\"\n", + "symbol2 = \"Security 2\"" ] }, { @@ -19,9 +19,11 @@ "metadata": {}, "outputs": [], "source": [ - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.4], [0.4, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'],\n", - " index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.4], [0.4, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "\n", "dates_actual = price_data.index.values\n", "prices = price_data[symbol].values" @@ -35,8 +37,14 @@ "source": [ "from bqplot import DateScale, LinearScale, Axis, Lines, Scatter, Bars, Hist, Figure\n", "from bqplot.interacts import (\n", - " FastIntervalSelector, IndexSelector, BrushIntervalSelector,\n", - " BrushSelector, MultiSelector, LassoSelector, PanZoom, HandDraw\n", + " FastIntervalSelector,\n", + " IndexSelector,\n", + " BrushIntervalSelector,\n", + " BrushSelector,\n", + " MultiSelector,\n", + " LassoSelector,\n", + " PanZoom,\n", + " HandDraw,\n", ")\n", "from traitlets import link\n", "\n", @@ -67,10 +75,17 @@ "dt_x_fast = DateScale()\n", "lin_y = LinearScale()\n", "\n", - "x_ax = Axis(label='Index', scale=dt_x_fast)\n", - "x_ay = Axis(label=(symbol + ' Price'), scale=lin_y, orientation='vertical')\n", - "lc = Lines(x=dates_actual, y=prices, scales={'x': dt_x_fast, 'y': lin_y}, colors=['orange'])\n", - "lc_2 = Lines(x=dates_actual[50:], y=prices[50:] + 2, scales={'x': dt_x_fast, 'y': lin_y}, colors=['blue'])" + "x_ax = Axis(label=\"Index\", scale=dt_x_fast)\n", + "x_ay = Axis(label=(symbol + \" Price\"), scale=lin_y, orientation=\"vertical\")\n", + "lc = Lines(\n", + " x=dates_actual, y=prices, scales={\"x\": dt_x_fast, \"y\": lin_y}, colors=[\"orange\"]\n", + ")\n", + "lc_2 = Lines(\n", + " x=dates_actual[50:],\n", + " y=prices[50:] + 2,\n", + " scales={\"x\": dt_x_fast, \"y\": lin_y},\n", + " colors=[\"blue\"],\n", + ")" ] }, { @@ -91,7 +106,7 @@ "source": [ "## Now, we define a function that will be called when the FastIntervalSelector is interacted with\n", "def fast_interval_change_callback(change):\n", - " db_fast.value = 'The selected period is ' + str(change.new)" + " db_fast.value = \"The selected period is \" + str(change.new)" ] }, { @@ -101,7 +116,7 @@ "outputs": [], "source": [ "## Now we connect the selectors to that function\n", - "intsel_fast.observe(fast_interval_change_callback, names=['selected'])" + "intsel_fast.observe(fast_interval_change_callback, names=[\"selected\"])" ] }, { @@ -113,10 +128,14 @@ "## We use the HTML widget to see the value of what we are selecting and modify it when an interaction is performed\n", "## on the selector\n", "db_fast = HTML()\n", - "db_fast.value = 'The selected period is ' + str(intsel_fast.selected)\n", + "db_fast.value = \"The selected period is \" + str(intsel_fast.selected)\n", "\n", - "fig_fast_intsel = Figure(marks=[lc, lc_2], axes=[x_ax, x_ay], title='Fast Interval Selector Example',\n", - " interaction=intsel_fast) #This is where we assign the interaction to this particular Figure\n", + "fig_fast_intsel = Figure(\n", + " marks=[lc, lc_2],\n", + " axes=[x_ax, x_ay],\n", + " title=\"Fast Interval Selector Example\",\n", + " interaction=intsel_fast,\n", + ") # This is where we assign the interaction to this particular Figure\n", "\n", "VBox([db_fast, fig_fast_intsel])" ] @@ -134,7 +153,7 @@ "metadata": {}, "outputs": [], "source": [ - "db_index = HTML(value='[]')" + "db_index = HTML(value=\"[]\")" ] }, { @@ -155,7 +174,7 @@ "source": [ "## Now, we define a function that will be called when the selectors are interacted with\n", "def index_change_callback(change):\n", - " db_index.value = 'The selected date is ' + str(change.new)" + " db_index.value = \"The selected date is \" + str(change.new)" ] }, { @@ -164,7 +183,7 @@ "metadata": {}, "outputs": [], "source": [ - "index_sel.observe(index_change_callback, names=['selected'])" + "index_sel.observe(index_change_callback, names=[\"selected\"])" ] }, { @@ -173,8 +192,12 @@ "metadata": {}, "outputs": [], "source": [ - "fig_index_sel = Figure(marks=[lc, lc_2], axes=[x_ax, x_ay], title='Index Selector Example',\n", - " interaction=index_sel)\n", + "fig_index_sel = Figure(\n", + " marks=[lc, lc_2],\n", + " axes=[x_ax, x_ay],\n", + " title=\"Index Selector Example\",\n", + " interaction=index_sel,\n", + ")\n", "VBox([db_index, fig_index_sel])" ] }, @@ -196,11 +219,10 @@ "dt_x_index = DateScale(min=np.datetime64(py_dtime(2006, 6, 1)))\n", "lin_y2 = LinearScale()\n", "\n", - "lc2_index = Lines(x=dates_actual, y=prices,\n", - " scales={'x': dt_x_index, 'y': lin_y2})\n", + "lc2_index = Lines(x=dates_actual, y=prices, scales={\"x\": dt_x_index, \"y\": lin_y2})\n", "\n", - "x_ax1 = Axis(label='Date', scale=dt_x_index)\n", - "x_ay2 = Axis(label=(symbol + ' Price'), scale=lin_y2, orientation='vertical')" + "x_ax1 = Axis(label=\"Date\", scale=dt_x_index)\n", + "x_ay2 = Axis(label=(symbol + \" Price\"), scale=lin_y2, orientation=\"vertical\")" ] }, { @@ -240,10 +262,14 @@ "outputs": [], "source": [ "## Notice here that we call the observe on the Mark lc2_index rather than on the selector intsel_date\n", - "lc2_index.observe(date_interval_change_callback, names=['selected'])\n", + "lc2_index.observe(date_interval_change_callback, names=[\"selected\"])\n", "\n", - "fig_date_mark = Figure(marks=[lc2_index], axes=[x_ax1, x_ay2],\n", - " title='Fast Interval Selector Selected Indices Example', interaction=intsel_date)\n", + "fig_date_mark = Figure(\n", + " marks=[lc2_index],\n", + " axes=[x_ax1, x_ay2],\n", + " title=\"Fast Interval Selector Selected Indices Example\",\n", + " interaction=intsel_date,\n", + ")\n", "\n", "VBox([db_date, fig_date_mark])" ] @@ -272,11 +298,10 @@ "dt_x_brush = DateScale(min=np.datetime64(py_dtime(2006, 6, 1)))\n", "lin_y2_brush = LinearScale()\n", "\n", - "lc3_brush = Lines(x=dates_actual, y=prices,\n", - " scales={'x': dt_x_brush, 'y': lin_y2_brush})\n", + "lc3_brush = Lines(x=dates_actual, y=prices, scales={\"x\": dt_x_brush, \"y\": lin_y2_brush})\n", "\n", - "x_ax_brush = Axis(label='Date', scale=dt_x_brush)\n", - "x_ay_brush = Axis(label=(symbol + ' Price'), scale=lin_y2_brush, orientation='vertical')" + "x_ax_brush = Axis(label=\"Date\", scale=dt_x_brush)\n", + "x_ay_brush = Axis(label=(symbol + \" Price\"), scale=lin_y2_brush, orientation=\"vertical\")" ] }, { @@ -285,7 +310,7 @@ "metadata": {}, "outputs": [], "source": [ - "db_brush = HTML(value='[]')" + "db_brush = HTML(value=\"[]\")" ] }, { @@ -294,7 +319,9 @@ "metadata": {}, "outputs": [], "source": [ - "brushsel_date = BrushIntervalSelector(scale=dt_x_brush, marks=[lc3_brush], color='FireBrick')" + "brushsel_date = BrushIntervalSelector(\n", + " scale=dt_x_brush, marks=[lc3_brush], color=\"FireBrick\"\n", + ")" ] }, { @@ -314,7 +341,7 @@ "metadata": {}, "outputs": [], "source": [ - "lc3_brush.observe(date_brush_change_callback, names=['selected'])" + "lc3_brush.observe(date_brush_change_callback, names=[\"selected\"])" ] }, { @@ -323,8 +350,12 @@ "metadata": {}, "outputs": [], "source": [ - "fig_brush_sel = Figure(marks=[lc3_brush], axes=[x_ax_brush, x_ay_brush],\n", - " title='Brush Selector Selected Indices Example', interaction=brushsel_date)\n", + "fig_brush_sel = Figure(\n", + " marks=[lc3_brush],\n", + " axes=[x_ax_brush, x_ay_brush],\n", + " title=\"Brush Selector Selected Indices Example\",\n", + " interaction=brushsel_date,\n", + ")\n", "\n", "VBox([db_brush, fig_brush_sel])" ] @@ -349,7 +380,7 @@ "metadata": {}, "outputs": [], "source": [ - "date_fmt = '%m-%d-%Y'\n", + "date_fmt = \"%m-%d-%Y\"\n", "\n", "sec2_data = price_data[symbol2].values\n", "dates = price_data.index.values" @@ -364,11 +395,10 @@ "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "scatt = Scatter(x=prices, y=sec2_data,\n", - " scales={'x': sc_x, 'y': sc_y})\n", + "scatt = Scatter(x=prices, y=sec2_data, scales={\"x\": sc_x, \"y\": sc_y})\n", "\n", "sc_xax = Axis(label=(symbol), scale=sc_x)\n", - "sc_yax = Axis(label=(symbol2), scale=sc_y, orientation='vertical')" + "sc_yax = Axis(label=(symbol2), scale=sc_y, orientation=\"vertical\")" ] }, { @@ -377,9 +407,9 @@ "metadata": {}, "outputs": [], "source": [ - "br_sel = BrushSelector(x_scale=sc_x, y_scale=sc_y, marks=[scatt], color='red')\n", + "br_sel = BrushSelector(x_scale=sc_x, y_scale=sc_y, marks=[scatt], color=\"red\")\n", "\n", - "db_scat_brush = HTML(value='[]')" + "db_scat_brush = HTML(value=\"[]\")" ] }, { @@ -399,7 +429,7 @@ "metadata": {}, "outputs": [], "source": [ - "br_sel.observe(brush_callback, names=['brushing'])" + "br_sel.observe(brush_callback, names=[\"brushing\"])" ] }, { @@ -408,16 +438,18 @@ "metadata": {}, "outputs": [], "source": [ - "fig_scat_brush = Figure(marks=[scatt], axes=[sc_xax, sc_yax], title='Scatter Chart Brush Selector Example',\n", - " interaction=br_sel)" + "fig_scat_brush = Figure(\n", + " marks=[scatt],\n", + " axes=[sc_xax, sc_yax],\n", + " title=\"Scatter Chart Brush Selector Example\",\n", + " interaction=br_sel,\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "VBox([db_scat_brush, fig_scat_brush])" @@ -439,8 +471,9 @@ "sc_brush_dt_x = DateScale(date_format=date_fmt)\n", "sc_brush_dt_y = LinearScale()\n", "\n", - "scatt2 = Scatter(x=dates_actual, y=sec2_data,\n", - " scales={'x': sc_brush_dt_x, 'y': sc_brush_dt_y})" + "scatt2 = Scatter(\n", + " x=dates_actual, y=sec2_data, scales={\"x\": sc_brush_dt_x, \"y\": sc_brush_dt_y}\n", + ")" ] }, { @@ -478,7 +511,7 @@ "metadata": {}, "outputs": [], "source": [ - "br_sel_dt.observe(brush_dt_callback, names=['brushing'])" + "br_sel_dt.observe(brush_dt_callback, names=[\"brushing\"])" ] }, { @@ -488,9 +521,13 @@ "outputs": [], "source": [ "sc_xax = Axis(label=(symbol), scale=sc_brush_dt_x)\n", - "sc_yax = Axis(label=(symbol2), scale=sc_brush_dt_y, orientation='vertical')\n", - "fig_brush_dt = Figure(marks =[scatt2], axes=[sc_xax, sc_yax], title='Brush Selector with Dates Example',\n", - " interaction=br_sel_dt)" + "sc_yax = Axis(label=(symbol2), scale=sc_brush_dt_y, orientation=\"vertical\")\n", + "fig_brush_dt = Figure(\n", + " marks=[scatt2],\n", + " axes=[sc_xax, sc_yax],\n", + " title=\"Brush Selector with Dates Example\",\n", + " interaction=br_sel_dt,\n", + ")" ] }, { @@ -518,10 +555,11 @@ "## call back for selectors\n", "def interval_change_callback(name, value):\n", " db3.value = str(value)\n", - " \n", + "\n", + "\n", "## call back for the selector\n", "def brush_callback(change):\n", - " if(not br_intsel.brushing):\n", + " if not br_intsel.brushing:\n", " db3.value = str(br_intsel.selected)" ] }, @@ -534,19 +572,26 @@ "returns = np.log(prices[1:]) - np.log(prices[:-1])\n", "hist_x = LinearScale()\n", "hist_y = LinearScale()\n", - "hist = Hist(sample=returns, scales={'sample': hist_x, 'count': hist_y})\n", + "hist = Hist(sample=returns, scales={\"sample\": hist_x, \"count\": hist_y})\n", "\n", "br_intsel = BrushIntervalSelector(scale=hist_x, marks=[hist])\n", - "br_intsel.observe(brush_callback, names=['selected'])\n", - "br_intsel.observe(brush_callback, names=['brushing'])\n", + "br_intsel.observe(brush_callback, names=[\"selected\"])\n", + "br_intsel.observe(brush_callback, names=[\"brushing\"])\n", "\n", "db3 = HTML()\n", "db3.value = str(br_intsel.selected)\n", "\n", - "h_xax = Axis(scale=hist_x, label='Returns', grids='off', set_ticks=True, tick_format='0.2%')\n", - "h_yax = Axis(scale=hist_y, label='Freq', orientation='vertical', grid_lines='none')\n", + "h_xax = Axis(\n", + " scale=hist_x, label=\"Returns\", grids=\"off\", set_ticks=True, tick_format=\"0.2%\"\n", + ")\n", + "h_yax = Axis(scale=hist_y, label=\"Freq\", orientation=\"vertical\", grid_lines=\"none\")\n", "\n", - "fig_hist = Figure(marks=[hist], axes=[h_xax, h_yax], title='Histogram Selection Example', interaction=br_intsel)\n", + "fig_hist = Figure(\n", + " marks=[hist],\n", + " axes=[h_xax, h_yax],\n", + " title=\"Histogram Selection Example\",\n", + " interaction=br_intsel,\n", + ")\n", "VBox([db3, fig_hist])" ] }, @@ -558,7 +603,7 @@ "\n", "* This selector provides the ability to have multiple brush selectors on the same graph.\n", "* The first brush works like a regular brush.\n", - "* `Ctrl + click` creates a new brush, which works like the regular brush. \n", + "* `Ctrl + click` creates a new brush, which works like the regular brush.\n", "* The `active` brush has a Green border while all the `inactive` brushes have a Red border.\n", "* `Shift + click` deactivates the current `active` brush. Now, click on any `inactive` brush to make it `active`.\n", "* `Ctrl + Alt + Shift + click` clears and resets all the brushes." @@ -571,7 +616,7 @@ "outputs": [], "source": [ "def multi_sel_callback(change):\n", - " if(not multi_sel.brushing):\n", + " if not multi_sel.brushing:\n", " db4.value = str(multi_sel.selected)" ] }, @@ -583,20 +628,26 @@ "source": [ "line_x = LinearScale()\n", "line_y = LinearScale()\n", - "line = Lines(x=np.arange(100), y=np.random.randn(100), scales={'x': line_x, 'y': line_y})\n", + "line = Lines(\n", + " x=np.arange(100), y=np.random.randn(100), scales={\"x\": line_x, \"y\": line_y}\n", + ")\n", "\n", "multi_sel = MultiSelector(scale=line_x, marks=[line])\n", - "multi_sel.observe(multi_sel_callback, names=['selected'])\n", - "multi_sel.observe(multi_sel_callback, names=['brushing'])\n", + "multi_sel.observe(multi_sel_callback, names=[\"selected\"])\n", + "multi_sel.observe(multi_sel_callback, names=[\"brushing\"])\n", "\n", "db4 = HTML()\n", "db4.value = str(multi_sel.selected)\n", "\n", - "h_xax = Axis(scale=line_x, label='Returns', grid_lines='none')\n", - "h_yax = Axis(scale=hist_y, label='Freq', orientation='vertical', grid_lines='none')\n", + "h_xax = Axis(scale=line_x, label=\"Returns\", grid_lines=\"none\")\n", + "h_yax = Axis(scale=hist_y, label=\"Freq\", orientation=\"vertical\", grid_lines=\"none\")\n", "\n", - "fig_multi = Figure(marks=[line], axes=[h_xax, h_yax], title='Multi-Selector Example',\n", - " interaction=multi_sel)\n", + "fig_multi = Figure(\n", + " marks=[line],\n", + " axes=[h_xax, h_yax],\n", + " title=\"Multi-Selector Example\",\n", + " interaction=multi_sel,\n", + ")\n", "VBox([db4, fig_multi])" ] }, @@ -607,7 +658,7 @@ "outputs": [], "source": [ "# changing the names of the intervals.\n", - "multi_sel.names = ['int1', 'int2', 'int3']" + "multi_sel.names = [\"int1\", \"int2\", \"int3\"]" ] }, { @@ -624,7 +675,7 @@ "outputs": [], "source": [ "def multi_sel_dt_callback(change):\n", - " if(not multi_sel_dt.brushing):\n", + " if not multi_sel_dt.brushing:\n", " db_multi_dt.value = str(multi_sel_dt.selected)" ] }, @@ -636,20 +687,28 @@ "source": [ "line_dt_x = DateScale(min=np.datetime64(py_dtime(2007, 1, 1)))\n", "line_dt_y = LinearScale()\n", - "line_dt = Lines(x=dates_actual, y=sec2_data, scales={'x': line_dt_x, 'y': line_dt_y}, colors=['red'])\n", + "line_dt = Lines(\n", + " x=dates_actual, y=sec2_data, scales={\"x\": line_dt_x, \"y\": line_dt_y}, colors=[\"red\"]\n", + ")\n", "\n", "multi_sel_dt = MultiSelector(scale=line_dt_x)\n", - "multi_sel_dt.observe(multi_sel_dt_callback, names=['selected'])\n", - "multi_sel_dt.observe(multi_sel_dt_callback, names=['brushing'])\n", + "multi_sel_dt.observe(multi_sel_dt_callback, names=[\"selected\"])\n", + "multi_sel_dt.observe(multi_sel_dt_callback, names=[\"brushing\"])\n", "\n", "db_multi_dt = HTML()\n", "db_multi_dt.value = str(multi_sel_dt.selected)\n", "\n", - "h_xax_dt = Axis(scale=line_dt_x, label='Returns', grid_lines='none')\n", - "h_yax_dt = Axis(scale=line_dt_y, label='Freq', orientation='vertical', grid_lines='none')\n", + "h_xax_dt = Axis(scale=line_dt_x, label=\"Returns\", grid_lines=\"none\")\n", + "h_yax_dt = Axis(\n", + " scale=line_dt_y, label=\"Freq\", orientation=\"vertical\", grid_lines=\"none\"\n", + ")\n", "\n", - "fig_multi_dt = Figure(marks=[line_dt], axes=[h_xax_dt, h_yax_dt], title='Multi-Selector with Date Example',\n", - " interaction=multi_sel_dt)\n", + "fig_multi_dt = Figure(\n", + " marks=[line_dt],\n", + " axes=[h_xax_dt, h_yax_dt],\n", + " title=\"Multi-Selector with Date Example\",\n", + " interaction=multi_sel_dt,\n", + ")\n", "VBox([db_multi_dt, fig_multi_dt])" ] }, @@ -677,12 +736,18 @@ "source": [ "xs, ys = LinearScale(), LinearScale()\n", "data = np.arange(20)\n", - "line_lasso = Lines(x=data, y=data, scales={'x': xs, 'y': ys})\n", - "scatter_lasso = Scatter(x=data, y=data, scales={'x': xs, 'y': ys}, colors=['skyblue'])\n", - "bar_lasso = Bars(x=data, y=data/2., scales={'x': xs, 'y': ys})\n", - "xax_lasso, yax_lasso = Axis(scale=xs, label='X'), Axis(scale=ys, label='Y', orientation='vertical')\n", - "fig_lasso = Figure(marks=[scatter_lasso, line_lasso, bar_lasso], axes=[xax_lasso, yax_lasso],\n", - " title='Lasso Selector Example', interaction=lasso_sel)\n", + "line_lasso = Lines(x=data, y=data, scales={\"x\": xs, \"y\": ys})\n", + "scatter_lasso = Scatter(x=data, y=data, scales={\"x\": xs, \"y\": ys}, colors=[\"skyblue\"])\n", + "bar_lasso = Bars(x=data, y=data / 2.0, scales={\"x\": xs, \"y\": ys})\n", + "xax_lasso, yax_lasso = Axis(scale=xs, label=\"X\"), Axis(\n", + " scale=ys, label=\"Y\", orientation=\"vertical\"\n", + ")\n", + "fig_lasso = Figure(\n", + " marks=[scatter_lasso, line_lasso, bar_lasso],\n", + " axes=[xax_lasso, yax_lasso],\n", + " title=\"Lasso Selector Example\",\n", + " interaction=lasso_sel,\n", + ")\n", "lasso_sel.marks = [scatter_lasso, line_lasso]\n", "fig_lasso" ] @@ -711,11 +776,13 @@ "source": [ "xs_pz = DateScale(min=np.datetime64(py_dtime(2007, 1, 1)))\n", "ys_pz = LinearScale()\n", - "line_pz = Lines(x=dates_actual, y=sec2_data, scales={'x': xs_pz, 'y': ys_pz}, colors=['red'])\n", + "line_pz = Lines(\n", + " x=dates_actual, y=sec2_data, scales={\"x\": xs_pz, \"y\": ys_pz}, colors=[\"red\"]\n", + ")\n", "\n", - "panzoom = PanZoom(scales={'x': [xs_pz], 'y': [ys_pz]})\n", - "xax = Axis(scale=xs_pz, label='Date', grids='off')\n", - "yax = Axis(scale=ys_pz, label='Price', orientation='vertical', grid_lines='none')\n", + "panzoom = PanZoom(scales={\"x\": [xs_pz], \"y\": [ys_pz]})\n", + "xax = Axis(scale=xs_pz, label=\"Date\", grids=\"off\")\n", + "yax = Axis(scale=ys_pz, label=\"Price\", orientation=\"vertical\", grid_lines=\"none\")\n", "\n", "Figure(marks=[line_pz], axes=[xax, yax], interaction=panzoom)" ] @@ -735,11 +802,13 @@ "source": [ "xs_hd = DateScale(min=np.datetime64(py_dtime(2007, 1, 1)))\n", "ys_hd = LinearScale()\n", - "line_hd = Lines(x=dates_actual, y=sec2_data, scales={'x': xs_hd, 'y': ys_hd}, colors=['red'])\n", + "line_hd = Lines(\n", + " x=dates_actual, y=sec2_data, scales={\"x\": xs_hd, \"y\": ys_hd}, colors=[\"red\"]\n", + ")\n", "\n", "handdraw = HandDraw(lines=line_hd)\n", - "xax = Axis(scale=xs_hd, label='Date', grid_lines='none')\n", - "yax = Axis(scale=ys_hd, label='Price', orientation='vertical', grid_lines='none')\n", + "xax = Axis(scale=xs_hd, label=\"Date\", grid_lines=\"none\")\n", + "yax = Axis(scale=ys_hd, label=\"Price\", orientation=\"vertical\", grid_lines=\"none\")\n", "\n", "Figure(marks=[line_hd], axes=[xax, yax], interaction=handdraw)" ] @@ -761,25 +830,35 @@ "lc1_x = LinearScale()\n", "lc2_y = LinearScale()\n", "\n", - "lc2 = Lines(x=np.linspace(0.0, 10.0, len(prices)), y=prices * 0.25,\n", - " scales={'x': lc1_x, 'y': lc2_y}, \n", - " display_legend=True,\n", - " labels=['Security 1'])\n", + "lc2 = Lines(\n", + " x=np.linspace(0.0, 10.0, len(prices)),\n", + " y=prices * 0.25,\n", + " scales={\"x\": lc1_x, \"y\": lc2_y},\n", + " display_legend=True,\n", + " labels=[\"Security 1\"],\n", + ")\n", "\n", - "lc3 = Lines(x=dates_actual, y=sec2_data,\n", - " scales={'x': dt_x, 'y': lc2_y},\n", - " colors=['red'], \n", - " display_legend=True, \n", - " labels=['Security 2'])\n", + "lc3 = Lines(\n", + " x=dates_actual,\n", + " y=sec2_data,\n", + " scales={\"x\": dt_x, \"y\": lc2_y},\n", + " colors=[\"red\"],\n", + " display_legend=True,\n", + " labels=[\"Security 2\"],\n", + ")\n", "\n", - "lc4 = Lines(x=np.linspace(0.0, 10.0, len(prices)), y=sec2_data * 0.75,\n", - " scales={'x': LinearScale(min=5, max=10), 'y': lc2_y},\n", - " colors=['green'], display_legend=True, \n", - " labels=['Security 2 squared'])\n", + "lc4 = Lines(\n", + " x=np.linspace(0.0, 10.0, len(prices)),\n", + " y=sec2_data * 0.75,\n", + " scales={\"x\": LinearScale(min=5, max=10), \"y\": lc2_y},\n", + " colors=[\"green\"],\n", + " display_legend=True,\n", + " labels=[\"Security 2 squared\"],\n", + ")\n", "\n", - "x_ax1 = Axis(label='Date', scale=dt_x)\n", - "x_ax2 = Axis(label='Time', scale=lc1_x, side='top', grid_lines='none')\n", - "x_ay2 = Axis(label=(symbol + ' Price'), scale=lc2_y, orientation='vertical')\n", + "x_ax1 = Axis(label=\"Date\", scale=dt_x)\n", + "x_ax2 = Axis(label=\"Time\", scale=lc1_x, side=\"top\", grid_lines=\"none\")\n", + "x_ay2 = Axis(label=(symbol + \" Price\"), scale=lc2_y, orientation=\"vertical\")\n", "\n", "\n", "fig = Figure(marks=[lc2, lc3, lc4], axes=[x_ax1, x_ax2, x_ay2])" @@ -799,10 +878,10 @@ "\n", "hd = HandDraw(lines=lc2)\n", "hd2 = HandDraw(lines=lc3)\n", - "pz = PanZoom(scales={'x': [dt_x], 'y': [lc2_y]})\n", + "pz = PanZoom(scales={\"x\": [dt_x], \"y\": [lc2_y]})\n", "\n", "deb = HTML()\n", - "deb.value = '[]'" + "deb.value = \"[]\"" ] }, { @@ -814,11 +893,12 @@ "## Call back handler for the interactions\n", "def test_callback(change):\n", " deb.value = str(change.new)\n", - " \n", - "multi_sel.observe(test_callback, names=['selected'])\n", - "br_intsel.observe(test_callback, names=['selected'])\n", - "index_sel.observe(test_callback, names=['selected'])\n", - "int_sel.observe(test_callback, names=['selected'])" + "\n", + "\n", + "multi_sel.observe(test_callback, names=[\"selected\"])\n", + "br_intsel.observe(test_callback, names=[\"selected\"])\n", + "index_sel.observe(test_callback, names=[\"selected\"])\n", + "int_sel.observe(test_callback, names=[\"selected\"])" ] }, { @@ -828,13 +908,24 @@ "outputs": [], "source": [ "from collections import OrderedDict\n", - "selection_interacts = ToggleButtons(options=OrderedDict([('HandDraw1', hd), ('HandDraw2', hd2), ('PanZoom', pz), \n", - " ('FastIntervalSelector', int_sel), ('IndexSelector', index_sel),\n", - " ('BrushIntervalSelector', br_intsel), ('MultiSelector', multi_sel),\n", - " ('None', None)]))\n", "\n", - "link((selection_interacts, 'value'), (fig, 'interaction'))\n", - "VBox([deb, fig, selection_interacts], align_self='stretch')" + "selection_interacts = ToggleButtons(\n", + " options=OrderedDict(\n", + " [\n", + " (\"HandDraw1\", hd),\n", + " (\"HandDraw2\", hd2),\n", + " (\"PanZoom\", pz),\n", + " (\"FastIntervalSelector\", int_sel),\n", + " (\"IndexSelector\", index_sel),\n", + " (\"BrushIntervalSelector\", br_intsel),\n", + " (\"MultiSelector\", multi_sel),\n", + " (\"None\", None),\n", + " ]\n", + " )\n", + ")\n", + "\n", + "link((selection_interacts, \"value\"), (fig, \"interaction\"))\n", + "VBox([deb, fig, selection_interacts], align_self=\"stretch\")" ] }, { diff --git a/examples/Interactions/Mark Interactions.ipynb b/examples/Interactions/Mark Interactions.ipynb index 92efe242c..276da646c 100644 --- a/examples/Interactions/Mark Interactions.ipynb +++ b/examples/Interactions/Mark Interactions.ipynb @@ -42,13 +42,18 @@ "x_data = np.arange(20)\n", "y_data = np.random.randn(20)\n", "\n", - "scatter_chart = Scatter(x=x_data, y=y_data, scales= {'x': x_sc, 'y': y_sc}, colors=['dodgerblue'],\n", - " interactions={'click': 'select'},\n", - " selected_style={'opacity': 1.0, 'fill': 'DarkOrange', 'stroke': 'Red'},\n", - " unselected_style={'opacity': 0.5})\n", + "scatter_chart = Scatter(\n", + " x=x_data,\n", + " y=y_data,\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " colors=[\"dodgerblue\"],\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"opacity\": 1.0, \"fill\": \"DarkOrange\", \"stroke\": \"Red\"},\n", + " unselected_style={\"opacity\": 0.5},\n", + ")\n", "\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[scatter_chart], axes=[ax_x, ax_y])" ] @@ -88,9 +93,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "x_sc = LinearScale()\n", @@ -99,20 +102,36 @@ "x_data = np.arange(20)\n", "y_data = np.random.randn(20)\n", "\n", - "dd = Dropdown(options=['First', 'Second', 'Third', 'Fourth'])\n", - "scatter_chart = Scatter(x=x_data, y=y_data, scales= {'x': x_sc, 'y': y_sc}, colors=['dodgerblue'],\n", - " names=np.arange(100, 200), names_unique=False, display_names=False, display_legend=True,\n", - " labels=['Blue'])\n", - "ins = Button(icon='fa-legal')\n", + "dd = Dropdown(options=[\"First\", \"Second\", \"Third\", \"Fourth\"])\n", + "scatter_chart = Scatter(\n", + " x=x_data,\n", + " y=y_data,\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " colors=[\"dodgerblue\"],\n", + " names=np.arange(100, 200),\n", + " names_unique=False,\n", + " display_names=False,\n", + " display_legend=True,\n", + " labels=[\"Blue\"],\n", + ")\n", + "ins = Button(icon=\"fa-legal\")\n", "scatter_chart.tooltip = ins\n", - "line = Lines(x=x_data, y=y_data, scales= {'x': x_sc, 'y': y_sc}, colors=['dodgerblue'])\n", - "scatter_chart2 = Scatter(x=x_data, y=np.random.randn(20), \n", - " scales= {'x': x_sc, 'y': y_sc}, colors=['orangered'],\n", - " tooltip=dd, names=np.arange(100, 200), names_unique=False, display_names=False, \n", - " display_legend=True, labels=['Red'])\n", + "line = Lines(x=x_data, y=y_data, scales={\"x\": x_sc, \"y\": y_sc}, colors=[\"dodgerblue\"])\n", + "scatter_chart2 = Scatter(\n", + " x=x_data,\n", + " y=np.random.randn(20),\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " colors=[\"orangered\"],\n", + " tooltip=dd,\n", + " names=np.arange(100, 200),\n", + " names_unique=False,\n", + " display_names=False,\n", + " display_legend=True,\n", + " labels=[\"Red\"],\n", + ")\n", "\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "fig = Figure(marks=[scatter_chart, scatter_chart2, line], axes=[ax_x, ax_y])\n", "fig" @@ -127,6 +146,7 @@ "def print_event(self, target):\n", " print(target)\n", "\n", + "\n", "# Adding call back to scatter events\n", "# print custom mssg on hover and background click of Blue Scatter\n", "scatter_chart.on_hover(print_event)\n", @@ -145,7 +165,7 @@ "outputs": [], "source": [ "# Changing interaction from hover to click for tooltip\n", - "scatter_chart.interactions = {'click': 'tooltip'}" + "scatter_chart.interactions = {\"click\": \"tooltip\"}" ] }, { @@ -161,10 +181,10 @@ "x_data = np.arange(10)\n", "y_data = np.random.randn(10)\n", "\n", - "lc = Lines(x=x_data, y=y_data, scales={'x': x_sc, 'y':y_sc})\n", + "lc = Lines(x=x_data, y=y_data, scales={\"x\": x_sc, \"y\": y_sc})\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", - "tooltip_fig = Figure(marks=[lc], axes=[ax_x, ax_y], layout=Layout(min_width='600px'))\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", + "tooltip_fig = Figure(marks=[lc], axes=[ax_x, ax_y], layout=Layout(min_width=\"600px\"))\n", "\n", "scatter_chart.tooltip = tooltip_fig" ] @@ -175,7 +195,7 @@ "source": [ "## Image\n", "\n", - "For images, `on_element_click` returns the location of the mouse click. " + "For images, `on_element_click` returns the location of the mouse click." ] }, { @@ -184,8 +204,8 @@ "metadata": {}, "outputs": [], "source": [ - "i = ImageIpy.from_file(os.path.abspath('../data_files/trees.jpg'))\n", - "bqi = Image(image=i, scales={'x': x_sc, 'y': y_sc}, x=(0, 10), y=(-1, 1))\n", + "i = ImageIpy.from_file(os.path.abspath(\"../data_files/trees.jpg\"))\n", + "bqi = Image(image=i, scales={\"x\": x_sc, \"y\": y_sc}, x=(0, 10), y=(-1, 1))\n", "\n", "fig_image = Figure(marks=[bqi], axes=[ax_x, ax_y])\n", "fig_image" @@ -220,12 +240,20 @@ "x_data = np.arange(100)\n", "y_data = np.random.randn(3, 100)\n", "\n", - "def_tt = Tooltip(fields=['name', 'index'], formats=['', '.2f'], labels=['id', 'line_num'])\n", - "line_chart = Lines(x=x_data, y=y_data, scales= {'x': x_sc, 'y': y_sc}, \n", - " tooltip=def_tt, display_legend=True, labels=[\"line 1\", \"line 2\", \"line 3\"] )\n", + "def_tt = Tooltip(\n", + " fields=[\"name\", \"index\"], formats=[\"\", \".2f\"], labels=[\"id\", \"line_num\"]\n", + ")\n", + "line_chart = Lines(\n", + " x=x_data,\n", + " y=y_data,\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " tooltip=def_tt,\n", + " display_legend=True,\n", + " labels=[\"line 1\", \"line 2\", \"line 3\"],\n", + ")\n", "\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[line_chart], axes=[ax_x, ax_y])" ] @@ -261,13 +289,17 @@ "x_data = np.arange(10)\n", "y_data = np.random.randn(2, 10)\n", "\n", - "bar_chart = Bars(x=x_data, y=[y_data[0, :].tolist(), y_data[1, :].tolist()], scales= {'x': x_sc, 'y': y_sc},\n", - " interactions={'click': 'select'},\n", - " selected_style={'stroke': 'orange', 'fill': 'red'},\n", - " labels=['Level 1', 'Level 2'],\n", - " display_legend=True)\n", + "bar_chart = Bars(\n", + " x=x_data,\n", + " y=[y_data[0, :].tolist(), y_data[1, :].tolist()],\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"stroke\": \"orange\", \"fill\": \"red\"},\n", + " labels=[\"Level 1\", \"Level 2\"],\n", + " display_legend=True,\n", + ")\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar_chart], axes=[ax_x, ax_y])" ] @@ -279,12 +311,12 @@ "outputs": [], "source": [ "# Adding a tooltip on hover in addition to select on click\n", - "def_tt = Tooltip(fields=['x', 'y'], formats=['', '.2f'])\n", - "bar_chart.tooltip=def_tt\n", + "def_tt = Tooltip(fields=[\"x\", \"y\"], formats=[\"\", \".2f\"])\n", + "bar_chart.tooltip = def_tt\n", "bar_chart.interactions = {\n", - " 'legend_hover': 'highlight_axes',\n", - " 'hover': 'tooltip', \n", - " 'click': 'select',\n", + " \"legend_hover\": \"highlight_axes\",\n", + " \"hover\": \"tooltip\",\n", + " \"click\": \"select\",\n", "}" ] }, @@ -295,7 +327,7 @@ "outputs": [], "source": [ "# Changing tooltip to be on click\n", - "bar_chart.interactions = {'click': 'tooltip'}" + "bar_chart.interactions = {\"click\": \"tooltip\"}" ] }, { @@ -305,7 +337,7 @@ "outputs": [], "source": [ "# Call back on legend being clicked\n", - "bar_chart.type='grouped'\n", + "bar_chart.type = \"grouped\"\n", "bar_chart.on_legend_click(print_event)" ] }, @@ -328,11 +360,17 @@ "\n", "sample_data = np.random.randn(100)\n", "\n", - "def_tt = Tooltip(formats=['', '.2f'], fields=['count', 'midpoint'])\n", - "hist = Hist(sample=sample_data, scales= {'sample': x_sc, 'count': y_sc},\n", - " tooltip=def_tt, display_legend=True, labels=['Test Hist'], select_bars=True)\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "def_tt = Tooltip(formats=[\"\", \".2f\"], fields=[\"count\", \"midpoint\"])\n", + "hist = Hist(\n", + " sample=sample_data,\n", + " scales={\"sample\": x_sc, \"count\": y_sc},\n", + " tooltip=def_tt,\n", + " display_legend=True,\n", + " labels=[\"Test Hist\"],\n", + " select_bars=True,\n", + ")\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y])" ] @@ -344,7 +382,7 @@ "outputs": [], "source": [ "# Changing tooltip to be displayed on click\n", - "hist.interactions = {'click': 'tooltip'}" + "hist.interactions = {\"click\": \"tooltip\"}" ] }, { @@ -354,7 +392,7 @@ "outputs": [], "source": [ "# Changing tooltip to be on click of legend\n", - "hist.interactions = {'legend_click': 'tooltip'}" + "hist.interactions = {\"legend_click\": \"tooltip\"}" ] }, { @@ -381,10 +419,18 @@ "source": [ "pie_data = np.abs(np.random.randn(10))\n", "\n", - "sc = ColorScale(scheme='Reds')\n", - "tooltip_widget = Tooltip(fields=['size', 'index', 'color'], formats=['0.2f', '', '0.2f'])\n", - "pie = Pie(sizes=pie_data, scales={'color': sc}, color=np.random.randn(10), \n", - " tooltip=tooltip_widget, interactions = {'click': 'tooltip'}, selected_style={'fill': 'red'})\n", + "sc = ColorScale(scheme=\"Reds\")\n", + "tooltip_widget = Tooltip(\n", + " fields=[\"size\", \"index\", \"color\"], formats=[\"0.2f\", \"\", \"0.2f\"]\n", + ")\n", + "pie = Pie(\n", + " sizes=pie_data,\n", + " scales={\"color\": sc},\n", + " color=np.random.randn(10),\n", + " tooltip=tooltip_widget,\n", + " interactions={\"click\": \"tooltip\"},\n", + " selected_style={\"fill\": \"red\"},\n", + ")\n", "\n", "pie.selected_style = {\"opacity\": \"1\", \"stroke\": \"white\", \"stroke-width\": \"2\"}\n", "pie.unselected_style = {\"opacity\": \"0.2\"}\n", @@ -399,7 +445,7 @@ "outputs": [], "source": [ "# Changing interaction to select on click and tooltip on hover\n", - "pie.interactions = {'click': 'select', 'hover': 'tooltip'}" + "pie.interactions = {\"click\": \"select\", \"hover\": \"tooltip\"}" ] } ], diff --git a/examples/Interactions/Selectors.ipynb b/examples/Interactions/Selectors.ipynb index bdea9a591..751b03938 100644 --- a/examples/Interactions/Selectors.ipynb +++ b/examples/Interactions/Selectors.ipynb @@ -30,8 +30,8 @@ "import pandas as pd\n", "import numpy as np\n", "\n", - "symbol = 'Security 1'\n", - "symbol2 = 'Security 2'" + "symbol = \"Security 1\"\n", + "symbol2 = \"Security 2\"" ] }, { @@ -40,9 +40,11 @@ "metadata": {}, "outputs": [], "source": [ - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.4], [0.4, 1.0]]), axis=0) + 100,\n", - " columns=[symbol, symbol2],\n", - " index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.4], [0.4, 1.0]]), axis=0) + 100,\n", + " columns=[symbol, symbol2],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "\n", "dates_actual = price_data.index.values\n", "prices = price_data[symbol].values" @@ -56,8 +58,12 @@ "source": [ "from bqplot import *\n", "from bqplot.interacts import (\n", - " FastIntervalSelector, IndexSelector, BrushIntervalSelector,\n", - " BrushSelector, MultiSelector, LassoSelector,\n", + " FastIntervalSelector,\n", + " IndexSelector,\n", + " BrushIntervalSelector,\n", + " BrushSelector,\n", + " MultiSelector,\n", + " LassoSelector,\n", ")\n", "\n", "from ipywidgets import ToggleButtons, VBox, HTML" @@ -93,7 +99,7 @@ "outputs": [], "source": [ "# Define scales for the rest of the notebook\n", - "scales = {'x': DateScale(), 'y': LinearScale()}" + "scales = {\"x\": DateScale(), \"y\": LinearScale()}" ] }, { @@ -119,18 +125,27 @@ "outputs": [], "source": [ "# The Mark we want to select subsamples of\n", - "scatter = Scatter(x=dates_actual, y=prices, scales=scales, colors=['orange'],\n", - " selected_style={'opacity': '1'}, unselected_style={'opacity': '0.2'})\n", + "scatter = Scatter(\n", + " x=dates_actual,\n", + " y=prices,\n", + " scales=scales,\n", + " colors=[\"orange\"],\n", + " selected_style={\"opacity\": \"1\"},\n", + " unselected_style={\"opacity\": \"0.2\"},\n", + ")\n", "# Create the brush selector, passing it its corresponding scale.\n", "# Notice that we do not pass it any marks for now\n", - "brushintsel = BrushIntervalSelector(scale=scales['x'])\n", + "brushintsel = BrushIntervalSelector(scale=scales[\"x\"])\n", "\n", - "x_ax = Axis(label='Index', scale=scales['x'])\n", - "x_ay = Axis(label=(symbol + ' Price'), scale=scales['y'], orientation='vertical')\n", + "x_ax = Axis(label=\"Index\", scale=scales[\"x\"])\n", + "x_ay = Axis(label=(symbol + \" Price\"), scale=scales[\"y\"], orientation=\"vertical\")\n", "# Pass the Selector instance to the Figure\n", - "fig = Figure(marks=[scatter], axes=[x_ax, x_ay],\n", - " title='''Brush Interval Selector Example. Click and drag on the Figure to action.''',\n", - " interaction=brushintsel)\n", + "fig = Figure(\n", + " marks=[scatter],\n", + " axes=[x_ax, x_ay],\n", + " title=\"\"\"Brush Interval Selector Example. Click and drag on the Figure to action.\"\"\",\n", + " interaction=brushintsel,\n", + ")\n", "\n", "# The following text widgets are used to display the `selected` attributes\n", "text_brush = HTML()\n", @@ -138,11 +153,19 @@ "\n", "# This function updates the text, triggered by a change in the selector\n", "def update_brush_text(*args):\n", - " text_brush.value = \"The Brush's selected attribute is {}\".format(brushintsel.selected)\n", + " text_brush.value = \"The Brush's selected attribute is {}\".format(\n", + " brushintsel.selected\n", + " )\n", + "\n", + "\n", "def update_scatter_text(*args):\n", - " text_scatter.value = \"The scatter's selected indices are {}\".format(scatter.selected)\n", - "brushintsel.observe(update_brush_text, 'selected')\n", - "scatter.observe(update_scatter_text, 'selected')\n", + " text_scatter.value = \"The scatter's selected indices are {}\".format(\n", + " scatter.selected\n", + " )\n", + "\n", + "\n", + "brushintsel.observe(update_brush_text, \"selected\")\n", + "scatter.observe(update_scatter_text, \"selected\")\n", "\n", "update_brush_text()\n", "update_scatter_text()\n", @@ -156,7 +179,7 @@ "metadata": {}, "source": [ "#### Linking the brush to the scatter\n", - "Passing a mark (or several) to the selector, will link the mark's selected indices to the selector. " + "Passing a mark (or several) to the selector, will link the mark's selected indices to the selector." ] }, { @@ -182,30 +205,44 @@ "outputs": [], "source": [ "def create_figure(selector, **selector_kwargs):\n", - " '''\n", + " \"\"\"\n", " Returns a Figure with a Scatter and a Selector.\n", - " \n", + "\n", " Arguments\n", " ---------\n", " selector: The type of Selector, one of\n", " {'BrushIntervalSelector', 'BrushSelector', 'FastIntervalSelector', 'IndexSelector', 'LassoSelector'}\n", " selector_kwargs: Arguments to be passed to the Selector\n", - " '''\n", - " scatter = Scatter(x=dates_actual, y=prices, scales=scales, colors=['orange'],\n", - " selected_style={'opacity': '1'}, unselected_style={'opacity': '0.2'})\n", + " \"\"\"\n", + " scatter = Scatter(\n", + " x=dates_actual,\n", + " y=prices,\n", + " scales=scales,\n", + " colors=[\"orange\"],\n", + " selected_style={\"opacity\": \"1\"},\n", + " unselected_style={\"opacity\": \"0.2\"},\n", + " )\n", " sel = selector(marks=[scatter], **selector_kwargs)\n", - " \n", + "\n", " text_brush = HTML()\n", " if selector != LassoSelector:\n", + "\n", " def update_text(*args):\n", - " text_brush.value = '{}.selected = {}'.format(selector.__name__, sel.selected)\n", - " sel.observe(update_text, 'selected')\n", + " text_brush.value = \"{}.selected = {}\".format(\n", + " selector.__name__, sel.selected\n", + " )\n", + "\n", + " sel.observe(update_text, \"selected\")\n", " update_text()\n", "\n", - " x_ax = Axis(label='Index', scale=scales['x'])\n", - " x_ay = Axis(label=(symbol + ' Price'), scale=scales['y'], orientation='vertical')\n", - " fig = Figure(marks=[scatter], axes=[x_ax, x_ay], title='{} Example'.format(selector.__name__),\n", - " interaction=sel)\n", + " x_ax = Axis(label=\"Index\", scale=scales[\"x\"])\n", + " x_ay = Axis(label=(symbol + \" Price\"), scale=scales[\"y\"], orientation=\"vertical\")\n", + " fig = Figure(\n", + " marks=[scatter],\n", + " axes=[x_ax, x_ay],\n", + " title=\"{} Example\".format(selector.__name__),\n", + " interaction=sel,\n", + " )\n", " return VBox([fig, text_brush])" ] }, @@ -223,7 +260,7 @@ "metadata": {}, "outputs": [], "source": [ - "create_figure(BrushIntervalSelector, orientation='vertical', scale=scales['y'])" + "create_figure(BrushIntervalSelector, orientation=\"vertical\", scale=scales[\"y\"])" ] }, { @@ -242,7 +279,7 @@ "metadata": {}, "outputs": [], "source": [ - "create_figure(BrushSelector, x_scale=scales['x'], y_scale=scales['y'])" + "create_figure(BrushSelector, x_scale=scales[\"x\"], y_scale=scales[\"y\"])" ] }, { @@ -267,12 +304,10 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ - "create_figure(FastIntervalSelector, scale=scales['x'])" + "create_figure(FastIntervalSelector, scale=scales[\"x\"])" ] }, { @@ -290,7 +325,7 @@ "--------------------\n", "\n", "This 2-D selector enables the user to select multiple sets of data points\n", - "by drawing lassos on the figure. \n", + "by drawing lassos on the figure.\n", "#### Usage:\n", "- Click and drag to draw a new lasso\n", "- Click a lasso to select (de-select) it. Mult\n", @@ -315,7 +350,7 @@ "\n", "This 1-D selector selects a unique value on its scale. The attached Mark's selected element is the closest element to that value.\n", "#### Usage:\n", - "- First click creates and activates the selector \n", + "- First click creates and activates the selector\n", "- Moving the mouse translates the selector\n", "- Subsequent clicks freeze/unfreeze the selector" ] @@ -326,7 +361,7 @@ "metadata": {}, "outputs": [], "source": [ - "create_figure(IndexSelector, scale=scales['x'])" + "create_figure(IndexSelector, scale=scales[\"x\"])" ] }, { @@ -348,7 +383,7 @@ "This 1-D selector is equivalent to multiple brush selectors.\n", "#### Usage:\n", "* The first brush works like a regular brush.\n", - "* `Ctrl + click` creates a new brush, which works like the regular brush. \n", + "* `Ctrl + click` creates a new brush, which works like the regular brush.\n", "* The `active` brush has a Green border while all the `inactive` brushes have a Red border.\n", "* `Shift + click` deactivates the current `active` brush. Now, click on any `inactive` brush to make it `active`.\n", "* `Ctrl + Shift + click` clears and resets all the brushes.\n", @@ -362,7 +397,7 @@ "metadata": {}, "outputs": [], "source": [ - "create_figure(MultiSelector, scale=scales['x'])" + "create_figure(MultiSelector, scale=scales[\"x\"])" ] } ], diff --git a/examples/Introduction.ipynb b/examples/Introduction.ipynb index 888055478..dbea7b88a 100644 --- a/examples/Introduction.ipynb +++ b/examples/Introduction.ipynb @@ -34,7 +34,7 @@ "size = 100\n", "np.random.seed(0)\n", "x_data = np.arange(size)\n", - "y_data = np.cumsum(np.random.randn(size) * 100.0)" + "y_data = np.cumsum(np.random.randn(size) * 100.0)" ] }, { @@ -73,7 +73,7 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure(title='My First Plot')\n", + "plt.figure(title=\"My First Plot\")\n", "plt.plot(x_data, y_data)\n", "plt.show()" ] @@ -106,7 +106,7 @@ "outputs": [], "source": [ "# Creating a new Figure and setting it's title\n", - "plt.figure(title='My Second Chart')" + "plt.figure(title=\"My Second Chart\")" ] }, { @@ -135,7 +135,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Since both the x and the y attributes of a bqplot chart are interactive widgets, we can change them. So, let's \n", + "Since both the x and the y attributes of a bqplot chart are interactive widgets, we can change them. So, let's\n", "change the y attribute of the chart." ] }, @@ -145,7 +145,7 @@ "metadata": {}, "outputs": [], "source": [ - "scatter_plot.y = np.cumsum(np.random.randn(size) * 100.0)" + "scatter_plot.y = np.cumsum(np.random.randn(size) * 100.0)" ] }, { @@ -162,7 +162,7 @@ "outputs": [], "source": [ "# Say, the color\n", - "scatter_plot.colors = ['Red']" + "scatter_plot.colors = [\"Red\"]" ] }, { @@ -172,7 +172,7 @@ "outputs": [], "source": [ "# Or, the marker style\n", - "scatter_plot.marker = 'diamond'" + "scatter_plot.marker = \"diamond\"" ] }, { @@ -189,9 +189,13 @@ "outputs": [], "source": [ "def foo(change):\n", - " print('This is a trait change. Foo was called by the fact that we moved the Scatter')\n", - " print('In fact, the Scatter plot sent us all the new data: ')\n", - " print('To access the data, try modifying the function and printing the data variable')" + " print(\n", + " \"This is a trait change. Foo was called by the fact that we moved the Scatter\"\n", + " )\n", + " print(\"In fact, the Scatter plot sent us all the new data: \")\n", + " print(\n", + " \"To access the data, try modifying the function and printing the data variable\"\n", + " )" ] }, { @@ -208,7 +212,7 @@ "outputs": [], "source": [ "# First, we hook up our function `foo` to the colors attribute (or Trait) of the scatter plot\n", - "scatter_plot.observe(foo, 'y')" + "scatter_plot.observe(foo, \"y\")" ] }, { @@ -247,7 +251,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "`bqplot` has two different APIs. One is the matplotlib inspired `pyplot` which we used above (you can think of it as similar to `qplot` in `ggplot2`). The other one, the verbose API, is meant to expose every element of a plot individually, so that their attriutes can be controlled in an atomic way. In order to truly use `bqplot` to build complex and feature-rich GUIs, it pays to understand the underlying theory that is used to create a plot." + "`bqplot` has two different APIs. One is the matplotlib inspired `pyplot` which we used above (you can think of it as similar to `qplot` in `ggplot2`). The other one, the verbose API, is meant to expose every element of a plot individually, so that their attributes can be controlled in an atomic way. In order to truly use `bqplot` to build complex and feature-rich GUIs, it pays to understand the underlying theory that is used to create a plot." ] }, { @@ -307,7 +311,7 @@ "metadata": {}, "outputs": [], "source": [ - "scatter_chart = Scatter(x=x_data, y=y_data, scales={'x': x_sc, 'y': y_sc})" + "scatter_chart = Scatter(x=x_data, y=y_data, scales={\"x\": x_sc, \"y\": y_sc})" ] }, { @@ -332,8 +336,8 @@ "metadata": {}, "outputs": [], "source": [ - "x_ax = Axis(label='X', scale=x_sc)\n", - "y_ax = Axis(label='Y', scale=y_sc, orientation='vertical')" + "x_ax = Axis(label=\"X\", scale=x_sc)\n", + "y_ax = Axis(label=\"Y\", scale=y_sc, orientation=\"vertical\")" ] }, { @@ -358,7 +362,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig = Figure(marks=[scatter_chart], title='A Figure', axes=[x_ax, y_ax])\n", + "fig = Figure(marks=[scatter_chart], title=\"A Figure\", axes=[x_ax, y_ax])\n", "fig" ] }, @@ -428,7 +432,7 @@ "source": [ "# The colors trait controls the actual colors we want to map to. It can also take a min, mid, max list of\n", "# colors to be interpolated between for continuous data.\n", - "col_sc = ColorScale(colors=['MediumSeaGreen', 'Red'])" + "col_sc = ColorScale(colors=[\"MediumSeaGreen\", \"Red\"])" ] }, { @@ -437,7 +441,7 @@ "metadata": {}, "outputs": [], "source": [ - "scatter_chart.scales = {'x': x_sc, 'y': y_sc, 'color': col_sc}\n", + "scatter_chart.scales = {\"x\": x_sc, \"y\": y_sc, \"color\": col_sc}\n", "# We pass the color data to the Scatter Chart through it's color attribute\n", "scatter_chart.color = color_data" ] @@ -467,9 +471,9 @@ "outputs": [], "source": [ "new_size = 50\n", - "scale = 100.\n", + "scale = 100.0\n", "x_data_new = np.arange(new_size)\n", - "y_data_new = np.cumsum(np.random.randn(new_size) * scale)" + "y_data_new = np.cumsum(np.random.randn(new_size) * scale)" ] }, { @@ -479,7 +483,7 @@ "outputs": [], "source": [ "# All we need to do to add a bar chart to the Figure is pass the same scales to the Mark\n", - "bar_chart = Bars(x=x_data_new, y=y_data_new, scales={'x': x_sc, 'y': y_sc})" + "bar_chart = Bars(x=x_data_new, y=y_data_new, scales={\"x\": x_sc, \"y\": y_sc})" ] }, { diff --git a/examples/Marks/Object Model/Bars.ipynb b/examples/Marks/Object Model/Bars.ipynb index 13b7403af..7aab6d33f 100644 --- a/examples/Marks/Object Model/Bars.ipynb +++ b/examples/Marks/Object Model/Bars.ipynb @@ -7,8 +7,16 @@ "outputs": [], "source": [ "import numpy as np\n", - "from bqplot import (OrdinalScale, LinearScale, Bars, \n", - " Figure, Axis, ColorScale, ColorAxis, CATEGORY10)" + "from bqplot import (\n", + " OrdinalScale,\n", + " LinearScale,\n", + " Bars,\n", + " Figure,\n", + " Axis,\n", + " ColorScale,\n", + " ColorAxis,\n", + " CATEGORY10,\n", + ")" ] }, { @@ -23,7 +31,7 @@ "x_data = range(size)\n", "y_data = np.random.randn(size)\n", "y_data_2 = np.random.randn(size)\n", - "y_data_3 = np.cumsum(np.random.randn(size) * 100.)" + "y_data_3 = np.cumsum(np.random.randn(size) * 100.0)" ] }, { @@ -42,9 +50,9 @@ "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=np.arange(10), y=np.random.rand(10), scales={'x': x_ord, 'y': y_sc})\n", + "bar = Bars(x=np.arange(10), y=np.random.rand(10), scales={\"x\": x_ord, \"y\": y_sc})\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, tick_format='0.2f', orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, tick_format=\"0.2f\", orientation=\"vertical\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y], padding_x=0.025, padding_y=0.025)" ] @@ -72,10 +80,14 @@ "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=np.arange(10), y=np.arange(-5, 5), scales={'x': x_ord, 'y': y_sc},\n", - " orientation='horizontal')\n", - "ax_x = Axis(scale=x_ord, orientation='vertical')\n", - "ax_y = Axis(scale=y_sc, tick_format='0.2f')\n", + "bar = Bars(\n", + " x=np.arange(10),\n", + " y=np.arange(-5, 5),\n", + " scales={\"x\": x_ord, \"y\": y_sc},\n", + " orientation=\"horizontal\",\n", + ")\n", + "ax_x = Axis(scale=x_ord, orientation=\"vertical\")\n", + "ax_y = Axis(scale=y_sc, tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y], padding_x=0.025, padding_y=0.025)" ] @@ -96,9 +108,11 @@ "x_ord = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=x_data[:20], y=np.abs(y_data_2[:20]), scales={'x': x_ord, 'y': y_sc}, base=1.0)\n", + "bar = Bars(\n", + " x=x_data[:20], y=np.abs(y_data_2[:20]), scales={\"x\": x_ord, \"y\": y_sc}, base=1.0\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y])" ] @@ -119,7 +133,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.align = 'right'" + "bar.align = \"right\"" ] }, { @@ -139,9 +153,9 @@ "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=x_data[:20], y=y_data[:20], scales={'x': x_ord, 'y': y_sc}, padding=0.2)\n", + "bar = Bars(x=x_data[:20], y=y_data[:20], scales={\"x\": x_ord, \"y\": y_sc}, padding=0.2)\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y])" ] @@ -154,8 +168,8 @@ "source": [ "# add bar labels\n", "bar.label_display = True\n", - "bar.label_display_format = '.1f'\n", - "bar.label_font_style = {'fill': 'pink', 'font-size': '10px'}" + "bar.label_display_format = \".1f\"\n", + "bar.label_font_style = {\"fill\": \"pink\", \"font-size\": \"10px\"}" ] }, { @@ -165,7 +179,7 @@ "outputs": [], "source": [ "# changing basic properties like stroke and opacity\n", - "bar.stroke = 'orange'\n", + "bar.stroke = \"orange\"\n", "bar.opacities = [0.5, 0.2]" ] }, @@ -175,9 +189,9 @@ "metadata": {}, "outputs": [], "source": [ - "bar.orientation = 'horizontal'\n", - "ax_x.orientation = 'vertical'\n", - "ax_y.orientation = 'horizontal'" + "bar.orientation = \"horizontal\"\n", + "ax_x.orientation = \"vertical\"\n", + "ax_y.orientation = \"horizontal\"" ] }, { @@ -196,11 +210,15 @@ "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=x_data, y=[y_data[:20], y_data_2[:20]], \n", - " scales={'x': x_ord, 'y': y_sc}, padding=0.2,\n", - " colors=CATEGORY10)\n", + "bar = Bars(\n", + " x=x_data,\n", + " y=[y_data[:20], y_data_2[:20]],\n", + " scales={\"x\": x_ord, \"y\": y_sc},\n", + " padding=0.2,\n", + " colors=CATEGORY10,\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y])" ] @@ -218,7 +236,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.type = 'grouped' # equivalent to saying \n", + "bar.type = \"grouped\" # equivalent to saying\n", "# bar = Bars(x=x_data, y=y_data, scales={'x': x_ord, 'y': y_sc}, padding=0.2, type='grouped')" ] }, @@ -231,11 +249,17 @@ "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=x_data, y=[y_data[:20], y_data_2[:20]], \n", - " scales={'x': x_ord, 'y': y_sc}, padding=0.2, \n", - " colors=CATEGORY10, type='stacked', orientation='horizontal')\n", - "ax_x = Axis(scale=x_ord, orientation='vertical')\n", - "ax_y = Axis(scale=y_sc, tick_format='0.2f')\n", + "bar = Bars(\n", + " x=x_data,\n", + " y=[y_data[:20], y_data_2[:20]],\n", + " scales={\"x\": x_ord, \"y\": y_sc},\n", + " padding=0.2,\n", + " colors=CATEGORY10,\n", + " type=\"stacked\",\n", + " orientation=\"horizontal\",\n", + ")\n", + "ax_x = Axis(scale=x_ord, orientation=\"vertical\")\n", + "ax_y = Axis(scale=y_sc, tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y])" ] @@ -246,7 +270,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.type = 'grouped'" + "bar.type = \"grouped\"" ] }, { @@ -262,18 +286,23 @@ "metadata": {}, "outputs": [], "source": [ - "## Color mode has 3 values. 'group', 'element' and 'no_group'. \n", + "## Color mode has 3 values. 'group', 'element' and 'no_group'.\n", "## 'group' means colors are assigned per group.\n", "## 'element' means colors are assigned per group element.\n", "## 'no_group' means means colors are assigned per bar, discarding the fact that there are groups or stacks\n", "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=x_data, y=[y_data[:20], y_data_2[:20]],\n", - " scales={'x': x_ord, 'y': y_sc}, padding=0.2, \n", - " colors=CATEGORY10, color_mode='group')\n", + "bar = Bars(\n", + " x=x_data,\n", + " y=[y_data[:20], y_data_2[:20]],\n", + " scales={\"x\": x_ord, \"y\": y_sc},\n", + " padding=0.2,\n", + " colors=CATEGORY10,\n", + " color_mode=\"group\",\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y])" ] @@ -284,7 +313,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.color_mode = 'element'" + "bar.color_mode = \"element\"" ] }, { @@ -293,7 +322,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.color_mode = 'no_group'" + "bar.color_mode = \"no_group\"" ] }, { @@ -306,11 +335,17 @@ "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", "\n", - "bar = Bars(x=x_data, y=y_data[:20], scales={'x': x_ord, 'y': y_sc}, padding=0.2,\n", - " color_mode='element', labels=['Values'], \n", - " display_legend=True)\n", + "bar = Bars(\n", + " x=x_data,\n", + " y=y_data[:20],\n", + " scales={\"x\": x_ord, \"y\": y_sc},\n", + " padding=0.2,\n", + " color_mode=\"element\",\n", + " labels=[\"Values\"],\n", + " display_legend=True,\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[bar], axes=[ax_x, ax_y])" ] @@ -333,13 +368,18 @@ "# In this example, the color is just the magnitude of the y data\n", "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", - "col_sc = ColorScale(scheme='Reds')\n", + "col_sc = ColorScale(scheme=\"Reds\")\n", "\n", - "bar = Bars(x=x_data[:20], y=y_data[:20], color=np.abs(y_data[:20]),\n", - " scales={'x': x_ord, 'y': y_sc, 'color': col_sc}, padding=0.2)\n", + "bar = Bars(\n", + " x=x_data[:20],\n", + " y=y_data[:20],\n", + " color=np.abs(y_data[:20]),\n", + " scales={\"x\": x_ord, \"y\": y_sc, \"color\": col_sc},\n", + " padding=0.2,\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", - "ax_c = ColorAxis(scale=col_sc, tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", + "ax_c = ColorAxis(scale=col_sc, tick_format=\"0.2f\")\n", "\n", "margin = dict(top=50, bottom=80, left=50, right=50)\n", "\n", @@ -362,17 +402,23 @@ "# By default color is applied along the axis=1\n", "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", - "col_sc = ColorScale(scheme='Reds')\n", + "col_sc = ColorScale(scheme=\"Reds\")\n", "\n", "y_vals = [y_data[:20], y_data_2[:20], y_data_3[:20] / 100.0]\n", "color_data = np.mean(y_vals, axis=1)\n", "\n", - "bar = Bars(x=x_data, y=y_vals, color=color_data, \n", - " scales={'x': x_ord, 'y': y_sc, 'color': col_sc}, padding=0.2,\n", - " labels=['Dim 1', 'Dim 2', 'Dim 3'], display_legend=True)\n", + "bar = Bars(\n", + " x=x_data,\n", + " y=y_vals,\n", + " color=color_data,\n", + " scales={\"x\": x_ord, \"y\": y_sc, \"color\": col_sc},\n", + " padding=0.2,\n", + " labels=[\"Dim 1\", \"Dim 2\", \"Dim 3\"],\n", + " display_legend=True,\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", - "ax_c = ColorAxis(scale=col_sc, tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", + "ax_c = ColorAxis(scale=col_sc, tick_format=\"0.2f\")\n", "\n", "margin = dict(top=50, bottom=80, left=50, right=50)\n", "Figure(marks=[bar], axes=[ax_x, ax_y, ax_c], fig_margin=margin)" @@ -392,12 +438,18 @@ "y_vals = [y_data[:20], y_data_2[:20], y_data_3[:20] / 100.0]\n", "color_data = np.mean(y_vals, axis=0)\n", "\n", - "bar = Bars(x=x_data, y=y_vals, color=color_data, \n", - " scales={'x': x_ord, 'y': y_sc, 'color': col_sc},\n", - " padding=0.2, color_mode='group', stroke='orange')\n", + "bar = Bars(\n", + " x=x_data,\n", + " y=y_vals,\n", + " color=color_data,\n", + " scales={\"x\": x_ord, \"y\": y_sc, \"color\": col_sc},\n", + " padding=0.2,\n", + " color_mode=\"group\",\n", + " stroke=\"orange\",\n", + ")\n", "ax_x = Axis(scale=x_ord)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", - "ax_c = ColorAxis(scale=col_sc, tick_format='0.1f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", + "ax_c = ColorAxis(scale=col_sc, tick_format=\"0.1f\")\n", "\n", "margin = dict(top=50, bottom=80, left=50, right=50)\n", "Figure(marks=[bar], axes=[ax_x, ax_y, ax_c], fig_margin=margin)" diff --git a/examples/Marks/Object Model/Bins.ipynb b/examples/Marks/Object Model/Bins.ipynb index 19e089982..ba2ae73b8 100644 --- a/examples/Marks/Object Model/Bins.ipynb +++ b/examples/Marks/Object Model/Bins.ipynb @@ -48,9 +48,13 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "hist = Bins(sample=x_data, scales={'x': x_sc, 'y': y_sc}, padding=0,)\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "hist = Bins(\n", + " sample=x_data,\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " padding=0,\n", + ")\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y], padding_y=0)" ] @@ -97,9 +101,13 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "hist = Bins(sample=x_data, scales={'x': x_sc, 'y': y_sc}, padding=0,)\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "hist = Bins(\n", + " sample=x_data,\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " padding=0,\n", + ")\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y], padding_y=0)" ] @@ -111,7 +119,7 @@ "outputs": [], "source": [ "# Changing the number of bins\n", - "hist.bins = 'sqrt'" + "hist.bins = \"sqrt\"" ] }, { @@ -144,9 +152,9 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "hist = Bins(sample=x_data, scales={'x': x_sc, 'y': y_sc}, density=True)\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "hist = Bins(sample=x_data, scales={\"x\": x_sc, \"y\": y_sc}, density=True)\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y], padding_y=0)" ] @@ -158,7 +166,7 @@ "outputs": [], "source": [ "# changing the color\n", - "hist.colors=['orangered']" + "hist.colors = [\"orangered\"]" ] }, { @@ -168,7 +176,7 @@ "outputs": [], "source": [ "# stroke and opacity update\n", - "hist.stroke = 'orange'\n", + "hist.stroke = \"orange\"\n", "hist.opacities = [0.5] * len(hist.x)" ] }, @@ -179,9 +187,9 @@ "outputs": [], "source": [ "# Laying the histogram on its side\n", - "hist.orientation = 'horizontal'\n", - "ax_x.orientation = 'vertical'\n", - "ax_y.orientation = 'horizontal'" + "hist.orientation = \"horizontal\"\n", + "ax_x.orientation = \"vertical\"\n", + "ax_y.orientation = \"horizontal\"" ] } ], diff --git a/examples/Marks/Object Model/Boxplot.ipynb b/examples/Marks/Object Model/Boxplot.ipynb index 216450234..c3af03fba 100644 --- a/examples/Marks/Object Model/Boxplot.ipynb +++ b/examples/Marks/Object Model/Boxplot.ipynb @@ -23,13 +23,153 @@ "x_data = [1, 2, 3, 4, 5, 6, 7]\n", "\n", "y_data = [\n", - " [160.10, 162.34, 161.82, 162.24, 161.44, 158.51, 157.68, 151.93, 151.41, 153.06, 155.38, 161.07, 160.51, 162.99, 161.86, 163.27, 164.05, 164.52, 162.67],\n", - " [161.54, 162.17, 161.95, 161.76, 162.15, 160.92, 160.64, 161.43, 161.89, 164.16, 164.16, 162.79, 161.92, 163.30, 163.49, 162.07, 161.46, 161.82, 162.65],\n", - " [164.40, 164.35, 163.46, 163.60, 161.87, 162.08, 162.18, 161.79, 163.23, 169.10, 182.05, 179.84, 181.75, 183.80, 183.52, 185.93, 186.42, 189.36, 185.71],\n", - " [188.67, 186.91, 187.17, 189.83, 189.64, 190.06, 189.01, 192.31, 191.62, 193.11, 194.00, 193.75, 192.80, 192.96, 191.81, 191.28, 191.72, 191.20, 190.68],\n", - " [191.95, 191.56, 192.30, 192.00, 192.25, 192.99, 191.16, 190.41, 191.23, 190.10, 190.07, 189.36, 187.38, 187.88, 191.81, 191.28, 191.72, 189.99, 190.14],\n", - " [187.95, 187.34, 187.47, 186.63, 184.30, 185.97, 187.10, 189.64, 189.15, 191.67, 194.00, 194.57, 195.78, 194.40, 195.24, 193.63, 190.85, 192.5, 192.49],\n", - " [192.36, 188.49, 189.86, 188.00, 187.70, 188.42, 187.22, 188.04, 188.53, 188.39, 186.35, 181.27, 181.71, 180.37, 180.72, 180.88, 182.14, 181.55, 182.82]\n", + " [\n", + " 160.10,\n", + " 162.34,\n", + " 161.82,\n", + " 162.24,\n", + " 161.44,\n", + " 158.51,\n", + " 157.68,\n", + " 151.93,\n", + " 151.41,\n", + " 153.06,\n", + " 155.38,\n", + " 161.07,\n", + " 160.51,\n", + " 162.99,\n", + " 161.86,\n", + " 163.27,\n", + " 164.05,\n", + " 164.52,\n", + " 162.67,\n", + " ],\n", + " [\n", + " 161.54,\n", + " 162.17,\n", + " 161.95,\n", + " 161.76,\n", + " 162.15,\n", + " 160.92,\n", + " 160.64,\n", + " 161.43,\n", + " 161.89,\n", + " 164.16,\n", + " 164.16,\n", + " 162.79,\n", + " 161.92,\n", + " 163.30,\n", + " 163.49,\n", + " 162.07,\n", + " 161.46,\n", + " 161.82,\n", + " 162.65,\n", + " ],\n", + " [\n", + " 164.40,\n", + " 164.35,\n", + " 163.46,\n", + " 163.60,\n", + " 161.87,\n", + " 162.08,\n", + " 162.18,\n", + " 161.79,\n", + " 163.23,\n", + " 169.10,\n", + " 182.05,\n", + " 179.84,\n", + " 181.75,\n", + " 183.80,\n", + " 183.52,\n", + " 185.93,\n", + " 186.42,\n", + " 189.36,\n", + " 185.71,\n", + " ],\n", + " [\n", + " 188.67,\n", + " 186.91,\n", + " 187.17,\n", + " 189.83,\n", + " 189.64,\n", + " 190.06,\n", + " 189.01,\n", + " 192.31,\n", + " 191.62,\n", + " 193.11,\n", + " 194.00,\n", + " 193.75,\n", + " 192.80,\n", + " 192.96,\n", + " 191.81,\n", + " 191.28,\n", + " 191.72,\n", + " 191.20,\n", + " 190.68,\n", + " ],\n", + " [\n", + " 191.95,\n", + " 191.56,\n", + " 192.30,\n", + " 192.00,\n", + " 192.25,\n", + " 192.99,\n", + " 191.16,\n", + " 190.41,\n", + " 191.23,\n", + " 190.10,\n", + " 190.07,\n", + " 189.36,\n", + " 187.38,\n", + " 187.88,\n", + " 191.81,\n", + " 191.28,\n", + " 191.72,\n", + " 189.99,\n", + " 190.14,\n", + " ],\n", + " [\n", + " 187.95,\n", + " 187.34,\n", + " 187.47,\n", + " 186.63,\n", + " 184.30,\n", + " 185.97,\n", + " 187.10,\n", + " 189.64,\n", + " 189.15,\n", + " 191.67,\n", + " 194.00,\n", + " 194.57,\n", + " 195.78,\n", + " 194.40,\n", + " 195.24,\n", + " 193.63,\n", + " 190.85,\n", + " 192.5,\n", + " 192.49,\n", + " ],\n", + " [\n", + " 192.36,\n", + " 188.49,\n", + " 189.86,\n", + " 188.00,\n", + " 187.70,\n", + " 188.42,\n", + " 187.22,\n", + " 188.04,\n", + " 188.53,\n", + " 188.39,\n", + " 186.35,\n", + " 181.27,\n", + " 181.71,\n", + " 180.37,\n", + " 180.72,\n", + " 180.88,\n", + " 182.14,\n", + " 181.55,\n", + " 182.82,\n", + " ],\n", "]" ] }, @@ -41,10 +181,15 @@ "source": [ "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", - "ax_x = Axis(label='X', scale=sc_x )\n", - "ax_y = Axis(label='Y', scale=sc_y, orientation='vertical')\n", - "boxes = Boxplot(x=x_data, y=y_data, scales={'x': sc_x, 'y': sc_y}, \n", - " box_fill_color='gray', outlier_fill_color='black')\n", + "ax_x = Axis(label=\"X\", scale=sc_x)\n", + "ax_y = Axis(label=\"Y\", scale=sc_y, orientation=\"vertical\")\n", + "boxes = Boxplot(\n", + " x=x_data,\n", + " y=y_data,\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " box_fill_color=\"gray\",\n", + " outlier_fill_color=\"black\",\n", + ")\n", "Figure(axes=[ax_x, ax_y], marks=[boxes])" ] }, @@ -57,9 +202,9 @@ "outputs": [], "source": [ "## setting the stroke and fill_color of the boxes and the outliers\n", - "boxes.stroke = 'red'\n", - "boxes.box_fill_color = 'blue'\n", - "boxes.outlier_fill_color = 'red'" + "boxes.stroke = \"red\"\n", + "boxes.box_fill_color = \"blue\"\n", + "boxes.outlier_fill_color = \"red\"" ] }, { @@ -79,7 +224,7 @@ "outputs": [], "source": [ "## changing the width of the boxes\n", - "boxes.box_width=10" + "boxes.box_width = 10" ] } ], diff --git a/examples/Marks/Object Model/Candles.ipynb b/examples/Marks/Object Model/Candles.ipynb index 70a204f6a..649f0da05 100644 --- a/examples/Marks/Object Model/Candles.ipynb +++ b/examples/Marks/Object Model/Candles.ipynb @@ -20,27 +20,31 @@ }, "outputs": [], "source": [ - "price_data1 = [['2015-01-02 00:00:00', [161.31, 163.31, 161.0, 162.06]],\n", - " ['2015-01-05 00:00:00', [161.27, 161.27, 159.19, 159.51]],\n", - " ['2015-01-06 00:00:00', [159.67, 159.96, 155.17, 156.07]],\n", - " ['2015-01-07 00:00:00', [157.2, 157.2, 154.03, 155.05]],\n", - " ['2015-01-08 00:00:00', [156.24, 159.044, 155.55, 158.42]],\n", - " ['2015-01-09 00:00:00', [158.42, 160.34, 157.25, 159.11]],\n", - " ['2015-01-12 00:00:00', [159.0, 159.25, 155.76, 156.44]],\n", - " ['2015-01-13 00:00:00', [157.26, 159.97, 155.68, 156.81]],\n", - " ['2015-01-14 00:00:00', [154.86, 156.49, 153.74, 155.8]],\n", - " ['2015-01-15 00:00:00', [156.69, 156.97, 154.16, 154.57]]]\n", + "price_data1 = [\n", + " [\"2015-01-02 00:00:00\", [161.31, 163.31, 161.0, 162.06]],\n", + " [\"2015-01-05 00:00:00\", [161.27, 161.27, 159.19, 159.51]],\n", + " [\"2015-01-06 00:00:00\", [159.67, 159.96, 155.17, 156.07]],\n", + " [\"2015-01-07 00:00:00\", [157.2, 157.2, 154.03, 155.05]],\n", + " [\"2015-01-08 00:00:00\", [156.24, 159.044, 155.55, 158.42]],\n", + " [\"2015-01-09 00:00:00\", [158.42, 160.34, 157.25, 159.11]],\n", + " [\"2015-01-12 00:00:00\", [159.0, 159.25, 155.76, 156.44]],\n", + " [\"2015-01-13 00:00:00\", [157.26, 159.97, 155.68, 156.81]],\n", + " [\"2015-01-14 00:00:00\", [154.86, 156.49, 153.74, 155.8]],\n", + " [\"2015-01-15 00:00:00\", [156.69, 156.97, 154.16, 154.57]],\n", + "]\n", "\n", - "price_data2 = [['2015-01-02 00:00:00', [111.39, 111.44, 107.35, 109.33]],\n", - " ['2015-01-05 00:00:00', [108.29, 108.65, 105.41, 106.25]],\n", - " ['2015-01-06 00:00:00', [106.54, 107.43, 104.63, 106.26]],\n", - " ['2015-01-07 00:00:00', [107.2, 108.2, 106.695, 107.75]],\n", - " ['2015-01-08 00:00:00', [109.23, 112.15, 108.7, 111.89]],\n", - " ['2015-01-09 00:00:00', [112.67, 113.25, 110.21, 112.01]],\n", - " ['2015-01-12 00:00:00', [112.6, 112.63, 108.8, 109.25]],\n", - " ['2015-01-13 00:00:00', [111.43, 112.8, 108.91, 110.22]],\n", - " ['2015-01-14 00:00:00', [109.04, 110.49, 108.5, 109.8]],\n", - " ['2015-01-15 00:00:00', [110.0, 110.06, 106.66, 106.82]]]" + "price_data2 = [\n", + " [\"2015-01-02 00:00:00\", [111.39, 111.44, 107.35, 109.33]],\n", + " [\"2015-01-05 00:00:00\", [108.29, 108.65, 105.41, 106.25]],\n", + " [\"2015-01-06 00:00:00\", [106.54, 107.43, 104.63, 106.26]],\n", + " [\"2015-01-07 00:00:00\", [107.2, 108.2, 106.695, 107.75]],\n", + " [\"2015-01-08 00:00:00\", [109.23, 112.15, 108.7, 111.89]],\n", + " [\"2015-01-09 00:00:00\", [112.67, 113.25, 110.21, 112.01]],\n", + " [\"2015-01-12 00:00:00\", [112.6, 112.63, 108.8, 109.25]],\n", + " [\"2015-01-13 00:00:00\", [111.43, 112.8, 108.91, 110.22]],\n", + " [\"2015-01-14 00:00:00\", [109.04, 110.49, 108.5, 109.8]],\n", + " [\"2015-01-15 00:00:00\", [110.0, 110.06, 106.66, 106.82]],\n", + "]" ] }, { @@ -69,14 +73,31 @@ "source": [ "sc = LinearScale()\n", "dt_scale = DateScale()\n", - "ax_x = Axis(label='X', scale=dt_scale)\n", - "ax_y = Axis(label='Y', scale=sc, orientation='vertical', tick_format='0.0f')\n", + "ax_x = Axis(label=\"X\", scale=dt_scale)\n", + "ax_y = Axis(label=\"Y\", scale=sc, orientation=\"vertical\", tick_format=\"0.0f\")\n", "\n", "# Construct the marks\n", - "ohlc = OHLC(x=dates1, y=prices1, marker='candle', scales={'x': dt_scale, 'y': sc}, format='ohlc',\n", - " stroke='blue', display_legend=True, labels=['IBM US Equity'])\n", - "ohlc2 = OHLC(x=dates2, y=prices2, marker='bar', scales={'x': dt_scale, 'y': sc}, colors=['dodgerblue', 'orange'],\n", - " stroke='orange', display_legend=True, labels=['AAPL US Equity'], format='ohlc')\n", + "ohlc = OHLC(\n", + " x=dates1,\n", + " y=prices1,\n", + " marker=\"candle\",\n", + " scales={\"x\": dt_scale, \"y\": sc},\n", + " format=\"ohlc\",\n", + " stroke=\"blue\",\n", + " display_legend=True,\n", + " labels=[\"IBM US Equity\"],\n", + ")\n", + "ohlc2 = OHLC(\n", + " x=dates2,\n", + " y=prices2,\n", + " marker=\"bar\",\n", + " scales={\"x\": dt_scale, \"y\": sc},\n", + " colors=[\"dodgerblue\", \"orange\"],\n", + " stroke=\"orange\",\n", + " display_legend=True,\n", + " labels=[\"AAPL US Equity\"],\n", + " format=\"ohlc\",\n", + ")\n", "Figure(axes=[ax_x, ax_y], marks=[ohlc, ohlc2])" ] }, @@ -89,7 +110,7 @@ }, "outputs": [], "source": [ - "ohlc.colors = [None, 'red']" + "ohlc.colors = [None, \"red\"]" ] }, { @@ -103,11 +124,16 @@ "sc_y = LinearScale()\n", "sc_x = LogScale()\n", "\n", - "ax_x = Axis(label='X', scale=sc_x)\n", - "ax_y = Axis(label='Y', scale=sc_y, orientation='vertical', tick_format='0.2f')\n", + "ax_x = Axis(label=\"X\", scale=sc_x)\n", + "ax_y = Axis(label=\"Y\", scale=sc_y, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", - "ohlc3 = OHLC(x=np.arange(len(dates2)) + 1, y=np.array(prices2) / 60,\n", - " marker='bar', scales={'x': sc_x, 'y': sc_y}, colors=['dodgerblue','orange'])\n", + "ohlc3 = OHLC(\n", + " x=np.arange(len(dates2)) + 1,\n", + " y=np.array(prices2) / 60,\n", + " marker=\"bar\",\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " colors=[\"dodgerblue\", \"orange\"],\n", + ")\n", "\n", "Figure(axes=[ax_x, ax_y], marks=[ohlc3])" ] @@ -120,7 +146,7 @@ }, "outputs": [], "source": [ - "ohlc3.marker = 'candle'" + "ohlc3.marker = \"candle\"" ] }, { @@ -139,11 +165,16 @@ "sc_x = OrdinalScale()\n", "sc_y = LinearScale()\n", "\n", - "ax_x = Axis(label='X', scale=sc_x, tick_format='%d-%m-%Y')\n", - "ax_y = Axis(label='Y', scale=sc_y, orientation='vertical', tick_format='0.2f')\n", + "ax_x = Axis(label=\"X\", scale=sc_x, tick_format=\"%d-%m-%Y\")\n", + "ax_y = Axis(label=\"Y\", scale=sc_y, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", - "ohlc3 = OHLC(x=dates2, y=np.array(prices2) / 60, marker='candle', \n", - " scales={'x': sc_x, 'y': sc_y}, colors=['dodgerblue','orange'])\n", + "ohlc3 = OHLC(\n", + " x=dates2,\n", + " y=np.array(prices2) / 60,\n", + " marker=\"candle\",\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " colors=[\"dodgerblue\", \"orange\"],\n", + ")\n", "\n", "Figure(axes=[ax_x, ax_y], marks=[ohlc3])" ] diff --git a/examples/Marks/Object Model/FlexLine.ipynb b/examples/Marks/Object Model/FlexLine.ipynb index 786d9e965..0fb1fe4cc 100644 --- a/examples/Marks/Object Model/FlexLine.ipynb +++ b/examples/Marks/Object Model/FlexLine.ipynb @@ -8,8 +8,7 @@ }, "outputs": [], "source": [ - "from bqplot import (DateScale, LinearScale, ColorScale, \n", - " Axis, ColorAxis, Figure, FlexLine)\n", + "from bqplot import DateScale, LinearScale, ColorScale, Axis, ColorAxis, Figure, FlexLine\n", "import numpy as np" ] }, @@ -28,7 +27,7 @@ }, "outputs": [], "source": [ - "dates = np.arange('2005-02', '2005-03', dtype='datetime64[D]')\n", + "dates = np.arange(\"2005-02\", \"2005-03\", dtype=\"datetime64[D]\")\n", "size = len(dates)\n", "spx = 100 + 5 * np.cumsum(np.random.randn(size))\n", "vix = 10 + np.cumsum(np.random.randn(size))" @@ -51,15 +50,16 @@ "source": [ "lin_x = DateScale()\n", "lin_y = LinearScale()\n", - "col_line = ColorScale(colors=['green', 'white', 'red'])\n", + "col_line = ColorScale(colors=[\"green\", \"white\", \"red\"])\n", "\n", - "ax_x = Axis(scale=lin_x, label='Date', label_location='end')\n", - "ax_y = Axis(scale=lin_y, orientation='vertical', label='Index', label_offset='4ex')\n", - "ax_col = ColorAxis(label='Vol', scale=col_line, tick_format='0.2f')\n", + "ax_x = Axis(scale=lin_x, label=\"Date\", label_location=\"end\")\n", + "ax_y = Axis(scale=lin_y, orientation=\"vertical\", label=\"Index\", label_offset=\"4ex\")\n", + "ax_col = ColorAxis(label=\"Vol\", scale=col_line, tick_format=\"0.2f\")\n", "\n", "fig_margin = dict(top=50, left=80, right=20, bottom=70)\n", - "fl = FlexLine(x=dates, y=spx, color=vix,\n", - " scales={'x': lin_x, 'color': col_line, 'y': lin_y})\n", + "fl = FlexLine(\n", + " x=dates, y=spx, color=vix, scales={\"x\": lin_x, \"color\": col_line, \"y\": lin_y}\n", + ")\n", "\n", "Figure(marks=[fl], axes=[ax_x, ax_y, ax_col], fig_margin=fig_margin)" ] @@ -84,12 +84,16 @@ "width_line = LinearScale()\n", "\n", "\n", - "ax_x = Axis(scale=lin_x, label='Date')\n", - "ax_y = Axis(scale=lin_y, orientation='vertical', label='SPX Index')\n", + "ax_x = Axis(scale=lin_x, label=\"Date\")\n", + "ax_y = Axis(scale=lin_y, orientation=\"vertical\", label=\"SPX Index\")\n", "\n", - "fl2 = FlexLine(x=dates, y=spx, width=vix,\n", - " scales={'x': lin_x, 'width': width_line, 'y': lin_y},\n", - " stroke_width=5)\n", + "fl2 = FlexLine(\n", + " x=dates,\n", + " y=spx,\n", + " width=vix,\n", + " scales={\"x\": lin_x, \"width\": width_line, \"y\": lin_y},\n", + " stroke_width=5,\n", + ")\n", "\n", "Figure(marks=[fl2], axes=[ax_x, ax_y])" ] diff --git a/examples/Marks/Object Model/Graph.ipynb b/examples/Marks/Object Model/Graph.ipynb index 191901b3e..2504679b5 100644 --- a/examples/Marks/Object Model/Graph.ipynb +++ b/examples/Marks/Object Model/Graph.ipynb @@ -15,7 +15,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nodes and Links should be supplied to the Graph mark. \n", + "Nodes and Links should be supplied to the Graph mark.\n", "

Node attributes\n", "\n", "| Attribute| Type | Description | Default |\n", @@ -34,7 +34,7 @@ "\n", "

Link data can also be supplied using a link_matrix which is a numpy array of shape (n, n) where n is the number of nodes in the graph\n", "\n", - "

Link Data can be passed in through 3 data attributes - \n", + "

Link Data can be passed in through 3 data attributes -\n", "1. link_data - list of dicts (e.g. [{'source': 0, 'target': 1, 'value': 10}, {'source': 2, 'target': 1, 'value': 20},...]\n", "2. link_matrix - 2-d numpy array of shape (n, n) where n is the number of nodes\n", "3. link_color - 2-d numpy array of shape (n, n) where n is the number of nodes. This attribute can be used to encode the link_color by passing in a link_color scale\n" @@ -46,7 +46,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig_layout = Layout(width='960px', height='500px')" + "fig_layout = Layout(width=\"960px\", height=\"500px\")" ] }, { @@ -64,16 +64,20 @@ "outputs": [], "source": [ "node_data = [\n", - " dict(label='A', shape='rect'),\n", - " dict(label='B', shape='ellipse'),\n", - " dict(label='C', shape='ellipse'),\n", - " dict(label='D', shape='rect'),\n", - " dict(label='E', shape='ellipse'),\n", - " dict(label='F', shape='circle'),\n", - " dict(label='G', shape='ellipse'),\n", + " dict(label=\"A\", shape=\"rect\"),\n", + " dict(label=\"B\", shape=\"ellipse\"),\n", + " dict(label=\"C\", shape=\"ellipse\"),\n", + " dict(label=\"D\", shape=\"rect\"),\n", + " dict(label=\"E\", shape=\"ellipse\"),\n", + " dict(label=\"F\", shape=\"circle\"),\n", + " dict(label=\"G\", shape=\"ellipse\"),\n", "]\n", - "link_data = [{'source': s, 'target': t} for s, t in np.random.randint(0, 7, (10, 2)) if s != t]\n", - "graph = Graph(node_data=node_data, link_data=link_data, charge=-600, colors=['orange'] * 7)\n", + "link_data = [\n", + " {\"source\": s, \"target\": t} for s, t in np.random.randint(0, 7, (10, 2)) if s != t\n", + "]\n", + "graph = Graph(\n", + " node_data=node_data, link_data=link_data, charge=-600, colors=[\"orange\"] * 7\n", + ")\n", "Figure(marks=[graph], layout=fig_layout)" ] }, @@ -83,14 +87,14 @@ "metadata": {}, "outputs": [], "source": [ - "graph.link_type = 'line'" + "graph.link_type = \"line\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Explicitly setting x and y location for nodes using x and y scales. \n", + "### Explicitly setting x and y location for nodes using x and y scales.\n", "Force layout animation is disabled in this case" ] }, @@ -100,18 +104,27 @@ "metadata": {}, "outputs": [], "source": [ - "node_data = list('ABCDEFG')\n", + "node_data = list(\"ABCDEFG\")\n", "\n", - "#using link matrix to set links\n", + "# using link matrix to set links\n", "link_matrix = np.zeros((7, 7))\n", "xs = LinearScale()\n", "ys = LinearScale()\n", "x = [100, 200, 200, 300, 300, 300, 300]\n", - "y = [2, .5, 4, 8, 6, 4, 1]\n", - "graph = Graph(node_data=node_data, link_matrix=link_matrix, link_type='line', \n", - " colors=['orange'] * 7,\n", - " scales={'x': xs, 'y': ys, }, x=x, y=y, \n", - " directed=False)\n", + "y = [2, 0.5, 4, 8, 6, 4, 1]\n", + "graph = Graph(\n", + " node_data=node_data,\n", + " link_matrix=link_matrix,\n", + " link_type=\"line\",\n", + " colors=[\"orange\"] * 7,\n", + " scales={\n", + " \"x\": xs,\n", + " \"y\": ys,\n", + " },\n", + " x=x,\n", + " y=y,\n", + " directed=False,\n", + ")\n", "Figure(marks=[graph], layout=fig_layout)" ] }, @@ -128,19 +141,25 @@ "metadata": {}, "outputs": [], "source": [ - "node_data = list('ABCDEFG')\n", + "node_data = list(\"ABCDEFG\")\n", "\n", - "#using link matrix to set links\n", + "# using link matrix to set links\n", "link_matrix = np.zeros((7, 7))\n", "xs = LinearScale(min=0, max=500)\n", "ys = LinearScale(min=0, max=10)\n", - "cs = ColorScale(scheme='Reds')\n", + "cs = ColorScale(scheme=\"Reds\")\n", "x = [100, 200, 200, 300, 300, 300, 300]\n", - "y = [2, .5, 4, 8, 6, 4, 1]\n", - "graph = Graph(node_data=node_data, link_matrix=link_matrix, link_type='line', \n", - " color=np.random.rand(7),\n", - " scales={'x': xs, 'y': ys, 'color': cs}, x=x, y=y, \n", - " directed=False)\n", + "y = [2, 0.5, 4, 8, 6, 4, 1]\n", + "graph = Graph(\n", + " node_data=node_data,\n", + " link_matrix=link_matrix,\n", + " link_type=\"line\",\n", + " color=np.random.rand(7),\n", + " scales={\"x\": xs, \"y\": ys, \"color\": cs},\n", + " x=x,\n", + " y=y,\n", + " directed=False,\n", + ")\n", "Figure(marks=[graph], layout=fig_layout)" ] }, @@ -157,19 +176,29 @@ "metadata": {}, "outputs": [], "source": [ - "node_data = list('ABCDEFG')\n", + "node_data = list(\"ABCDEFG\")\n", "\n", - "link_data = [{'source': s, 'target': t, 'value': np.random.rand()} for s, t in np.random.randint(0, 7, (20, 2))]\n", + "link_data = [\n", + " {\"source\": s, \"target\": t, \"value\": np.random.rand()}\n", + " for s, t in np.random.randint(0, 7, (20, 2))\n", + "]\n", "\n", "xs = LinearScale()\n", "ys = LinearScale()\n", - "lcs = ColorScale(scheme='Greens')\n", + "lcs = ColorScale(scheme=\"Greens\")\n", "x = [100, 200, 200, 300, 300, 300, 300]\n", - "y = [2, .5, 4, 8, 6, 4, 1]\n", - "graph = Graph(node_data=node_data, link_data=link_data, link_type='line',\n", - " colors=['orange'], directed=False, \n", - " scales={'x': xs, 'y': ys, 'link_color': lcs}, \n", - " x=x, y=y, color=np.random.rand(7))\n", + "y = [2, 0.5, 4, 8, 6, 4, 1]\n", + "graph = Graph(\n", + " node_data=node_data,\n", + " link_data=link_data,\n", + " link_type=\"line\",\n", + " colors=[\"orange\"],\n", + " directed=False,\n", + " scales={\"x\": xs, \"y\": ys, \"link_color\": lcs},\n", + " x=x,\n", + " y=y,\n", + " color=np.random.rand(7),\n", + ")\n", "Figure(marks=[graph], layout=fig_layout)" ] }, @@ -189,13 +218,26 @@ "outputs": [], "source": [ "node_data = [\n", - " {'label': 'A', 'shape': 'circle', 'shape_attrs': {'r': 20}, 'foo': 1},\n", - " {'label': 'Node B', 'shape': 'rect', 'shape_attrs': {'rx': 10, 'ry': 10, 'width': 40}, 'foo': 2},\n", - " {'label': 'C', 'shape': 'ellipse', 'foo': 4},\n", - " {'label': 'D', 'shape': 'rect', 'shape_attrs': {'width': 30, 'height': 30}, 'foo': 100},\n", + " {\"label\": \"A\", \"shape\": \"circle\", \"shape_attrs\": {\"r\": 20}, \"foo\": 1},\n", + " {\n", + " \"label\": \"Node B\",\n", + " \"shape\": \"rect\",\n", + " \"shape_attrs\": {\"rx\": 10, \"ry\": 10, \"width\": 40},\n", + " \"foo\": 2,\n", + " },\n", + " {\"label\": \"C\", \"shape\": \"ellipse\", \"foo\": 4},\n", + " {\n", + " \"label\": \"D\",\n", + " \"shape\": \"rect\",\n", + " \"shape_attrs\": {\"width\": 30, \"height\": 30},\n", + " \"foo\": 100,\n", + " },\n", "]\n", "\n", - "link_data = [{'source': s, 'target': t, 'value': np.random.rand()} for s, t in np.random.randint(0, 4, (8, 2))]\n", + "link_data = [\n", + " {\"source\": s, \"target\": t, \"value\": np.random.rand()}\n", + " for s, t in np.random.randint(0, 4, (8, 2))\n", + "]\n", "\n", "graph = Graph(node_data=node_data, link_data=link_data, link_distance=150)\n", "Figure(marks=[graph], layout=fig_layout)" @@ -214,7 +256,7 @@ "metadata": {}, "outputs": [], "source": [ - "tooltip = Tooltip(fields=['label', 'foo'], formats=['', '', ''])\n", + "tooltip = Tooltip(fields=[\"label\", \"foo\"], formats=[\"\", \"\", \"\"])\n", "graph.tooltip = tooltip" ] }, @@ -232,6 +274,7 @@ "outputs": [], "source": [ "import bqplot.pyplot as plt\n", + "\n", "plt.clear()\n", "line = plt.plot(np.cumsum(np.random.randn(20)))\n", "# hover on nodes to see the plot\n", @@ -251,10 +294,10 @@ "metadata": {}, "outputs": [], "source": [ - "graph.hovered_style = {'stroke': 'red'}\n", - "graph.unhovered_style = {'opacity': '0.4'}\n", + "graph.hovered_style = {\"stroke\": \"red\"}\n", + "graph.unhovered_style = {\"opacity\": \"0.4\"}\n", "\n", - "graph.selected_style = {'opacity': '1', 'stroke': 'white', 'stroke-width': '2.5'}" + "graph.selected_style = {\"opacity\": \"1\", \"stroke\": \"white\", \"stroke-width\": \"2.5\"}" ] }, { @@ -283,6 +326,7 @@ "def print_event(self, target):\n", " print(target)\n", "\n", + "\n", "graph.on_background_click(print_event)\n", "graph.on_element_click(print_event)" ] diff --git a/examples/Marks/Object Model/GridHeatMap.ipynb b/examples/Marks/Object Model/GridHeatMap.ipynb index 3c9317f0a..5c43a2aad 100644 --- a/examples/Marks/Object Model/GridHeatMap.ipynb +++ b/examples/Marks/Object Model/GridHeatMap.ipynb @@ -7,8 +7,7 @@ "outputs": [], "source": [ "import numpy as np\n", - "from bqplot import (ColorScale, GridHeatMap, Axis, \n", - " Figure, OrdinalScale, LinearScale)" + "from bqplot import ColorScale, GridHeatMap, Axis, Figure, OrdinalScale, LinearScale" ] }, { @@ -42,7 +41,7 @@ "outputs": [], "source": [ "col_sc = ColorScale()\n", - "grid_map = GridHeatMap(color=data, scales={'color': col_sc})\n", + "grid_map = GridHeatMap(color=data, scales={\"color\": col_sc})\n", "\n", "Figure(marks=[grid_map], padding_y=0.0)" ] @@ -53,7 +52,7 @@ "metadata": {}, "outputs": [], "source": [ - "grid_map.display_format = '.2f'" + "grid_map.display_format = \".2f\"" ] }, { @@ -62,7 +61,7 @@ "metadata": {}, "outputs": [], "source": [ - "grid_map.font_style={'font-size': '12px', 'fill':'black', 'font-weight': 'bold'}" + "grid_map.font_style = {\"font-size\": \"12px\", \"fill\": \"black\", \"font-weight\": \"bold\"}" ] }, { @@ -89,8 +88,10 @@ "source": [ "x_sc, y_sc, col_sc = OrdinalScale(), OrdinalScale(reverse=True), ColorScale()\n", "\n", - "grid_map = GridHeatMap(color=data, scales={'column': x_sc, 'row': y_sc, 'color': col_sc})\n", - "ax_x, ax_y = Axis(scale=x_sc), Axis(scale=y_sc, orientation='vertical')\n", + "grid_map = GridHeatMap(\n", + " color=data, scales={\"column\": x_sc, \"row\": y_sc, \"color\": col_sc}\n", + ")\n", + "ax_x, ax_y = Axis(scale=x_sc), Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[grid_map], axes=[ax_x, ax_y], padding_y=0.0)" ] @@ -110,7 +111,7 @@ "source": [ "x_sc, y_sc, col_sc = LinearScale(), LinearScale(reverse=True), ColorScale()\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "## The data along the rows is not uniform. Hence the 5th row(from top) of the map\n", "## is twice the height of the remaining rows.\n", @@ -119,8 +120,12 @@ "\n", "column_data = np.arange(10, 20)\n", "\n", - "grid_map = GridHeatMap(row=row_data, column=column_data, color=data,\n", - " scales={'row': y_sc, 'column': x_sc, 'color': col_sc})\n", + "grid_map = GridHeatMap(\n", + " row=row_data,\n", + " column=column_data,\n", + " color=data,\n", + " scales={\"row\": y_sc, \"column\": x_sc, \"color\": col_sc},\n", + ")\n", "Figure(marks=[grid_map], padding_y=0.0, axes=[ax_x, ax_y])" ] }, @@ -159,13 +164,17 @@ "source": [ "x_sc, y_sc, col_sc = LinearScale(), LinearScale(reverse=True), ColorScale()\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "row_data = np.arange(11)\n", "column_data = np.arange(10, 21)\n", "\n", - "grid_map = GridHeatMap(row=row_data, column=column_data, color=data,\n", - " scales={'row': y_sc, 'column': x_sc, 'color': col_sc})\n", + "grid_map = GridHeatMap(\n", + " row=row_data,\n", + " column=column_data,\n", + " color=data,\n", + " scales={\"row\": y_sc, \"column\": x_sc, \"color\": col_sc},\n", + ")\n", "Figure(marks=[grid_map], padding_y=0.0, axes=[ax_x, ax_y])" ] }, @@ -173,8 +182,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "By default, for `N` points along any dimension, data aligns to the `start` of the rectangles in the grid. \n", - "The grid extends infinitely in the other direction. By default, the grid extends infintely\n", + "By default, for `N` points along any dimension, data aligns to the `start` of the rectangles in the grid.\n", + "The grid extends infinitely in the other direction. By default, the grid extends infinitely\n", "towards the bottom and the right." ] }, @@ -186,13 +195,17 @@ "source": [ "x_sc, y_sc, col_sc = LinearScale(), LinearScale(reverse=True, max=15), ColorScale()\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "row_data = np.arange(10)\n", "column_data = np.arange(10, 20)\n", "\n", - "grid_map = GridHeatMap(row=row_data, column=column_data, color=data,\n", - " scales={'row': y_sc, 'column': x_sc, 'color': col_sc})\n", + "grid_map = GridHeatMap(\n", + " row=row_data,\n", + " column=column_data,\n", + " color=data,\n", + " scales={\"row\": y_sc, \"column\": x_sc, \"color\": col_sc},\n", + ")\n", "Figure(marks=[grid_map], padding_y=0.0, axes=[ax_x, ax_y])" ] }, @@ -209,16 +222,24 @@ "metadata": {}, "outputs": [], "source": [ - "x_sc, y_sc, col_sc = LinearScale(), LinearScale(reverse=True, min=-5, max=15), ColorScale()\n", + "x_sc, y_sc, col_sc = (\n", + " LinearScale(),\n", + " LinearScale(reverse=True, min=-5, max=15),\n", + " ColorScale(),\n", + ")\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "row_data = np.arange(10)\n", "column_data = np.arange(10, 20)\n", "\n", - "grid_map = GridHeatMap(row=row_data, column=column_data, color=data,\n", - " scales={'row': y_sc, 'column': x_sc, 'color': col_sc},\n", - " row_align='end')\n", + "grid_map = GridHeatMap(\n", + " row=row_data,\n", + " column=column_data,\n", + " color=data,\n", + " scales={\"row\": y_sc, \"column\": x_sc, \"color\": col_sc},\n", + " row_align=\"end\",\n", + ")\n", "Figure(marks=[grid_map], padding_y=0.0, axes=[ax_x, ax_y])" ] }, @@ -226,7 +247,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For `N+1` points on any direction, the grid extends infintely in both directions" + "For `N+1` points on any direction, the grid extends infinitely in both directions" ] }, { @@ -235,15 +256,24 @@ "metadata": {}, "outputs": [], "source": [ - "x_sc, y_sc, col_sc = LinearScale(), LinearScale(reverse=True, min=-5, max=15), ColorScale()\n", + "x_sc, y_sc, col_sc = (\n", + " LinearScale(),\n", + " LinearScale(reverse=True, min=-5, max=15),\n", + " ColorScale(),\n", + ")\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "row_data = np.arange(9)\n", "column_data = np.arange(10, 20)\n", "\n", - "grid_map = GridHeatMap(row=row_data, column=column_data, color=data, \n", - " scales={'row': y_sc, 'column': x_sc, 'color': col_sc}, row_align='end')\n", + "grid_map = GridHeatMap(\n", + " row=row_data,\n", + " column=column_data,\n", + " color=data,\n", + " scales={\"row\": y_sc, \"column\": x_sc, \"color\": col_sc},\n", + " row_align=\"end\",\n", + ")\n", "Figure(marks=[grid_map], padding_y=0.0, axes=[ax_x, ax_y])" ] }, @@ -262,7 +292,9 @@ "source": [ "col_sc = ColorScale()\n", "\n", - "grid_map = GridHeatMap(color=data, scales={'color': col_sc}, opacity=0.3, stroke='white')\n", + "grid_map = GridHeatMap(\n", + " color=data, scales={\"color\": col_sc}, opacity=0.3, stroke=\"white\"\n", + ")\n", "Figure(marks=[grid_map], padding_y=0.0)" ] }, @@ -289,8 +321,13 @@ "data = np.random.randn(10, 10)\n", "\n", "col_sc = ColorScale()\n", - "grid_map = GridHeatMap(color=data, scales={'color': col_sc}, interactions={'click':'select'},\n", - " selected_style={'opacity': '1.0'}, unselected_style={'opacity': 0.4})\n", + "grid_map = GridHeatMap(\n", + " color=data,\n", + " scales={\"color\": col_sc},\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"opacity\": \"1.0\"},\n", + " unselected_style={\"opacity\": 0.4},\n", + ")\n", "\n", "Figure(marks=[grid_map], padding_y=0.0)" ] @@ -333,19 +370,26 @@ "np.random.seed(0)\n", "data = np.random.randn(10, 10)\n", "col_sc = ColorScale()\n", - "grid_map = GridHeatMap(color=data, scales={'color': col_sc}, \n", - " interactions={'click': 'select'},\n", - " selected_style={'stroke': 'blue', 'stroke-width': 3})\n", - "figure=Figure(marks=[grid_map], padding_y=0.0)\n", + "grid_map = GridHeatMap(\n", + " color=data,\n", + " scales={\"color\": col_sc},\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"stroke\": \"blue\", \"stroke-width\": 3},\n", + ")\n", + "figure = Figure(marks=[grid_map], padding_y=0.0)\n", "\n", "from ipywidgets import Output\n", + "\n", "out = Output()\n", + "\n", + "\n", "@out.capture()\n", "def print_event(self, target):\n", " print(target)\n", - " \n", + "\n", + "\n", "# test\n", - "print_event(1, 'test output')\n", + "print_event(1, \"test output\")\n", "grid_map.on_element_click(print_event)\n", "\n", "display(figure)\n", diff --git a/examples/Marks/Object Model/HeatMap.ipynb b/examples/Marks/Object Model/HeatMap.ipynb index cbbc2b8bb..f29d0684b 100644 --- a/examples/Marks/Object Model/HeatMap.ipynb +++ b/examples/Marks/Object Model/HeatMap.ipynb @@ -3,7 +3,10 @@ { "cell_type": "markdown", "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "source": [ "# Heatmap" @@ -26,8 +29,7 @@ "outputs": [], "source": [ "import numpy as np\n", - "from bqplot import (Figure, LinearScale,ColorScale, \n", - " Color, Axis, HeatMap, ColorAxis)\n", + "from bqplot import Figure, LinearScale, ColorScale, Color, Axis, HeatMap, ColorAxis\n", "from ipywidgets import Layout" ] }, @@ -55,14 +57,14 @@ "x = np.linspace(-5, 5, 200)\n", "y = np.linspace(-5, 5, 200)\n", "X, Y = np.meshgrid(x, y)\n", - "color = np.cos(X**2 + Y**2)" + "color = np.cos(X ** 2 + Y ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Plotting a 2-dimensional function \n", + "## Plotting a 2-dimensional function\n", "\n", "This is a visualization of the function $f(x, y) = \\text{cos}(x^2+y^2)$" ] @@ -73,16 +75,20 @@ "metadata": {}, "outputs": [], "source": [ - "x_sc, y_sc, col_sc = LinearScale(), LinearScale(), ColorScale(scheme='RdYlBu')\n", - "heat = HeatMap(x=x, y=y, color=color,\n", - " scales={'x': x_sc, 'y': y_sc, 'color': col_sc})\n", + "x_sc, y_sc, col_sc = LinearScale(), LinearScale(), ColorScale(scheme=\"RdYlBu\")\n", + "heat = HeatMap(x=x, y=y, color=color, scales={\"x\": x_sc, \"y\": y_sc, \"color\": col_sc})\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "ax_c = ColorAxis(scale=col_sc)\n", - "fig = Figure(marks=[heat], axes=[ax_x, ax_y, ax_c],\n", - " title='Cosine',\n", - " layout=Layout(width='650px', height='650px'),\n", - " min_aspect_ratio=1, max_aspect_ratio=1, padding_y=0)\n", + "fig = Figure(\n", + " marks=[heat],\n", + " axes=[ax_x, ax_y, ax_c],\n", + " title=\"Cosine\",\n", + " layout=Layout(width=\"650px\", height=\"650px\"),\n", + " min_aspect_ratio=1,\n", + " max_aspect_ratio=1,\n", + " padding_y=0,\n", + ")\n", "fig" ] }, @@ -101,10 +107,11 @@ "metadata": {}, "outputs": [], "source": [ - "from scipy.misc import ascent\n", - "Z = ascent()\n", - "Z = Z[::-1, :] \n", - "aspect_ratio = Z.shape[1]/Z.shape[0]" + "from skimage.data import camera\n", + "\n", + "Z = camera()\n", + "Z = Z[::-1, :]\n", + "aspect_ratio = Z.shape[1] / Z.shape[0]" ] }, { @@ -113,12 +120,17 @@ "metadata": {}, "outputs": [], "source": [ - "col_sc = ColorScale(scheme='Greys', reverse=True)\n", - "scales = {'color': col_sc};\n", + "col_sc = ColorScale(scheme=\"Greys\", reverse=True)\n", + "scales = {\"color\": col_sc}\n", "ascent = HeatMap(color=Z, scales=scales)\n", - "img = Figure(title='Ascent', marks=[ascent],\n", - " layout=Layout(width='650px', height='650px'),\n", - " min_aspect_ratio=aspect_ratio, max_aspect_ratio=aspect_ratio, padding_y=0)\n", + "img = Figure(\n", + " title=\"Ascent\",\n", + " marks=[ascent],\n", + " layout=Layout(width=\"650px\", height=\"650px\"),\n", + " min_aspect_ratio=aspect_ratio,\n", + " max_aspect_ratio=aspect_ratio,\n", + " padding_y=0,\n", + ")\n", "img" ] } @@ -126,7 +138,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -140,9 +152,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/Marks/Object Model/Hist.ipynb b/examples/Marks/Object Model/Hist.ipynb index e15daffeb..6e92f1c32 100644 --- a/examples/Marks/Object Model/Hist.ipynb +++ b/examples/Marks/Object Model/Hist.ipynb @@ -36,9 +36,9 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "hist = Hist(sample=x_data, scales={'sample': x_sc, 'count': y_sc})\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "hist = Hist(sample=x_data, scales={\"sample\": x_sc, \"count\": y_sc})\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y], padding_y=0)" ] @@ -80,9 +80,9 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "hist = Hist(sample=x_data, scales={'sample': x_sc, 'count': y_sc}, normalized=True)\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "hist = Hist(sample=x_data, scales={\"sample\": x_sc, \"count\": y_sc}, normalized=True)\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y], padding_y=0)" ] @@ -94,7 +94,7 @@ "outputs": [], "source": [ "# changing the color\n", - "hist.colors=['orangered']" + "hist.colors = [\"orangered\"]" ] }, { @@ -104,7 +104,7 @@ "outputs": [], "source": [ "# stroke and opacity update\n", - "hist.stroke = 'orange'\n", + "hist.stroke = \"orange\"\n", "hist.opacities = [0.5] * hist.bins" ] }, @@ -124,9 +124,9 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "hist = Hist(sample=x_data, scales={'sample': x_sc, 'count': y_sc})\n", - "ax_x = Axis(scale=x_sc, tick_format='0.2f')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "hist = Hist(sample=x_data, scales={\"sample\": x_sc, \"count\": y_sc})\n", + "ax_x = Axis(scale=x_sc, tick_format=\"0.2f\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[hist], axes=[ax_x, ax_y], padding_y=0)" ] diff --git a/examples/Marks/Object Model/Image.ipynb b/examples/Marks/Object Model/Image.ipynb index c877b0a98..dd13c52bd 100644 --- a/examples/Marks/Object Model/Image.ipynb +++ b/examples/Marks/Object Model/Image.ipynb @@ -32,11 +32,11 @@ "import ipywidgets as widgets\n", "import os\n", "\n", - "image_path = os.path.abspath('../../data_files/trees.jpg')\n", + "image_path = os.path.abspath(\"../../data_files/trees.jpg\")\n", "\n", - "with open(image_path, 'rb') as f:\n", + "with open(image_path, \"rb\") as f:\n", " raw_image = f.read()\n", - "ipyimage = widgets.Image(value=raw_image, format='jpg')\n", + "ipyimage = widgets.Image(value=raw_image, format=\"jpg\")\n", "ipyimage" ] }, @@ -56,11 +56,11 @@ "from bqplot import LinearScale, Figure, Lines, Axis, Image\n", "\n", "# Create the scales for the image coordinates\n", - "scales={'x': LinearScale(), 'y': LinearScale()}\n", + "scales = {\"x\": LinearScale(), \"y\": LinearScale()}\n", "# Define the bqplot Image mark\n", "image = Image(image=ipyimage, scales=scales)\n", "# Create the bqplot Figure to display the mark\n", - "fig = Figure(title='Trees', marks=[image], padding_x=0, padding_y=0)\n", + "fig = Figure(title=\"Trees\", marks=[image], padding_x=0, padding_y=0)\n", "fig" ] }, @@ -79,11 +79,11 @@ "metadata": {}, "outputs": [], "source": [ - "scales = {'x': LinearScale(min=-1, max=2), 'y': LinearScale(min=-0.5, max=2)}\n", + "scales = {\"x\": LinearScale(min=-1, max=2), \"y\": LinearScale(min=-0.5, max=2)}\n", "image = Image(image=ipyimage, scales=scales)\n", - "lines = Lines(x=[0, 1, 1, 0, 0], y=[0, 0, 1, 1, 0], scales=scales, colors=['red'])\n", + "lines = Lines(x=[0, 1, 1, 0, 0], y=[0, 0, 1, 1, 0], scales=scales, colors=[\"red\"])\n", "fig = Figure(marks=[image, lines], padding_x=0, padding_y=0, animation_duration=1000)\n", - "fig.axes = [Axis(scale=scales['x']), Axis(scale=scales['y'], orientation='vertical')]\n", + "fig.axes = [Axis(scale=scales[\"x\"]), Axis(scale=scales[\"y\"], orientation=\"vertical\")]\n", "fig" ] }, @@ -102,7 +102,7 @@ "source": [ "# Full screen\n", "image.x = [-1, 2]\n", - "image.y = [-.5, 2]" + "image.y = [-0.5, 2]" ] }, { @@ -122,7 +122,8 @@ "source": [ "def print_event(_, target):\n", " print(target)\n", - " \n", + "\n", + "\n", "image.on_element_click(print_event)" ] }, @@ -146,7 +147,7 @@ "import bqplot.pyplot as bqp\n", "\n", "bqp.figure()\n", - "bqp.imshow(image_path, 'filename')\n", + "bqp.imshow(image_path, \"filename\")\n", "bqp.show()" ] }, @@ -155,7 +156,7 @@ "metadata": {}, "source": [ "\n", - "The signature is \n", + "The signature is\n", "\n", "`bqp.imshow(image, format)`\n", "\n", @@ -165,7 +166,7 @@ " - a raw byte string\n", "- `format`: {'widget', 'filename', ...}\n", " Type of the input argument.\n", - " If not 'widget' or 'filename', must be a format supported by the \n", + " If not 'widget' or 'filename', must be a format supported by the\n", " `ipywidgets` `Image`.\n" ] } diff --git a/examples/Marks/Object Model/Label.ipynb b/examples/Marks/Object Model/Label.ipynb index d2f25e10c..2e29796ff 100644 --- a/examples/Marks/Object Model/Label.ipynb +++ b/examples/Marks/Object Model/Label.ipynb @@ -18,9 +18,11 @@ "outputs": [], "source": [ "np.random.seed(10)\n", - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'],\n", - " index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "y_data = np.cumsum(np.random.randn(100))" ] }, @@ -40,15 +42,22 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "test_line = Lines(x=np.arange(10), y=y_data[:10], scales={'x': x_sc, 'y': y_sc})\n", - "test_label = Label(x=np.arange(5), y=y_data[:5], scales={'x': x_sc, 'y': y_sc},\n", - " text=['Test', 'Label', 'for', 'the', 'Data'], default_size=26, font_weight='bolder',\n", - " colors=['orange', 'red'], update_on_move=True)\n", + "test_line = Lines(x=np.arange(10), y=y_data[:10], scales={\"x\": x_sc, \"y\": y_sc})\n", + "test_label = Label(\n", + " x=np.arange(5),\n", + " y=y_data[:5],\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " text=[\"Test\", \"Label\", \"for\", \"the\", \"Data\"],\n", + " default_size=26,\n", + " font_weight=\"bolder\",\n", + " colors=[\"orange\", \"red\"],\n", + " update_on_move=True,\n", + ")\n", "\n", - "ax_x = Axis(scale=x_sc, label='X')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f', label='Y')\n", + "ax_x = Axis(scale=x_sc, label=\"X\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\", label=\"Y\")\n", "\n", - "Figure(marks=[test_label, test_line], axes=[ax_x, ax_y], title='Basic Label Example')" + "Figure(marks=[test_label, test_line], axes=[ax_x, ax_y], title=\"Basic Label Example\")" ] }, { @@ -83,12 +92,18 @@ "x_sc = LinearScale()\n", "y_sc = LinearScale()\n", "\n", - "test_line = Lines(x=np.arange(10), y=y_data, scales={'x': x_sc, 'y': y_sc})\n", - "test_label = Label(x=[0.5], y=[0.2], text=['Test Label'], default_size=26,\n", - " font_weight='bolder', colors=['orange'])\n", + "test_line = Lines(x=np.arange(10), y=y_data, scales={\"x\": x_sc, \"y\": y_sc})\n", + "test_label = Label(\n", + " x=[0.5],\n", + " y=[0.2],\n", + " text=[\"Test Label\"],\n", + " default_size=26,\n", + " font_weight=\"bolder\",\n", + " colors=[\"orange\"],\n", + ")\n", "\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[test_line, test_label], axes=[ax_x, ax_y])" ] @@ -119,11 +134,21 @@ "dt_sc = DateScale()\n", "y_sc = LinearScale()\n", "\n", - "lines = Lines(x=price_data.index.values, y=price_data['Security 1'].values, scales={'x': dt_sc, 'y': y_sc})\n", - "label = Label(x=[np.datetime64('2007-03-14')], y=[0.5], scales={'x': dt_sc}, text=['Pi-Day'], colors=['orange'])\n", + "lines = Lines(\n", + " x=price_data.index.values,\n", + " y=price_data[\"Security 1\"].values,\n", + " scales={\"x\": dt_sc, \"y\": y_sc},\n", + ")\n", + "label = Label(\n", + " x=[np.datetime64(\"2007-03-14\")],\n", + " y=[0.5],\n", + " scales={\"x\": dt_sc},\n", + " text=[\"Pi-Day\"],\n", + " colors=[\"orange\"],\n", + ")\n", "\n", "ax_x = Axis(scale=dt_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\")\n", "\n", "Figure(marks=[lines, label], axes=[ax_x, ax_y])" ] diff --git a/examples/Marks/Object Model/Lines.ipynb b/examples/Marks/Object Model/Lines.ipynb index 8a479176c..f06171a7c 100644 --- a/examples/Marks/Object Model/Lines.ipynb +++ b/examples/Marks/Object Model/Lines.ipynb @@ -44,7 +44,7 @@ "| `marker_size` | Controls the size of the marker, takes as input a non-negative integer | `64` |\n", "|`close_path`| Controls whether to close the paths or not | `False` |\n", "|`fill`| Specifies in which way the paths are filled. Can be set to one of `{'none', 'bottom', 'top', 'inside'}`| `None` |\n", - "|`fill_colors`| `List` that specifies the `fill` colors of each path | `[]` | \n", + "|`fill_colors`| `List` that specifies the `fill` colors of each path | `[]` |\n", "| **Data Attribute** | **Description** | **Default Value** |\n", "|`x` |abscissas of the data points | `array([])` |\n", "|`y` |ordinates of the data points | `array([])` |\n", @@ -56,7 +56,7 @@ "metadata": {}, "source": [ "To explore more features, run the following lines of code:\n", - " \n", + "\n", "```python\n", "from bqplot import Lines\n", "?Lines\n", @@ -85,8 +85,8 @@ "metadata": {}, "outputs": [], "source": [ - "import numpy as np #For numerical programming and multi-dimensional arrays\n", - "from pandas import date_range #For date-rate generation\n", + "import numpy as np # For numerical programming and multi-dimensional arrays\n", + "from pandas import date_range # For date-rate generation\n", "from bqplot import LinearScale, Lines, Axis, Figure, DateScale, ColorScale" ] }, @@ -103,8 +103,8 @@ "metadata": {}, "outputs": [], "source": [ - "security_1 = np.cumsum(np.random.randn(150)) + 100.\n", - "security_2 = np.cumsum(np.random.randn(150)) + 100." + "security_1 = np.cumsum(np.random.randn(150)) + 100.0\n", + "security_2 = np.cumsum(np.random.randn(150)) + 100.0" ] }, { @@ -130,19 +130,18 @@ "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "line = Lines(x=np.arange(len(security_1)), y=security_1,\n", - " scales={'x': sc_x, 'y': sc_y})\n", - "ax_x = Axis(scale=sc_x, label='Index')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='y-values of Security 1')\n", + "line = Lines(x=np.arange(len(security_1)), y=security_1, scales={\"x\": sc_x, \"y\": sc_y})\n", + "ax_x = Axis(scale=sc_x, label=\"Index\")\n", + "ax_y = Axis(scale=sc_y, orientation=\"vertical\", label=\"y-values of Security 1\")\n", "\n", - "Figure(marks=[line], axes=[ax_x, ax_y], title='Security 1')" + "Figure(marks=[line], axes=[ax_x, ax_y], title=\"Security 1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The `x` attribute refers to the data represented horizontally, while the `y` attribute refers the data represented vertically. \n", + "The `x` attribute refers to the data represented horizontally, while the `y` attribute refers the data represented vertically.\n", "\n", "**We can explore the different attributes by changing each of them for the plot above:**" ] @@ -153,7 +152,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.colors = ['DarkOrange']" + "line.colors = [\"DarkOrange\"]" ] }, { @@ -170,7 +169,7 @@ "outputs": [], "source": [ "# The opacity allows us to display the Line while featuring other Marks that may be on the Figure\n", - "line.opacities = [.5]" + "line.opacities = [0.5]" ] }, { @@ -195,7 +194,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.fill = 'bottom'\n", + "line.fill = \"bottom\"\n", "line.fill_opacities = [0.2]" ] }, @@ -205,7 +204,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.line_style = 'dashed'" + "line.line_style = \"dashed\"" ] }, { @@ -214,7 +213,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.interpolation = 'basis'" + "line.interpolation = \"basis\"" ] }, { @@ -230,14 +229,14 @@ "metadata": {}, "outputs": [], "source": [ - "line.marker = 'triangle-down'" + "line.marker = \"triangle-down\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The `marker` attributes accepts the values `square`, `circle`, `cross`, `diamond`, `square`, `triangle-down`, `triangle-up`, `arrow`, `rectangle`, `ellipse`. Try changing the string above and re-running the cell to see how each `marker` type looks." + "The `marker` attributes accepts the values `square`, `circle`, `cross`, `diamond`, `square`, `triangle-down`, `triangle-up`, `arrow`, `rectangle`, `ellipse`, `plus`, `crosshair`, `point`. Try changing the string above and re-running the cell to see how each `marker` type looks." ] }, { @@ -263,7 +262,7 @@ "outputs": [], "source": [ "# Here we define the dates we would like to use\n", - "dates = date_range(start='01-01-2007', periods=150)" + "dates = date_range(start=\"01-01-2007\", periods=150)" ] }, { @@ -275,11 +274,11 @@ "dt_x = DateScale()\n", "sc_y = LinearScale()\n", "\n", - "time_series = Lines(x=dates, y=security_1, scales={'x': dt_x, 'y': sc_y})\n", - "ax_x = Axis(scale=dt_x, label='Date')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='Security 1')\n", + "time_series = Lines(x=dates, y=security_1, scales={\"x\": dt_x, \"y\": sc_y})\n", + "ax_x = Axis(scale=dt_x, label=\"Date\")\n", + "ax_y = Axis(scale=sc_y, orientation=\"vertical\", label=\"Security 1\")\n", "\n", - "Figure(marks=[time_series], axes=[ax_x, ax_y], title='A Time Series Plot')" + "Figure(marks=[time_series], axes=[ax_x, ax_y], title=\"A Time Series Plot\")" ] }, { @@ -319,7 +318,7 @@ "metadata": {}, "outputs": [], "source": [ - "dates_new = date_range(start='06-01-2007', periods=150)" + "dates_new = date_range(start=\"06-01-2007\", periods=150)" ] }, { @@ -339,9 +338,12 @@ "outputs": [], "source": [ "# We pass the color scale and the color data to the lines\n", - "line = Lines(x=dates, y=[security_1, security_2], \n", - " scales={'x': x_dt, 'y': y_sc},\n", - " labels=['Security 1', 'Security 2'])" + "line = Lines(\n", + " x=dates,\n", + " y=[security_1, security_2],\n", + " scales={\"x\": x_dt, \"y\": y_sc},\n", + " labels=[\"Security 1\", \"Security 2\"],\n", + ")" ] }, { @@ -350,10 +352,10 @@ "metadata": {}, "outputs": [], "source": [ - "ax_x = Axis(scale=x_dt, label='Date')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', label='Security 1')\n", + "ax_x = Axis(scale=x_dt, label=\"Date\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", label=\"Security 1\")\n", "\n", - "Figure(marks=[line], axes=[ax_x, ax_y], legend_location='top-left')" + "Figure(marks=[line], axes=[ax_x, ax_y], legend_location=\"top-left\")" ] }, { @@ -394,7 +396,7 @@ "source": [ "x_dt = DateScale()\n", "y_sc = LinearScale()\n", - "col_sc = ColorScale(colors=['Red', 'Green'])" + "col_sc = ColorScale(colors=[\"Red\", \"Green\"])" ] }, { @@ -403,7 +405,7 @@ "metadata": {}, "outputs": [], "source": [ - "dates_color = date_range(start='06-01-2007', periods=150)" + "dates_color = date_range(start=\"06-01-2007\", periods=150)" ] }, { @@ -412,7 +414,7 @@ "metadata": {}, "outputs": [], "source": [ - "securities = 100. + np.cumsum(np.random.randn(150, 10), axis=0)\n", + "securities = 100.0 + np.cumsum(np.random.randn(150, 10), axis=0)\n", "positions = np.random.randint(0, 2, size=10)\n", "# Here we generate 10 random price series and 10 random positions" ] @@ -424,9 +426,13 @@ "outputs": [], "source": [ "# We pass the color scale and the color data to the lines\n", - "line = Lines(x=dates_color, y=securities.T, \n", - " scales={'x': x_dt, 'y': y_sc, 'color': col_sc}, color=positions,\n", - " labels=['Security 1', 'Security 2'])" + "line = Lines(\n", + " x=dates_color,\n", + " y=securities.T,\n", + " scales={\"x\": x_dt, \"y\": y_sc, \"color\": col_sc},\n", + " color=positions,\n", + " labels=[\"Security 1\", \"Security 2\"],\n", + ")" ] }, { @@ -435,10 +441,10 @@ "metadata": {}, "outputs": [], "source": [ - "ax_x = Axis(scale=x_dt, label='Date')\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', label='Security 1')\n", + "ax_x = Axis(scale=x_dt, label=\"Date\")\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", label=\"Security 1\")\n", "\n", - "Figure(marks=[line], axes=[ax_x, ax_y], legend_location='top-left')" + "Figure(marks=[line], axes=[ax_x, ax_y], legend_location=\"top-left\")" ] }, { @@ -480,14 +486,24 @@ "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "patch = Lines(x=[[0, 2, 1.2, np.nan, np.nan, np.nan, np.nan], [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan], [4,5,6, 6, 5, 4, 3]], \n", - " y=[[0, 0, 1 , np.nan, np.nan, np.nan, np.nan], [0.5, 0.5, -0.5, np.nan, np.nan, np.nan, np.nan], [1, 1.1, 1.2, 2.3, 2.2, 2.7, 1.0]],\n", - " fill_colors=['orange', 'blue', 'red'],\n", - " fill='inside',\n", - " stroke_width=10,\n", - " close_path=True,\n", - " scales={'x': sc_x, 'y': sc_y},\n", - " display_legend=True)\n", + "patch = Lines(\n", + " x=[\n", + " [0, 2, 1.2, np.nan, np.nan, np.nan, np.nan],\n", + " [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan],\n", + " [4, 5, 6, 6, 5, 4, 3],\n", + " ],\n", + " y=[\n", + " [0, 0, 1, np.nan, np.nan, np.nan, np.nan],\n", + " [0.5, 0.5, -0.5, np.nan, np.nan, np.nan, np.nan],\n", + " [1, 1.1, 1.2, 2.3, 2.2, 2.7, 1.0],\n", + " ],\n", + " fill_colors=[\"orange\", \"blue\", \"red\"],\n", + " fill=\"inside\",\n", + " stroke_width=10,\n", + " close_path=True,\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " display_legend=True,\n", + ")\n", "\n", "Figure(marks=[patch], animation_duration=1000)" ] @@ -507,7 +523,11 @@ "metadata": {}, "outputs": [], "source": [ - "patch.x = [[2, 3, 3.2, np.nan, np.nan, np.nan, np.nan], [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan], [4,5,6, 6, 5, 4, 3]]" + "patch.x = [\n", + " [2, 3, 3.2, np.nan, np.nan, np.nan, np.nan],\n", + " [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan],\n", + " [4, 5, 6, 6, 5, 4, 3],\n", + "]" ] }, { diff --git a/examples/Marks/Object Model/Map.ipynb b/examples/Marks/Object Model/Map.ipynb index 3e2005fc9..f58763127 100644 --- a/examples/Marks/Object Model/Map.ipynb +++ b/examples/Marks/Object Model/Map.ipynb @@ -7,8 +7,15 @@ "outputs": [], "source": [ "from bqplot import (\n", - " Figure, Map, Mercator, Orthographic, ColorScale, ColorAxis,\n", - " AlbersUSA, topo_load, Tooltip\n", + " Figure,\n", + " Map,\n", + " Mercator,\n", + " Orthographic,\n", + " ColorScale,\n", + " ColorAxis,\n", + " AlbersUSA,\n", + " topo_load,\n", + " Tooltip,\n", ")" ] }, @@ -26,8 +33,8 @@ "outputs": [], "source": [ "sc_geo = Mercator()\n", - "map_mark = Map(scales={'projection': sc_geo})\n", - "Figure(marks=[map_mark], title='Basic Map Example')" + "map_mark = Map(scales={\"projection\": sc_geo})\n", + "Figure(marks=[map_mark], title=\"Basic Map Example\")" ] }, { @@ -46,9 +53,12 @@ "outputs": [], "source": [ "sc_geo = Orthographic(scale_factor=375, center=[0, 25], rotate=(-50, 0))\n", - "map_mark = Map(map_data=topo_load('map_data/WorldMap.json'), scales={'projection': sc_geo}, \n", - " colors={682: 'Green', 356: 'Red', 643: '#0000ff', 'default_color': 'DarkOrange'})\n", - "Figure(marks=[map_mark], fig_color='deepskyblue', title='Advanced Map Example')" + "map_mark = Map(\n", + " map_data=topo_load(\"map_data/WorldMap.json\"),\n", + " scales={\"projection\": sc_geo},\n", + " colors={682: \"Green\", 356: \"Red\", 643: \"#0000ff\", \"default_color\": \"DarkOrange\"},\n", + ")\n", + "Figure(marks=[map_mark], fig_color=\"deepskyblue\", title=\"Advanced Map Example\")" ] }, { @@ -74,15 +84,18 @@ "outputs": [], "source": [ "sc_geo = Mercator()\n", - "sc_c1 = ColorScale(scheme='YlOrRd')\n", + "sc_c1 = ColorScale(scheme=\"YlOrRd\")\n", "\n", - "map_styles = {'color': {643: 105., 4: 21., 398: 23., 156: 42., 124:78., 76: 98.},\n", - " 'scales': {'projection': sc_geo, 'color': sc_c1}, 'colors': {'default_color': 'Grey'}}\n", + "map_styles = {\n", + " \"color\": {643: 105.0, 4: 21.0, 398: 23.0, 156: 42.0, 124: 78.0, 76: 98.0},\n", + " \"scales\": {\"projection\": sc_geo, \"color\": sc_c1},\n", + " \"colors\": {\"default_color\": \"Grey\"},\n", + "}\n", "\n", "axis = ColorAxis(scale=sc_c1)\n", "\n", - "chloro_map = Map(map_data=topo_load('map_data/WorldMap.json'), **map_styles)\n", - "Figure(marks=[chloro_map], axes=[axis],title='Choropleth Example')" + "chloro_map = Map(map_data=topo_load(\"map_data/WorldMap.json\"), **map_styles)\n", + "Figure(marks=[chloro_map], axes=[axis], title=\"Choropleth Example\")" ] }, { @@ -99,8 +112,10 @@ "outputs": [], "source": [ "sc_geo = AlbersUSA()\n", - "states_map = Map(map_data=topo_load('map_data/USStatesMap.json'), scales={'projection': sc_geo})\n", - "Figure(marks=[states_map], title='US States Map Example')" + "states_map = Map(\n", + " map_data=topo_load(\"map_data/USStatesMap.json\"), scales={\"projection\": sc_geo}\n", + ")\n", + "Figure(marks=[states_map], title=\"US States Map Example\")" ] }, { @@ -117,9 +132,10 @@ "outputs": [], "source": [ "sc_geo = Mercator(scale_factor=450)\n", - "euro_map = Map(map_data=topo_load('map_data/EuropeMap.json'), \n", - " scales={'projection': sc_geo})\n", - "Figure(marks=[euro_map], title='Europe States Map Example')" + "euro_map = Map(\n", + " map_data=topo_load(\"map_data/EuropeMap.json\"), scales={\"projection\": sc_geo}\n", + ")\n", + "Figure(marks=[euro_map], title=\"Europe States Map Example\")" ] }, { @@ -135,10 +151,10 @@ "metadata": {}, "outputs": [], "source": [ - "def_tt = Tooltip(fields=['id', 'name'])\n", - "map_mark = Map(scales={'projection': Mercator()}, tooltip=def_tt)\n", - "map_mark.interactions = {'click': 'select', 'hover': 'tooltip'}\n", - "Figure(marks=[map_mark], title='Interactions Example')" + "def_tt = Tooltip(fields=[\"id\", \"name\"])\n", + "map_mark = Map(scales={\"projection\": Mercator()}, tooltip=def_tt)\n", + "map_mark.interactions = {\"click\": \"select\", \"hover\": \"tooltip\"}\n", + "Figure(marks=[map_mark], title=\"Interactions Example\")" ] } ], diff --git a/examples/Marks/Object Model/Market Map.ipynb b/examples/Marks/Object Model/Market Map.ipynb index 8a2aba230..7c37b69f1 100644 --- a/examples/Marks/Object Model/Market Map.ipynb +++ b/examples/Marks/Object Model/Market Map.ipynb @@ -9,8 +9,7 @@ "import pandas as pd\n", "from ipywidgets import Label, VBox, Layout\n", "from bqplot.market_map import MarketMap\n", - "from bqplot import (ColorScale, ColorAxis, DateScale, \n", - " LinearScale, Axis, Lines, Figure)" + "from bqplot import ColorScale, ColorAxis, DateScale, LinearScale, Axis, Lines, Figure" ] }, { @@ -26,9 +25,9 @@ "metadata": {}, "outputs": [], "source": [ - "data = pd.read_csv('../../data_files/country_codes.csv', index_col=[0])\n", + "data = pd.read_csv(\"../../data_files/country_codes.csv\", index_col=[0])\n", "country_codes = data.index.values\n", - "country_names = data['Name']" + "country_names = data[\"Name\"]" ] }, { @@ -44,13 +43,15 @@ "metadata": {}, "outputs": [], "source": [ - "market_map = MarketMap(names=country_codes, \n", - " # basic data which needs to set for each map\n", - " ref_data=data, \n", - " # Data frame which can be used for different properties of the map\n", - " # Axis and scale for color data\n", - " tooltip_fields=['Name'],\n", - " layout=Layout(width='800px', height='600px'))\n", + "market_map = MarketMap(\n", + " names=country_codes,\n", + " # basic data which needs to set for each map\n", + " ref_data=data,\n", + " # Data frame which can be used for different properties of the map\n", + " # Axis and scale for color data\n", + " tooltip_fields=[\"Name\"],\n", + " layout=Layout(width=\"800px\", height=\"600px\"),\n", + ")\n", "\n", "market_map" ] @@ -61,7 +62,7 @@ "metadata": {}, "outputs": [], "source": [ - "market_map.colors = ['MediumSeaGreen']" + "market_map.colors = [\"MediumSeaGreen\"]" ] }, { @@ -70,7 +71,7 @@ "metadata": {}, "outputs": [], "source": [ - "market_map.font_style = {'font-size': '16px', 'fill':'white'}" + "market_map.font_style = {\"font-size\": \"16px\", \"fill\": \"white\"}" ] }, { @@ -79,8 +80,8 @@ "metadata": {}, "outputs": [], "source": [ - "market_map.title = 'Country Map'\n", - "market_map.title_style = {'fill': 'Red'}" + "market_map.title = \"Country Map\"\n", + "market_map.title_style = {\"fill\": \"Red\"}" ] }, { @@ -98,9 +99,11 @@ "metadata": {}, "outputs": [], "source": [ - "gdp_data = pd.read_csv('../../data_files/gdp_per_capita.csv', index_col=[0], parse_dates=True)\n", - "gdp_data.fillna(method='backfill', inplace=True)\n", - "gdp_data.fillna(method='ffill', inplace=True)" + "gdp_data = pd.read_csv(\n", + " \"../../data_files/gdp_per_capita.csv\", index_col=[0], parse_dates=True\n", + ")\n", + "gdp_data.fillna(method=\"backfill\", inplace=True)\n", + "gdp_data.fillna(method=\"ffill\", inplace=True)" ] }, { @@ -109,19 +112,28 @@ "metadata": {}, "outputs": [], "source": [ - "col = ColorScale(scheme='Greens')\n", - "continents = data['Continent'].values\n", - "ax_c = ColorAxis(scale=col, label='GDP per Capita', visible=False)\n", + "col = ColorScale(scheme=\"Greens\")\n", + "continents = data[\"Continent\"].values\n", + "ax_c = ColorAxis(scale=col, label=\"GDP per Capita\", visible=False)\n", "\n", - "data['GDP'] = gdp_data.iloc[-1]\n", + "data[\"GDP\"] = gdp_data.iloc[-1]\n", "\n", - "market_map = MarketMap(names=country_codes, groups=continents, # Basic data which needs to set for each map\n", - " cols=25, row_groups=3, # Properties for the visualization\n", - " ref_data=data, # Data frame used for different properties of the map\n", - " tooltip_fields=['Name', 'Continent', 'GDP'], # Columns from data frame to be displayed as tooltip\n", - " tooltip_formats=['', '', '.1f'],\n", - " scales={'color': col}, axes=[ax_c],\n", - " layout=Layout(min_width='800px', min_height='600px')) # Axis and scale for color data" + "market_map = MarketMap(\n", + " names=country_codes,\n", + " groups=continents, # Basic data which needs to set for each map\n", + " cols=25,\n", + " row_groups=3, # Properties for the visualization\n", + " ref_data=data, # Data frame used for different properties of the map\n", + " tooltip_fields=[\n", + " \"Name\",\n", + " \"Continent\",\n", + " \"GDP\",\n", + " ], # Columns from data frame to be displayed as tooltip\n", + " tooltip_formats=[\"\", \"\", \".1f\"],\n", + " scales={\"color\": col},\n", + " axes=[ax_c],\n", + " layout=Layout(min_width=\"800px\", min_height=\"600px\"),\n", + ") # Axis and scale for color data" ] }, { @@ -131,10 +143,13 @@ "outputs": [], "source": [ "deb_output = Label()\n", + "\n", + "\n", "def selected_index_changed(change):\n", " deb_output.value = str(change.new)\n", - " \n", - "market_map.observe(selected_index_changed, 'selected')\n", + "\n", + "\n", + "market_map.observe(selected_index_changed, \"selected\")\n", "VBox([deb_output, market_map])" ] }, @@ -156,7 +171,7 @@ "source": [ "# Setting the selected countries\n", "market_map.show_groups = False\n", - "market_map.selected = ['PAN', 'FRA', 'PHL']" + "market_map.selected = [\"PAN\", \"FRA\", \"PHL\"]" ] }, { @@ -166,8 +181,8 @@ "outputs": [], "source": [ "# changing selected stroke and hovered stroke variable\n", - "market_map.selected_stroke = 'yellow'\n", - "market_map.hovered_stroke = 'violet'" + "market_map.selected_stroke = \"yellow\"\n", + "market_map.hovered_stroke = \"violet\"" ] }, { @@ -184,8 +199,8 @@ "outputs": [], "source": [ "# Adding data for color and making color axis visible\n", - "market_map.colors=['#ccc']\n", - "market_map.color = data['GDP']\n", + "market_map.colors = [\"#ccc\"]\n", + "market_map.color = data[\"GDP\"]\n", "ax_c.visible = True" ] }, @@ -206,11 +221,19 @@ "sc_x = DateScale()\n", "sc_y = LinearScale()\n", "\n", - "ax_x = Axis(scale=sc_x, grid_lines='dashed', label='Date')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', grid_lines='dashed',\n", - " label='GDP', label_location='end', label_offset='-1em')\n", + "ax_x = Axis(scale=sc_x, grid_lines=\"dashed\", label=\"Date\")\n", + "ax_y = Axis(\n", + " scale=sc_y,\n", + " orientation=\"vertical\",\n", + " grid_lines=\"dashed\",\n", + " label=\"GDP\",\n", + " label_location=\"end\",\n", + " label_offset=\"-1em\",\n", + ")\n", "\n", - "line = Lines(x= gdp_data.index.values, y=[], scales={'x': sc_x, 'y': sc_y}, colors=['orange'])\n", + "line = Lines(\n", + " x=gdp_data.index.values, y=[], scales={\"x\": sc_x, \"y\": sc_y}, colors=[\"orange\"]\n", + ")\n", "fig_tooltip = Figure(marks=[line], axes=[ax_x, ax_y])" ] }, @@ -220,25 +243,35 @@ "metadata": {}, "outputs": [], "source": [ - "market_map = MarketMap(names=country_codes, groups=continents,\n", - " cols=25, row_groups=3,\n", - " color=data['GDP'], scales={'color': col}, axes=[ax_c],\n", - " ref_data=data, tooltip_widget=fig_tooltip,\n", - " freeze_tooltip_location=True,\n", - " colors=['#ccc'],\n", - " layout=Layout(min_width='900px', min_height='600px'))\n", + "market_map = MarketMap(\n", + " names=country_codes,\n", + " groups=continents,\n", + " cols=25,\n", + " row_groups=3,\n", + " color=data[\"GDP\"],\n", + " scales={\"color\": col},\n", + " axes=[ax_c],\n", + " ref_data=data,\n", + " tooltip_widget=fig_tooltip,\n", + " freeze_tooltip_location=True,\n", + " colors=[\"#ccc\"],\n", + " layout=Layout(min_width=\"900px\", min_height=\"600px\"),\n", + ")\n", "\n", "# Update the tooltip chart\n", - "hovered_symbol = ''\n", + "hovered_symbol = \"\"\n", + "\n", + "\n", "def hover_handler(self, content):\n", " global hovered_symbol\n", - " symbol = content.get('data', '')\n", - " \n", - " if(symbol != hovered_symbol):\n", + " symbol = content.get(\"data\", \"\")\n", + "\n", + " if symbol != hovered_symbol:\n", " hovered_symbol = symbol\n", - " if(gdp_data.get(hovered_symbol) is not None):\n", + " if gdp_data.get(hovered_symbol) is not None:\n", " line.y = gdp_data[hovered_symbol].values\n", - " fig_tooltip.title = content.get('ref_data', {}).get('Name', '')\n", + " fig_tooltip.title = content.get(\"ref_data\", {}).get(\"Name\", \"\")\n", + "\n", "\n", "# Custom msg sent when a particular cell is hovered on\n", "market_map.on_hover(hover_handler)\n", @@ -251,7 +284,7 @@ "source": [ "This notebook uses data derived from the World Bank dataset.\n", "- The World Bank: GDP per capita (current US$)\n", - "- The World Bank: Country Codes \n", + "- The World Bank: Country Codes\n", "\n", "See the LICENSE file for more information." ] diff --git a/examples/Marks/Object Model/Pie.ipynb b/examples/Marks/Object Model/Pie.ipynb index 3af4d3b88..a3ced6121 100644 --- a/examples/Marks/Object Model/Pie.ipynb +++ b/examples/Marks/Object Model/Pie.ipynb @@ -38,7 +38,7 @@ "outputs": [], "source": [ "data = np.random.rand(3)\n", - "pie = Pie(sizes=data, display_labels='outside', labels=list(string.ascii_uppercase))\n", + "pie = Pie(sizes=data, display_labels=\"outside\", labels=list(string.ascii_uppercase))\n", "fig = Figure(marks=[pie], animation_duration=1000)\n", "fig" ] @@ -91,7 +91,7 @@ "source": [ "with pie.hold_sync():\n", " pie.display_values = True\n", - " pie.values_format = '.1f'" + " pie.values_format = \".1f\"" ] }, { @@ -101,7 +101,7 @@ "editable": true }, "source": [ - "### Enable sort " + "### Enable sort" ] }, { @@ -139,8 +139,8 @@ }, "outputs": [], "source": [ - "pie.selected_style = {'opacity': 1, 'stroke': 'white', 'stroke-width': 2}\n", - "pie.unselected_style = {'opacity': 0.2}\n", + "pie.selected_style = {\"opacity\": 1, \"stroke\": \"white\", \"stroke-width\": 2}\n", + "pie.unselected_style = {\"opacity\": 0.2}\n", "pie.selected = [1]" ] }, @@ -189,9 +189,9 @@ }, "outputs": [], "source": [ - "pie.label_color = 'Red'\n", - "pie.font_size = '20px'\n", - "pie.font_weight = 'bold'" + "pie.label_color = \"Red\"\n", + "pie.font_size = \"20px\"\n", + "pie.font_weight = \"bold\"" ] }, { @@ -273,7 +273,7 @@ "source": [ "### Move the pie around\n", "`x` and `y` attributes control the position of the pie in the figure.\n", - "If no scales are passed for `x` and `y`, they are taken in absolute \n", + "If no scales are passed for `x` and `y`, they are taken in absolute\n", "figure coordinates, between 0 and 1." ] }, @@ -315,9 +315,9 @@ }, "outputs": [], "source": [ - "pie1.stroke = 'brown'\n", - "pie1.colors = ['orange', 'darkviolet']\n", - "pie1.opacities = [.1, 1]\n", + "pie1.stroke = \"brown\"\n", + "pie1.colors = [\"orange\", \"darkviolet\"]\n", + "pie1.opacities = [0.1, 1]\n", "fig1" ] }, @@ -338,7 +338,7 @@ "editable": true }, "source": [ - "The `Pie` allows for its colors to be determined by data, that is passed to the `color` attribute. \n", + "The `Pie` allows for its colors to be determined by data, that is passed to the `color` attribute.\n", "A `ColorScale` with the desired color scheme must also be passed." ] }, @@ -359,11 +359,11 @@ "size_data = np.random.rand(Nslices)\n", "color_data = np.random.randn(Nslices)\n", "\n", - "sc = ColorScale(scheme='Reds')\n", + "sc = ColorScale(scheme=\"Reds\")\n", "# The ColorAxis gives a visual representation of its ColorScale\n", "ax = ColorAxis(scale=sc)\n", "\n", - "pie2 = Pie(sizes=size_data, scales={'color': sc}, color=color_data)\n", + "pie2 = Pie(sizes=size_data, scales={\"color\": sc}, color=color_data)\n", "Figure(marks=[pie2], axes=[ax])" ] }, @@ -384,7 +384,7 @@ "editable": true }, "source": [ - "Pies can be positioned, via the `x` and `y` attributes, \n", + "Pies can be positioned, via the `x` and `y` attributes,\n", "using either absolute figure scales or custom 'x' or 'y' scales" ] }, @@ -403,23 +403,41 @@ "from bqplot.traits import convert_to_date\n", "from bqplot import DateScale, LinearScale, Axis\n", "\n", - "avg_precipitation_days = [(d/30., 1-d/30.) for d in [2, 3, 4, 6, 12, 17, 23, 22, 15, 4, 1, 1]]\n", + "avg_precipitation_days = [\n", + " (d / 30.0, 1 - d / 30.0) for d in [2, 3, 4, 6, 12, 17, 23, 22, 15, 4, 1, 1]\n", + "]\n", "temperatures = [9, 12, 16, 20, 22, 23, 22, 22, 22, 20, 15, 11]\n", "\n", "dates = [datetime(2010, k, 1) for k in range(1, 13)]\n", "\n", "sc_x = DateScale()\n", "sc_y = LinearScale()\n", - "ax_x = Axis(scale=sc_x, label='Month', tick_format='%b')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', label='Average Temperature')\n", + "ax_x = Axis(scale=sc_x, label=\"Month\", tick_format=\"%b\")\n", + "ax_y = Axis(scale=sc_y, orientation=\"vertical\", label=\"Average Temperature\")\n", "\n", - "pies = [Pie(sizes=precipit, x=date, y=temp,display_labels='none',\n", - " scales={'x': sc_x, 'y': sc_y}, radius=30., stroke='navy',\n", - " apply_clip=False, colors=['navy', 'navy'], opacities=[1, .1]) \n", - " for precipit, date, temp in zip(avg_precipitation_days, dates, temperatures)]\n", + "pies = [\n", + " Pie(\n", + " sizes=precipit,\n", + " x=date,\n", + " y=temp,\n", + " display_labels=\"none\",\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " radius=30.0,\n", + " stroke=\"navy\",\n", + " apply_clip=False,\n", + " colors=[\"navy\", \"navy\"],\n", + " opacities=[1, 0.1],\n", + " )\n", + " for precipit, date, temp in zip(avg_precipitation_days, dates, temperatures)\n", + "]\n", "\n", - "Figure(title='Kathmandu Precipitation', marks=pies, axes=[ax_x, ax_y],\n", - " padding_x=.05, padding_y=.1)" + "Figure(\n", + " title=\"Kathmandu Precipitation\",\n", + " marks=pies,\n", + " axes=[ax_x, ax_y],\n", + " padding_x=0.05,\n", + " padding_y=0.1,\n", + ")" ] } ], diff --git a/examples/Marks/Object Model/Scatter.ipynb b/examples/Marks/Object Model/Scatter.ipynb index 1c924a30d..a048fd5dc 100644 --- a/examples/Marks/Object Model/Scatter.ipynb +++ b/examples/Marks/Object Model/Scatter.ipynb @@ -11,8 +11,18 @@ "import numpy as np\n", "import pandas as pd\n", "from bqplot import (\n", - " Axis, ColorAxis, LinearScale, DateScale, DateColorScale, OrdinalScale,\n", - " OrdinalColorScale, ColorScale, Scatter, Lines, Figure, Tooltip\n", + " Axis,\n", + " ColorAxis,\n", + " LinearScale,\n", + " DateScale,\n", + " DateColorScale,\n", + " OrdinalScale,\n", + " OrdinalColorScale,\n", + " ColorScale,\n", + " Scatter,\n", + " Lines,\n", + " Figure,\n", + " Tooltip,\n", ")\n", "from ipywidgets import Label" ] @@ -30,13 +40,16 @@ "metadata": {}, "outputs": [], "source": [ - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[1.0, -0.8], [-0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'], index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[1.0, -0.8], [-0.8, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "size = 100\n", "np.random.seed(0)\n", "x_data = range(size)\n", "y_data = np.cumsum(np.random.randn(size) * 100.0)\n", - "ord_keys = np.array(['A', 'B', 'C', 'D', 'E', 'F'])\n", + "ord_keys = np.array([\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"])\n", "ordinal_data = np.random.randint(5, size=size)" ] }, @@ -48,7 +61,7 @@ }, "outputs": [], "source": [ - "symbols = ['Security 1', 'Security 2']\n", + "symbols = [\"Security 1\", \"Security 2\"]\n", "\n", "dates_all = price_data.index.values\n", "dates_all_t = dates_all[1:]\n", @@ -75,9 +88,9 @@ "sc_x = DateScale()\n", "sc_y = LinearScale()\n", "\n", - "scatt = Scatter(x=dates_all, y=sec2_levels, scales={'x': sc_x, 'y': sc_y})\n", - "ax_x = Axis(scale=sc_x, label='Date')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', tick_format='0.0f', label='Security 2')\n", + "scatt = Scatter(x=dates_all, y=sec2_levels, scales={\"x\": sc_x, \"y\": sc_y})\n", + "ax_x = Axis(scale=sc_x, label=\"Date\")\n", + "ax_y = Axis(scale=sc_y, orientation=\"vertical\", tick_format=\"0.0f\", label=\"Security 2\")\n", "\n", "Figure(marks=[scatt], axes=[ax_x, ax_y])" ] @@ -95,14 +108,20 @@ "metadata": {}, "outputs": [], "source": [ - "# Changing the marker as \n", + "# Changing the marker as\n", "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "scatt = Scatter(x=x_data[:10], y=y_data[:10], names=np.arange(10),\n", - " scales={'x': sc_x, 'y': sc_y}, colors=['red'], marker='cross')\n", + "scatt = Scatter(\n", + " x=x_data[:10],\n", + " y=y_data[:10],\n", + " names=np.arange(10),\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " colors=[\"red\"],\n", + " marker=\"cross\",\n", + ")\n", "ax_x = Axis(scale=sc_x)\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=sc_y, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[scatt], axes=[ax_x, ax_y], padding_x=0.025)" ] @@ -120,7 +139,7 @@ "metadata": {}, "outputs": [], "source": [ - "scatt.opacities = [0.3, 0.5, 1.]" + "scatt.opacities = [0.3, 0.5, 1.0]" ] }, { @@ -151,20 +170,33 @@ "sc_y = LinearScale()\n", "\n", "sc_c1 = ColorScale()\n", - "scatter = Scatter(x=dates_all, y=sec2_levels, color=sec1_returns,\n", - " scales={'x': sc_x, 'y': sc_y, 'color': sc_c1}, \n", - " stroke='black')\n", + "scatter = Scatter(\n", + " x=dates_all,\n", + " y=sec2_levels,\n", + " color=sec1_returns,\n", + " scales={\"x\": sc_x, \"y\": sc_y, \"color\": sc_c1},\n", + " stroke=\"black\",\n", + ")\n", "\n", - "ax_y = Axis(label='Security 2', scale=sc_y, \n", - " orientation='vertical', side='left')\n", + "ax_y = Axis(label=\"Security 2\", scale=sc_y, orientation=\"vertical\", side=\"left\")\n", "\n", - "ax_x = Axis(label='Date', scale=sc_x, num_ticks=10, label_location='end')\n", - "ax_c = ColorAxis(scale=sc_c1, tick_format='0.2%', label='Returns', orientation='vertical', side='right')\n", + "ax_x = Axis(label=\"Date\", scale=sc_x, num_ticks=10, label_location=\"end\")\n", + "ax_c = ColorAxis(\n", + " scale=sc_c1,\n", + " tick_format=\"0.2%\",\n", + " label=\"Returns\",\n", + " orientation=\"vertical\",\n", + " side=\"right\",\n", + ")\n", "\n", "m_chart = dict(top=50, bottom=70, left=50, right=100)\n", "\n", - "Figure(axes=[ax_x, ax_c, ax_y], marks=[scatter], fig_margin=m_chart,\n", - " title='Scatter of Security 2 vs Dates')" + "Figure(\n", + " axes=[ax_x, ax_c, ax_y],\n", + " marks=[scatter],\n", + " fig_margin=m_chart,\n", + " title=\"Scatter of Security 2 vs Dates\",\n", + ")" ] }, { @@ -173,8 +205,8 @@ "metadata": {}, "outputs": [], "source": [ - "## Changing the default color. \n", - "scatter.colors = ['blue'] # In this case, the dot with the highest X changes to blue." + "## Changing the default color.\n", + "scatter.colors = [\"blue\"] # In this case, the dot with the highest X changes to blue." ] }, { @@ -195,7 +227,7 @@ "outputs": [], "source": [ "## Setting the fill back\n", - "scatter.stroke = 'black'\n", + "scatter.stroke = \"black\"\n", "scatter.fill = True" ] }, @@ -207,8 +239,8 @@ "source": [ "## Changing the color to a different variable\n", "scatter.color = sec2_levels\n", - "ax_c.tick_format = '0.0f'\n", - "ax_c.label = 'Security 2'" + "ax_c.tick_format = \"0.0f\"\n", + "ax_c.label = \"Security 2\"" ] }, { @@ -218,7 +250,7 @@ "outputs": [], "source": [ "## Changing the range of the color scale\n", - "sc_c1.colors = ['blue', 'green', 'orange']" + "sc_c1.colors = [\"blue\", \"green\", \"orange\"]" ] }, { @@ -237,15 +269,20 @@ "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "sc_c1 = DateColorScale(scheme='Reds')\n", - "scatter = Scatter(x=sec2_levels, y=sec1_levels, color=dates_all,\n", - " scales={'x': sc_x, 'y': sc_y, 'color': sc_c1}, default_size=128,\n", - " stroke='black')\n", + "sc_c1 = DateColorScale(scheme=\"Reds\")\n", + "scatter = Scatter(\n", + " x=sec2_levels,\n", + " y=sec1_levels,\n", + " color=dates_all,\n", + " scales={\"x\": sc_x, \"y\": sc_y, \"color\": sc_c1},\n", + " default_size=128,\n", + " stroke=\"black\",\n", + ")\n", "\n", - "ax_y = Axis(label='Security 1 Level', scale=sc_y, orientation='vertical', side='left')\n", + "ax_y = Axis(label=\"Security 1 Level\", scale=sc_y, orientation=\"vertical\", side=\"left\")\n", "\n", - "ax_x = Axis(label='Security 2', scale=sc_x)\n", - "ax_c = ColorAxis(scale=sc_c1, label='Date', num_ticks=5)\n", + "ax_x = Axis(label=\"Security 2\", scale=sc_x)\n", + "ax_c = ColorAxis(scale=sc_c1, label=\"Date\", num_ticks=5)\n", "\n", "m_chart = dict(top=50, bottom=80, left=50, right=50)\n", "Figure(axes=[ax_x, ax_c, ax_y], marks=[scatter], fig_margin=m_chart)" @@ -271,21 +308,27 @@ "factor = int(np.ceil(len(sec2_levels) * 1.0 / len(ordinal_data)))\n", "ordinal_data = np.tile(ordinal_data, factor)\n", "\n", - "c_ord = OrdinalColorScale(colors=['DodgerBlue', 'SeaGreen', 'Yellow', 'HotPink', 'OrangeRed'])\n", + "c_ord = OrdinalColorScale(\n", + " colors=[\"DodgerBlue\", \"SeaGreen\", \"Yellow\", \"HotPink\", \"OrangeRed\"]\n", + ")\n", "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "scatter2 = Scatter(x=sec2_levels[1:],\n", - " y=sec1_returns,\n", - " color=ordinal_data,\n", - " scales={'x': sc_x, 'y': sc_y, 'color': c_ord}, \n", - " legend='__no_legend__',\n", - " stroke='black')\n", + "scatter2 = Scatter(\n", + " x=sec2_levels[1:],\n", + " y=sec1_returns,\n", + " color=ordinal_data,\n", + " scales={\"x\": sc_x, \"y\": sc_y, \"color\": c_ord},\n", + " legend=\"__no_legend__\",\n", + " stroke=\"black\",\n", + ")\n", "\n", - "ax_y = Axis(label='Security 1 Returns', scale=sc_y, orientation='vertical', tick_format='.0%')\n", + "ax_y = Axis(\n", + " label=\"Security 1 Returns\", scale=sc_y, orientation=\"vertical\", tick_format=\".0%\"\n", + ")\n", "\n", - "ax_x = Axis(label='Security 2', scale=sc_x, label_location='end')\n", - "ax_c = ColorAxis(scale=c_ord, label='Class', side='right', orientation='vertical')\n", + "ax_x = Axis(label=\"Security 2\", scale=sc_x, label_location=\"end\")\n", + "ax_c = ColorAxis(scale=c_ord, label=\"Class\", side=\"right\", orientation=\"vertical\")\n", "\n", "m_chart = dict(top=50, bottom=70, left=100, right=100)\n", "Figure(axes=[ax_x, ax_y, ax_c], marks=[scatter2], fig_margin=m_chart)" @@ -297,8 +340,8 @@ "metadata": {}, "outputs": [], "source": [ - "ax_c.tick_format = '0.2f'\n", - "c_ord.colors = ['blue', 'red', 'green', 'yellow', 'orange']" + "ax_c.tick_format = \"0.2f\"\n", + "c_ord.colors = [\"blue\", \"red\", \"green\", \"yellow\", \"orange\"]" ] }, { @@ -326,12 +369,18 @@ "sc_opacity = LinearScale()\n", "\n", "\n", - "scatter2 = Scatter(x=sec2_levels[1:], y=sec1_levels, size=sec1_returns,\n", - " scales={'x': sc_x, 'y': sc_y, 'size': sc_size, 'opacity': sc_opacity}, \n", - " default_size=128, colors=['orangered'], stroke='black')\n", + "scatter2 = Scatter(\n", + " x=sec2_levels[1:],\n", + " y=sec1_levels,\n", + " size=sec1_returns,\n", + " scales={\"x\": sc_x, \"y\": sc_y, \"size\": sc_size, \"opacity\": sc_opacity},\n", + " default_size=128,\n", + " colors=[\"orangered\"],\n", + " stroke=\"black\",\n", + ")\n", "\n", - "ax_y = Axis(label='Security 1', scale=sc_y, orientation='vertical', side='left')\n", - "ax_x = Axis(label='Security 2', scale=sc_x)\n", + "ax_y = Axis(label=\"Security 1\", scale=sc_y, orientation=\"vertical\", side=\"left\")\n", + "ax_x = Axis(label=\"Security 2\", scale=sc_x)\n", "\n", "Figure(axes=[ax_x, ax_y], marks=[scatter2])" ] @@ -353,7 +402,7 @@ "outputs": [], "source": [ "## Resetting the size for the scatter\n", - "scatter2.size=None" + "scatter2.size = None" ] }, { @@ -392,14 +441,20 @@ "sc_y = LinearScale()\n", "sc_e = LinearScale()\n", "\n", - "scatter = Scatter(scales={'x': sc_x, 'y': sc_y, 'skew': sc_e}, \n", - " x=sec2_levels[1:], y=sec1_levels,\n", - " skew=sec1_returns, stroke=\"black\",\n", - " colors=['gold'], default_size=200, \n", - " marker='rectangle', default_skew=0)\n", + "scatter = Scatter(\n", + " scales={\"x\": sc_x, \"y\": sc_y, \"skew\": sc_e},\n", + " x=sec2_levels[1:],\n", + " y=sec1_levels,\n", + " skew=sec1_returns,\n", + " stroke=\"black\",\n", + " colors=[\"gold\"],\n", + " default_size=200,\n", + " marker=\"rectangle\",\n", + " default_skew=0,\n", + ")\n", "\n", - "ax_y = Axis(label='Security 1', scale=sc_y, orientation='vertical', side='left')\n", - "ax_x = Axis(label='Security 2', scale=sc_x)\n", + "ax_y = Axis(label=\"Security 1\", scale=sc_y, orientation=\"vertical\", side=\"left\")\n", + "ax_x = Axis(label=\"Security 2\", scale=sc_x)\n", "\n", "Figure(axes=[ax_x, ax_y], marks=[scatter], animation_duration=1000)" ] @@ -438,17 +493,24 @@ "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "sc_e = LinearScale()\n", - "sc_c = ColorScale(scheme='Reds')\n", + "sc_c = ColorScale(scheme=\"Reds\")\n", "x1 = np.linspace(-1, 1, 30)\n", "y1 = np.linspace(-1, 1, 30)\n", - "x, y = np.meshgrid(x1,y1)\n", + "x, y = np.meshgrid(x1, y1)\n", "x, y = x.flatten(), y.flatten()\n", - "rot = x**2 + y**2\n", - "color=x-y\n", - "scatter = Scatter(scales={'x': sc_x, 'y': sc_y, 'color': sc_c, 'rotation': sc_e}, \n", - " x=x, y=y, rotation=rot, color=color,\n", - " stroke=\"black\", default_size=200, \n", - " marker='arrow', default_skew=0.5,)\n", + "rot = x ** 2 + y ** 2\n", + "color = x - y\n", + "scatter = Scatter(\n", + " scales={\"x\": sc_x, \"y\": sc_y, \"color\": sc_c, \"rotation\": sc_e},\n", + " x=x,\n", + " y=y,\n", + " rotation=rot,\n", + " color=color,\n", + " stroke=\"black\",\n", + " default_size=200,\n", + " marker=\"arrow\",\n", + " default_skew=0.5,\n", + ")\n", "Figure(marks=[scatter], animation_duration=1000)" ] }, @@ -481,27 +543,36 @@ "metadata": {}, "outputs": [], "source": [ - "## Enabling moving of points in scatter. Try to click and drag any of the points in the scatter and \n", + "## Enabling moving of points in scatter. Try to click and drag any of the points in the scatter and\n", "## notice the line representing the mean of the data update\n", "sc_x = LinearScale()\n", "sc_y = LinearScale()\n", "\n", - "scat = Scatter(x=x_data[:10], y=y_data[:10], scales={'x': sc_x, 'y': sc_y}, colors=['orange'],\n", - " enable_move=True)\n", - "lin = Lines(x=[], y=[], scales={'x': sc_x, 'y': sc_y}, line_style='dotted', colors=['orange'])\n", + "scat = Scatter(\n", + " x=x_data[:10],\n", + " y=y_data[:10],\n", + " scales={\"x\": sc_x, \"y\": sc_y},\n", + " colors=[\"orange\"],\n", + " enable_move=True,\n", + ")\n", + "lin = Lines(\n", + " x=[], y=[], scales={\"x\": sc_x, \"y\": sc_y}, line_style=\"dotted\", colors=[\"orange\"]\n", + ")\n", + "\n", "\n", "def update_line(change=None):\n", " with lin.hold_sync():\n", " lin.x = [np.min(scat.x), np.max(scat.x)]\n", " lin.y = [np.mean(scat.y), np.mean(scat.y)]\n", "\n", + "\n", "update_line()\n", "# update line on change of x or y of scatter\n", - "scat.observe(update_line, names=['x'])\n", - "scat.observe(update_line, names=['y'])\n", + "scat.observe(update_line, names=[\"x\"])\n", + "scat.observe(update_line, names=[\"y\"])\n", "\n", "ax_x = Axis(scale=sc_x)\n", - "ax_y = Axis(scale=sc_y, tick_format='0.2f', orientation='vertical')\n", + "ax_y = Axis(scale=sc_y, tick_format=\"0.2f\", orientation=\"vertical\")\n", "\n", "fig = Figure(marks=[scat, lin], axes=[ax_x, ax_y])\n", "fig" @@ -530,11 +601,13 @@ "metadata": {}, "outputs": [], "source": [ - "latex_widget = Label(color='Green', font_size='16px')\n", + "latex_widget = Label(color=\"Green\", font_size=\"16px\")\n", + "\n", "\n", "def callback_help(name, value):\n", " latex_widget.value = str(value)\n", - " \n", + "\n", + "\n", "latex_widget" ] }, @@ -591,7 +664,7 @@ "## Enabling adding the points to Scatter. Try clicking anywhere on the scatter to add points\n", "with scat.hold_sync():\n", " scat.enable_move = False\n", - " scat.interactions = {'click': 'add'}" + " scat.interactions = {\"click\": \"add\"}" ] }, { @@ -609,34 +682,42 @@ "source": [ "from ipywidgets import ToggleButtons, VBox\n", "\n", - "interact_control = ToggleButtons(options=['Add', 'Delete', 'Drag XY', 'Drag X', 'Drag Y'],\n", - " style={'button_width': '120px'})\n", + "interact_control = ToggleButtons(\n", + " options=[\"Add\", \"Delete\", \"Drag XY\", \"Drag X\", \"Drag Y\"],\n", + " style={\"button_width\": \"120px\"},\n", + ")\n", + "\n", "\n", "def change_interact(change):\n", " interact_parameters = {\n", - " 'Add': {'interactions': {'click': 'add'},\n", - " 'enable_move': False},\n", - " 'Delete': {'interactions': {'click': 'delete'},\n", - " 'enable_move': False},\n", - " 'Drag XY': {'interactions': {'click': None},\n", - " 'enable_move': True,\n", - " 'restrict_x': False,\n", - " 'restrict_y': False},\n", - " 'Drag X': {'interactions': {'click': None},\n", - " 'enable_move': True,\n", - " 'restrict_x': True,\n", - " 'restrict_y': False},\n", - " 'Drag Y': {'interactions': {'click': None},\n", - " 'enable_move': True,\n", - " 'restrict_x': False,\n", - " 'restrict_y': True}\n", + " \"Add\": {\"interactions\": {\"click\": \"add\"}, \"enable_move\": False},\n", + " \"Delete\": {\"interactions\": {\"click\": \"delete\"}, \"enable_move\": False},\n", + " \"Drag XY\": {\n", + " \"interactions\": {\"click\": None},\n", + " \"enable_move\": True,\n", + " \"restrict_x\": False,\n", + " \"restrict_y\": False,\n", + " },\n", + " \"Drag X\": {\n", + " \"interactions\": {\"click\": None},\n", + " \"enable_move\": True,\n", + " \"restrict_x\": True,\n", + " \"restrict_y\": False,\n", + " },\n", + " \"Drag Y\": {\n", + " \"interactions\": {\"click\": None},\n", + " \"enable_move\": True,\n", + " \"restrict_x\": False,\n", + " \"restrict_y\": True,\n", + " },\n", " }\n", " for param, value in interact_parameters[interact_control.value].items():\n", " setattr(scat, param, value)\n", - " \n", - "interact_control.observe(change_interact, names='value')\n", "\n", - "fig.title = 'Adding/Deleting/Moving points'\n", + "\n", + "interact_control.observe(change_interact, names=\"value\")\n", + "\n", + "fig.title = \"Adding/Deleting/Moving points\"\n", "VBox([fig, interact_control])" ] }, @@ -658,6 +739,7 @@ "def test_func(self, content):\n", " print(\"received drag end\", content)\n", "\n", + "\n", "scat.on_drag_end(test_func)" ] }, @@ -682,12 +764,18 @@ "x_data = x_data[:50]\n", "y_data = y_data[:50]\n", "\n", - "def_tt = Tooltip(fields=['x', 'y'], formats=['', '.2f'])\n", + "def_tt = Tooltip(fields=[\"x\", \"y\"], formats=[\"\", \".2f\"])\n", "\n", - "scatter_chart = Scatter(x=x_data, y=y_data, scales= {'x': x_sc, 'y': y_sc}, colors=['dodgerblue'],\n", - " tooltip=def_tt, unhovered_style={'opacity': 0.5})\n", + "scatter_chart = Scatter(\n", + " x=x_data,\n", + " y=y_data,\n", + " scales={\"x\": x_sc, \"y\": y_sc},\n", + " colors=[\"dodgerblue\"],\n", + " tooltip=def_tt,\n", + " unhovered_style={\"opacity\": 0.5},\n", + ")\n", "ax_x = Axis(scale=x_sc)\n", - "ax_y = Axis(scale=y_sc, orientation='vertical', tick_format='0.2f')\n", + "ax_y = Axis(scale=y_sc, orientation=\"vertical\", tick_format=\"0.2f\")\n", "\n", "Figure(marks=[scatter_chart], axes=[ax_x, ax_y])" ] @@ -709,7 +797,7 @@ "outputs": [], "source": [ "## changing the fields displayed in the tooltip\n", - "def_tt.fields = ['y']" + "def_tt.fields = [\"y\"]" ] }, { @@ -718,7 +806,7 @@ "metadata": {}, "outputs": [], "source": [ - "def_tt.fields = ['x']" + "def_tt.fields = [\"x\"]" ] } ], diff --git a/examples/Marks/Object Model/ScatterMega.ipynb b/examples/Marks/Object Model/ScatterMega.ipynb deleted file mode 100644 index 95bebd480..000000000 --- a/examples/Marks/Object Model/ScatterMega.ipynb +++ /dev/null @@ -1,620 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import bqplot\n", - "import numpy as np\n", - "from ipywidgets import link, FloatSlider" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "N = 3 * int(1e5)\n", - "scale_x = bqplot.LinearScale(min=-5, max=5)\n", - "scale_y = bqplot.LinearScale(min=-5, max=5)\n", - "scale_size = bqplot.LinearScale(min=0, max=1)\n", - "\n", - "x = np.random.normal(5, 4, N)\n", - "y = np.random.normal(0, 3, N)\n", - "\n", - "size = np.random.rand(N) * 30 + 1\n", - "\n", - "scatter = bqplot.ScatterGL(x=x, y=y,\n", - " size=size,\n", - " colors=['red', 'green', 'yellow'],\n", - " scales={\n", - " 'x': scale_x, 'y': scale_y, \n", - " 'size': scale_size\n", - " },\n", - " default_size=20,\n", - " marker='circle'\n", - " )\n", - "\n", - "ax_x = bqplot.Axis(scale=scale_x, grid_lines='solid', label='X')\n", - "ax_y = bqplot.Axis(scale=scale_y, orientation='vertical', tick_format='0.2f', grid_lines='solid', label='Y')\n", - "\n", - "fig = bqplot.Figure(marks=[scatter], axes=[ax_x, ax_y], title='Scatter GL', legend_location='bottom-right', animation_duration=2000)\n", - "\n", - "scatter.stroke = 'black'\n", - "\n", - "fig" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "N = int(1e4)\n", - "with scatter.hold_sync():\n", - " scatter.x = np.random.normal(5, 4, N)\n", - " scatter.y = np.random.normal(0, 3, N)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.colors = ['blue']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.colors = ['blue', 'orange']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.marker = 'cross'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.marker = 'triangle-up'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.marker = 'triangle-down'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.marker = 'square'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "N = 3 * int(1e4)\n", - "scale_x = bqplot.LinearScale(min=-5, max=5)\n", - "scale_y = bqplot.LinearScale(min=-5, max=5)\n", - "scale_size = bqplot.LinearScale(min=0, max=1)\n", - "scale_color = bqplot.ColorScale(min=0, max=1, scheme='RdYlGn')\n", - "\n", - "x = np.random.normal(5, 4, N)\n", - "y = np.random.normal(0, 3, N)\n", - "\n", - "size = np.random.rand(N) * 30 + 1\n", - "color = np.random.rand(N)\n", - "\n", - "scatter = bqplot.ScatterGL(x=x, y=y,\n", - " size=size,\n", - " color=color,\n", - " scales={\n", - " 'x': scale_x, 'y': scale_y, \n", - " 'size': scale_size, \n", - " 'color': scale_color\n", - " },\n", - " default_size=20,\n", - " marker='circle'\n", - " )\n", - "scatter.selected_style = {'fill': 'blue'}\n", - "\n", - "ax_x = bqplot.Axis(scale=scale_x, grid_lines='solid', label='X')\n", - "ax_y = bqplot.Axis(scale=scale_y, orientation='vertical', tick_format='0.2f', grid_lines='solid', label='Y')\n", - "\n", - "fig = bqplot.Figure(marks=[scatter], axes=[ax_x, ax_y], title='Scatter GL', legend_location='bottom-right', animation_duration=2000)\n", - "\n", - "panzoom = bqplot.interacts.PanZoom(scales={'x': [scale_x], 'y': [scale_y]})\n", - "fig.interaction = panzoom\n", - "\n", - "scatter.stroke = 'black'\n", - "\n", - "fig" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with scatter.hold_sync():\n", - " scatter.x = np.random.normal(5, 4, N)\n", - " scatter.y = np.random.normal(0, 3, N)\n", - " scatter.size = np.random.normal(20, 20, N)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.y = np.random.normal(0, 3, N)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.size = np.random.rand(N) * 50 + 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ipywidgets import FloatSlider, link\n", - "\n", - "slider = FloatSlider(min=0.1, max=10., value=scale_color.max)\n", - "link((slider, 'value'), (scale_color, 'max'))\n", - "slider" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.stroke = None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.stroke_width = 5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.x = np.random.normal(5, 4, N)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Features" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "input_collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "from bqplot import (\n", - " Axis, ColorAxis, LinearScale, DateScale, DateColorScale, OrdinalScale,\n", - " OrdinalColorScale, ColorScale, ScatterGL, Lines, Figure, Tooltip, PanZoom\n", - ")\n", - "from ipywidgets import Label" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "size = 100\n", - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[1.0, -0.8], [-0.8, 1.0]]), axis=0) + size,\n", - " columns=['Security 1', 'Security 2'], index=pd.date_range(start='01-01-2007', periods=150))\n", - "\n", - "np.random.seed(0)\n", - "x_data = range(size)\n", - "y_data = np.cumsum(np.random.randn(size) * 100.0)\n", - "ord_keys = np.array(['A', 'B', 'C', 'D', 'E', 'F'])\n", - "ordinal_data = np.random.randint(5, size=size)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "input_collapsed": false - }, - "outputs": [], - "source": [ - "symbols = ['Security 1', 'Security 2']\n", - "\n", - "dates_all = price_data.index.values\n", - "dates_all_t = dates_all[1:]\n", - "sec1_levels = np.array(price_data[symbols[0]].values.flatten())\n", - "log_sec1 = np.log(sec1_levels)\n", - "sec1_returns = log_sec1\n", - "\n", - "sec2_levels = np.array(price_data[symbols[1]].values.flatten())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Basic Scatter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import bqplot\n", - "\n", - "sc_x = DateScale()\n", - "sc_y = LinearScale()\n", - "\n", - "scatt = ScatterGL(x=dates_all, y=sec2_levels, marker='square', stroke='black', scales={'x': sc_x, 'y': sc_y})\n", - "ax_x = Axis(scale=sc_x, label='Date')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', tick_format='0.0f', label='Security 2')\n", - "\n", - "fig = Figure(marks=[scatt], axes=[ax_x, ax_y], animation_duration=5000)\n", - "\n", - "panzoom = bqplot.interacts.PanZoom(scales={'x': [sc_x], 'y': [sc_y]})\n", - "fig.interaction = panzoom\n", - "\n", - "fig" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Changing the marker to each point of the scatter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Changing the marker as \n", - "sc_x = LinearScale()\n", - "sc_y = LinearScale()\n", - "\n", - "scatt = ScatterGL(x=x_data, y=y_data, names=np.arange(10),\n", - " scales={'x': sc_x, 'y': sc_y}, colors=['red'], marker='cross')\n", - "ax_x = Axis(scale=sc_x)\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', tick_format='0.2f')\n", - "\n", - "Figure(marks=[scatt], axes=[ax_x, ax_y], padding_x=0.025)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatt.marker = 'square'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Changing the opacity of each marker" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatt.opacities = [0.3, 0.5, 1.]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Representing additional dimensions of data" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "input_collapsed": false - }, - "source": [ - "## Linear Scale for Color Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sc_x = DateScale()\n", - "sc_y = LinearScale()\n", - "\n", - "sc_c1 = ColorScale()\n", - "scatter = ScatterGL(x=dates_all, y=sec2_levels, color=sec1_returns,\n", - " scales={'x': sc_x, 'y': sc_y, 'color': sc_c1}, \n", - " stroke='black')\n", - "\n", - "ax_y = Axis(label='Security 2', scale=sc_y, \n", - " orientation='vertical', side='left')\n", - "\n", - "ax_x = Axis(label='Date', scale=sc_x, num_ticks=10, label_location='end')\n", - "ax_c = ColorAxis(scale=sc_c1, tick_format='0.2%', label='Returns', orientation='vertical', side='right')\n", - "\n", - "m_chart = dict(top=50, bottom=70, left=50, right=100)\n", - "\n", - "Figure(axes=[ax_x, ax_c, ax_y], marks=[scatter], fig_margin=m_chart,\n", - " title='Scatter of Security 2 vs Dates')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## setting the fill to be empty\n", - "scatter.stroke = None\n", - "scatter.fill = False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## Setting the fill back\n", - "scatter.stroke = 'black'\n", - "scatter.fill = True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## Changing the color to a different variable\n", - "scatter.color = sec2_levels\n", - "ax_c.tick_format = '0.0f'\n", - "ax_c.label = 'Security 2'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## Changing the range of the color scale\n", - "sc_c1.colors = ['blue', 'green', 'orange']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Date Scale for Color Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sc_x = LinearScale()\n", - "sc_y = LinearScale()\n", - "\n", - "sc_c1 = DateColorScale(scheme='Reds')\n", - "scatter = ScatterGL(x=sec2_levels, y=sec1_levels, color=dates_all,\n", - " scales={'x': sc_x, 'y': sc_y, 'color': sc_c1}, default_size=128,\n", - " stroke='black')\n", - "\n", - "ax_y = Axis(label='Security 1 Level', scale=sc_y, orientation='vertical', side='left')\n", - "\n", - "ax_x = Axis(label='Security 2', scale=sc_x)\n", - "ax_c = ColorAxis(scale=sc_c1, label='Date', num_ticks=5)\n", - "\n", - "m_chart = dict(top=50, bottom=80, left=50, right=50)\n", - "Figure(axes=[ax_x, ax_c, ax_y], marks=[scatter], fig_margin=m_chart)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "input_collapsed": false - }, - "source": [ - "## Setting size and opacity based on data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "input_collapsed": false - }, - "outputs": [], - "source": [ - "sc_x = LinearScale()\n", - "sc_y = LinearScale()\n", - "sc_y2 = LinearScale()\n", - "\n", - "sc_size = LinearScale()\n", - "sc_opacity = LinearScale()\n", - "\n", - "\n", - "scatter2 = ScatterGL(x=sec2_levels, y=sec1_levels, size=sec1_returns,\n", - " scales={'x': sc_x, 'y': sc_y, 'size': sc_size}, \n", - " default_size=128, colors=['orangered'], stroke='black')\n", - "\n", - "ax_y = Axis(label='Security 1', scale=sc_y, orientation='vertical', side='left')\n", - "ax_x = Axis(label='Security 2', scale=sc_x)\n", - "\n", - "Figure(axes=[ax_x, ax_y], marks=[scatter2])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## Changing the opacity of the scatter\n", - "scatter2.opacities = [0.5, 0.3, 0.1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## Resetting the opacity and setting the opacity according to the date\n", - "scatter2.opacities = [1.0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Rotation scale" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sc_x = LinearScale()\n", - "sc_y = LinearScale()\n", - "sc_e = LinearScale()\n", - "sc_c = ColorScale(scheme='Reds')\n", - "x1 = np.linspace(-1, 1, 250)\n", - "y1 = np.linspace(-1, 1, 250)\n", - "x, y = np.meshgrid(x1,y1)\n", - "x, y = x.flatten(), y.flatten()\n", - "rot = x**2 + y**2\n", - "color=x-y\n", - "scatter = ScatterGL(scales={'x': sc_x, 'y': sc_y, 'color': sc_c, 'rotation': sc_e}, \n", - " x=x, y=y, rotation=rot, color=color,\n", - " stroke=\"black\", stroke_width=20, default_size=200, \n", - " marker='arrow', default_skew=0.5)\n", - "\n", - "fig = Figure(marks=[scatter], animation_duration=1000)\n", - "\n", - "panzoom = PanZoom(scales={'x': [sc_x], 'y': [sc_y]})\n", - "fig.interaction = panzoom\n", - "\n", - "fig" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.rotation = 1.0 / (x ** 2 + y ** 2 + 1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scatter.rotation = x**2 + y**2" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Marks/Pyplot/Bars.ipynb b/examples/Marks/Pyplot/Bars.ipynb index 7f888f982..949f3069f 100644 --- a/examples/Marks/Pyplot/Bars.ipynb +++ b/examples/Marks/Pyplot/Bars.ipynb @@ -23,7 +23,7 @@ "x_data = range(size)\n", "y_data = np.random.randn(size)\n", "y_data_2 = np.random.randn(size)\n", - "y_data_3 = np.cumsum(np.random.randn(size) * 100.)" + "y_data_3 = np.cumsum(np.random.randn(size) * 100.0)" ] }, { @@ -39,7 +39,7 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure(title='Bar Chart')\n", + "plt.figure(title=\"Bar Chart\")\n", "plt.bar(np.arange(10), np.random.rand(10))\n", "plt.show()" ] @@ -64,8 +64,8 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure(title='Horizontal Bar Chart')\n", - "plt.bar(np.arange(10), np.random.uniform(-1, 1, 10), orientation='horizontal')\n", + "plt.figure(title=\"Horizontal Bar Chart\")\n", + "plt.bar(np.arange(10), np.random.uniform(-1, 1, 10), orientation=\"horizontal\")\n", "plt.show()" ] }, @@ -105,7 +105,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.align = 'right'" + "bar.align = \"right\"" ] }, { @@ -134,7 +134,7 @@ "outputs": [], "source": [ "# changing basic properties like stroke and opacity\n", - "bar.stroke = 'red'\n", + "bar.stroke = \"red\"\n", "bar.opacities = [0.5, 0.2]" ] }, @@ -144,9 +144,9 @@ "metadata": {}, "outputs": [], "source": [ - "bar.orientation = 'horizontal'\n", - "fig.axes[0].orientation = 'vertical'\n", - "fig.axes[1].orientation = 'horizontal'" + "bar.orientation = \"horizontal\"\n", + "fig.axes[0].orientation = \"vertical\"\n", + "fig.axes[1].orientation = \"horizontal\"" ] }, { @@ -163,9 +163,7 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "bar = plt.bar(x_data, [y_data[:20], y_data_2[:20]], \n", - " padding=0.2,\n", - " colors=CATEGORY10)\n", + "bar = plt.bar(x_data, [y_data[:20], y_data_2[:20]], padding=0.2, colors=CATEGORY10)\n", "fig" ] }, @@ -182,7 +180,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.type = 'grouped' # equivalent to saying\n", + "bar.type = \"grouped\" # equivalent to saying\n", "# plt.bar(x_data, y_data, padding=0.2, type='grouped')" ] }, @@ -193,10 +191,13 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "bar = plt.bar(x_data, [y_data[:20], y_data_2[:20]], \n", - " padding=0.2, \n", - " colors=CATEGORY10, \n", - " orientation='horizontal')\n", + "bar = plt.bar(\n", + " x_data,\n", + " [y_data[:20], y_data_2[:20]],\n", + " padding=0.2,\n", + " colors=CATEGORY10,\n", + " orientation=\"horizontal\",\n", + ")\n", "fig" ] }, @@ -206,7 +207,7 @@ "metadata": {}, "outputs": [], "source": [ - "bar.type = 'grouped'" + "bar.type = \"grouped\"" ] }, { @@ -222,11 +223,17 @@ "metadata": {}, "outputs": [], "source": [ - "## Color mode has 2 values. 'group' and 'element'. \n", + "## Color mode has 2 values. 'group' and 'element'.\n", "## 'group' means for every x all bars have same color.\n", "## 'element' means for every dimension of y, all bars have same color.\n", "fig = plt.figure()\n", - "bar = plt.bar(x_data, [y_data[:20], y_data_2[:20]], padding=0.2, colors=CATEGORY10, color_mode='group')\n", + "bar = plt.bar(\n", + " x_data,\n", + " [y_data[:20], y_data_2[:20]],\n", + " padding=0.2,\n", + " colors=CATEGORY10,\n", + " color_mode=\"group\",\n", + ")\n", "fig" ] }, @@ -238,15 +245,24 @@ "source": [ "## for 1-d array for Y.\n", "fig = plt.figure()\n", - "bar = plt.bar(x_data, y_data[:20], padding=0.2, color_mode='element', \n", - " labels=['Values'], display_legend=True)\n", + "bar = plt.bar(\n", + " x_data,\n", + " y_data[:20],\n", + " padding=0.2,\n", + " color_mode=\"element\",\n", + " labels=[\"Values\"],\n", + " display_legend=True,\n", + ")\n", "fig" ] }, { "cell_type": "markdown", "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "source": [ "## Representing additional dimension using Color" @@ -260,8 +276,8 @@ "source": [ "# In this example, the color is just the magnitude of the y data\n", "fig = plt.figure()\n", - "# add a 'reds' color scale \n", - "plt.scales(scales={'color': ColorScale(scheme='Reds')})\n", + "# add a 'reds' color scale\n", + "plt.scales(scales={\"color\": ColorScale(scheme=\"Reds\")})\n", "\n", "bar = plt.bar(x_data[:20], y_data[:20], color=np.abs(y_data[:20]), padding=0.2)\n", "\n", @@ -286,13 +302,19 @@ "source": [ "# By default color is applied along the axis=1\n", "fig = plt.figure()\n", - "plt.scales(scales={'color': ColorScale(scheme='Reds')})\n", + "plt.scales(scales={\"color\": ColorScale(scheme=\"Reds\")})\n", "\n", "y_vals = [y_data[:20], y_data_2[:20], y_data_3[:20] / 100.0]\n", "color_data = np.mean(y_vals, axis=1)\n", "\n", - "bar = plt.bar(x_data, y_vals, color=color_data, padding=0.2,\n", - " labels=['Dim 1', 'Dim 2', 'Dim 3'], display_legend=True)\n", + "bar = plt.bar(\n", + " x_data,\n", + " y_vals,\n", + " color=color_data,\n", + " padding=0.2,\n", + " labels=[\"Dim 1\", \"Dim 2\", \"Dim 3\"],\n", + " display_legend=True,\n", + ")\n", "\n", "fig.fig_margin = dict(top=50, bottom=80, left=50, right=50)\n", "fig" @@ -306,13 +328,14 @@ "source": [ "# Applying color along the axis=0\n", "fig = plt.figure()\n", - "plt.scales(scales={'color': ColorScale(mid=0.)})\n", + "plt.scales(scales={\"color\": ColorScale(mid=0.0)})\n", "\n", "y_vals = [y_data[:20], y_data_2[:20], y_data_3[:20] / 100.0]\n", "color_data = np.mean(y_vals, axis=0)\n", "\n", - "bar = plt.bar(x_data, y_vals, color=color_data, padding=0.2, \n", - " color_mode='group', stroke='orange')\n", + "bar = plt.bar(\n", + " x_data, y_vals, color=color_data, padding=0.2, color_mode=\"group\", stroke=\"orange\"\n", + ")\n", "fig.fig_margin = dict(top=50, bottom=80, left=50, right=50)\n", "fig" ] @@ -320,7 +343,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -334,9 +357,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/examples/Marks/Pyplot/Bins.ipynb b/examples/Marks/Pyplot/Bins.ipynb index 4888b4262..8ec423545 100644 --- a/examples/Marks/Pyplot/Bins.ipynb +++ b/examples/Marks/Pyplot/Bins.ipynb @@ -137,7 +137,7 @@ "outputs": [], "source": [ "# Changing the number of bins\n", - "hist.bins = 'sqrt'" + "hist.bins = \"sqrt\"" ] }, { @@ -193,7 +193,7 @@ "outputs": [], "source": [ "# changing the color\n", - "hist.colors=['orangered']" + "hist.colors = [\"orangered\"]" ] }, { @@ -207,7 +207,7 @@ "outputs": [], "source": [ "# stroke and opacity update\n", - "hist.stroke = 'orange'\n", + "hist.stroke = \"orange\"\n", "hist.opacities = [0.5] * len(hist.x)" ] }, @@ -222,9 +222,9 @@ "outputs": [], "source": [ "# Laying the histogram on its side\n", - "hist.orientation = 'horizontal'\n", - "fig.axes[0].orientation = 'vertical'\n", - "fig.axes[1].orientation = 'horizontal'" + "hist.orientation = \"horizontal\"\n", + "fig.axes[0].orientation = \"vertical\"\n", + "fig.axes[1].orientation = \"horizontal\"" ] } ], diff --git a/examples/Marks/Pyplot/Boxplot.ipynb b/examples/Marks/Pyplot/Boxplot.ipynb index 1c139ce95..d4382b74d 100644 --- a/examples/Marks/Pyplot/Boxplot.ipynb +++ b/examples/Marks/Pyplot/Boxplot.ipynb @@ -29,13 +29,153 @@ "x_data = [1, 2, 3, 4, 5, 6, 7]\n", "\n", "y_data = [\n", - " [160.10, 162.34, 161.82, 162.24, 161.44, 158.51, 157.68, 151.93, 151.41, 153.06, 155.38, 161.07, 160.51, 162.99, 161.86, 163.27, 164.05, 164.52, 162.67],\n", - " [161.54, 162.17, 161.95, 161.76, 162.15, 160.92, 160.64, 161.43, 161.89, 164.16, 164.16, 162.79, 161.92, 163.30, 163.49, 162.07, 161.46, 161.82, 162.65],\n", - " [164.40, 164.35, 163.46, 163.60, 161.87, 162.08, 162.18, 161.79, 163.23, 169.10, 182.05, 179.84, 181.75, 183.80, 183.52, 185.93, 186.42, 189.36, 185.71],\n", - " [188.67, 186.91, 187.17, 189.83, 189.64, 190.06, 189.01, 192.31, 191.62, 193.11, 194.00, 193.75, 192.80, 192.96, 191.81, 191.28, 191.72, 191.20, 190.68],\n", - " [191.95, 191.56, 192.30, 192.00, 192.25, 192.99, 191.16, 190.41, 191.23, 190.10, 190.07, 189.36, 187.38, 187.88, 191.81, 191.28, 191.72, 189.99, 190.14],\n", - " [187.95, 187.34, 187.47, 186.63, 184.30, 185.97, 187.10, 189.64, 189.15, 191.67, 194.00, 194.57, 195.78, 194.40, 195.24, 193.63, 190.85, 192.5, 192.49],\n", - " [192.36, 188.49, 189.86, 188.00, 187.70, 188.42, 187.22, 188.04, 188.53, 188.39, 186.35, 181.27, 181.71, 180.37, 180.72, 180.88, 182.14, 181.55, 182.82]\n", + " [\n", + " 160.10,\n", + " 162.34,\n", + " 161.82,\n", + " 162.24,\n", + " 161.44,\n", + " 158.51,\n", + " 157.68,\n", + " 151.93,\n", + " 151.41,\n", + " 153.06,\n", + " 155.38,\n", + " 161.07,\n", + " 160.51,\n", + " 162.99,\n", + " 161.86,\n", + " 163.27,\n", + " 164.05,\n", + " 164.52,\n", + " 162.67,\n", + " ],\n", + " [\n", + " 161.54,\n", + " 162.17,\n", + " 161.95,\n", + " 161.76,\n", + " 162.15,\n", + " 160.92,\n", + " 160.64,\n", + " 161.43,\n", + " 161.89,\n", + " 164.16,\n", + " 164.16,\n", + " 162.79,\n", + " 161.92,\n", + " 163.30,\n", + " 163.49,\n", + " 162.07,\n", + " 161.46,\n", + " 161.82,\n", + " 162.65,\n", + " ],\n", + " [\n", + " 164.40,\n", + " 164.35,\n", + " 163.46,\n", + " 163.60,\n", + " 161.87,\n", + " 162.08,\n", + " 162.18,\n", + " 161.79,\n", + " 163.23,\n", + " 169.10,\n", + " 182.05,\n", + " 179.84,\n", + " 181.75,\n", + " 183.80,\n", + " 183.52,\n", + " 185.93,\n", + " 186.42,\n", + " 189.36,\n", + " 185.71,\n", + " ],\n", + " [\n", + " 188.67,\n", + " 186.91,\n", + " 187.17,\n", + " 189.83,\n", + " 189.64,\n", + " 190.06,\n", + " 189.01,\n", + " 192.31,\n", + " 191.62,\n", + " 193.11,\n", + " 194.00,\n", + " 193.75,\n", + " 192.80,\n", + " 192.96,\n", + " 191.81,\n", + " 191.28,\n", + " 191.72,\n", + " 191.20,\n", + " 190.68,\n", + " ],\n", + " [\n", + " 191.95,\n", + " 191.56,\n", + " 192.30,\n", + " 192.00,\n", + " 192.25,\n", + " 192.99,\n", + " 191.16,\n", + " 190.41,\n", + " 191.23,\n", + " 190.10,\n", + " 190.07,\n", + " 189.36,\n", + " 187.38,\n", + " 187.88,\n", + " 191.81,\n", + " 191.28,\n", + " 191.72,\n", + " 189.99,\n", + " 190.14,\n", + " ],\n", + " [\n", + " 187.95,\n", + " 187.34,\n", + " 187.47,\n", + " 186.63,\n", + " 184.30,\n", + " 185.97,\n", + " 187.10,\n", + " 189.64,\n", + " 189.15,\n", + " 191.67,\n", + " 194.00,\n", + " 194.57,\n", + " 195.78,\n", + " 194.40,\n", + " 195.24,\n", + " 193.63,\n", + " 190.85,\n", + " 192.5,\n", + " 192.49,\n", + " ],\n", + " [\n", + " 192.36,\n", + " 188.49,\n", + " 189.86,\n", + " 188.00,\n", + " 187.70,\n", + " 188.42,\n", + " 187.22,\n", + " 188.04,\n", + " 188.53,\n", + " 188.39,\n", + " 186.35,\n", + " 181.27,\n", + " 181.71,\n", + " 180.37,\n", + " 180.72,\n", + " 180.88,\n", + " 182.14,\n", + " 181.55,\n", + " 182.82,\n", + " ],\n", "]" ] }, @@ -51,8 +191,14 @@ "source": [ "fig = plt.figure()\n", "# add x and y labels using axes_options\n", - "axes_options = {'x': {'label': 'X'}, 'y': {'label': 'Y'}}\n", - "boxes = plt.boxplot(x_data, y_data, box_fill_color='gray', outlier_fill_color='black', axes_options=axes_options)\n", + "axes_options = {\"x\": {\"label\": \"X\"}, \"y\": {\"label\": \"Y\"}}\n", + "boxes = plt.boxplot(\n", + " x_data,\n", + " y_data,\n", + " box_fill_color=\"gray\",\n", + " outlier_fill_color=\"black\",\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -68,9 +214,9 @@ "outputs": [], "source": [ "## setting the stroke and fill_color of the boxes and the outliers\n", - "boxes.stroke = 'red'\n", - "boxes.box_fill_color = 'blue'\n", - "boxes.outlier_fill_color = 'red'" + "boxes.stroke = \"red\"\n", + "boxes.box_fill_color = \"blue\"\n", + "boxes.outlier_fill_color = \"red\"" ] }, { diff --git a/examples/Marks/Pyplot/Candles.ipynb b/examples/Marks/Pyplot/Candles.ipynb index efc072c02..b2686c2e8 100644 --- a/examples/Marks/Pyplot/Candles.ipynb +++ b/examples/Marks/Pyplot/Candles.ipynb @@ -26,27 +26,31 @@ }, "outputs": [], "source": [ - "price_data1 = [['2015-01-02 00:00:00', [161.31, 163.31, 161.0, 162.06]],\n", - " ['2015-01-05 00:00:00', [161.27, 161.27, 159.19, 159.51]],\n", - " ['2015-01-06 00:00:00', [159.67, 159.96, 155.17, 156.07]],\n", - " ['2015-01-07 00:00:00', [157.2, 157.2, 154.03, 155.05]],\n", - " ['2015-01-08 00:00:00', [156.24, 159.044, 155.55, 158.42]],\n", - " ['2015-01-09 00:00:00', [158.42, 160.34, 157.25, 159.11]],\n", - " ['2015-01-12 00:00:00', [159.0, 159.25, 155.76, 156.44]],\n", - " ['2015-01-13 00:00:00', [157.26, 159.97, 155.68, 156.81]],\n", - " ['2015-01-14 00:00:00', [154.86, 156.49, 153.74, 155.8]],\n", - " ['2015-01-15 00:00:00', [156.69, 156.97, 154.16, 154.57]]]\n", + "price_data1 = [\n", + " [\"2015-01-02 00:00:00\", [161.31, 163.31, 161.0, 162.06]],\n", + " [\"2015-01-05 00:00:00\", [161.27, 161.27, 159.19, 159.51]],\n", + " [\"2015-01-06 00:00:00\", [159.67, 159.96, 155.17, 156.07]],\n", + " [\"2015-01-07 00:00:00\", [157.2, 157.2, 154.03, 155.05]],\n", + " [\"2015-01-08 00:00:00\", [156.24, 159.044, 155.55, 158.42]],\n", + " [\"2015-01-09 00:00:00\", [158.42, 160.34, 157.25, 159.11]],\n", + " [\"2015-01-12 00:00:00\", [159.0, 159.25, 155.76, 156.44]],\n", + " [\"2015-01-13 00:00:00\", [157.26, 159.97, 155.68, 156.81]],\n", + " [\"2015-01-14 00:00:00\", [154.86, 156.49, 153.74, 155.8]],\n", + " [\"2015-01-15 00:00:00\", [156.69, 156.97, 154.16, 154.57]],\n", + "]\n", "\n", - "price_data2 = [['2015-01-02 00:00:00', [111.39, 111.44, 107.35, 109.33]],\n", - " ['2015-01-05 00:00:00', [108.29, 108.65, 105.41, 106.25]],\n", - " ['2015-01-06 00:00:00', [106.54, 107.43, 104.63, 106.26]],\n", - " ['2015-01-07 00:00:00', [107.2, 108.2, 106.695, 107.75]],\n", - " ['2015-01-08 00:00:00', [109.23, 112.15, 108.7, 111.89]],\n", - " ['2015-01-09 00:00:00', [112.67, 113.25, 110.21, 112.01]],\n", - " ['2015-01-12 00:00:00', [112.6, 112.63, 108.8, 109.25]],\n", - " ['2015-01-13 00:00:00', [111.43, 112.8, 108.91, 110.22]],\n", - " ['2015-01-14 00:00:00', [109.04, 110.49, 108.5, 109.8]],\n", - " ['2015-01-15 00:00:00', [110.0, 110.06, 106.66, 106.82]]]" + "price_data2 = [\n", + " [\"2015-01-02 00:00:00\", [111.39, 111.44, 107.35, 109.33]],\n", + " [\"2015-01-05 00:00:00\", [108.29, 108.65, 105.41, 106.25]],\n", + " [\"2015-01-06 00:00:00\", [106.54, 107.43, 104.63, 106.26]],\n", + " [\"2015-01-07 00:00:00\", [107.2, 108.2, 106.695, 107.75]],\n", + " [\"2015-01-08 00:00:00\", [109.23, 112.15, 108.7, 111.89]],\n", + " [\"2015-01-09 00:00:00\", [112.67, 113.25, 110.21, 112.01]],\n", + " [\"2015-01-12 00:00:00\", [112.6, 112.63, 108.8, 109.25]],\n", + " [\"2015-01-13 00:00:00\", [111.43, 112.8, 108.91, 110.22]],\n", + " [\"2015-01-14 00:00:00\", [109.04, 110.49, 108.5, 109.8]],\n", + " [\"2015-01-15 00:00:00\", [110.0, 110.06, 106.66, 106.82]],\n", + "]" ] }, { @@ -81,15 +85,28 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "axes_options = {'x': {'label': 'X'}, 'y': {'label': 'Y'}}\n", - "ohlc1 = plt.ohlc(dates1, prices1, marker='candle', \n", - " format='ohlc', stroke='blue', \n", - " display_legend=True, labels=['IBM US Equity'],\n", - " axes_options=axes_options)\n", - "ohlc2 = plt.ohlc(dates2, prices2, marker='bar', \n", - " colors=['dodgerblue', 'orange'], stroke='orange', \n", - " display_legend=True, labels=['AAPL US Equity'], format='ohlc',\n", - " axes_options=axes_options)\n", + "axes_options = {\"x\": {\"label\": \"X\"}, \"y\": {\"label\": \"Y\"}}\n", + "ohlc1 = plt.ohlc(\n", + " dates1,\n", + " prices1,\n", + " marker=\"candle\",\n", + " format=\"ohlc\",\n", + " stroke=\"blue\",\n", + " display_legend=True,\n", + " labels=[\"IBM US Equity\"],\n", + " axes_options=axes_options,\n", + ")\n", + "ohlc2 = plt.ohlc(\n", + " dates2,\n", + " prices2,\n", + " marker=\"bar\",\n", + " colors=[\"dodgerblue\", \"orange\"],\n", + " stroke=\"orange\",\n", + " display_legend=True,\n", + " labels=[\"AAPL US Equity\"],\n", + " format=\"ohlc\",\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -104,7 +121,7 @@ }, "outputs": [], "source": [ - "ohlc1.colors = [None, 'red']" + "ohlc1.colors = [None, \"red\"]" ] }, { @@ -122,10 +139,14 @@ "\n", "fig = plt.figure()\n", "# use log scale for x\n", - "plt.scales(scales={'x': LogScale()})\n", - "axes_options = {'x': {'label': 'X'}, 'y': {'label': 'Y', 'tick_format': '.2f'}}\n", - "ohlc3 = plt.ohlc(np.arange(len(dates2)) + 1, np.array(prices2) / 60,\n", - " marker='bar', colors=['dodgerblue','orange'])\n", + "plt.scales(scales={\"x\": LogScale()})\n", + "axes_options = {\"x\": {\"label\": \"X\"}, \"y\": {\"label\": \"Y\", \"tick_format\": \".2f\"}}\n", + "ohlc3 = plt.ohlc(\n", + " np.arange(len(dates2)) + 1,\n", + " np.array(prices2) / 60,\n", + " marker=\"bar\",\n", + " colors=[\"dodgerblue\", \"orange\"],\n", + ")\n", "fig" ] }, @@ -139,7 +160,7 @@ }, "outputs": [], "source": [ - "ohlc3.marker = 'candle'" + "ohlc3.marker = \"candle\"" ] }, { @@ -165,13 +186,19 @@ "from bqplot import OrdinalScale\n", "\n", "fig = plt.figure()\n", - "plt.scales(scales={'x': OrdinalScale()})\n", - "axes_options = {'x': {'label': 'X', 'tick_format': '%d-%m-%Y'}, \n", - " 'y': {'label': 'Y', 'tick_format': '.2f'}}\n", + "plt.scales(scales={\"x\": OrdinalScale()})\n", + "axes_options = {\n", + " \"x\": {\"label\": \"X\", \"tick_format\": \"%d-%m-%Y\"},\n", + " \"y\": {\"label\": \"Y\", \"tick_format\": \".2f\"},\n", + "}\n", "\n", - "ohlc3 = plt.ohlc(dates2, np.array(prices2) / 60, marker='candle', \n", - " colors=['dodgerblue','orange'], \n", - " axes_options=axes_options)\n", + "ohlc3 = plt.ohlc(\n", + " dates2,\n", + " np.array(prices2) / 60,\n", + " marker=\"candle\",\n", + " colors=[\"dodgerblue\", \"orange\"],\n", + " axes_options=axes_options,\n", + ")\n", "\n", "fig" ] diff --git a/examples/Marks/Pyplot/GridHeatMap.ipynb b/examples/Marks/Pyplot/GridHeatMap.ipynb index 8b1610d32..116ad638f 100644 --- a/examples/Marks/Pyplot/GridHeatMap.ipynb +++ b/examples/Marks/Pyplot/GridHeatMap.ipynb @@ -47,6 +47,7 @@ "outputs": [], "source": [ "from ipywidgets import *\n", + "\n", "fig = plt.figure(padding_y=0.0)\n", "grid_map = plt.gridheatmap(data)\n", "fig" @@ -58,7 +59,7 @@ "metadata": {}, "outputs": [], "source": [ - "grid_map.display_format = '.2f'" + "grid_map.display_format = \".2f\"" ] }, { @@ -67,7 +68,7 @@ "metadata": {}, "outputs": [], "source": [ - "grid_map.font_style = {'font-size': '16px', 'fill':'blue', 'font-weight': 'bold'}" + "grid_map.font_style = {\"font-size\": \"16px\", \"fill\": \"blue\", \"font-weight\": \"bold\"}" ] }, { @@ -83,7 +84,11 @@ "metadata": {}, "outputs": [], "source": [ - "axes_options = {'column': {'visible': False}, 'row': {'visible': False}, 'color': {'visible': False}}" + "axes_options = {\n", + " \"column\": {\"visible\": False},\n", + " \"row\": {\"visible\": False},\n", + " \"color\": {\"visible\": False},\n", + "}" ] }, { @@ -119,7 +124,7 @@ "outputs": [], "source": [ "fig = plt.figure(padding_y=0.0)\n", - "plt.scales(scales={'x': LinearScale(), 'y': LinearScale(reverse=True)})\n", + "plt.scales(scales={\"x\": LinearScale(), \"y\": LinearScale(reverse=True)})\n", "\n", "## The data along the rows is not uniform. Hence the 5th row(from top) of the map\n", "## is twice the height of the remaining rows.\n", @@ -172,7 +177,7 @@ "outputs": [], "source": [ "fig = plt.figure(padding_y=0.0)\n", - "plt.scales(scales={'x': LinearScale(), 'y': LinearScale(reverse=True)})\n", + "plt.scales(scales={\"x\": LinearScale(), \"y\": LinearScale(reverse=True)})\n", "\n", "row_data = np.arange(11)\n", "column_data = np.arange(10, 21)\n", @@ -185,8 +190,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "By default, for `N` points along any dimension, data aligns to the `start` of the rectangles in the grid. \n", - "The grid extends infinitely in the other direction. By default, the grid extends infintely\n", + "By default, for `N` points along any dimension, data aligns to the `start` of the rectangles in the grid.\n", + "The grid extends infinitely in the other direction. By default, the grid extends infinitely\n", "towards the bottom and the right." ] }, @@ -201,8 +206,7 @@ "outputs": [], "source": [ "fig = plt.figure(padding_y=0.0)\n", - "plt.scales(scales={'x': LinearScale(), \n", - " 'y': LinearScale(reverse=True, max=15)})\n", + "plt.scales(scales={\"x\": LinearScale(), \"y\": LinearScale(reverse=True, max=15)})\n", "\n", "row_data = np.arange(10)\n", "column_data = np.arange(10, 20)\n", @@ -229,13 +233,12 @@ "outputs": [], "source": [ "fig = plt.figure(padding_y=0.0)\n", - "plt.scales(scales={'x': LinearScale(), \n", - " 'y': LinearScale(reverse=True, min=-5, max=15)})\n", + "plt.scales(scales={\"x\": LinearScale(), \"y\": LinearScale(reverse=True, min=-5, max=15)})\n", "\n", "row_data = np.arange(10)\n", "column_data = np.arange(10, 20)\n", "\n", - "grid_map = plt.gridheatmap(data, row=row_data, column=column_data, row_align='end')\n", + "grid_map = plt.gridheatmap(data, row=row_data, column=column_data, row_align=\"end\")\n", "fig" ] }, @@ -243,7 +246,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For `N+1` points on any direction, the grid extends infintely in both directions" + "For `N+1` points on any direction, the grid extends infinitely in both directions" ] }, { @@ -257,13 +260,12 @@ "outputs": [], "source": [ "fig = plt.figure(padding_y=0.0)\n", - "plt.scales(scales={'x': LinearScale(), \n", - " 'y': LinearScale(reverse=True, min=-5, max=15)})\n", + "plt.scales(scales={\"x\": LinearScale(), \"y\": LinearScale(reverse=True, min=-5, max=15)})\n", "\n", "row_data = np.arange(9)\n", "column_data = np.arange(10, 20)\n", "\n", - "grid_map = plt.gridheatmap(data, row=row_data, column=column_data, row_align='end')\n", + "grid_map = plt.gridheatmap(data, row=row_data, column=column_data, row_align=\"end\")\n", "fig" ] }, @@ -285,7 +287,7 @@ "outputs": [], "source": [ "fig = plt.figure(padding_y=0.0)\n", - "grid_map = plt.gridheatmap(data, opacity=0.3, stroke='white', axes_options=axes_options)\n", + "grid_map = plt.gridheatmap(data, opacity=0.3, stroke=\"white\", axes_options=axes_options)\n", "fig" ] }, @@ -315,9 +317,12 @@ "source": [ "data = np.random.randn(10, 10)\n", "fig = plt.figure(padding_y=0.0)\n", - "grid_map = plt.gridheatmap(data, interactions={'click':'select'},\n", - " selected_style={'stroke': 'blue', 'stroke-width': 3}, \n", - " axes_options=axes_options)\n", + "grid_map = plt.gridheatmap(\n", + " data,\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"stroke\": \"blue\", \"stroke-width\": 3},\n", + " axes_options=axes_options,\n", + ")\n", "\n", "fig" ] @@ -362,17 +367,24 @@ "data = np.random.randn(10, 10)\n", "\n", "figure = plt.figure(padding_y=0.0)\n", - "grid_map = plt.gridheatmap(data, interactions={'click': 'select'},\n", - " selected_style={'stroke': 'blue', 'stroke-width': 3})\n", + "grid_map = plt.gridheatmap(\n", + " data,\n", + " interactions={\"click\": \"select\"},\n", + " selected_style={\"stroke\": \"blue\", \"stroke-width\": 3},\n", + ")\n", "\n", "from ipywidgets import Output\n", + "\n", "out = Output()\n", + "\n", + "\n", "@out.capture()\n", "def print_event(self, target):\n", " print(target)\n", - " \n", + "\n", + "\n", "# test\n", - "print_event(1, 'test output')\n", + "print_event(1, \"test output\")\n", "grid_map.on_element_click(print_event)\n", "\n", "display(figure)\n", diff --git a/examples/Marks/Pyplot/HeatMap.ipynb b/examples/Marks/Pyplot/HeatMap.ipynb index 40d7856f1..5d744192e 100644 --- a/examples/Marks/Pyplot/HeatMap.ipynb +++ b/examples/Marks/Pyplot/HeatMap.ipynb @@ -3,7 +3,10 @@ { "cell_type": "markdown", "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "source": [ "# Heatmap" @@ -55,14 +58,14 @@ "x = np.linspace(-5, 5, 200)\n", "y = np.linspace(-5, 5, 200)\n", "X, Y = np.meshgrid(x, y)\n", - "color = np.cos(X**2 + Y**2)" + "color = np.cos(X ** 2 + Y ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Plotting a 2-dimensional function \n", + "## Plotting a 2-dimensional function\n", "\n", "This is a visualization of the function $f(x, y) = \\text{cos}(x^2+y^2)$" ] @@ -73,9 +76,13 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Cosine',\n", - " layout=Layout(width='650px', height='650px'),\n", - " min_aspect_ratio=1, max_aspect_ratio=1, padding_y=0)\n", + "fig = plt.figure(\n", + " title=\"Cosine\",\n", + " layout=Layout(width=\"650px\", height=\"650px\"),\n", + " min_aspect_ratio=1,\n", + " max_aspect_ratio=1,\n", + " padding_y=0,\n", + ")\n", "heatmap = plt.heatmap(color, x=x, y=y)\n", "fig" ] @@ -95,8 +102,9 @@ "metadata": {}, "outputs": [], "source": [ - "from scipy.misc import ascent\n", - "Z = ascent()\n", + "from skimage.data import camera\n", + "\n", + "Z = camera()\n", "Z = Z[::-1, :]\n", "aspect_ratio = Z.shape[1] / Z.shape[0]" ] @@ -107,11 +115,19 @@ "metadata": {}, "outputs": [], "source": [ - "img = plt.figure(title='Ascent', layout=Layout(width='650px', height='650px'),\n", - " min_aspect_ratio=aspect_ratio, \n", - " max_aspect_ratio=aspect_ratio, padding_y=0)\n", - "plt.scales(scales={'color': ColorScale(scheme='Greys', reverse=True)})\n", - "axes_options = {'x': {'visible': False}, 'y': {'visible': False}, 'color': {'visible': False}}\n", + "img = plt.figure(\n", + " title=\"Ascent\",\n", + " layout=Layout(width=\"650px\", height=\"650px\"),\n", + " min_aspect_ratio=aspect_ratio,\n", + " max_aspect_ratio=aspect_ratio,\n", + " padding_y=0,\n", + ")\n", + "plt.scales(scales={\"color\": ColorScale(scheme=\"Greys\", reverse=True)})\n", + "axes_options = {\n", + " \"x\": {\"visible\": False},\n", + " \"y\": {\"visible\": False},\n", + " \"color\": {\"visible\": False},\n", + "}\n", "ascent = plt.heatmap(Z, axes_options=axes_options)\n", "img" ] @@ -120,7 +136,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -134,9 +150,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/Marks/Pyplot/Hist.ipynb b/examples/Marks/Pyplot/Hist.ipynb index 79b73fa4b..99cf01b29 100644 --- a/examples/Marks/Pyplot/Hist.ipynb +++ b/examples/Marks/Pyplot/Hist.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -29,24 +29,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a17eee64f6ef4796beb31ddb369c40a3", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Figure(axes=[Axis(orientation='vertical', scale=LinearScale()), Axis(scale=LinearScale())], fig_margin={'top':…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure(padding_y=0)\n", "hist = plt.hist(x_data)\n", @@ -55,27 +40,16 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([], dtype=float64)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "hist.count" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -92,24 +66,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "808738390285401bb60f4a0c3dc2888d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Figure(axes=[Axis(orientation='vertical', scale=LinearScale()), Axis(scale=LinearScale())], fig_margin={'top':…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# normalizing the count\n", "fig = plt.figure(padding_y=0)\n", @@ -119,22 +78,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# changing the color\n", - "hist.colors=['orangered']" + "hist.colors = [\"orangered\"]" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# stroke and opacity update\n", - "hist.stroke = 'orange'\n", + "hist.stroke = \"orange\"\n", "hist.opacities = [0.5] * hist.bins" ] }, @@ -147,24 +106,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "61970e249cde43a980740559c6165c4b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Figure(axes=[Axis(orientation='vertical', scale=LinearScale()), Axis(scale=LinearScale())], fig_margin={'top':…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure(padding_y=0)\n", "hist = plt.hist(x_data, normalized=True)\n", @@ -173,20 +117,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([], dtype=float64)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# count is the number of elements in each interval\n", "hist.count" @@ -194,20 +127,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# mid points are the mid points of each interval\n", "hist.midpoints" @@ -216,7 +138,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -230,9 +152,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/examples/Marks/Pyplot/Image.ipynb b/examples/Marks/Pyplot/Image.ipynb index 547061253..5f2c8fb65 100644 --- a/examples/Marks/Pyplot/Image.ipynb +++ b/examples/Marks/Pyplot/Image.ipynb @@ -42,11 +42,11 @@ "metadata": {}, "outputs": [], "source": [ - "image_path = os.path.abspath('../../data_files/trees.jpg')\n", + "image_path = os.path.abspath(\"../../data_files/trees.jpg\")\n", "\n", - "with open(image_path, 'rb') as f:\n", + "with open(image_path, \"rb\") as f:\n", " raw_image = f.read()\n", - "ipyimage = widgets.Image(value=raw_image, format='jpg')\n", + "ipyimage = widgets.Image(value=raw_image, format=\"jpg\")\n", "ipyimage" ] }, @@ -64,8 +64,8 @@ "outputs": [], "source": [ "plt.figure(padding_y=0)\n", - "axes_options = {'x': {'visible': False}, 'y': {'visible': False}}\n", - "plt.imshow(image_path, 'filename')\n", + "axes_options = {\"x\": {\"visible\": False}, \"y\": {\"visible\": False}}\n", + "plt.imshow(image_path, \"filename\")\n", "plt.show()" ] }, @@ -82,8 +82,8 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Trees', padding_x=0, padding_y=0)\n", - "image = plt.imshow(ipyimage, 'widget')\n", + "fig = plt.figure(title=\"Trees\", padding_x=0, padding_y=0)\n", + "image = plt.imshow(ipyimage, \"widget\")\n", "fig" ] }, @@ -103,10 +103,9 @@ "outputs": [], "source": [ "fig = plt.figure(padding_x=0, padding_y=0)\n", - "plt.scales(scales={'x': LinearScale(min=-1, max=2), \n", - " 'y': LinearScale(min=-0.5, max=2)})\n", - "image = plt.imshow(ipyimage, format='widget')\n", - "plt.plot([0, 1, 1, 0, 0], [0, 0, 1, 1, 0], 'r')\n", + "plt.scales(scales={\"x\": LinearScale(min=-1, max=2), \"y\": LinearScale(min=-0.5, max=2)})\n", + "image = plt.imshow(ipyimage, format=\"widget\")\n", + "plt.plot([0, 1, 1, 0, 0], [0, 0, 1, 1, 0], \"r\")\n", "fig" ] }, @@ -125,7 +124,7 @@ "source": [ "# Full screen\n", "image.x = [-1, 2]\n", - "image.y = [-.5, 2]" + "image.y = [-0.5, 2]" ] } ], diff --git a/examples/Marks/Pyplot/Label.ipynb b/examples/Marks/Pyplot/Label.ipynb index e8e08c368..900eb069d 100644 --- a/examples/Marks/Pyplot/Label.ipynb +++ b/examples/Marks/Pyplot/Label.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -14,14 +14,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.random.seed(10)\n", - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'],\n", - " index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[0.5, 0.8], [0.8, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "y_data = np.cumsum(np.random.randn(100))" ] }, @@ -34,31 +36,21 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "475580d8a2fd4739bc8681e199937d3e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Figure(axes=[Axis(scale=LinearScale()), Axis(orientation='vertical', scale=LinearScale())], fig_margin={'top':…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "fig = plt.figure(title='Basic Label Example')\n", + "fig = plt.figure(title=\"Basic Label Example\")\n", "test_line = plt.plot(np.arange(10), y_data[:10])\n", - "test_label = plt.label(['Test', 'Label', 'for', 'the', 'Data'], \n", - " x=np.arange(5), y=y_data[:5], \n", - " default_size=26, font_weight='bolder',\n", - " colors=['orange', 'red'], update_on_move=True)\n", + "test_label = plt.label(\n", + " [\"Test\", \"Label\", \"for\", \"the\", \"Data\"],\n", + " x=np.arange(5),\n", + " y=y_data[:5],\n", + " default_size=26,\n", + " font_weight=\"bolder\",\n", + " colors=[\"orange\", \"red\"],\n", + " update_on_move=True,\n", + ")\n", "fig" ] }, @@ -71,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -88,29 +80,16 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b28c4173135b48b19f21b455b07edad6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Figure(axes=[Axis(scale=LinearScale()), Axis(orientation='vertical', scale=LinearScale())], fig_margin={'top':…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure()\n", "\n", "test_line = plt.plot(np.arange(10), y_data)\n", - "test_label = plt.label(['Test Label'], default_size=26, font_weight='bolder', colors=['orange'])\n", + "test_label = plt.label(\n", + " [\"Test Label\"], default_size=26, font_weight=\"bolder\", colors=[\"orange\"]\n", + ")\n", "test_label.x = [0.5]\n", "test_label.y = [0.2]\n", "fig" @@ -118,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -135,35 +114,20 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e0c4dbf20b944b488a9e340801bd1bfd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Figure(axes=[Axis(scale=DateScale()), Axis(orientation='vertical', scale=LinearScale())], fig_margin={'top': 6…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure()\n", - "lines = plt.plot(price_data.index, price_data['Security 1'])\n", - "label = plt.label(['Pi-Day'], x=[np.datetime64('2007-03-14')], colors=['orange'])\n", - "label.y = [.5]\n", + "lines = plt.plot(price_data.index, price_data[\"Security 1\"])\n", + "label = plt.label([\"Pi-Day\"], x=[np.datetime64(\"2007-03-14\")], colors=[\"orange\"])\n", + "label.y = [0.5]\n", "fig" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -175,7 +139,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -189,9 +153,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/examples/Marks/Pyplot/Lines.ipynb b/examples/Marks/Pyplot/Lines.ipynb index 2f6c5ecb2..a6ccdcd4c 100644 --- a/examples/Marks/Pyplot/Lines.ipynb +++ b/examples/Marks/Pyplot/Lines.ipynb @@ -35,7 +35,7 @@ "| `marker_size` | Controls the size of the marker, takes as input a non-negative integer | `64` |\n", "|`close_path`| Controls whether to close the paths or not | `False` |\n", "|`fill`| Specifies in which way the paths are filled. Can be set to one of `{'none', 'bottom', 'top', 'inside'}`| `None` |\n", - "|`fill_colors`| `List` that specifies the `fill` colors of each path | `[]` | \n", + "|`fill_colors`| `List` that specifies the `fill` colors of each path | `[]` |\n", "| **Data Attribute** | **Description** | **Default Value** |\n", "|`x` |abscissas of the data points | `array([])` |\n", "|`y` |ordinates of the data points | `array([])` |\n", @@ -67,8 +67,8 @@ "metadata": {}, "outputs": [], "source": [ - "security_1 = np.cumsum(np.random.randn(150)) + 100.\n", - "security_2 = np.cumsum(np.random.randn(150)) + 100." + "security_1 = np.cumsum(np.random.randn(150)) + 100.0\n", + "security_2 = np.cumsum(np.random.randn(150)) + 100.0" ] }, { @@ -84,8 +84,8 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Security 1')\n", - "axes_options = {'x': {'label': 'Index'}, 'y': {'label': 'Price'}}\n", + "fig = plt.figure(title=\"Security 1\")\n", + "axes_options = {\"x\": {\"label\": \"Index\"}, \"y\": {\"label\": \"Price\"}}\n", "# x values default to range of values when not specified\n", "line = plt.plot(security_1, axes_options=axes_options)\n", "fig" @@ -104,7 +104,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.colors = ['DarkOrange']" + "line.colors = [\"DarkOrange\"]" ] }, { @@ -121,7 +121,7 @@ "outputs": [], "source": [ "# The opacity allows us to display the Line while featuring other Marks that may be on the Figure\n", - "line.opacities = [.5]" + "line.opacities = [0.5]" ] }, { @@ -146,7 +146,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.fill = 'bottom'\n", + "line.fill = \"bottom\"\n", "line.fill_opacities = [0.2]" ] }, @@ -156,7 +156,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.line_style = 'dashed'" + "line.line_style = \"dashed\"" ] }, { @@ -165,7 +165,7 @@ "metadata": {}, "outputs": [], "source": [ - "line.interpolation = 'basis'" + "line.interpolation = \"basis\"" ] }, { @@ -181,14 +181,14 @@ "metadata": {}, "outputs": [], "source": [ - "line.marker = 'triangle-down'" + "line.marker = \"triangle-down\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The `marker` attributes accepts the values `square`, `circle`, `cross`, `diamond`, `square`, `triangle-down`, `triangle-up`, `arrow`, `rectangle`, `ellipse`. Try changing the string above and re-running the cell to see how each `marker` type looks." + "The `marker` attributes accepts the values `square`, `circle`, `cross`, `diamond`, `square`, `triangle-down`, `triangle-up`, `arrow`, `rectangle`, `ellipse`, `plus`, `crosshair`, `point`. Try changing the string above and re-running the cell to see how each `marker` type looks." ] }, { @@ -214,7 +214,7 @@ "outputs": [], "source": [ "# Here we define the dates we would like to use\n", - "dates = date_range(start='01-01-2007', periods=150)" + "dates = date_range(start=\"01-01-2007\", periods=150)" ] }, { @@ -223,10 +223,9 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Time Series')\n", - "axes_options = {'x': {'label': 'Date'}, 'y': {'label': 'Security 1'}}\n", - "time_series = plt.plot(dates, security_1, \n", - " axes_options=axes_options)\n", + "fig = plt.figure(title=\"Time Series\")\n", + "axes_options = {\"x\": {\"label\": \"Date\"}, \"y\": {\"label\": \"Security 1\"}}\n", + "time_series = plt.plot(dates, security_1, axes_options=axes_options)\n", "fig" ] }, @@ -250,7 +249,7 @@ "metadata": {}, "outputs": [], "source": [ - "dates_new = date_range(start='06-01-2007', periods=150)" + "dates_new = date_range(start=\"06-01-2007\", periods=150)" ] }, { @@ -267,11 +266,14 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "axes_options = {'x': {'label': 'Date'}, 'y': {'label': 'Price'}}\n", - "line = plt.plot(dates, [security_1, security_2], \n", - " labels=['Security 1', 'Security 2'],\n", - " axes_options=axes_options,\n", - " display_legend=True)\n", + "axes_options = {\"x\": {\"label\": \"Date\"}, \"y\": {\"label\": \"Price\"}}\n", + "line = plt.plot(\n", + " dates,\n", + " [security_1, security_2],\n", + " labels=[\"Security 1\", \"Security 2\"],\n", + " axes_options=axes_options,\n", + " display_legend=True,\n", + ")\n", "fig" ] }, @@ -312,11 +314,13 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "axes_options = {'x': {'label': 'Date'}, \n", - " 'y': {'label': 'Security 1'},\n", - " 'color' : {'visible': False}}\n", + "axes_options = {\n", + " \"x\": {\"label\": \"Date\"},\n", + " \"y\": {\"label\": \"Security 1\"},\n", + " \"color\": {\"visible\": False},\n", + "}\n", "# add a custom color scale to color the lines\n", - "plt.scales(scales={'color': ColorScale(colors=['Red', 'Green'])})" + "plt.scales(scales={\"color\": ColorScale(colors=[\"Red\", \"Green\"])})" ] }, { @@ -325,7 +329,7 @@ "metadata": {}, "outputs": [], "source": [ - "dates_color = date_range(start='06-01-2007', periods=150)" + "dates_color = date_range(start=\"06-01-2007\", periods=150)" ] }, { @@ -334,7 +338,7 @@ "metadata": {}, "outputs": [], "source": [ - "securities = 100. + np.cumsum(np.random.randn(150, 10), axis=0)\n", + "securities = 100.0 + np.cumsum(np.random.randn(150, 10), axis=0)\n", "# we generate 10 random price series and 10 random positions\n", "positions = np.random.randint(0, 2, size=10)" ] @@ -346,8 +350,7 @@ "outputs": [], "source": [ "# We pass the color scale and the color data to the plot method\n", - "line = plt.plot(dates_color, securities.T, color=positions, \n", - " axes_options=axes_options)\n", + "line = plt.plot(dates_color, securities.T, color=positions, axes_options=axes_options)\n", "fig" ] }, @@ -388,16 +391,29 @@ "outputs": [], "source": [ "fig = plt.figure(animation_duration=1000)\n", - "patch = plt.plot([],[],\n", - " fill_colors=['orange', 'blue', 'red'],\n", - " fill='inside',\n", - " axes_options={'x': {'visible': False}, 'y': {'visible': False}},\n", - " stroke_width=10,\n", - " close_path=True,\n", - " display_legend=True)\n", + "patch = plt.plot(\n", + " [],\n", + " [],\n", + " fill_colors=[\"orange\", \"blue\", \"red\"],\n", + " fill=\"inside\",\n", + " axes_options={\"x\": {\"visible\": False}, \"y\": {\"visible\": False}},\n", + " stroke_width=10,\n", + " close_path=True,\n", + " display_legend=True,\n", + ")\n", "\n", - "patch.x = [[0, 2, 1.2, np.nan, np.nan, np.nan, np.nan], [0.5, 2.5, 1.7 , np.nan, np.nan, np.nan, np.nan], [4, 5, 6, 6, 5, 4, 3]], \n", - "patch.y = [[0, 0, 1 , np.nan, np.nan, np.nan, np.nan], [0.5, 0.5, -0.5, np.nan, np.nan, np.nan, np.nan], [1, 1.1, 1.2, 2.3, 2.2, 2.7, 1.0]]\n", + "patch.x = (\n", + " [\n", + " [0, 2, 1.2, np.nan, np.nan, np.nan, np.nan],\n", + " [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan],\n", + " [4, 5, 6, 6, 5, 4, 3],\n", + " ],\n", + ")\n", + "patch.y = [\n", + " [0, 0, 1, np.nan, np.nan, np.nan, np.nan],\n", + " [0.5, 0.5, -0.5, np.nan, np.nan, np.nan, np.nan],\n", + " [1, 1.1, 1.2, 2.3, 2.2, 2.7, 1.0],\n", + "]\n", "fig" ] }, @@ -416,7 +432,11 @@ "metadata": {}, "outputs": [], "source": [ - "patch.x = [[2, 3, 3.2, np.nan, np.nan, np.nan, np.nan], [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan], [4,5,6, 6, 5, 4, 3]]" + "patch.x = [\n", + " [2, 3, 3.2, np.nan, np.nan, np.nan, np.nan],\n", + " [0.5, 2.5, 1.7, np.nan, np.nan, np.nan, np.nan],\n", + " [4, 5, 6, 6, 5, 4, 3],\n", + "]" ] }, { diff --git a/examples/Marks/Pyplot/Map.ipynb b/examples/Marks/Pyplot/Map.ipynb index 39bb2d7c9..f60d0111a 100644 --- a/examples/Marks/Pyplot/Map.ipynb +++ b/examples/Marks/Pyplot/Map.ipynb @@ -23,8 +23,8 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Basic Map')\n", - "plt.geo(map_data='WorldMap')\n", + "fig = plt.figure(title=\"Basic Map\")\n", + "plt.geo(map_data=\"WorldMap\")\n", "fig" ] }, @@ -43,11 +43,13 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Advanced Map')\n", + "fig = plt.figure(title=\"Advanced Map\")\n", "geo_scale = Orthographic(scale_factor=375, center=[0, 25], rotate=(-50, 0))\n", - "plt.scales(scales={'projection': geo_scale})\n", - "map_mark = plt.geo(map_data='WorldMap', \n", - " colors={682: 'Green', 356: 'Red', 643: '#0000ff', 'default_color': 'DarkOrange'})\n", + "plt.scales(scales={\"projection\": geo_scale})\n", + "map_mark = plt.geo(\n", + " map_data=\"WorldMap\",\n", + " colors={682: \"Green\", 356: \"Red\", 643: \"#0000ff\", \"default_color\": \"DarkOrange\"},\n", + ")\n", "fig" ] }, @@ -73,11 +75,13 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Choropleth')\n", - "plt.scales(scales={'projection': Mercator(), 'color': ColorScale(scheme='YlOrRd')})\n", - "chloro_map = plt.geo(map_data='WorldMap', \n", - " color={643: 105., 4: 21., 398: 23., 156: 42., 124:78., 76: 98.},\n", - " colors={'default_color': 'Grey'})\n", + "fig = plt.figure(title=\"Choropleth\")\n", + "plt.scales(scales={\"projection\": Mercator(), \"color\": ColorScale(scheme=\"YlOrRd\")})\n", + "chloro_map = plt.geo(\n", + " map_data=\"WorldMap\",\n", + " color={643: 105.0, 4: 21.0, 398: 23.0, 156: 42.0, 124: 78.0, 76: 98.0},\n", + " colors={\"default_color\": \"Grey\"},\n", + ")\n", "fig" ] }, @@ -94,9 +98,9 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='US States Map')\n", - "plt.scales(scales={'projection': AlbersUSA()})\n", - "states_map = plt.geo(map_data='USStatesMap')\n", + "fig = plt.figure(title=\"US States Map\")\n", + "plt.scales(scales={\"projection\": AlbersUSA()})\n", + "states_map = plt.geo(map_data=\"USStatesMap\")\n", "fig" ] }, @@ -113,9 +117,9 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Europe Countries Map')\n", - "plt.scales(scales={'projection': Mercator(scale_factor=450)})\n", - "euro_map = plt.geo(map_data='EuropeMap')\n", + "fig = plt.figure(title=\"Europe Countries Map\")\n", + "plt.scales(scales={\"projection\": Mercator(scale_factor=450)})\n", + "euro_map = plt.geo(map_data=\"EuropeMap\")\n", "fig" ] }, @@ -132,10 +136,13 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(title='Interactions')\n", - "def_tt = Tooltip(fields=['id', 'name'])\n", - "map_mark = plt.geo(map_data='WorldMap', tooltip=def_tt, \n", - " interactions={'click': 'select', 'hover': 'tooltip'})\n", + "fig = plt.figure(title=\"Interactions\")\n", + "def_tt = Tooltip(fields=[\"id\", \"name\"])\n", + "map_mark = plt.geo(\n", + " map_data=\"WorldMap\",\n", + " tooltip=def_tt,\n", + " interactions={\"click\": \"select\", \"hover\": \"tooltip\"},\n", + ")\n", "fig" ] }, diff --git a/examples/Marks/Pyplot/Pie.ipynb b/examples/Marks/Pyplot/Pie.ipynb index 3f17f16f7..3f58b80cf 100644 --- a/examples/Marks/Pyplot/Pie.ipynb +++ b/examples/Marks/Pyplot/Pie.ipynb @@ -31,7 +31,7 @@ "data = np.random.rand(3)\n", "\n", "fig = plt.figure(animation_duration=1000)\n", - "pie = plt.pie(data, display_labels='outside', labels=list(string.ascii_uppercase))\n", + "pie = plt.pie(data, display_labels=\"outside\", labels=list(string.ascii_uppercase))\n", "fig" ] }, @@ -71,14 +71,14 @@ "source": [ "with pie.hold_sync():\n", " pie.display_values = True\n", - " pie.values_format = '.1f'" + " pie.values_format = \".1f\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Enable sort " + "### Enable sort" ] }, { @@ -107,8 +107,8 @@ }, "outputs": [], "source": [ - "pie.selected_style = {'opacity': 1, 'stroke': 'white', 'stroke-width': 2}\n", - "pie.unselected_style = {'opacity': 0.2}\n", + "pie.selected_style = {\"opacity\": 1, \"stroke\": \"white\", \"stroke-width\": 2}\n", + "pie.unselected_style = {\"opacity\": 0.2}\n", "pie.selected = [1]" ] }, @@ -145,9 +145,9 @@ }, "outputs": [], "source": [ - "pie.label_color = 'Red'\n", - "pie.font_size = '20px'\n", - "pie.font_weight = 'bold'" + "pie.label_color = \"Red\"\n", + "pie.font_size = \"20px\"\n", + "pie.font_weight = \"bold\"" ] }, { @@ -211,7 +211,7 @@ "source": [ "### Move the pie around\n", "`x` and `y` attributes control the position of the pie in the figure.\n", - "If no scales are passed for `x` and `y`, they are taken in absolute \n", + "If no scales are passed for `x` and `y`, they are taken in absolute\n", "figure coordinates, between 0 and 1." ] }, @@ -244,9 +244,9 @@ }, "outputs": [], "source": [ - "pie1.stroke = 'brown'\n", - "pie1.colors = ['orange', 'darkviolet']\n", - "pie1.opacities = [.1, 1]\n", + "pie1.stroke = \"brown\"\n", + "pie1.colors = [\"orange\", \"darkviolet\"]\n", + "pie1.opacities = [0.1, 1]\n", "fig1" ] }, @@ -261,7 +261,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Pie` allows for its colors to be determined by data, that is passed to the `color` attribute. \n", + "The `Pie` allows for its colors to be determined by data, that is passed to the `color` attribute.\n", "A `ColorScale` with the desired color scheme must also be passed." ] }, @@ -280,7 +280,7 @@ "color_data = np.random.randn(n)\n", "\n", "fig2 = plt.figure()\n", - "plt.scales(scales={'color': ColorScale(scheme='Reds')})\n", + "plt.scales(scales={\"color\": ColorScale(scheme=\"Reds\")})\n", "pie2 = plt.pie(size_data, color=color_data)\n", "fig2" ] diff --git a/examples/Marks/Pyplot/Scatter.ipynb b/examples/Marks/Pyplot/Scatter.ipynb index 8fa6921f8..5afcd713c 100644 --- a/examples/Marks/Pyplot/Scatter.ipynb +++ b/examples/Marks/Pyplot/Scatter.ipynb @@ -14,8 +14,7 @@ "\n", "import ipywidgets\n", "\n", - "from bqplot import (ColorScale, DateColorScale, OrdinalColorScale, \n", - " LinearScale, Tooltip)\n", + "from bqplot import ColorScale, DateColorScale, OrdinalColorScale, LinearScale, Tooltip\n", "import bqplot.pyplot as plt" ] }, @@ -32,13 +31,16 @@ "metadata": {}, "outputs": [], "source": [ - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[1.0, -0.8], [-0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'], index=pd.date_range(start='01-01-2007', periods=150))\n", + "price_data = pd.DataFrame(\n", + " np.cumsum(np.random.randn(150, 2).dot([[1.0, -0.8], [-0.8, 1.0]]), axis=0) + 100,\n", + " columns=[\"Security 1\", \"Security 2\"],\n", + " index=pd.date_range(start=\"01-01-2007\", periods=150),\n", + ")\n", "size = 100\n", "np.random.seed(0)\n", "x_data = range(size)\n", "y_data = np.cumsum(np.random.randn(size) * 100.0)\n", - "ord_keys = np.array(['A', 'B', 'C', 'D', 'E', 'F'])\n", + "ord_keys = np.array([\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"])\n", "ordinal_data = np.random.randint(5, size=size)" ] }, @@ -50,7 +52,7 @@ }, "outputs": [], "source": [ - "symbols = ['Security 1', 'Security 2']\n", + "symbols = [\"Security 1\", \"Security 2\"]\n", "\n", "dates_all = price_data.index.values\n", "dates_all_t = dates_all[1:]\n", @@ -75,8 +77,8 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "axes_options = {'x': {'label': 'Date'}, 'y': {'label': 'Security 2'}}\n", - "scatt = plt.scatter(dates_all, sec2_levels, axes_options=axes_options, stroke='black')\n", + "axes_options = {\"x\": {\"label\": \"Date\"}, \"y\": {\"label\": \"Security 2\"}}\n", + "scatt = plt.scatter(dates_all, sec2_levels, axes_options=axes_options, stroke=\"black\")\n", "fig" ] }, @@ -94,8 +96,9 @@ "outputs": [], "source": [ "fig = plt.figure(padding_x=0.025)\n", - "scatt = plt.scatter(x_data[:10], y_data[:10], names=np.arange(10),\n", - " colors=['red'], marker='cross')\n", + "scatt = plt.scatter(\n", + " x_data[:10], y_data[:10], names=np.arange(10), colors=[\"red\"], marker=\"cross\"\n", + ")\n", "fig" ] }, @@ -112,7 +115,7 @@ "metadata": {}, "outputs": [], "source": [ - "scatt.opacities = [0.3, 0.5, 1.]" + "scatt.opacities = [0.3, 0.5, 1.0]" ] }, { @@ -141,17 +144,23 @@ "source": [ "# give extra margin on the right to accommodate the color axis\n", "fig_margin = dict(top=50, bottom=70, left=50, right=100)\n", - "fig = plt.figure(title='Scatter', fig_margin=fig_margin)\n", - "plt.scales(scales={'color': ColorScale()})\n", + "fig = plt.figure(title=\"Scatter\", fig_margin=fig_margin)\n", + "plt.scales(scales={\"color\": ColorScale()})\n", "\n", - "axes_options = {'x': dict(label='Date', num_ticks=10, label_location='end'), \n", - " 'y': dict(label='Security 2', sid='left'),\n", - " 'color': dict(tick_format='0.2%', \n", - " label='Returns', \n", - " orientation='vertical', \n", - " side='right')}\n", - "scatter = plt.scatter(dates_all, sec2_levels, color=sec1_returns, \n", - " stroke='black', axes_options=axes_options)\n", + "axes_options = {\n", + " \"x\": dict(label=\"Date\", num_ticks=10, label_location=\"end\"),\n", + " \"y\": dict(label=\"Security 2\", sid=\"left\"),\n", + " \"color\": dict(\n", + " tick_format=\"0.2%\", label=\"Returns\", orientation=\"vertical\", side=\"right\"\n", + " ),\n", + "}\n", + "scatter = plt.scatter(\n", + " dates_all,\n", + " sec2_levels,\n", + " color=sec1_returns,\n", + " stroke=\"black\",\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -161,8 +170,8 @@ "metadata": {}, "outputs": [], "source": [ - "## Changing the default color. \n", - "scatter.colors = ['blue'] # In this case, the dot with the highest X changes to blue." + "## Changing the default color.\n", + "scatter.colors = [\"blue\"] # In this case, the dot with the highest X changes to blue." ] }, { @@ -183,7 +192,7 @@ "outputs": [], "source": [ "## Setting the fill back\n", - "scatter.stroke = 'black'\n", + "scatter.stroke = \"black\"\n", "scatter.fill = True" ] }, @@ -196,8 +205,8 @@ "## Changing the color to a different variable\n", "scatter.color = sec2_levels\n", "color_axis = [a for a in fig.axes if type(a.scale) == ColorScale][0]\n", - "color_axis.tick_format = '0.0f'\n", - "color_axis.label = 'Security 2'" + "color_axis.tick_format = \"0.0f\"\n", + "color_axis.label = \"Security 2\"" ] }, { @@ -207,7 +216,7 @@ "outputs": [], "source": [ "## Changing the range of the color scale\n", - "color_axis.scale.colors = ['blue', 'green', 'orange']" + "color_axis.scale.colors = [\"blue\", \"green\", \"orange\"]" ] }, { @@ -224,15 +233,21 @@ "outputs": [], "source": [ "fig = plt.figure(fig_margin=dict(top=50, bottom=80, left=50, right=50))\n", - "plt.scales(scales={'color': DateColorScale(scheme='Reds')})\n", + "plt.scales(scales={\"color\": DateColorScale(scheme=\"Reds\")})\n", "\n", - "axes_options = {'x': dict(label='Security 2'),\n", - " 'y': dict(label='Security 1'),\n", - " 'color': dict(tick_format='0.2%', label='Date', num_ticks=5)\n", - " }\n", - "scatter = plt.scatter(sec2_levels, sec1_levels, color=dates_all, \n", - " default_size=128, stroke='black',\n", - " axes_options=axes_options)\n", + "axes_options = {\n", + " \"x\": dict(label=\"Security 2\"),\n", + " \"y\": dict(label=\"Security 1\"),\n", + " \"color\": dict(tick_format=\"0.2%\", label=\"Date\", num_ticks=5),\n", + "}\n", + "scatter = plt.scatter(\n", + " sec2_levels,\n", + " sec1_levels,\n", + " color=dates_all,\n", + " default_size=128,\n", + " stroke=\"black\",\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -257,17 +272,26 @@ "ordinal_data = np.tile(ordinal_data, factor)\n", "\n", "fig = plt.figure(fig_margin=dict(top=50, bottom=70, left=100, right=100))\n", - "plt.scales(scales={'color': OrdinalColorScale(colors=['DodgerBlue', 'SeaGreen', 'Yellow', 'HotPink', 'OrangeRed'])})\n", + "plt.scales(\n", + " scales={\n", + " \"color\": OrdinalColorScale(\n", + " colors=[\"DodgerBlue\", \"SeaGreen\", \"Yellow\", \"HotPink\", \"OrangeRed\"]\n", + " )\n", + " }\n", + ")\n", "\n", - "axes_options = {'x': dict(label='Security 2', label_location='end'),\n", - " 'y': dict(label='Security 1 Returns', tick_format='.0%'),\n", - " 'color': dict(label='Class', side='right')\n", - " }\n", - "scatter2 = plt.scatter(sec2_levels[1:],\n", - " sec1_returns,\n", - " color=ordinal_data,\n", - " stroke='black',\n", - " axes_options=axes_options)\n", + "axes_options = {\n", + " \"x\": dict(label=\"Security 2\", label_location=\"end\"),\n", + " \"y\": dict(label=\"Security 1 Returns\", tick_format=\".0%\"),\n", + " \"color\": dict(label=\"Class\", side=\"right\"),\n", + "}\n", + "scatter2 = plt.scatter(\n", + " sec2_levels[1:],\n", + " sec1_returns,\n", + " color=ordinal_data,\n", + " stroke=\"black\",\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -278,8 +302,8 @@ "outputs": [], "source": [ "color_axis = [a for a in fig.axes if isinstance(a.scale, ColorScale)][0]\n", - "color_axis.tick_format = '0.2f'\n", - "color_axis.scale.colors = ['blue', 'red', 'green', 'yellow', 'orange']" + "color_axis.tick_format = \"0.2f\"\n", + "color_axis.scale.colors = [\"blue\", \"red\", \"green\", \"yellow\", \"orange\"]" ] }, { @@ -298,13 +322,19 @@ "outputs": [], "source": [ "fig = plt.figure()\n", - "plt.scales(scales={'opacity': LinearScale(), 'size': LinearScale()})\n", - "axes_options = {'x': {'label': 'Security 2'}, 'y': {'label': 'Security 1'}}\n", + "plt.scales(scales={\"opacity\": LinearScale(), \"size\": LinearScale()})\n", + "axes_options = {\"x\": {\"label\": \"Security 2\"}, \"y\": {\"label\": \"Security 1\"}}\n", "\n", - "scatter2 = plt.scatter(sec2_levels[1:], sec1_levels, opacity=[], \n", - " size=sec1_returns,\n", - " default_size=128, colors=['orangered'], \n", - " stroke='black', axes_options=axes_options)\n", + "scatter2 = plt.scatter(\n", + " sec2_levels[1:],\n", + " sec1_levels,\n", + " opacity=[],\n", + " size=sec1_returns,\n", + " default_size=128,\n", + " colors=[\"orangered\"],\n", + " stroke=\"black\",\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -325,7 +355,7 @@ "outputs": [], "source": [ "## Resetting the size for the scatter\n", - "scatter2.size=None" + "scatter2.size = None" ] }, { @@ -361,13 +391,19 @@ "outputs": [], "source": [ "fig = plt.figure(animation_duration=1000)\n", - "plt.scales(scales={'skew': LinearScale()})\n", - "axes_options = {'x': {'label': 'Security 2'}, 'y': {'label': 'Security 1'}}\n", - "scatter = plt.scatter(sec2_levels[1:], sec1_levels,\n", - " skew=sec1_returns, stroke=\"black\",\n", - " colors=['gold'], default_size=200, \n", - " marker='rectangle', default_skew=0,\n", - " axes_options=axes_options)\n", + "plt.scales(scales={\"skew\": LinearScale()})\n", + "axes_options = {\"x\": {\"label\": \"Security 2\"}, \"y\": {\"label\": \"Security 1\"}}\n", + "scatter = plt.scatter(\n", + " sec2_levels[1:],\n", + " sec1_levels,\n", + " skew=sec1_returns,\n", + " stroke=\"black\",\n", + " colors=[\"gold\"],\n", + " default_size=200,\n", + " marker=\"rectangle\",\n", + " default_skew=0,\n", + " axes_options=axes_options,\n", + ")\n", "fig" ] }, @@ -404,16 +440,23 @@ "source": [ "x1 = np.linspace(-1, 1, 30)\n", "y1 = np.linspace(-1, 1, 30)\n", - "x, y = np.meshgrid(x1,y1)\n", + "x, y = np.meshgrid(x1, y1)\n", "x, y = x.flatten(), y.flatten()\n", - "rot = x**2 + y**2\n", + "rot = x ** 2 + y ** 2\n", "color = x - y\n", "\n", "fig = plt.figure(animation_duration=1000)\n", - "plt.scales(scales={'color': ColorScale(scheme='Reds'), 'rotation': LinearScale()})\n", - "scatter = plt.scatter(x, y, rotation=rot, color=color,\n", - " stroke=\"black\", default_size=200, \n", - " marker='arrow', default_skew=0.5,)\n", + "plt.scales(scales={\"color\": ColorScale(scheme=\"Reds\"), \"rotation\": LinearScale()})\n", + "scatter = plt.scatter(\n", + " x,\n", + " y,\n", + " rotation=rot,\n", + " color=color,\n", + " stroke=\"black\",\n", + " default_size=200,\n", + " marker=\"arrow\",\n", + " default_skew=0.5,\n", + ")\n", "fig" ] }, @@ -446,22 +489,24 @@ "metadata": {}, "outputs": [], "source": [ - "## Enabling moving of points in scatter. Try to click and drag any of the points in the scatter and \n", + "## Enabling moving of points in scatter. Try to click and drag any of the points in the scatter and\n", "## notice the line representing the mean of the data update\n", "fig = plt.figure()\n", - "scat = plt.scatter(x_data[:10], y_data[:10], colors=['orange'], enable_move=True)\n", - "lin = plt.plot([], [], line_style='dotted', colors=['orange'])\n", + "scat = plt.scatter(x_data[:10], y_data[:10], colors=[\"orange\"], enable_move=True)\n", + "lin = plt.plot([], [], line_style=\"dotted\", colors=[\"orange\"])\n", + "\n", "\n", "def update_line(change=None):\n", " with lin.hold_sync():\n", " lin.x = [np.min(scat.x), np.max(scat.x)]\n", " lin.y = [np.mean(scat.y), np.mean(scat.y)]\n", "\n", + "\n", "update_line()\n", "\n", "# update line on change of x or y of scatter\n", - "scat.observe(update_line, names=['x'])\n", - "scat.observe(update_line, names=['y'])\n", + "scat.observe(update_line, names=[\"x\"])\n", + "scat.observe(update_line, names=[\"y\"])\n", "\n", "fig" ] @@ -474,9 +519,11 @@ "source": [ "latex_widget = ipywidgets.Label()\n", "\n", + "\n", "def callback_help(name, value):\n", " latex_widget.value = str(value)\n", - " \n", + "\n", + "\n", "latex_widget" ] }, @@ -533,7 +580,7 @@ "## Enabling adding the points to Scatter. Try clicking anywhere on the scatter to add points\n", "with scat.hold_sync():\n", " scat.enable_move = False\n", - " scat.interactions = {'click': 'add'}" + " scat.interactions = {\"click\": \"add\"}" ] }, { @@ -553,7 +600,7 @@ "with scat.hold_sync():\n", " scat.enable_move = True\n", " scat.update_on_move = True\n", - " scat.interactions = {'click': None}" + " scat.interactions = {\"click\": None}" ] }, { @@ -574,6 +621,7 @@ "def test_func(self, content):\n", " print(\"received drag end\", content)\n", "\n", + "\n", "scat.on_drag_end(test_func)" ] }, @@ -596,10 +644,15 @@ "y_data = y_data[:50]\n", "\n", "fig = plt.figure()\n", - "def_tt = Tooltip(fields=['x', 'y'], formats=['', '.2f'])\n", - "scatter_chart = plt.scatter(x_data, y_data, colors=['dodgerblue'],\n", - " tooltip=def_tt, stroke='black',\n", - " unhovered_style={'opacity': 0.5})\n", + "def_tt = Tooltip(fields=[\"x\", \"y\"], formats=[\"\", \".2f\"])\n", + "scatter_chart = plt.scatter(\n", + " x_data,\n", + " y_data,\n", + " colors=[\"dodgerblue\"],\n", + " tooltip=def_tt,\n", + " stroke=\"black\",\n", + " unhovered_style={\"opacity\": 0.5},\n", + ")\n", "fig" ] }, @@ -620,7 +673,7 @@ "outputs": [], "source": [ "## changing the fields displayed in the tooltip\n", - "def_tt.fields = ['y']" + "def_tt.fields = [\"y\"]" ] } ], diff --git a/examples/Plotting Widgets/Radar.ipynb b/examples/Plotting Widgets/Radar.ipynb new file mode 100644 index 000000000..411a7940f --- /dev/null +++ b/examples/Plotting Widgets/Radar.ipynb @@ -0,0 +1,135 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "aa2c2c2a", + "metadata": {}, + "outputs": [], + "source": [ + "from bqplot import Radar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e24060e0", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "df = pd.DataFrame(np.random.rand(7, 4), columns=list(\"ABCD\"),\n", + " index=[f\"R{i+1}\" for i in range(7)])\n", + "radar = Radar(data=df, data_range=[0, 1], fill=True, num_bands=5, band_type=\"circle\", animation_duration=1000)\n", + "\n", + "# radar is a figure so we can update its title\n", + "radar.title = \"Radar\"\n", + "\n", + "# since radar is a figure (which is a DOM widget) we can directly render it\n", + "radar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb23866d", + "metadata": {}, + "outputs": [], + "source": [ + "#update data\n", + "radar.data = pd.DataFrame(np.random.rand(10, 5), columns=list(\"ABCDE\"),\n", + " index=[f\"R{i+1}\" for i in range(10)])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e27b684", + "metadata": {}, + "outputs": [], + "source": [ + "# change radar type\n", + "radar.band_type = \"polygon\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9ad12e64", + "metadata": {}, + "outputs": [], + "source": [ + "# no fill\n", + "radar.fill = False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a460a607", + "metadata": {}, + "outputs": [], + "source": [ + "# set number of bands to 8\n", + "radar.num_bands = 8" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27719f18", + "metadata": {}, + "outputs": [], + "source": [ + "# since radar is a figure composed of primitive marks we can directly change the internals\n", + "# update loop colors\n", + "radar.loops.colors = [\"red\", \"magenta\", \"green\", \"orange\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f35dff18", + "metadata": {}, + "outputs": [], + "source": [ + "# remove the band labels\n", + "radar.band_labels.text = []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "42d98577", + "metadata": {}, + "outputs": [], + "source": [ + "# remove the spoke labels\n", + "radar.spoke_labels.text = []" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/Scales/Color Scales.ipynb b/examples/Scales/Color Scales.ipynb index 5f64f0eac..80029f9fa 100644 --- a/examples/Scales/Color Scales.ipynb +++ b/examples/Scales/Color Scales.ipynb @@ -38,7 +38,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -53,9 +52,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# setup data for plotting\n", @@ -68,32 +65,30 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def create_fig(color_scale, color_data, fig_margin=None):\n", " # allow some margin on right for color bar\n", " if fig_margin is None:\n", " fig_margin = dict(top=50, bottom=70, left=50, right=100)\n", - " fig = plt.figure(title='Up and Down', fig_margin=fig_margin)\n", - " \n", + " fig = plt.figure(title=\"Up and Down\", fig_margin=fig_margin)\n", + "\n", " # setup color scale\n", - " plt.scales(scales={'color': color_scale})\n", - " \n", + " plt.scales(scales={\"color\": color_scale})\n", + "\n", " # show color bar on right\n", - " axes_options = {'color': {'orientation': 'vertical', 'side': 'right'}}\n", - " scat = plt.scatter(x_data, y_data, color=color_data, stroke='black', axes_options=axes_options)\n", + " axes_options = {\"color\": {\"orientation\": \"vertical\", \"side\": \"right\"}}\n", + " scat = plt.scatter(\n", + " x_data, y_data, color=color_data, stroke=\"black\", axes_options=axes_options\n", + " )\n", " return fig" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "fig = create_fig(ColorScale(), y_data)\n", @@ -117,13 +112,12 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ - "color_scale = fig.marks[0].scales['color']\n", + "color_scale = fig.marks[0].scales[\"color\"]\n", "color_scale.min = 0" ] }, @@ -131,7 +125,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -155,7 +148,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -181,7 +173,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, @@ -191,7 +182,7 @@ "\n", "fig_margin = dict(top=50, bottom=70, left=50, right=200)\n", "date_col_sc = DateColorScale()\n", - "dates = pd.date_range(start='2015-01-01', periods=n)\n", + "dates = pd.date_range(start=\"2015-01-01\", periods=n)\n", "create_fig(date_col_sc, dates, fig_margin=fig_margin)" ] }, @@ -199,7 +190,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -224,7 +214,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -251,22 +240,21 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "div_schemes = [\n", - " 'Spectral',\n", - " 'RdYlGn',\n", - " 'RdBu',\n", - " 'PiYG',\n", - " 'PRGn',\n", - " 'RdYlBu',\n", - " 'BrBG',\n", - " 'RdGy',\n", - " 'PuOr',\n", + " \"Spectral\",\n", + " \"RdYlGn\",\n", + " \"RdBu\",\n", + " \"PiYG\",\n", + " \"PRGn\",\n", + " \"RdYlBu\",\n", + " \"BrBG\",\n", + " \"RdGy\",\n", + " \"PuOr\",\n", "]" ] }, @@ -274,32 +262,31 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ - "def scheme_inspector(fig, schemes, title=''):\n", - " '''\n", + "def scheme_inspector(fig, schemes, title=\"\"):\n", + " \"\"\"\n", " Takes a Figure and a list of schemes and returns the Figure along with\n", " dropdown to go through the different schemes\n", - " '''\n", - " \n", + " \"\"\"\n", + "\n", " # Get the color scale\n", - " col_sc = fig.marks[0].scales['color']\n", - " \n", + " col_sc = fig.marks[0].scales[\"color\"]\n", + "\n", " # Create the widgets to select the colorscheme\n", - " scheme_dd = Dropdown(description='Scheme',\n", - " options=schemes)\n", - " \n", + " scheme_dd = Dropdown(description=\"Scheme\", options=schemes)\n", + "\n", " def update_scheme(*args):\n", " col_sc.scheme = scheme_dd.value\n", "\n", - " scheme_dd.observe(update_scheme, 'value') \n", + " scheme_dd.observe(update_scheme, \"value\")\n", " update_scheme()\n", " return VBox([scheme_dd, fig])\n", "\n", + "\n", "scheme_inspector(create_fig(ColorScale(), y_data), div_schemes)" ] }, @@ -317,35 +304,34 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "lin_schemes = [\n", - " 'OrRd',\n", - " 'PuBu',\n", - " 'BuPu',\n", - " 'Oranges',\n", - " 'BuGn',\n", - " 'YlOrBr',\n", - " 'YlGn',\n", - " 'Reds',\n", - " 'RdPu',\n", - " 'Greens',\n", - " 'YlGnBu',\n", - " 'Purples',\n", - " 'GnBu',\n", - " 'Greys',\n", - " 'YlOrRd',\n", - " 'PuRd',\n", - " 'Blues',\n", - " 'PuBuGn',\n", - " 'viridis',\n", - " 'plasma',\n", - " 'inferno',\n", - " 'magma'\n", + " \"OrRd\",\n", + " \"PuBu\",\n", + " \"BuPu\",\n", + " \"Oranges\",\n", + " \"BuGn\",\n", + " \"YlOrBr\",\n", + " \"YlGn\",\n", + " \"Reds\",\n", + " \"RdPu\",\n", + " \"Greens\",\n", + " \"YlGnBu\",\n", + " \"Purples\",\n", + " \"GnBu\",\n", + " \"Greys\",\n", + " \"YlOrRd\",\n", + " \"PuRd\",\n", + " \"Blues\",\n", + " \"PuBuGn\",\n", + " \"viridis\",\n", + " \"plasma\",\n", + " \"inferno\",\n", + " \"magma\",\n", "]" ] }, @@ -353,13 +339,14 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ - "scheme_inspector(create_fig(ColorScale(), y_data), lin_schemes, title='Non-diverging schemes')" + "scheme_inspector(\n", + " create_fig(ColorScale(), y_data), lin_schemes, title=\"Non-diverging schemes\"\n", + ")" ] }, { @@ -380,21 +367,20 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "ord_schemes = {\n", - " 'Set2': 8,\n", - " 'Accent': 8,\n", - " 'Set1': 9,\n", - " 'Set3': 12,\n", - " 'Dark2': 8,\n", - " 'Paired': 12,\n", - " 'Pastel2': 8,\n", - " 'Pastel1': 9,\n", + " \"Set2\": 8,\n", + " \"Accent\": 8,\n", + " \"Set1\": 9,\n", + " \"Set3\": 12,\n", + " \"Dark2\": 8,\n", + " \"Paired\": 12,\n", + " \"Pastel2\": 8,\n", + " \"Pastel1\": 9,\n", "}" ] }, @@ -402,7 +388,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "deletable": true, "editable": true }, @@ -413,36 +398,36 @@ " if n_groups > n_elements:\n", " return np.arange(n_elements)\n", " n_per_group = n_elements // n_groups + (n_elements % n_groups > 0)\n", - " return np.tile(range(1, n_groups+1), n_per_group)[:n_elements]" + " return np.tile(range(1, n_groups + 1), n_per_group)[:n_elements]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "deletable": true, - "editable": true, - "scrolled": false + "editable": true }, "outputs": [], "source": [ "# Define the control widgets\n", - "n_groups_slider = IntSlider(description='n colors', min=3)\n", - "scheme_dd = Dropdown(description='Scheme',\n", - " options=ord_schemes)\n", - " \n", + "n_groups_slider = IntSlider(description=\"n colors\", min=3)\n", + "scheme_dd = Dropdown(description=\"Scheme\", options=ord_schemes)\n", + "\n", + "\n", "def update_scheme(*args):\n", " col_sc.scheme = scheme_dd.label\n", " ax_c.label = scheme_dd.label\n", " n_groups_slider.max = scheme_dd.value\n", "\n", + "\n", "def update_categories(*args):\n", " groups = partition(names, n_groups_slider.value)\n", " market_map.color = groups\n", " market_map.groups = groups\n", "\n", - "n_groups_slider.observe(update_categories, 'value')\n", + "\n", + "n_groups_slider.observe(update_categories, \"value\")\n", "scheme_dd.observe(update_scheme)\n", "\n", "# Define the bqplot marketmap\n", @@ -451,10 +436,13 @@ "col_sc = OrdinalColorScale()\n", "ax_c = ColorAxis(scale=col_sc)\n", "\n", - "market_map = MarketMap(names=names,\n", - " display_text=['' for _ in names],\n", - " scales={'color': col_sc}, axes=[ax_c],\n", - " layout=Layout(min_width='800px', min_height='600px'))\n", + "market_map = MarketMap(\n", + " names=names,\n", + " display_text=[\"\" for _ in names],\n", + " scales={\"color\": col_sc},\n", + " axes=[ax_c],\n", + " layout=Layout(min_width=\"800px\", min_height=\"600px\"),\n", + ")\n", "update_scheme()\n", "update_categories()\n", "\n", diff --git a/examples/Tutorials.ipynb b/examples/Tutorials.ipynb index 52aa82c44..1cda9624a 100644 --- a/examples/Tutorials.ipynb +++ b/examples/Tutorials.ipynb @@ -17,7 +17,7 @@ "\n", "## Interactive Plotting\n", "* [Updating plots](Tutorials/Updating%20Plots.ipynb)\n", - "* ### Integrating with `ipywidgets` \n", + "* ### Integrating with `ipywidgets`\n", " * [Linking with ipywidgets](Tutorials/Linking%20Plots%20With%20Widgets.ipynb)\n", " * [Application: Gaussian Density](Tutorials/Gaussian%20Density.ipynb)\n", "\n", diff --git a/examples/Tutorials/Brush Interval Selector.ipynb b/examples/Tutorials/Brush Interval Selector.ipynb index 9609780e7..ccb2fd426 100644 --- a/examples/Tutorials/Brush Interval Selector.ipynb +++ b/examples/Tutorials/Brush Interval Selector.ipynb @@ -54,15 +54,15 @@ "source": [ "from bqplot.interacts import BrushIntervalSelector\n", "\n", - "y1, y2 = np.random.randn(2, 200).cumsum(axis=1) # two simple random walks\n", + "y1, y2 = np.random.randn(2, 200).cumsum(axis=1) # two simple random walks\n", "\n", - "fig_layout = Layout(width='900px', height='500px')\n", + "fig_layout = Layout(width=\"900px\", height=\"500px\")\n", "time_series_fig = plt.figure(layout=fig_layout)\n", "line = plt.plot([y1, y2])\n", "\n", "# create a fast interval selector by passing in the X scale and the line mark on which the selector operates\n", - "intsel = BrushIntervalSelector(marks=[line], scale=line.scales['x'])\n", - "time_series_fig.interaction = intsel # set the interval selector on the figure" + "intsel = BrushIntervalSelector(marks=[line], scale=line.scales[\"x\"])\n", + "time_series_fig.interaction = intsel # set the interval selector on the figure" ] }, { @@ -78,11 +78,13 @@ "metadata": {}, "outputs": [], "source": [ - "scat_fig = plt.figure(layout=fig_layout, \n", - " animation_duration=750,\n", - " title='Scatter of time series slice selected by the interval selector')\n", + "scat_fig = plt.figure(\n", + " layout=fig_layout,\n", + " animation_duration=750,\n", + " title=\"Scatter of time series slice selected by the interval selector\",\n", + ")\n", "# set the x and y attributes to the y values of line.y\n", - "scat = plt.scatter(*line.y, colors=['red'], stroke='black') " + "scat = plt.scatter(*line.y, colors=[\"red\"], stroke=\"black\")" ] }, { @@ -94,7 +96,7 @@ "# define a callback for the interval selector\n", "def update_scatter(*args):\n", " brushing = intsel.brushing\n", - " \n", + "\n", " # update scatter *only* when the interval selector\n", " # is not brushing to prevent continuous updates\n", " if not brushing:\n", @@ -104,13 +106,14 @@ " start_ix, end_ix = line.selected[0], line.selected[-1]\n", " else: # interval selector is *not* active\n", " start_ix, end_ix = 0, -1\n", - " \n", - " #update the x and y attributes of the scatter by slicing line.y\n", + "\n", + " # update the x and y attributes of the scatter by slicing line.y\n", " with scat.hold_sync():\n", " scat.x, scat.y = line.y[:, start_ix:end_ix]\n", "\n", + "\n", "# register the callback with brushing trait of interval selector\n", - "intsel.observe(update_scatter, 'brushing')" + "intsel.observe(update_scatter, \"brushing\")" ] }, { @@ -119,8 +122,10 @@ "metadata": {}, "outputs": [], "source": [ - "help_label = HTML('

\\\n", - " Brush on the time series plot to activate the interval selector
')\n", + "help_label = HTML(\n", + " '
\\\n", + " Brush on the time series plot to activate the interval selector
'\n", + ")\n", "VBox([help_label, time_series_fig, scat_fig])" ] } diff --git a/examples/Tutorials/Fast Interval Selector.ipynb b/examples/Tutorials/Fast Interval Selector.ipynb index 762121b23..066fce397 100644 --- a/examples/Tutorials/Fast Interval Selector.ipynb +++ b/examples/Tutorials/Fast Interval Selector.ipynb @@ -62,15 +62,15 @@ "source": [ "from bqplot.interacts import FastIntervalSelector\n", "\n", - "y1, y2 = np.random.randn(2, 200).cumsum(axis=1) # two simple random walks\n", + "y1, y2 = np.random.randn(2, 200).cumsum(axis=1) # two simple random walks\n", "\n", - "fig_layout = Layout(width='900px', height='500px')\n", + "fig_layout = Layout(width=\"900px\", height=\"500px\")\n", "time_series_fig = plt.figure(layout=fig_layout)\n", "line = plt.plot([y1, y2])\n", "\n", "# create a fast interval selector by passing in the X scale and the line mark on which the selector operates\n", - "intsel = FastIntervalSelector(marks=[line], scale=line.scales['x'])\n", - "time_series_fig.interaction = intsel # set the interval selector on the figure" + "intsel = FastIntervalSelector(marks=[line], scale=line.scales[\"x\"])\n", + "time_series_fig.interaction = intsel # set the interval selector on the figure" ] }, { @@ -86,9 +86,12 @@ "metadata": {}, "outputs": [], "source": [ - "scat_fig = plt.figure(layout=fig_layout, title='Scatter of time series slice selected by the interval selector')\n", + "scat_fig = plt.figure(\n", + " layout=fig_layout,\n", + " title=\"Scatter of time series slice selected by the interval selector\",\n", + ")\n", "# set the x and y attributes to the y values of line.y\n", - "scat = plt.scatter(*line.y, colors=['red'], stroke='black') " + "scat = plt.scatter(*line.y, colors=[\"red\"], stroke=\"black\")" ] }, { @@ -101,13 +104,14 @@ "def update_scatter(*args):\n", " # get the start and end indices of the interval\n", " start_ix, end_ix = line.selected[0], line.selected[-1]\n", - " \n", - " #update the x and y attributes of the scatter by slicing line.y\n", + "\n", + " # update the x and y attributes of the scatter by slicing line.y\n", " with scat.hold_sync():\n", " scat.x, scat.y = line.y[:, start_ix:end_ix]\n", "\n", + "\n", "# register the callback with line.selected trait\n", - "line.observe(update_scatter, 'selected')" + "line.observe(update_scatter, \"selected\")" ] }, { @@ -116,8 +120,10 @@ "metadata": {}, "outputs": [], "source": [ - "help_label = HTML('
\\\n", - " Click on the time series plot to activate the interval selector
')\n", + "help_label = HTML(\n", + " '
\\\n", + " Click on the time series plot to activate the interval selector
'\n", + ")\n", "VBox([help_label, time_series_fig, scat_fig])" ] } diff --git a/examples/Tutorials/Gaussian Density Widget.ipynb b/examples/Tutorials/Gaussian Density Widget.ipynb index 8e6f6f005..fa7f79ba3 100644 --- a/examples/Tutorials/Gaussian Density Widget.ipynb +++ b/examples/Tutorials/Gaussian Density Widget.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In this tutorial we'll learn how to build a compound widget of the [Gaussian Density](Gaussian%20Density.ipynb) example. \n", + "In this tutorial we'll learn how to build a compound widget of the [Gaussian Density](Gaussian%20Density.ipynb) example.\n", "\n", "Steps to build a compound widget:\n", "1. Create a class and extend it from DOMWidget or its subclasses. (If you are building a dashboard for example using HBox, VBox etc. then it makes sense to extend the class from Box, HBox or VBox as needed)\n", "2. Inside the class constructor call the super class constructor passing in the widgets as children\n", "3. Register any widget callbacks inside the constructor and define callbacks as class methods\n", "\n", - "Once the compound widget is defined in a class, it can be put in a library and used along with other interactive widgets! Compound widgets are an excellent way of building re-usable components (**using just python code**) which can be seamlessly integrated with `ipywidgets`, `bqplot` and other interactive widgets." + "Once the compound widget is defined in a class, it can be put in a library and used along with other interactive widgets! Compound widgets are an excellent way of building reusable components (**using just python code**) which can be seamlessly integrated with `ipywidgets`, `bqplot` and other interactive widgets." ] }, { @@ -35,28 +35,34 @@ "source": [ "# extend the class from layout class VBox\n", "class GaussianDensity(widgets.VBox):\n", - " def __init__(self, *args, **kwargs): \n", + " def __init__(self, *args, **kwargs):\n", " x = np.linspace(-10, 10, 200)\n", " y = norm.pdf(x)\n", "\n", " # gaussian density figure\n", - " self.title_tmpl = 'Gaussian Density (mu = {} and sigma = {})'\n", - " self.pdf_fig = plt.figure(title=self.title_tmpl.format(0, 1), \n", - " layout=widgets.Layout(width='800px', height='600px'))\n", - " self.pdf_line = plt.plot(x, y, 'm', stroke_width=3)\n", - " \n", - " # sliders for mu and sigma \n", - " self.mu_slider = widgets.FloatSlider(description='$\\mu$', value=0, min=-5, max=5, step=.1)\n", - " self.sigma_slider = widgets.FloatSlider(description='$\\sigma$', value=1, min=0.1, max=5, step=.1)\n", + " self.title_tmpl = \"Gaussian Density (mu = {} and sigma = {})\"\n", + " self.pdf_fig = plt.figure(\n", + " title=self.title_tmpl.format(0, 1),\n", + " layout=widgets.Layout(width=\"800px\", height=\"600px\"),\n", + " )\n", + " self.pdf_line = plt.plot(x, y, \"m\", stroke_width=3)\n", + "\n", + " # sliders for mu and sigma\n", + " self.mu_slider = widgets.FloatSlider(\n", + " description=\"$\\mu$\", value=0, min=-5, max=5, step=0.1\n", + " )\n", + " self.sigma_slider = widgets.FloatSlider(\n", + " description=\"$\\sigma$\", value=1, min=0.1, max=5, step=0.1\n", + " )\n", " slider_layout = widgets.HBox([self.mu_slider, self.sigma_slider])\n", - " \n", + "\n", " # register callback with the 'value' trait of the sliders\n", " for slider in [self.mu_slider, self.sigma_slider]:\n", - " slider.observe(self.update_density, 'value')\n", - " \n", + " slider.observe(self.update_density, \"value\")\n", + "\n", " # call super construction by passing in the widgets as children\n", " super(GaussianDensity, self).__init__(children=[self.pdf_fig, slider_layout])\n", - " \n", + "\n", " def update_density(self, change):\n", " new_mu = self.mu_slider.value\n", " new_sigma = self.sigma_slider.value\n", diff --git a/examples/Tutorials/Gaussian Density.ipynb b/examples/Tutorials/Gaussian Density.ipynb index 4f8802b48..0cc649dd8 100644 --- a/examples/Tutorials/Gaussian Density.ipynb +++ b/examples/Tutorials/Gaussian Density.ipynb @@ -34,9 +34,9 @@ "y = norm.pdf(x)\n", "\n", "# plot the gaussian density\n", - "title_tmpl = 'Gaussian Density (mu = {} and sigma = {})'\n", + "title_tmpl = \"Gaussian Density (mu = {} and sigma = {})\"\n", "pdf_fig = plt.figure(title=title_tmpl.format(0, 1))\n", - "pdf_line = plt.plot(x, y, 'm', stroke_width=3)" + "pdf_line = plt.plot(x, y, \"m\", stroke_width=3)" ] }, { @@ -46,8 +46,8 @@ "outputs": [], "source": [ "# use two sliders to represent mu and sigma\n", - "mu_slider = FloatSlider(description='mu', value=0, min=-5, max=5, step=.1)\n", - "sigma_slider = FloatSlider(description='sigma', value=1, min=0.1, max=5, step=.1)\n", + "mu_slider = FloatSlider(description=\"mu\", value=0, min=-5, max=5, step=0.1)\n", + "sigma_slider = FloatSlider(description=\"sigma\", value=1, min=0.1, max=5, step=0.1)\n", "\n", "slider_layout = HBox([mu_slider, sigma_slider])" ] @@ -64,21 +64,20 @@ " # update the y attribute of the plot with the new pdf\n", " # computed using new mu and sigma values\n", " pdf_line.y = norm.pdf(x, new_mu, new_sigma)\n", - " \n", + "\n", " # also update the fig title\n", " pdf_fig.title = title_tmpl.format(new_mu, new_sigma)\n", "\n", + "\n", "# register the above callback with the 'value' trait of the sliders\n", "for slider in [mu_slider, sigma_slider]:\n", - " slider.observe(update_density, 'value')" + " slider.observe(update_density, \"value\")" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "# now put all the widgets together into a simple dashboard\n", diff --git a/examples/Tutorials/Linking Plots With Widgets.ipynb b/examples/Tutorials/Linking Plots With Widgets.ipynb index 5b72e5623..2346fc827 100644 --- a/examples/Tutorials/Linking Plots With Widgets.ipynb +++ b/examples/Tutorials/Linking Plots With Widgets.ipynb @@ -56,10 +56,10 @@ "metadata": {}, "outputs": [], "source": [ - "y = np.random.randn(100).cumsum() # simple random walk\n", + "y = np.random.randn(100).cumsum() # simple random walk\n", "\n", "# create a button\n", - "update_btn = widgets.Button(description='Update', button_style='success')\n", + "update_btn = widgets.Button(description=\"Update\", button_style=\"success\")\n", "\n", "# create a figure widget\n", "fig1 = plt.figure(animation_duration=750)\n", @@ -68,11 +68,12 @@ "# define an on_click function\n", "def on_btn_click(btn):\n", " # update the y attribute of line mark\n", - " line.y = np.random.randn(100).cumsum() # another random walk\n", + " line.y = np.random.randn(100).cumsum() # another random walk\n", + "\n", "\n", "# register the on_click function\n", "update_btn.on_click(on_btn_click)\n", - " \n", + "\n", "# stack button and figure using VBox\n", "widgets.VBox([fig1, update_btn])" ] @@ -93,9 +94,9 @@ "import pandas as pd\n", "\n", "# create a dummy time series for 5 dummy stock tickers\n", - "dates = pd.date_range(start='20180101', end='20181231')\n", + "dates = pd.date_range(start=\"20180101\", end=\"20181231\")\n", "n = len(dates)\n", - "tickers = list('ABCDE')\n", + "tickers = list(\"ABCDE\")\n", "prices = pd.DataFrame(np.random.randn(n, 5).cumsum(axis=0), columns=tickers)" ] }, @@ -106,30 +107,31 @@ "outputs": [], "source": [ "# create a dropdown menu for tickers\n", - "dropdown = widgets.Dropdown(description='Ticker', options=tickers)\n", + "dropdown = widgets.Dropdown(description=\"Ticker\", options=tickers)\n", "\n", "# create figure for plotting time series\n", "current_ticker = dropdown.value\n", - "fig_title_tmpl = '\"{}\" Time Series' # string template for title of the figure \n", + "fig_title_tmpl = '\"{}\" Time Series' # string template for title of the figure\n", "fig2 = plt.figure(title=fig_title_tmpl.format(current_ticker))\n", - "fig2.layout.width = '900px'\n", + "fig2.layout.width = \"900px\"\n", "time_series = plt.plot(dates, prices[current_ticker])\n", - "plt.xlabel('Date')\n", - "plt.ylabel('Price')\n", + "plt.xlabel(\"Date\")\n", + "plt.ylabel(\"Price\")\n", "\n", "# 1. create a callback which updates the plot when dropdown item is selected\n", "def update_plot(*args):\n", " selected_ticker = dropdown.value\n", - " \n", - " # update the y attribute of the mark by selecting \n", + "\n", + " # update the y attribute of the mark by selecting\n", " # the column from the price data frame\n", " time_series.y = prices[selected_ticker]\n", - " \n", + "\n", " # update the title of the figure\n", " fig2.title = fig_title_tmpl.format(selected_ticker)\n", "\n", + "\n", "# 2. register the callback by using the 'observe' method\n", - "dropdown.observe(update_plot, 'value')\n", + "dropdown.observe(update_plot, \"value\")\n", "\n", "# stack the dropdown and fig widgets using VBox\n", "widgets.VBox([dropdown, fig2])" @@ -149,8 +151,8 @@ "outputs": [], "source": [ "# create two dropdown menus for X and Y attributes of scatter\n", - "x_dropdown = widgets.Dropdown(description='X', options=tickers, value='A')\n", - "y_dropdown = widgets.Dropdown(description='Y', options=tickers, value='B')\n", + "x_dropdown = widgets.Dropdown(description=\"X\", options=tickers, value=\"A\")\n", + "y_dropdown = widgets.Dropdown(description=\"Y\", options=tickers, value=\"B\")\n", "\n", "# create figure for plotting the scatter\n", "x_ticker = x_dropdown.value\n", @@ -161,16 +163,16 @@ "fig3 = plt.figure(animation_duration=1000, fig_margin=fig_margin)\n", "\n", "# custom axis options for color data\n", - "axes_options = {'color': {'tick_format': '%m/%y', \n", - " 'side': 'right',\n", - " 'num_ticks': 5}}\n", - "scatter = plt.scatter(x=prices[x_ticker], \n", - " y=prices[y_ticker],\n", - " color=dates, # represent chronology using color scale\n", - " stroke='black',\n", - " colors=['red'],\n", - " default_size=32,\n", - " axes_options=axes_options)\n", + "axes_options = {\"color\": {\"tick_format\": \"%m/%y\", \"side\": \"right\", \"num_ticks\": 5}}\n", + "scatter = plt.scatter(\n", + " x=prices[x_ticker],\n", + " y=prices[y_ticker],\n", + " color=dates, # represent chronology using color scale\n", + " stroke=\"black\",\n", + " colors=[\"red\"],\n", + " default_size=32,\n", + " axes_options=axes_options,\n", + ")\n", "plt.xlabel(x_ticker)\n", "plt.ylabel(y_ticker)\n", "\n", @@ -178,20 +180,21 @@ "def update_scatter(*args):\n", " x_ticker = x_dropdown.value\n", " y_ticker = y_dropdown.value\n", - " \n", + "\n", " # update the x and y attributes of the mark by selecting\n", " # the column from the price data frame\n", " with scatter.hold_sync():\n", " scatter.x = prices[x_ticker]\n", " scatter.y = prices[y_ticker]\n", - " \n", + "\n", " # update the title of the figure\n", " plt.xlabel(x_ticker)\n", " plt.ylabel(y_ticker)\n", "\n", + "\n", "# 2. register the callback by using the 'observe' method\n", - "x_dropdown.observe(update_scatter, 'value')\n", - "y_dropdown.observe(update_scatter, 'value')\n", + "x_dropdown.observe(update_scatter, \"value\")\n", + "y_dropdown.observe(update_scatter, \"value\")\n", "\n", "# stack the dropdown and fig widgets using VBox\n", "widgets.VBox([widgets.HBox([x_dropdown, y_dropdown]), fig3])" @@ -211,22 +214,24 @@ "outputs": [], "source": [ "funcs = dict(sin=np.sin, cos=np.cos, tan=np.tan, sinh=np.sinh, tanh=np.tanh)\n", - "dropdown = widgets.Dropdown(options=funcs, description='Function')\n", + "dropdown = widgets.Dropdown(options=funcs, description=\"Function\")\n", "\n", - "fig = plt.figure(title='sin(x)', animation_duration=1000)\n", + "fig = plt.figure(title=\"sin(x)\", animation_duration=1000)\n", "\n", "# create x and y data attributes for the line chart\n", - "x = np.arange(-10, 10, .1)\n", + "x = np.arange(-10, 10, 0.1)\n", "y = np.sin(x)\n", "\n", - "line = plt.plot(x, y ,'m')\n", + "line = plt.plot(x, y, \"m\")\n", + "\n", "\n", "def update_line(*args):\n", " f = dropdown.value\n", - " fig.title = f'{f.__name__}(x)'\n", + " fig.title = f\"{f.__name__}(x)\"\n", " line.y = f(line.x)\n", - " \n", - "dropdown.observe(update_line, 'value')\n", + "\n", + "\n", + "dropdown.observe(update_line, \"value\")\n", "\n", "widgets.VBox([dropdown, fig])" ] diff --git a/examples/Tutorials/Object Model.ipynb b/examples/Tutorials/Object Model.ipynb index fd74073bb..93ab89328 100644 --- a/examples/Tutorials/Object Model.ipynb +++ b/examples/Tutorials/Object Model.ipynb @@ -29,8 +29,16 @@ "metadata": {}, "outputs": [], "source": [ - "from bqplot import (LinearScale, Axis, Figure, OrdinalScale, \n", - " LinearScale, Bars, Lines, Scatter)" + "from bqplot import (\n", + " LinearScale,\n", + " Axis,\n", + " Figure,\n", + " OrdinalScale,\n", + " LinearScale,\n", + " Bars,\n", + " Lines,\n", + " Scatter,\n", + ")" ] }, { @@ -41,6 +49,7 @@ "source": [ "# first, let's create two vectors x and y to plot using a Lines mark\n", "import numpy as np\n", + "\n", "x = np.linspace(-10, 10, 100)\n", "y = np.sin(x)\n", "\n", @@ -49,15 +58,15 @@ "ys = LinearScale()\n", "\n", "# 2. Create the axes for x and y\n", - "xax = Axis(scale=xs, label='X')\n", - "yax = Axis(scale=ys, orientation='vertical', label='Y')\n", + "xax = Axis(scale=xs, label=\"X\")\n", + "yax = Axis(scale=ys, orientation=\"vertical\", label=\"Y\")\n", "\n", "# 3. Create a Lines mark by passing in the scales\n", "# note that Lines object is stored in `line` which can be used later to update the plot\n", - "line = Lines(x=x, y=y, scales={'x': xs, 'y': ys})\n", + "line = Lines(x=x, y=y, scales={\"x\": xs, \"y\": ys})\n", "\n", "# 4. Create a Figure object by assembling marks and axes\n", - "fig = Figure(marks=[line], axes=[xax, yax], title='Simple Line Chart')\n", + "fig = Figure(marks=[line], axes=[xax, yax], title=\"Simple Line Chart\")\n", "\n", "# 5. Render the figure using display or just as is\n", "fig" @@ -77,23 +86,25 @@ "outputs": [], "source": [ "# first, let's create two vectors x and y to plot a bar chart\n", - "x = list('ABCDE')\n", + "x = list(\"ABCDE\")\n", "y = np.random.rand(5)\n", "\n", "# 1. Create the scales\n", - "xs = OrdinalScale() # note the use of ordinal scale to represent categorical data\n", + "xs = OrdinalScale() # note the use of ordinal scale to represent categorical data\n", "ys = LinearScale()\n", "\n", "# 2. Create the axes for x and y\n", - "xax = Axis(scale=xs, label='X', grid_lines='none') # no grid lines needed for x\n", - "yax = Axis(scale=ys, orientation='vertical', label='Y', tick_format='.0%') # note the use of tick_format to format ticks\n", + "xax = Axis(scale=xs, label=\"X\", grid_lines=\"none\") # no grid lines needed for x\n", + "yax = Axis(\n", + " scale=ys, orientation=\"vertical\", label=\"Y\", tick_format=\".0%\"\n", + ") # note the use of tick_format to format ticks\n", "\n", "# 3. Create a Bars mark by passing in the scales\n", "# note that Bars object is stored in `bar` object which can be used later to update the plot\n", - "bar = Bars(x=x, y=y, scales={'x': xs, 'y': ys}, padding=.2)\n", + "bar = Bars(x=x, y=y, scales={\"x\": xs, \"y\": ys}, padding=0.2)\n", "\n", "# 4. Create a Figure object by assembling marks and axes\n", - "Figure(marks=[bar], axes=[xax, yax], title='Simple Bar Chart')" + "Figure(marks=[bar], axes=[xax, yax], title=\"Simple Bar Chart\")" ] }, { @@ -111,26 +122,29 @@ "source": [ "# first, let's create two vectors x and y\n", "import numpy as np\n", + "\n", "x = np.linspace(-10, 10, 25)\n", "y = 3 * x + 5\n", - "y_noise = y + 10 * np.random.randn(25) # add some random noise to y\n", + "y_noise = y + 10 * np.random.randn(25) # add some random noise to y\n", "\n", "# 1. Create the scales\n", "xs = LinearScale()\n", "ys = LinearScale()\n", "\n", "# 2. Create the axes for x and y\n", - "xax = Axis(scale=xs, label='X')\n", - "yax = Axis(scale=ys, orientation='vertical', label='Y')\n", + "xax = Axis(scale=xs, label=\"X\")\n", + "yax = Axis(scale=ys, orientation=\"vertical\", label=\"Y\")\n", "\n", "# 3. Create a Lines and Scatter marks by passing in the scales\n", "# additional attributes (stroke_width, colors etc.) can be passed as attributes to the mark objects as needed\n", - "line = Lines(x=x, y=y, scales={'x': xs, 'y': ys}, colors=['green'], stroke_width=3)\n", - "scatter = Scatter(x=x, y=y_noise, scales={'x': xs, 'y': ys}, colors=['red'], stroke='black')\n", + "line = Lines(x=x, y=y, scales={\"x\": xs, \"y\": ys}, colors=[\"green\"], stroke_width=3)\n", + "scatter = Scatter(\n", + " x=x, y=y_noise, scales={\"x\": xs, \"y\": ys}, colors=[\"red\"], stroke=\"black\"\n", + ")\n", "\n", "# 4. Create a Figure object by assembling marks and axes\n", "# pass both the marks (line and scatter) as a list to the marks attribute\n", - "Figure(marks=[line, scatter], axes=[xax, yax], title='Scatter and Line')" + "Figure(marks=[line, scatter], axes=[xax, yax], title=\"Scatter and Line\")" ] }, { diff --git a/examples/Tutorials/Pyplot.ipynb b/examples/Tutorials/Pyplot.ipynb index 61ae7d900..53a80cde2 100644 --- a/examples/Tutorials/Pyplot.ipynb +++ b/examples/Tutorials/Pyplot.ipynb @@ -52,19 +52,21 @@ "source": [ "# first, let's create two vectors x and y to plot using a Lines mark\n", "import numpy as np\n", + "\n", "x = np.linspace(-10, 10, 100)\n", "y = np.sin(x)\n", "\n", "# 1. Create the figure object\n", - "fig = plt.figure(title='Simple Line Chart')\n", + "fig = plt.figure(title=\"Simple Line Chart\")\n", "\n", - "# 2. By default axes are created with basic defaults. If you want to customize the axes create \n", + "# 2. By default axes are created with basic defaults. If you want to customize the axes create\n", "# a dict and pass it to `axxes_options` argument in the marks\n", - "axes_opts = {'x': {'label': 'X'}, \n", - " 'y': {'label': 'Y'}}\n", + "axes_opts = {\"x\": {\"label\": \"X\"}, \"y\": {\"label\": \"Y\"}}\n", "\n", "# 3. Create a Lines mark by calling plt.plot function\n", - "line = plt.plot(x=x, y=y, axes_options=axes_opts) # note that custom axes options are passed here\n", + "line = plt.plot(\n", + " x=x, y=y, axes_options=axes_opts\n", + ") # note that custom axes options are passed here\n", "\n", "# 4. Render the figure using plt.show()\n", "plt.show()" @@ -84,18 +86,20 @@ "outputs": [], "source": [ "# first, let's create two vectors x and y to plot a bar chart\n", - "x = list('ABCDE')\n", + "x = list(\"ABCDE\")\n", "y = np.random.rand(5)\n", "\n", "# 1. Create the figure object\n", - "fig = plt.figure(title='Simple Bar Chart')\n", + "fig = plt.figure(title=\"Simple Bar Chart\")\n", "\n", "# 2. Customize the axes options\n", - "axes_opts = {'x': {'label': 'X', 'grid_lines': 'none'},\n", - " 'y': {'label': 'Y', 'tick_format': '.0%'}}\n", + "axes_opts = {\n", + " \"x\": {\"label\": \"X\", \"grid_lines\": \"none\"},\n", + " \"y\": {\"label\": \"Y\", \"tick_format\": \".0%\"},\n", + "}\n", "\n", "# 3. Create a Bars mark by calling plt.bar function\n", - "bar = plt.bar(x=x, y=y, padding=.2, axes_options=axes_opts)\n", + "bar = plt.bar(x=x, y=y, padding=0.2, axes_options=axes_opts)\n", "\n", "# 4. directly display the figure object created in step 1 (note that the toolbar no longer shows up)\n", "fig" @@ -116,22 +120,23 @@ "source": [ "# first, let's create two vectors x and y\n", "import numpy as np\n", + "\n", "x = np.linspace(-10, 10, 25)\n", "y = 3 * x + 5\n", - "y_noise = y + 10 * np.random.randn(25) # add some random noise to y\n", + "y_noise = y + 10 * np.random.randn(25) # add some random noise to y\n", "\n", "# 1. Create the figure object\n", - "fig = plt.figure(title='Scatter and Line')\n", + "fig = plt.figure(title=\"Scatter and Line\")\n", "\n", "# 3. Create line and scatter marks\n", "# additional attributes (stroke_width, colors etc.) can be passed as attributes to the mark objects as needed\n", - "line = plt.plot(x=x, y=y, colors=['green'], stroke_width=3)\n", - "scatter = plt.scatter(x=x, y=y_noise, colors=['red'], stroke='black')\n", + "line = plt.plot(x=x, y=y, colors=[\"green\"], stroke_width=3)\n", + "scatter = plt.scatter(x=x, y=y_noise, colors=[\"red\"], stroke=\"black\")\n", "\n", - "# setting x and y axis labels using pyplot functions. Note that these functions \n", + "# setting x and y axis labels using pyplot functions. Note that these functions\n", "# should be called only after creating the marks\n", - "plt.xlabel('X')\n", - "plt.ylabel('Y')\n", + "plt.xlabel(\"X\")\n", + "plt.ylabel(\"Y\")\n", "\n", "# 4. render the figure\n", "fig" diff --git a/examples/Tutorials/Updating Plots.ipynb b/examples/Tutorials/Updating Plots.ipynb index 75becf86b..4fa49c38e 100644 --- a/examples/Tutorials/Updating Plots.ipynb +++ b/examples/Tutorials/Updating Plots.ipynb @@ -71,7 +71,7 @@ "# update both x and y together\n", "with line.hold_sync():\n", " line.x = np.arange(100)\n", - " line.y = x ** 3 - x" + " line.y = x ** 3 - x" ] }, { diff --git a/examples/data_files/2008-election-results.csv b/examples/data_files/2008-election-results.csv deleted file mode 100644 index 4fd2599f0..000000000 --- a/examples/data_files/2008-election-results.csv +++ /dev/null @@ -1,4745 +0,0 @@ -,County,FIPS,State,Obama %,McCain %,Obama,McCain -0,"State House District 8, Denali-University",2008.0,AK,48.4,48.28,4995.0,4983.0 -0,"State House District 37, Bristol Bay-Aleuti",2037.0,AK,40.04,57.04,1868.0,2661.0 -0,"State House District 12, Richardson-Glenn H",2012.0,AK,25.22,72.04,1914.0,5467.0 -0,"State House District 13, Greater Palmer",2013.0,AK,24.29,73.16,2800.0,8432.0 -0,"State House District 14, Greater Wasilla",2014.0,AK,20.39,77.54,2132.0,8108.0 -0,"State House District 16, Chugiak-South Mat-",2016.0,AK,24.64,72.67,2636.0,7774.0 -0,"State House District 15, Rural Mat-Su",2015.0,AK,22.64,74.21,2510.0,8227.0 -0,"State House District 39, Bering Straits",2039.0,AK,51.99,44.81,2695.0,2323.0 -0,"State House District 40, Arctic",2040.0,AK,42.74,53.72,2137.0,2686.0 -0,"State House District 2, Sitka-Wrangell-Pete",2002.0,AK,44.84,52.09,3468.0,4029.0 -0,"State House District 3, Juneau-Downtown-Dou",2003.0,AK,64.53,32.27,5657.0,2829.0 -0,"State House District 4, Juneau-Mendenhall V",2004.0,AK,47.63,49.24,4161.0,4302.0 -0,"State House District 6, Interior Villages",2006.0,AK,34.45,62.05,2351.0,4234.0 -0,"State House District 17, Eagle River",2017.0,AK,28.0,70.08,2645.0,6621.0 -0,"State House District 31, Huffman-Ocean View",2031.0,AK,35.19,62.81,3596.0,6419.0 -0,"State House District 25, East Spenard",2025.0,AK,50.18,47.21,3233.0,3042.0 -0,"State House District 18, Military",2018.0,AK,31.91,66.32,2046.0,4252.0 -0,"State House District 29, Campbell-Independe",2029.0,AK,38.55,59.28,2684.0,4127.0 -0,"State House District 30, Lore-Abbott",2030.0,AK,37.96,59.89,3486.0,5500.0 -0,"State House District 24, Midtown-Taku",2024.0,AK,43.96,53.68,3380.0,4127.0 -0,"State House District 20, Mountain View-Wond",2020.0,AK,48.15,49.36,2474.0,2536.0 -0,"State House District 22, University-Airport",2022.0,AK,50.3,46.86,3337.0,3109.0 -0,"State House District 27, Sand Lake",2027.0,AK,36.83,60.71,3130.0,5159.0 -0,"State House District 21, Baxter Bog",2021.0,AK,42.04,55.76,3647.0,4837.0 -0,"State House District 23, Downtown-Rogers Pa",2023.0,AK,57.54,39.65,4075.0,2808.0 -0,"State House District 28, Bayshore-Klatt",2028.0,AK,37.19,60.79,3642.0,5953.0 -0,"State House District 32, Chugach State Park",2032.0,AK,42.06,55.8,5176.0,6867.0 -0,"State House District 19, Muldoon",2019.0,AK,41.98,55.7,3095.0,4106.0 -0,"State House District 26, Turnagain-Inlet Vi",2026.0,AK,51.43,46.43,4472.0,4037.0 -0,"State House District 36, Kodiak",2036.0,AK,33.93,62.96,2264.0,4201.0 -0,"State House District 38, Bethel",2038.0,AK,52.88,42.66,2549.0,2056.0 -0,"State House District 33, Kenai-Soldotna",2033.0,AK,23.45,73.76,2089.0,6571.0 -0,"State House District 35, Homer-Seward",2035.0,AK,44.76,52.18,4254.0,4959.0 -0,"State House District 34, Rural Kenai",2034.0,AK,20.11,77.06,1920.0,7358.0 -0,"State House District 9, City of Fairbanks",2009.0,AK,39.27,57.97,2805.0,4141.0 -0,"State House District 10, Fairbanks-Fort Wai",2010.0,AK,36.94,60.41,2074.0,3392.0 -0,"State House District 11, North Pole",2011.0,AK,19.5,78.41,1924.0,7736.0 -0,"State House District 7, Farmers Loop-Steese",2007.0,AK,39.32,57.8,4283.0,6297.0 -0,"State House District 5, Cordova-Southeast I",2005.0,AK,47.63,48.1,3393.0,3426.0 -0,"State House District 1, Ketchikan",2001.0,AK,37.26,59.53,2597.0,4149.0 -0,Lake of the Woods County,27077.0,MN,41.98,55.25,971.0,1278.0 -0,Whatcom County,53073.0,WA,58.04,40.07,58236.0,40205.0 -0,Whatcom County,53073.0,WA,58.04,40.07,58236.0,40205.0 -0,Valley County,30105.0,MT,42.06,54.23,1645.0,2121.0 -0,Flathead County,30029.0,MT,36.92,58.47,16138.0,25559.0 -0,Boundary County,16021.0,ID,31.35,65.03,1484.0,3078.0 -0,Phillips County,30071.0,MT,30.05,67.03,638.0,1423.0 -0,Rolette County,38079.0,ND,75.06,23.05,3403.0,1045.0 -0,Lincoln County,30053.0,MT,32.78,61.82,3025.0,5704.0 -0,Bottineau County,38009.0,ND,39.45,58.56,1387.0,2059.0 -0,Glacier County,30035.0,MT,68.87,29.2,3423.0,1451.0 -0,Hill County,30041.0,MT,54.29,42.07,3596.0,2787.0 -0,Blaine County,30005.0,MT,58.21,38.95,1702.0,1139.0 -0,Daniels County,30019.0,MT,31.97,64.68,343.0,694.0 -0,Pembina County,38067.0,ND,45.18,52.07,1494.0,1722.0 -0,Kittson County,27069.0,MN,58.1,39.56,1492.0,1016.0 -0,Towner County,38095.0,ND,51.88,44.78,621.0,536.0 -0,Cavalier County,38019.0,ND,43.66,52.96,930.0,1128.0 -0,Okanogan County,53047.0,WA,45.13,52.15,7613.0,8798.0 -0,Stevens County,53065.0,WA,38.04,58.78,8499.0,13132.0 -0,Pend Oreille County,53051.0,WA,39.1,56.73,2562.0,3717.0 -0,Ferry County,53019.0,WA,41.9,54.73,1467.0,1916.0 -0,Liberty County,30051.0,MT,36.66,59.34,367.0,594.0 -0,Divide County,38023.0,ND,41.03,55.7,464.0,630.0 -0,Burke County,38013.0,ND,30.33,67.87,286.0,640.0 -0,Toole County,30101.0,MT,34.75,62.09,737.0,1317.0 -0,Renville County,38075.0,ND,37.52,59.36,505.0,799.0 -0,Roseau County,27135.0,MN,40.22,57.64,3097.0,4438.0 -0,Sheridan County,30091.0,MT,47.51,49.2,953.0,987.0 -0,Bonner County,16017.0,ID,40.11,57.02,7840.0,11145.0 -0,Ward County,38101.0,ND,39.59,58.78,10144.0,15061.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Whatcom County,53073.0,WA,58.04,40.07,58236.0,40205.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Whatcom County,53073.0,WA,58.04,40.07,58236.0,40205.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Koochiching County,27071.0,MN,53.65,43.55,3649.0,2962.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Skagit County,53057.0,WA,53.78,44.17,30053.0,24687.0 -0,Whatcom County,53073.0,WA,58.04,40.07,58236.0,40205.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Williams County,38105.0,ND,31.16,67.12,2921.0,6291.0 -0,McHenry County,38049.0,ND,40.6,56.87,981.0,1374.0 -0,Saint Louis County,27137.0,MN,65.1,32.61,77351.0,38742.0 -0,Skagit County,53057.0,WA,53.78,44.17,30053.0,24687.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Skagit County,53057.0,WA,53.78,44.17,30053.0,24687.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Skagit County,53057.0,WA,53.78,44.17,30053.0,24687.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Roosevelt County,30085.0,MT,61.78,35.49,2564.0,1473.0 -0,Chelan County,53007.0,WA,43.12,55.09,13781.0,17605.0 -0,Mountrail County,38061.0,ND,50.27,47.86,1477.0,1406.0 -0,Marshall County,27089.0,MN,48.77,48.22,2311.0,2285.0 -0,Pierce County,38069.0,ND,37.03,60.82,792.0,1301.0 -0,Ramsey County,38071.0,ND,48.59,49.58,2314.0,2361.0 -0,Walsh County,38099.0,ND,47.62,49.47,2325.0,2415.0 -0,Beltrami County,27007.0,MN,54.05,43.9,12019.0,9762.0 -0,San Juan County,53055.0,WA,70.02,28.09,7374.0,2958.0 -0,Skagit County,53057.0,WA,53.78,44.17,30053.0,24687.0 -0,Pondera County,30073.0,MT,42.39,55.04,1223.0,1588.0 -0,Skagit County,53057.0,WA,53.78,44.17,30053.0,24687.0 -0,Island County,53029.0,WA,52.32,46.08,22058.0,19426.0 -0,Clallam County,53009.0,WA,50.55,47.25,19470.0,18199.0 -0,Benson County,38005.0,ND,67.22,31.41,1569.0,733.0 -0,Chouteau County,30015.0,MT,39.22,57.11,1122.0,1634.0 -0,Snohomish County,53061.0,WA,58.47,39.56,187294.0,126722.0 -0,Snohomish County,53061.0,WA,58.47,39.56,187294.0,126722.0 -0,Island County,53029.0,WA,52.32,46.08,22058.0,19426.0 -0,Sanders County,30089.0,MT,33.68,60.92,1970.0,3563.0 -0,Cook County,27031.0,MN,60.3,37.04,2019.0,1240.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Lake County,27075.0,MN,59.89,37.82,4174.0,2636.0 -0,Nelson County,38063.0,ND,51.77,45.66,907.0,800.0 -0,Grand Forks County,38035.0,ND,51.69,46.61,16104.0,14520.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Polk County,27119.0,MN,51.19,46.62,7850.0,7148.0 -0,Pennington County,27113.0,MN,49.75,47.61,3394.0,3248.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Clallam County,53009.0,WA,50.55,47.25,19470.0,18199.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Richland County,30083.0,MT,26.64,70.5,1203.0,3184.0 -0,Douglas County,53017.0,WA,38.45,59.82,5848.0,9098.0 -0,McKenzie County,38053.0,ND,34.36,64.09,933.0,1740.0 -0,Jefferson County,53031.0,WA,66.29,31.66,13252.0,6330.0 -0,Jefferson County,53031.0,WA,66.29,31.66,13252.0,6330.0 -0,Teton County,30099.0,MT,39.55,57.27,1294.0,1874.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Jefferson County,53031.0,WA,66.29,31.66,13252.0,6330.0 -0,McCone County,30055.0,MT,35.19,61.79,1607.0,2822.0 -0,Shoshone County,16079.0,ID,44.49,52.12,2521.0,2953.0 -0,Lake County,30047.0,MT,48.63,46.7,6766.0,6498.0 -0,Spokane County,53063.0,WA,48.19,49.34,105786.0,108314.0 -0,Snohomish County,53061.0,WA,58.47,39.56,187294.0,126722.0 -0,Clearwater County,27029.0,MN,44.05,53.77,1877.0,2291.0 -0,Kootenai County,16055.0,ID,35.72,61.98,22120.0,38387.0 -0,Garfield County,30033.0,MT,15.13,82.26,110.0,598.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Red Lake County,27125.0,MN,51.12,44.87,1120.0,983.0 -0,Grant County,53025.0,WA,34.99,62.52,9601.0,17153.0 -0,Lincoln County,53043.0,WA,34.0,63.63,2032.0,3803.0 -0,Lewis and Clark County,30049.0,MT,52.06,45.53,17114.0,14966.0 -0,Kitsap County,53035.0,WA,55.19,42.86,68624.0,53297.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Itasca County,27061.0,MN,55.18,42.26,13460.0,10309.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,McLean County,38055.0,ND,39.42,58.42,1867.0,2767.0 -0,Eddy County,38027.0,ND,50.04,47.04,583.0,548.0 -0,Wells County,38103.0,ND,35.38,61.76,841.0,1468.0 -0,Sheridan County,38083.0,ND,28.52,69.12,229.0,555.0 -0,Dunn County,38025.0,ND,32.06,65.69,527.0,1080.0 -0,Fergus County,30027.0,MT,31.02,65.92,1933.0,4108.0 -0,Dawson County,30021.0,MT,35.94,59.54,1593.0,2639.0 -0,King County,53033.0,WA,70.3,28.17,648230.0,259716.0 -0,Kitsap County,53035.0,WA,55.19,42.86,68624.0,53297.0 -0,Cascade County,30013.0,MT,49.92,47.63,17664.0,16857.0 -0,Steele County,38091.0,ND,59.5,39.15,614.0,404.0 -0,Griggs County,38039.0,ND,45.51,51.9,598.0,682.0 -0,Traill County,38097.0,ND,52.86,45.66,2136.0,1845.0 -0,Mason County,53045.0,WA,53.17,44.51,15050.0,12600.0 -0,Missoula County,30063.0,MT,61.84,35.11,36531.0,20743.0 -0,Powell County,30077.0,MT,36.28,59.81,1021.0,1683.0 -0,Petroleum County,30069.0,MT,22.67,75.67,68.0,227.0 -0,Kittitas County,53037.0,WA,44.94,53.01,8030.0,9471.0 -0,Foster County,38031.0,ND,41.61,55.36,687.0,914.0 -0,Mercer County,38057.0,ND,33.57,63.43,1476.0,2789.0 -0,Kitsap County,53035.0,WA,55.19,42.86,68624.0,53297.0 -0,Grays Harbor County,53027.0,WA,56.04,41.47,16354.0,12104.0 -0,King County,53033.0,WA,70.3,28.17,648230.0,259716.0 -0,Mahnomen County,27087.0,MN,61.29,35.98,1436.0,843.0 -0,Norman County,27107.0,MN,62.0,35.06,2129.0,1204.0 -0,Mineral County,30061.0,MT,42.36,52.78,845.0,1053.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Cass County,27021.0,MN,44.62,53.11,7276.0,8660.0 -0,Aroostook County,23003.0,ME,53.75,44.17,19345.0,15898.0 -0,Keweenaw County,26083.0,MI,43.26,53.62,610.0,756.0 -0,Judith Basin County,30045.0,MT,32.12,64.81,397.0,801.0 -0,Benewah County,16009.0,ID,33.79,63.54,1407.0,2646.0 -0,Hubbard County,27057.0,MN,41.86,56.35,4872.0,6558.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Wibaux County,30109.0,MT,26.02,67.56,146.0,379.0 -0,Billings County,38007.0,ND,22.85,75.15,114.0,375.0 -0,Golden Valley County,38033.0,ND,24.0,73.37,210.0,642.0 -0,Kidder County,38043.0,ND,34.36,61.24,422.0,752.0 -0,Stutsman County,38093.0,ND,41.46,56.2,4056.0,5499.0 -0,Burleigh County,38015.0,ND,37.35,60.91,15600.0,25443.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Mason County,53045.0,WA,53.17,44.51,15050.0,12600.0 -0,Oliver County,38065.0,ND,31.92,65.58,332.0,682.0 -0,Houghton County,26061.0,MI,46.81,50.72,7476.0,8101.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Adams County,53001.0,WA,31.95,66.32,1552.0,3222.0 -0,Whitman County,53075.0,WA,51.57,46.07,9070.0,8104.0 -0,Barnes County,38003.0,ND,48.14,49.63,2741.0,2826.0 -0,Cass County,38017.0,ND,52.68,45.6,37622.0,32566.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Mason County,53045.0,WA,53.17,44.51,15050.0,12600.0 -0,Houghton County,26061.0,MI,46.81,50.72,7476.0,8101.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Thurston County,53067.0,WA,59.89,38.17,75882.0,48366.0 -0,Prairie County,30079.0,MT,28.71,68.44,211.0,503.0 -0,Pierce County,53053.0,WA,55.18,42.99,181824.0,141673.0 -0,Becker County,27005.0,MN,45.31,52.17,7687.0,8851.0 -0,Clay County,27027.0,MN,56.96,40.94,16666.0,11978.0 -0,Latah County,16057.0,ID,51.91,45.09,9195.0,7988.0 -0,Yakima County,53077.0,WA,43.85,54.43,33792.0,41946.0 -0,Meagher County,30059.0,MT,30.85,64.6,298.0,624.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Aitkin County,27001.0,MN,48.83,48.77,4595.0,4589.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ontonagon County,26131.0,MI,50.6,46.92,1966.0,1823.0 -0,Stark County,38089.0,ND,34.35,63.45,3802.0,7024.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Bayfield County,55007.0,WI,63.08,35.54,5972.0,3365.0 -0,Bayfield County,55007.0,WI,63.08,35.54,5972.0,3365.0 -0,Morton County,38059.0,ND,38.29,59.33,5079.0,7869.0 -0,Bayfield County,55007.0,WI,63.08,35.54,5972.0,3365.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Grays Harbor County,53027.0,WA,56.04,41.47,16354.0,12104.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Baraga County,26013.0,MI,47.34,50.66,1725.0,1846.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Bayfield County,55007.0,WI,63.08,35.54,5972.0,3365.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Bayfield County,55007.0,WI,63.08,35.54,5972.0,3365.0 -0,Clearwater County,16035.0,ID,31.0,65.77,1211.0,2569.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Custer County,30017.0,MT,41.58,55.89,2267.0,3047.0 -0,Rosebud County,30087.0,MT,50.37,46.4,1919.0,1768.0 -0,Granite County,30039.0,MT,35.04,59.07,601.0,1013.0 -0,Wadena County,27159.0,MN,40.2,57.58,2882.0,4128.0 -0,Crow Wing County,27035.0,MN,45.1,52.8,15859.0,18567.0 -0,Pacific County,53049.0,WA,55.72,41.65,6094.0,4555.0 -0,Lewis County,53041.0,WA,39.26,58.43,13624.0,20278.0 -0,Broadwater County,30007.0,MT,31.77,65.8,365.0,756.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Saint Louis County,27137.0,MN,65.1,32.61,77351.0,38742.0 -0,Carlton County,27017.0,MN,62.34,35.5,11501.0,6549.0 -0,Gogebic County,26053.0,MI,57.56,40.3,4757.0,3330.0 -0,Musselshell County,30065.0,MT,27.58,68.56,636.0,1581.0 -0,Luce County,26095.0,MI,43.47,54.38,1191.0,1490.0 -0,Douglas County,55031.0,WI,65.78,32.56,15830.0,7835.0 -0,Golden Valley County,30037.0,MT,25.25,69.86,124.0,343.0 -0,Wheatland County,30107.0,MT,29.46,66.97,289.0,657.0 -0,Franklin County,53021.0,WA,37.37,61.11,7361.0,12037.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Benton County,53005.0,WA,36.05,62.19,26288.0,45345.0 -0,Otter Tail County,27111.0,MN,42.39,55.3,13856.0,18077.0 -0,Grant County,38037.0,ND,21.07,44.17,280.0,587.0 -0,Garfield County,53023.0,WA,28.04,70.5,385.0,968.0 -0,Ashland County,55003.0,WI,67.86,30.72,5818.0,2634.0 -0,Alger County,26003.0,MI,52.04,46.06,2472.0,2188.0 -0,Fallon County,30025.0,MT,22.21,74.3,318.0,1064.0 -0,Idaho County,16049.0,ID,24.57,71.8,2017.0,5895.0 -0,Ravalli County,30081.0,MT,38.04,58.88,8400.0,13002.0 -0,Emmons County,38029.0,ND,29.72,66.96,546.0,1230.0 -0,Logan County,38047.0,ND,28.29,68.68,299.0,726.0 -0,Nez Perce County,16069.0,ID,39.97,58.11,7123.0,10357.0 -0,Slope County,38087.0,ND,25.79,72.26,106.0,297.0 -0,LaMoure County,38045.0,ND,38.73,58.46,868.0,1310.0 -0,Hettinger County,38041.0,ND,30.12,66.25,406.0,893.0 -0,Wilkin County,27167.0,MN,45.4,52.31,1550.0,1786.0 -0,Ransom County,38073.0,ND,56.35,41.02,1371.0,998.0 -0,Richland County,38077.0,ND,46.45,51.57,3513.0,3900.0 -0,Columbia County,53013.0,WA,30.79,67.28,686.0,1499.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Walla Walla County,53071.0,WA,40.77,57.35,10081.0,14182.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Iron County,55051.0,WI,55.77,42.66,1914.0,1464.0 -0,Somerset County,23025.0,ME,51.77,46.07,13335.0,11867.0 -0,Piscataquis County,23021.0,ME,46.96,50.72,4430.0,4785.0 -0,Jefferson County,30043.0,MT,40.73,55.8,2582.0,3538.0 -0,Marquette County,26103.0,MI,59.17,38.89,19635.0,12906.0 -0,Alger County,26003.0,MI,52.04,46.06,2472.0,2188.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Alger County,26003.0,MI,52.04,46.06,2472.0,2188.0 -0,Schoolcraft County,26153.0,MI,50.49,47.57,2184.0,2058.0 -0,Pacific County,53049.0,WA,55.72,41.65,6094.0,4555.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Yellowstone County,30111.0,MT,45.5,51.81,32038.0,36483.0 -0,Alger County,26003.0,MI,52.04,46.06,2472.0,2188.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Alger County,26003.0,MI,52.04,46.06,2472.0,2188.0 -0,Treasure County,30103.0,MT,32.1,64.61,156.0,314.0 -0,Lewis County,16061.0,ID,26.55,70.68,479.0,1275.0 -0,Asotin County,53003.0,WA,42.32,55.74,4139.0,5451.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Sioux County,38085.0,ND,83.09,15.6,1145.0,215.0 -0,Iron County,26071.0,MI,49.98,47.83,3080.0,2947.0 -0,Pine County,27115.0,MN,49.25,47.71,7084.0,6862.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Penobscot County,23019.0,ME,51.66,46.65,41514.0,37495.0 -0,Skamania County,53059.0,WA,51.31,45.97,2817.0,2524.0 -0,Cowlitz County,53015.0,WA,54.38,43.23,24597.0,19554.0 -0,Wahkiakum County,53069.0,WA,48.87,48.17,1121.0,1105.0 -0,Todd County,27153.0,MN,43.05,54.15,5277.0,6637.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Morrison County,27097.0,MN,39.1,58.14,6547.0,9735.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Vilas County,55125.0,WI,47.21,51.31,6491.0,7055.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Adams County,38001.0,ND,34.23,62.0,435.0,788.0 -0,Sargent County,38081.0,ND,57.86,40.37,1115.0,778.0 -0,McIntosh County,38051.0,ND,37.79,59.79,579.0,916.0 -0,Dickey County,38021.0,ND,39.85,58.21,1044.0,1525.0 -0,Bowman County,38011.0,ND,29.15,67.5,478.0,1107.0 -0,Deer Lodge County,30023.0,MT,67.05,29.6,3402.0,1502.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Dickinson County,26043.0,MI,45.04,52.96,5995.0,7049.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mille Lacs County,27095.0,MN,44.83,52.05,6072.0,7049.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Sweet Grass County,30097.0,MT,25.97,71.72,541.0,1494.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Wahkiakum County,53069.0,WA,48.87,48.17,1121.0,1105.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Gallatin County,30031.0,MT,50.26,46.89,24205.0,22578.0 -0,Park County,30067.0,MT,46.93,49.21,4173.0,4376.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Silver Bow County,30093.0,MT,68.82,28.4,11676.0,4818.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Columbia County,41009.0,OR,54.06,42.04,13390.0,10413.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Columbia County,41009.0,OR,54.06,42.04,13390.0,10413.0 -0,Clatsop County,41007.0,OR,57.69,38.78,10701.0,7192.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Cowlitz County,53015.0,WA,54.38,43.23,24597.0,19554.0 -0,Kanabec County,27065.0,MN,44.04,52.7,3743.0,4479.0 -0,Burnett County,55013.0,WI,49.92,48.34,4337.0,4200.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Sawyer County,55113.0,WI,52.45,46.22,4765.0,4199.0 -0,Washburn County,55129.0,WI,51.5,47.22,4693.0,4303.0 -0,Columbia County,41009.0,OR,54.06,42.04,13390.0,10413.0 -0,Carter County,30011.0,MT,15.52,80.14,111.0,573.0 -0,Stillwater County,30095.0,MT,32.4,64.09,1512.0,2991.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Grant County,27051.0,MN,51.32,45.66,1850.0,1646.0 -0,Douglas County,27041.0,MN,44.25,53.74,9256.0,11241.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Cowlitz County,53015.0,WA,54.38,43.23,24597.0,19554.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Forest County,55041.0,WI,57.08,41.92,2673.0,1963.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Clark County,53011.0,WA,52.17,46.08,95356.0,84212.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Klickitat County,53039.0,WA,48.85,48.64,4965.0,4944.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Big Horn County,30003.0,MT,67.38,31.2,3516.0,1628.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Traverse County,27155.0,MN,51.25,45.85,1043.0,933.0 -0,Florence County,55037.0,WI,42.23,56.31,1134.0,1512.0 -0,Columbia County,41009.0,OR,54.06,42.04,13390.0,10413.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Umatilla County,41059.0,OR,37.16,59.77,9484.0,15254.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Wallowa County,41063.0,OR,33.42,63.52,1492.0,2836.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Menominee County,26109.0,MI,54.02,43.85,5981.0,4855.0 -0,Price County,55099.0,WI,55.64,42.24,4559.0,3461.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Cowlitz County,53015.0,WA,54.38,43.23,24597.0,19554.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Perkins County,46105.0,SD,29.6,65.36,499.0,1102.0 -0,Corson County,46031.0,SD,59.53,38.05,837.0,535.0 -0,Harding County,46063.0,SD,18.39,78.34,135.0,575.0 -0,Campbell County,46021.0,SD,28.45,69.2,243.0,591.0 -0,Beaverhead County,30001.0,MT,33.95,63.15,1617.0,3008.0 -0,McPherson County,46089.0,SD,32.07,66.55,441.0,915.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Brown County,46013.0,SD,51.88,46.29,9041.0,8067.0 -0,Roberts County,46109.0,SD,58.91,39.26,2672.0,1781.0 -0,Marshall County,46091.0,SD,57.55,41.08,1261.0,900.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Morrow County,41049.0,OR,34.75,61.83,1410.0,2509.0 -0,Chippewa County,26033.0,MI,48.98,49.48,8184.0,8267.0 -0,Oneida County,55085.0,WI,54.3,43.92,11907.0,9630.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Union County,41061.0,OR,36.63,60.2,4613.0,7581.0 -0,Madison County,30057.0,MT,29.42,66.54,321.0,726.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Benton County,27009.0,MN,43.71,53.46,8454.0,10338.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Gilliam County,41021.0,OR,38.74,58.38,430.0,648.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Marinette County,55075.0,WI,52.67,45.76,11195.0,9726.0 -0,Powder River County,30075.0,MT,20.04,77.26,208.0,802.0 -0,Emmet County,26047.0,MI,46.92,51.32,8515.0,9314.0 -0,Cheboygan County,26031.0,MI,48.34,49.78,6720.0,6920.0 -0,Tillamook County,41057.0,OR,53.18,43.3,7072.0,5757.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Washington County,41067.0,OR,59.82,37.69,141544.0,89185.0 -0,Stearns County,27145.0,MN,45.32,52.31,35690.0,41194.0 -0,Emmet County,26047.0,MI,46.92,51.32,8515.0,9314.0 -0,Emmet County,26047.0,MI,46.92,51.32,8515.0,9314.0 -0,Emmet County,26047.0,MI,46.92,51.32,8515.0,9314.0 -0,Stevens County,27149.0,MN,49.36,48.1,2781.0,2710.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Pope County,27121.0,MN,50.75,46.96,3317.0,3069.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Mackinac County,26097.0,MI,47.33,51.09,3027.0,3268.0 -0,Sherman County,41055.0,OR,36.77,60.55,385.0,634.0 -0,Isanti County,27059.0,MN,41.13,56.47,8248.0,11324.0 -0,Chisago County,27025.0,MN,43.62,53.88,12783.0,15789.0 -0,Polk County,55095.0,WI,48.03,49.83,10876.0,11282.0 -0,Multnomah County,41051.0,OR,76.69,20.61,279696.0,75171.0 -0,Hood River County,41027.0,OR,64.11,33.21,6302.0,3265.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Wasco County,41065.0,OR,51.9,44.84,5906.0,5103.0 -0,Lemhi County,16059.0,ID,25.85,71.57,1061.0,2938.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Emmet County,26047.0,MI,46.92,51.32,8515.0,9314.0 -0,Franklin County,23007.0,ME,58.87,38.58,10113.0,6627.0 -0,Multnomah County,41051.0,OR,76.69,20.61,279696.0,75171.0 -0,Presque Isle County,26141.0,MI,49.59,48.05,3722.0,3606.0 -0,Barron County,55005.0,WI,52.77,45.69,12078.0,10457.0 -0,Rusk County,55107.0,WI,53.01,44.73,3855.0,3253.0 -0,Carbon County,30009.0,MT,42.52,54.09,2443.0,3108.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Walworth County,46129.0,SD,34.83,62.94,923.0,1668.0 -0,Edmunds County,46045.0,SD,39.45,58.43,819.0,1213.0 -0,Multnomah County,41051.0,OR,76.69,20.61,279696.0,75171.0 -0,Day County,46037.0,SD,55.69,42.81,1785.0,1372.0 -0,Big Stone County,27011.0,MN,51.91,45.55,1552.0,1362.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Clark County,53011.0,WA,52.17,46.08,95356.0,84212.0 -0,Clark County,53011.0,WA,52.17,46.08,95356.0,84212.0 -0,Sherburne County,27141.0,MN,39.91,58.1,17957.0,26140.0 -0,Tillamook County,41057.0,OR,53.18,43.3,7072.0,5757.0 -0,Lincoln County,55069.0,WI,55.17,42.7,8424.0,6519.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Delta County,26041.0,MI,52.32,45.97,9974.0,8763.0 -0,Leelanau County,26089.0,MI,50.85,47.97,7355.0,6938.0 -0,Dewey County,46041.0,SD,65.78,32.64,1328.0,659.0 -0,Ziebach County,46137.0,SD,62.18,35.02,554.0,312.0 -0,Langlade County,55067.0,WI,49.82,48.85,5182.0,5081.0 -0,Clackamas County,41005.0,OR,53.93,43.57,103476.0,83595.0 -0,Leelanau County,26089.0,MI,50.85,47.97,7355.0,6938.0 -0,Yamhill County,41071.0,OR,47.78,49.14,20797.0,21390.0 -0,Wright County,27171.0,MN,40.17,57.61,26343.0,37779.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Anoka County,27003.0,MN,47.73,50.13,86976.0,91357.0 -0,Kandiyohi County,27067.0,MN,46.24,51.7,10125.0,11319.0 -0,Swift County,27151.0,MN,55.43,41.65,2907.0,2184.0 -0,Taylor County,55119.0,WI,48.82,49.07,4563.0,4586.0 -0,Oconto County,55083.0,WI,52.34,46.16,9927.0,8755.0 -0,Charlevoix County,26029.0,MI,47.45,50.85,6817.0,7306.0 -0,Oxford County,23017.0,ME,56.68,40.64,17940.0,12863.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Grant County,46051.0,SD,46.63,50.94,1786.0,1951.0 -0,Meeker County,27093.0,MN,42.89,53.7,5380.0,6737.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Coos County,33007.0,NH,58.63,40.33,9532.0,6558.0 -0,Washington County,27163.0,MN,51.27,46.94,70277.0,64334.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Chippewa County,55017.0,WI,53.72,44.63,16239.0,13492.0 -0,Marion County,41047.0,OR,49.63,47.41,61816.0,59059.0 -0,Adams County,16003.0,ID,31.38,65.39,728.0,1517.0 -0,Lac qui Parle County,27073.0,MN,51.53,45.61,2160.0,1912.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Potter County,46107.0,SD,33.47,65.07,482.0,937.0 -0,Faulk County,46049.0,SD,35.74,62.0,426.0,739.0 -0,Hennepin County,27053.0,MN,63.42,34.81,420958.0,231054.0 -0,Spink County,46115.0,SD,47.42,50.78,1550.0,1660.0 -0,Valley County,16085.0,ID,45.41,52.34,2405.0,2772.0 -0,Butte County,46019.0,SD,30.69,66.28,1306.0,2821.0 -0,Leelanau County,26089.0,MI,50.85,47.97,7355.0,6938.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Saint Croix County,55109.0,WI,47.25,50.95,21177.0,22837.0 -0,Dunn County,55033.0,WI,56.56,41.61,13002.0,9566.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Antrim County,26009.0,MI,43.89,54.19,6079.0,7506.0 -0,Otsego County,26137.0,MI,44.66,53.52,5634.0,6752.0 -0,Montmorency County,26119.0,MI,44.83,53.0,2403.0,2841.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Leelanau County,26089.0,MI,50.85,47.97,7355.0,6938.0 -0,Clark County,46025.0,SD,42.78,54.9,830.0,1065.0 -0,Codington County,46029.0,SD,45.92,52.31,5595.0,6374.0 -0,Chippewa County,27023.0,MN,51.6,45.74,3280.0,2907.0 -0,Ramsey County,27123.0,MN,65.96,32.06,182974.0,88942.0 -0,Marathon County,55073.0,WI,53.53,44.66,36367.0,30345.0 -0,Menominee County,55078.0,WI,86.81,12.78,1257.0,185.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Baker County,41001.0,OR,31.96,64.37,2805.0,5650.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Marinette County,55075.0,WI,52.67,45.76,11195.0,9726.0 -0,Polk County,41053.0,OR,48.43,48.92,17536.0,17714.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Wheeler County,41069.0,OR,34.61,61.33,281.0,498.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Marinette County,55075.0,WI,52.67,45.76,11195.0,9726.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Leelanau County,26089.0,MI,50.85,47.97,7355.0,6938.0 -0,Lincoln County,41041.0,OR,59.68,36.8,14258.0,8791.0 -0,Meade County,46093.0,SD,32.32,64.75,3751.0,7515.0 -0,Clark County,55019.0,WI,52.54,44.99,7454.0,6383.0 -0,Shawano County,55115.0,WI,51.07,47.48,10259.0,9538.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Franklin County,50011.0,VT,61.41,36.59,13179.0,7853.0 -0,Essex County,50009.0,VT,55.89,41.41,1733.0,1284.0 -0,Grand Isle County,50013.0,VT,63.11,34.9,2694.0,1490.0 -0,Saint Lawrence County,36089.0,NY,57.36,41.03,23706.0,16956.0 -0,Clinton County,36019.0,NY,60.64,37.73,20216.0,12579.0 -0,Orleans County,50019.0,VT,62.63,35.1,7998.0,4482.0 -0,Park County,56029.0,WY,25.07,72.33,3757.0,10839.0 -0,Saint Lawrence County,36089.0,NY,57.36,41.03,23706.0,16956.0 -0,Big Horn County,56003.0,WY,20.87,76.18,1108.0,4045.0 -0,Campbell County,56005.0,WY,18.32,79.72,2990.0,13011.0 -0,Sheridan County,56033.0,WY,29.76,67.93,4458.0,10177.0 -0,Franklin County,36033.0,NY,60.34,38.11,10571.0,6676.0 -0,Crook County,56011.0,WY,16.62,80.56,612.0,2967.0 -0,Grant County,41023.0,OR,25.74,71.25,1006.0,2785.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Grand Traverse County,26055.0,MI,47.73,50.72,23258.0,24716.0 -0,Saint Lawrence County,36089.0,NY,57.36,41.03,23706.0,16956.0 -0,McLeod County,27085.0,MN,39.44,57.77,7505.0,10993.0 -0,Carver County,27019.0,MN,41.57,56.67,20654.0,28156.0 -0,Deuel County,46039.0,SD,47.52,49.05,1054.0,1088.0 -0,Saint Lawrence County,36089.0,NY,57.36,41.03,23706.0,16956.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Saint Lawrence County,36089.0,NY,57.36,41.03,23706.0,16956.0 -0,Yellow Medicine County,27173.0,MN,50.57,46.31,2816.0,2579.0 -0,Dakota County,27037.0,MN,51.79,46.29,116778.0,104364.0 -0,Sully County,46119.0,SD,27.97,69.75,233.0,581.0 -0,Hyde County,46069.0,SD,28.79,69.68,226.0,547.0 -0,Hand County,46059.0,SD,35.7,62.01,718.0,1247.0 -0,Alpena County,26007.0,MI,51.08,47.23,7705.0,7125.0 -0,Renville County,27129.0,MN,47.99,48.63,3904.0,3956.0 -0,Door County,55029.0,WI,58.02,40.68,10142.0,7112.0 -0,Custer County,16037.0,ID,25.98,72.02,611.0,1694.0 -0,Pierce County,55093.0,WI,53.39,44.38,11803.0,9812.0 -0,Alcona County,26001.0,MI,45.11,53.02,2896.0,3404.0 -0,Kalkaska County,26079.0,MI,44.48,53.27,3780.0,4527.0 -0,Crawford County,26039.0,MI,47.94,49.61,3441.0,3561.0 -0,Eau Claire County,55035.0,WI,60.25,38.1,33146.0,20959.0 -0,Oscoda County,26135.0,MI,43.6,53.6,1887.0,2320.0 -0,Washington County,16087.0,ID,27.54,70.31,1241.0,3168.0 -0,Jefferson County,41031.0,OR,44.27,52.92,3682.0,4402.0 -0,Scott County,27139.0,MN,43.51,54.7,29208.0,36724.0 -0,Hamlin County,46057.0,SD,37.42,59.6,1043.0,1661.0 -0,Lamoille County,50015.0,VT,70.37,27.75,8914.0,3515.0 -0,Linn County,41043.0,OR,42.64,54.0,22163.0,28071.0 -0,Stanley County,46117.0,SD,32.84,65.49,510.0,1017.0 -0,Benzie County,26019.0,MI,52.88,45.47,5451.0,4687.0 -0,Caledonia County,50005.0,VT,60.43,37.15,8900.0,5472.0 -0,Waldo County,23027.0,ME,54.77,43.13,11967.0,9423.0 -0,Fremont County,16043.0,ID,18.11,79.93,1065.0,4700.0 -0,Haakon County,46055.0,SD,16.22,81.44,187.0,939.0 -0,Chittenden County,50007.0,VT,71.44,26.65,59611.0,22237.0 -0,Benton County,41003.0,OR,64.33,32.84,29901.0,15264.0 -0,Kennebec County,23011.0,ME,56.43,41.65,37238.0,27482.0 -0,Sibley County,27143.0,MN,38.79,58.12,2998.0,4492.0 -0,Goodhue County,27049.0,MN,48.15,49.53,12420.0,12775.0 -0,Redwood County,27127.0,MN,41.63,55.19,3250.0,4308.0 -0,Portage County,55097.0,WI,62.95,35.03,24817.0,13810.0 -0,Wood County,55141.0,WI,55.59,42.46,21710.0,16581.0 -0,Brown County,55009.0,WI,53.92,44.77,67269.0,55854.0 -0,Pepin County,55091.0,WI,55.74,42.85,2102.0,1616.0 -0,Waupaca County,55135.0,WI,50.77,47.95,12952.0,12232.0 -0,Kewaunee County,55061.0,WI,54.71,43.67,5902.0,4711.0 -0,Teton County,56039.0,WY,60.67,37.07,7472.0,4565.0 -0,Beadle County,46005.0,SD,45.28,52.55,3493.0,4054.0 -0,Lincoln County,27081.0,MN,48.53,47.7,1517.0,1491.0 -0,Lyon County,27083.0,MN,48.08,49.69,6110.0,6315.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Lawrence County,46081.0,SD,40.91,56.3,4932.0,6787.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Buffalo County,55011.0,WI,56.41,41.76,3949.0,2923.0 -0,Trempealeau County,55121.0,WI,62.5,36.11,8321.0,4808.0 -0,Jackson County,55053.0,WI,60.23,38.4,5572.0,3552.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Outagamie County,55087.0,WI,54.93,43.33,50294.0,39677.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Clark County,16033.0,ID,17.07,81.33,64.0,305.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Johnson County,56019.0,WY,20.85,76.57,908.0,3334.0 -0,Crook County,41013.0,OR,35.09,61.54,3632.0,6371.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Hughes County,46065.0,SD,35.86,62.56,3037.0,5298.0 -0,Essex County,36031.0,NY,55.88,42.55,10390.0,7913.0 -0,Le Sueur County,27079.0,MN,46.6,50.88,6994.0,7636.0 -0,Rice County,27131.0,MN,54.66,43.16,17381.0,13723.0 -0,Kingsbury County,46077.0,SD,45.87,51.54,1277.0,1435.0 -0,Brookings County,46011.0,SD,51.68,46.12,7207.0,6431.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Manistee County,26101.0,MI,55.62,42.36,7235.0,5510.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Wexford County,26165.0,MI,46.99,51.22,7379.0,8044.0 -0,Roscommon County,26143.0,MI,50.4,47.88,7082.0,6727.0 -0,Missaukee County,26113.0,MI,38.68,59.65,2898.0,4469.0 -0,Iosco County,26069.0,MI,51.52,46.4,7309.0,6583.0 -0,Ogemaw County,26129.0,MI,50.07,47.67,5391.0,5133.0 -0,Gem County,16045.0,ID,27.26,70.28,2166.0,5585.0 -0,Pennington County,46103.0,SD,38.47,59.64,17802.0,27603.0 -0,Washington County,50023.0,VT,69.33,28.35,22324.0,9129.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Brown County,27015.0,MN,42.65,54.74,5809.0,7456.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Androscoggin County,23001.0,ME,56.55,41.33,31017.0,22671.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Nicollet County,27103.0,MN,54.19,43.67,9887.0,7968.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Wabasha County,27157.0,MN,47.47,49.9,5646.0,5935.0 -0,Waldo County,23027.0,ME,54.77,43.13,11967.0,9423.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Washington County,23029.0,ME,49.51,48.5,8246.0,8077.0 -0,Malheur County,41045.0,OR,28.27,68.6,2949.0,7157.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Grafton County,33009.0,NH,63.4,35.66,31446.0,17687.0 -0,Deschutes County,41017.0,OR,48.66,48.96,38819.0,39064.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Waldo County,23027.0,ME,54.77,43.13,11967.0,9423.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Boise County,16015.0,ID,32.87,64.48,1240.0,2433.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Manitowoc County,55071.0,WI,52.88,45.35,22428.0,19234.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Addison County,50001.0,VT,68.62,29.46,13202.0,5667.0 -0,Lane County,41039.0,OR,62.35,34.9,114037.0,63835.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Carroll County,33003.0,NH,52.65,46.31,15221.0,13387.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Waldo County,23027.0,ME,54.77,43.13,11967.0,9423.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Blue Earth County,27013.0,MN,55.1,42.15,19325.0,14782.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Juneau County,55057.0,WI,53.65,44.65,6186.0,5148.0 -0,Adams County,55001.0,WI,58.14,39.8,5806.0,3974.0 -0,Waushara County,55137.0,WI,49.52,48.7,5868.0,5770.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Winnebago County,55139.0,WI,54.94,43.28,48167.0,37946.0 -0,Calumet County,55015.0,WI,50.22,48.05,13295.0,12722.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Waldo County,23027.0,ME,54.77,43.13,11967.0,9423.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Butte County,16023.0,ID,22.55,74.89,318.0,1056.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Orange County,50017.0,VT,64.56,33.25,9799.0,5047.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Lewis County,36049.0,NY,44.77,53.59,4986.0,5969.0 -0,Lyman County,46085.0,SD,43.27,54.48,710.0,894.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Pipestone County,27117.0,MN,42.14,55.24,2023.0,2652.0 -0,Murray County,27101.0,MN,48.72,48.2,2345.0,2320.0 -0,Jerauld County,46073.0,SD,49.05,49.41,542.0,546.0 -0,Steele County,27147.0,MN,45.87,51.22,9016.0,10068.0 -0,Dodge County,27039.0,MN,43.69,53.53,4463.0,5468.0 -0,Moody County,46101.0,SD,51.11,46.34,1663.0,1508.0 -0,Waseca County,27161.0,MN,44.51,52.7,4401.0,5211.0 -0,Buffalo County,46017.0,SD,73.34,25.2,454.0,156.0 -0,Sanborn County,46111.0,SD,41.43,55.43,500.0,669.0 -0,Olmsted County,27109.0,MN,50.62,47.34,38711.0,36202.0 -0,Cottonwood County,27033.0,MN,45.71,52.3,2759.0,3157.0 -0,Lake County,46079.0,SD,49.26,48.61,3033.0,2993.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Miner County,46097.0,SD,49.67,47.37,605.0,577.0 -0,Winona County,27169.0,MN,58.38,39.29,16308.0,10975.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Weston County,56045.0,WY,19.39,77.16,658.0,2618.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Mason County,26105.0,MI,51.35,46.95,7817.0,7147.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Jones County,46075.0,SD,23.44,73.84,147.0,463.0 -0,Washakie County,56043.0,WY,25.48,72.29,1042.0,2956.0 -0,Sagadahoc County,23023.0,ME,57.05,40.94,12152.0,8721.0 -0,Lake County,26085.0,MI,55.16,42.88,2919.0,2269.0 -0,Osceola County,26133.0,MI,44.03,54.17,4855.0,5973.0 -0,Arenac County,26011.0,MI,51.12,46.84,4155.0,3807.0 -0,Clare County,26035.0,MI,51.46,46.63,7496.0,6793.0 -0,Gladwin County,26051.0,MI,49.77,48.27,6590.0,6391.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Monroe County,55081.0,WI,53.25,45.25,10198.0,8666.0 -0,Payette County,16075.0,ID,28.04,69.52,2415.0,5988.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Hancock County,23009.0,ME,58.74,39.44,18895.0,12686.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Hamilton County,36041.0,NY,35.91,62.77,1225.0,2141.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Watonwan County,27165.0,MN,48.73,48.04,2562.0,2526.0 -0,Elmore County,16039.0,ID,30.71,67.15,2591.0,5665.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Herkimer County,36043.0,NY,44.49,53.78,12094.0,14619.0 -0,La Crosse County,55063.0,WI,60.94,37.49,38524.0,23701.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Hot Springs County,56017.0,WY,24.31,72.03,619.0,1834.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Jefferson County,16051.0,ID,15.72,81.79,1641.0,8540.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Harney County,41025.0,OR,25.79,70.46,950.0,2595.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Sagadahoc County,23023.0,ME,57.05,40.94,12152.0,8721.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Fremont County,56013.0,WY,34.2,63.0,6016.0,11083.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Bay County,26017.0,MI,56.75,41.43,32589.0,23795.0 -0,Jackson County,46071.0,SD,38.39,58.96,435.0,668.0 -0,Blaine County,16013.0,ID,65.72,32.53,6947.0,3439.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Teton County,16081.0,ID,49.42,48.58,2302.0,2263.0 -0,Sagadahoc County,23023.0,ME,57.05,40.94,12152.0,8721.0 -0,Green Lake County,55047.0,WI,41.95,56.55,4000.0,5393.0 -0,Marquette County,55077.0,WI,51.85,46.57,4068.0,3654.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Windsor County,50027.0,VT,68.81,29.15,21444.0,9084.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Douglas County,41019.0,OR,38.34,58.41,20298.0,30919.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Fond du Lac County,55039.0,WI,44.84,53.83,23463.0,28164.0 -0,Aurora County,46003.0,SD,43.81,53.11,655.0,794.0 -0,Brule County,46015.0,SD,39.57,57.69,965.0,1407.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Madison County,16065.0,ID,12.46,85.25,1627.0,11131.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Jefferson County,36045.0,NY,46.72,52.0,18166.0,20220.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Sheboygan County,55117.0,WI,48.94,49.59,30395.0,30801.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Canyon County,16027.0,ID,31.36,66.54,20147.0,42752.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Mellette County,46095.0,SD,44.25,52.79,373.0,445.0 -0,Camas County,16025.0,ID,30.26,68.28,187.0,422.0 -0,Rutland County,50021.0,VT,61.22,36.64,19355.0,11584.0 -0,Custer County,46033.0,SD,32.73,64.54,1475.0,2909.0 -0,Rock County,27133.0,MN,41.79,55.78,2079.0,2775.0 -0,Nobles County,27105.0,MN,48.16,49.56,4244.0,4368.0 -0,Freeborn County,27047.0,MN,57.38,40.25,9915.0,6955.0 -0,Mower County,27099.0,MN,60.48,36.87,11605.0,7075.0 -0,Houston County,27055.0,MN,54.27,43.58,5906.0,4743.0 -0,Davison County,46035.0,SD,42.03,55.96,3554.0,4731.0 -0,Hanson County,46061.0,SD,39.53,58.66,961.0,1426.0 -0,Fillmore County,27045.0,MN,52.71,44.45,5921.0,4993.0 -0,Jackson County,27063.0,MN,46.56,50.83,2618.0,2858.0 -0,Faribault County,27043.0,MN,45.83,51.47,3736.0,4196.0 -0,Minnehaha County,46099.0,SD,49.46,48.73,39838.0,39251.0 -0,Martin County,27091.0,MN,41.04,56.29,4413.0,6053.0 -0,McCook County,46087.0,SD,41.39,55.89,1219.0,1646.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Knox County,23013.0,ME,59.74,38.36,13728.0,8816.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Midland County,26111.0,MI,47.36,50.94,20701.0,22263.0 -0,Oceana County,26127.0,MI,51.2,46.85,6405.0,5860.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Isabella County,26073.0,MI,58.83,39.58,16679.0,11220.0 -0,York County,23031.0,ME,59.36,38.83,64799.0,42389.0 -0,Mecosta County,26107.0,MI,48.76,49.5,9101.0,9238.0 -0,Newaygo County,26123.0,MI,46.7,51.34,10790.0,11862.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Washington County,36115.0,NY,49.52,48.71,12741.0,12533.0 -0,Ada County,16001.0,ID,45.84,52.02,82236.0,93328.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Warren County,36113.0,NY,50.49,47.85,16281.0,15429.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Lincoln County,23015.0,ME,55.07,43.03,11886.0,9287.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Huron County,26063.0,MI,48.83,49.22,8367.0,8434.0 -0,Tripp County,46123.0,SD,32.19,65.48,914.0,1859.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Belknap County,33001.0,NH,50.19,49.01,16796.0,16402.0 -0,Tuscola County,26157.0,MI,48.58,49.43,13503.0,13740.0 -0,Vernon County,55123.0,WI,60.13,38.13,8463.0,5367.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Tuscola County,26157.0,MI,48.58,49.43,13503.0,13740.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Oswego County,36075.0,NY,50.21,47.76,24777.0,23571.0 -0,Shannon County,46113.0,SD,88.69,9.88,2971.0,331.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Sanilac County,26151.0,MI,44.86,52.95,9047.0,10679.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Owyhee County,16073.0,ID,23.26,74.52,944.0,3024.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Columbia County,55021.0,WI,56.92,41.65,16661.0,12193.0 -0,Sauk County,55111.0,WI,60.79,37.75,18167.0,11562.0 -0,Dodge County,55027.0,WI,44.8,53.74,19183.0,23015.0 -0,Bonneville County,16019.0,ID,27.38,70.34,11417.0,29334.0 -0,Bingham County,16011.0,ID,25.79,71.29,4424.0,12230.0 -0,Klamath County,41035.0,OR,31.87,65.01,9370.0,19113.0 -0,Lake County,41037.0,OR,25.95,71.53,957.0,2638.0 -0,Oneida County,36065.0,NY,46.1,52.2,43506.0,49256.0 -0,Merrimack County,33013.0,NH,56.55,42.66,45078.0,34010.0 -0,Coos County,41011.0,OR,46.53,49.61,14401.0,15354.0 -0,Sullivan County,33019.0,NH,58.59,40.55,13249.0,9169.0 -0,Strafford County,33017.0,NH,59.78,39.37,37990.0,25021.0 -0,Saginaw County,26145.0,MI,57.91,40.57,60276.0,42225.0 -0,Richland County,55103.0,WI,59.66,39.03,5041.0,3298.0 -0,Cumberland County,23005.0,ME,64.1,34.23,105218.0,56186.0 -0,Ozaukee County,55089.0,WI,38.56,60.29,20579.0,32172.0 -0,Washington County,55131.0,WI,34.56,64.14,25719.0,47729.0 -0,Winnebago County,19189.0,IA,53.5,44.89,3254.0,2730.0 -0,Kossuth County,19109.0,IA,50.84,47.59,4625.0,4329.0 -0,Dickinson County,19059.0,IA,46.69,52.11,4625.0,5162.0 -0,Emmet County,19063.0,IA,51.25,47.32,2570.0,2373.0 -0,Worth County,19195.0,IA,60.3,37.87,2567.0,1612.0 -0,Osceola County,19143.0,IA,33.16,64.82,1037.0,2027.0 -0,Niobrara County,56027.0,WY,18.87,78.65,244.0,1017.0 -0,Mitchell County,19131.0,IA,55.13,42.82,3179.0,2469.0 -0,Lyon County,19119.0,IA,26.94,71.92,1675.0,4471.0 -0,Howard County,19089.0,IA,62.2,36.42,2941.0,1722.0 -0,Allamakee County,19005.0,IA,56.25,42.0,3971.0,2965.0 -0,Winneshiek County,19191.0,IA,60.54,37.88,6829.0,4273.0 -0,Lincoln County,46083.0,SD,41.61,56.84,8642.0,11803.0 -0,Converse County,56009.0,WY,21.39,76.3,1380.0,4922.0 -0,Charles Mix County,46023.0,SD,45.42,53.02,1807.0,2109.0 -0,Turner County,46125.0,SD,38.63,58.32,1681.0,2538.0 -0,Hutchinson County,46067.0,SD,34.42,63.33,1242.0,2285.0 -0,Natrona County,56025.0,WY,31.49,65.85,10475.0,21906.0 -0,Douglas County,46043.0,SD,24.15,73.63,424.0,1293.0 -0,Gregory County,46053.0,SD,34.31,63.33,771.0,1423.0 -0,Fall River County,46047.0,SD,35.13,61.64,1338.0,2348.0 -0,Muskegon County,26121.0,MI,63.87,34.58,53821.0,29145.0 -0,Montcalm County,26117.0,MI,48.83,49.13,13208.0,13291.0 -0,Sublette County,56035.0,WY,21.49,76.12,936.0,3316.0 -0,Gratiot County,26057.0,MI,51.33,46.92,9105.0,8322.0 -0,Crawford County,55023.0,WI,62.49,35.46,4987.0,2830.0 -0,Cayuga County,36011.0,NY,53.28,44.8,18128.0,15243.0 -0,Saratoga County,36091.0,NY,50.85,47.45,56645.0,52855.0 -0,Bennett County,46007.0,SD,46.11,50.83,557.0,614.0 -0,Todd County,46121.0,SD,78.08,20.19,2208.0,571.0 -0,Orleans County,36073.0,NY,39.88,58.54,6614.0,9708.0 -0,Niagara County,36063.0,NY,49.65,48.65,47303.0,46348.0 -0,Monroe County,36055.0,NY,58.18,40.47,207371.0,144262.0 -0,Wayne County,36117.0,NY,44.3,54.18,18184.0,22239.0 -0,Lapeer County,26087.0,MI,47.3,50.33,21457.0,22831.0 -0,Lincoln County,56023.0,WY,21.28,75.69,1823.0,6485.0 -0,Bennington County,50003.0,VT,65.47,32.06,12524.0,6133.0 -0,Dane County,55025.0,WI,72.8,25.82,205984.0,73065.0 -0,Kent County,26081.0,MI,49.44,48.92,149909.0,148336.0 -0,Fulton County,36035.0,NY,44.42,53.65,9695.0,11709.0 -0,Rockingham County,33015.0,NH,50.11,49.02,83723.0,81917.0 -0,Onondaga County,36067.0,NY,59.25,38.94,129317.0,84972.0 -0,Windham County,50025.0,VT,73.02,24.9,17585.0,5997.0 -0,Sioux County,19167.0,IA,18.18,80.95,3030.0,13490.0 -0,O'Brien County,19141.0,IA,31.88,66.74,2338.0,4894.0 -0,Cerro Gordo County,19033.0,IA,59.67,38.84,14405.0,9375.0 -0,Hancock County,19081.0,IA,47.3,50.86,2805.0,3016.0 -0,Palo Alto County,19147.0,IA,50.52,47.73,2428.0,2294.0 -0,Clay County,19041.0,IA,46.74,51.86,3925.0,4355.0 -0,Genesee County,26049.0,MI,65.45,32.95,143927.0,72451.0 -0,Chickasaw County,19037.0,IA,59.59,38.84,3923.0,2557.0 -0,Floyd County,19067.0,IA,59.6,37.71,4822.0,3051.0 -0,Iowa County,55049.0,WI,66.73,31.99,7987.0,3829.0 -0,Grant County,55043.0,WI,61.16,37.29,14875.0,9068.0 -0,Hillsborough County,33011.0,NH,51.43,47.68,104820.0,97178.0 -0,Ottawa County,26139.0,MI,37.3,61.15,50828.0,83330.0 -0,Lincoln County,16063.0,ID,29.14,65.88,545.0,1232.0 -0,Gooding County,16047.0,ID,27.62,69.84,1489.0,3765.0 -0,Jefferson County,55055.0,WI,49.69,48.87,21448.0,21096.0 -0,Minidoka County,16067.0,ID,23.66,73.83,1630.0,5087.0 -0,Waukesha County,55133.0,WI,36.64,62.32,85339.0,145152.0 -0,Milwaukee County,55079.0,WI,67.3,31.45,319819.0,149445.0 -0,Madison County,36053.0,NY,49.3,48.43,14692.0,14434.0 -0,Cheshire County,33005.0,NH,63.31,35.69,26971.0,15205.0 -0,Yankton County,46135.0,SD,47.74,49.72,4838.0,5039.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Bon Homme County,46009.0,SD,43.06,53.92,1367.0,1712.0 -0,Shiawassee County,26155.0,MI,53.27,44.67,19397.0,16268.0 -0,Genesee County,36037.0,NY,40.05,58.44,10762.0,15705.0 -0,Ionia County,26067.0,MI,45.99,51.82,12565.0,14156.0 -0,Clinton County,26037.0,MI,49.54,48.85,20005.0,19726.0 -0,Power County,16077.0,ID,36.14,61.72,1027.0,1754.0 -0,Erie County,36029.0,NY,57.99,40.46,256299.0,178815.0 -0,Union County,46127.0,SD,42.12,55.97,3244.0,4310.0 -0,Clay County,46027.0,SD,61.01,36.78,3808.0,2296.0 -0,Fayette County,19065.0,IA,57.59,40.99,5908.0,4205.0 -0,Clayton County,19043.0,IA,57.79,40.62,5195.0,3651.0 -0,Erie County,36029.0,NY,57.99,40.46,256299.0,178815.0 -0,Montgomery County,36057.0,NY,45.01,53.09,9080.0,10711.0 -0,Ontario County,36069.0,NY,49.2,49.34,25103.0,25171.0 -0,Bannock County,16005.0,ID,42.14,55.14,14792.0,19356.0 -0,Caribou County,16029.0,ID,16.75,80.44,553.0,2656.0 -0,Seneca County,36099.0,NY,50.35,47.74,7422.0,7038.0 -0,Sioux County,31165.0,NE,15.98,82.38,117.0,603.0 -0,Sheridan County,31161.0,NE,18.44,78.84,454.0,1941.0 -0,Dawes County,31045.0,NE,34.04,62.94,1285.0,2376.0 -0,Boyd County,31015.0,NE,22.52,75.59,250.0,839.0 -0,Keya Paha County,31103.0,NE,21.58,76.74,115.0,409.0 -0,Cherry County,31031.0,NE,19.58,77.15,599.0,2360.0 -0,Jackson County,41029.0,OR,48.58,48.53,49090.0,49043.0 -0,Livingston County,36051.0,NY,45.29,53.17,13655.0,16030.0 -0,Rensselaer County,36083.0,NY,53.73,44.39,39753.0,32840.0 -0,Schenectady County,36093.0,NY,55.28,42.61,38611.0,29758.0 -0,Curry County,41015.0,OR,42.41,53.89,5230.0,6646.0 -0,Twin Falls County,16083.0,ID,30.42,67.15,8621.0,19032.0 -0,Plymouth County,19149.0,IA,37.0,62.06,4629.0,7765.0 -0,Buena Vista County,19021.0,IA,48.41,50.17,4075.0,4223.0 -0,Cherokee County,19035.0,IA,45.4,52.98,2890.0,3372.0 -0,Pocahontas County,19151.0,IA,44.88,53.3,1800.0,2138.0 -0,Wright County,19197.0,IA,48.51,50.01,3102.0,3198.0 -0,Humboldt County,19091.0,IA,42.17,56.52,2160.0,2895.0 -0,Franklin County,19069.0,IA,50.02,48.58,2575.0,2501.0 -0,Butler County,19023.0,IA,46.94,51.63,3364.0,3700.0 -0,Bremer County,19017.0,IA,53.92,44.6,6940.0,5741.0 -0,Otsego County,36077.0,NY,51.95,46.04,13570.0,12026.0 -0,Holt County,31089.0,NE,21.89,75.31,1089.0,3746.0 -0,Macomb County,26099.0,MI,53.38,44.77,223784.0,187663.0 -0,Oakland County,26125.0,MI,56.53,42.02,372566.0,276956.0 -0,Essex County,25009.0,MA,59.12,38.8,208976.0,137129.0 -0,Knox County,31107.0,NE,30.73,66.8,1255.0,2728.0 -0,Cedar County,31027.0,NE,28.51,69.77,1190.0,2912.0 -0,Wyoming County,36121.0,NY,36.11,62.25,6379.0,10998.0 -0,Green County,55045.0,WI,62.06,36.31,11502.0,6730.0 -0,Jerome County,16053.0,ID,26.2,71.52,1794.0,4897.0 -0,Rock County,55105.0,WI,63.82,34.56,50529.0,27364.0 -0,Brown County,31017.0,NE,19.85,77.09,311.0,1208.0 -0,Walworth County,55127.0,WI,47.95,50.54,24177.0,25485.0 -0,Racine County,55101.0,WI,53.07,45.66,53408.0,45954.0 -0,Schoharie County,36095.0,NY,41.72,56.04,6009.0,8071.0 -0,Albany County,36001.0,NY,63.79,34.35,93937.0,50586.0 -0,Lafayette County,55065.0,WI,60.43,38.1,4732.0,2984.0 -0,Rock County,31149.0,NE,17.35,79.9,139.0,640.0 -0,Cortland County,36023.0,NY,54.11,44.15,11861.0,9678.0 -0,Josephine County,41033.0,OR,41.41,54.63,17412.0,22973.0 -0,Livingston County,26093.0,MI,42.5,55.79,42349.0,55592.0 -0,Ingham County,26065.0,MI,65.85,32.57,93994.0,46483.0 -0,Eaton County,26045.0,MI,53.36,44.95,30742.0,25900.0 -0,Barry County,26015.0,MI,44.0,53.76,13449.0,16431.0 -0,Allegan County,26005.0,MI,43.71,54.38,24165.0,30061.0 -0,Yates County,36123.0,NY,47.57,51.25,4890.0,5269.0 -0,Dixon County,31051.0,NE,33.86,63.89,946.0,1785.0 -0,Berkshire County,25003.0,MA,74.94,22.5,49558.0,14876.0 -0,Chenango County,36017.0,NY,48.45,49.59,10100.0,10337.0 -0,Franklin County,25011.0,MA,72.46,24.77,27919.0,9545.0 -0,Middlesex County,25017.0,MA,63.98,33.85,464484.0,245766.0 -0,Worcester County,25027.0,MA,55.59,41.83,202107.0,152101.0 -0,Cassia County,16031.0,ID,16.99,80.45,1332.0,6309.0 -0,Dubuque County,19061.0,IA,59.66,38.89,28611.0,18651.0 -0,Kenosha County,55059.0,WI,58.18,40.12,45836.0,31609.0 -0,Essex County,25009.0,MA,59.12,38.8,208976.0,137129.0 -0,Delaware County,19055.0,IA,52.23,46.21,4649.0,4113.0 -0,Webster County,19187.0,IA,53.45,44.93,9917.0,8337.0 -0,Buchanan County,19019.0,IA,58.52,40.04,6050.0,4139.0 -0,Black Hawk County,19013.0,IA,60.49,38.07,39184.0,24662.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Tompkins County,36109.0,NY,70.09,28.03,29826.0,11927.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Goshen County,56015.0,WY,30.99,66.68,1832.0,3942.0 -0,Platte County,56031.0,WY,30.86,65.83,1407.0,3002.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Bear Lake County,16007.0,ID,17.06,80.77,502.0,2377.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Steuben County,36101.0,NY,40.92,57.75,17148.0,24203.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Chautauqua County,36013.0,NY,49.54,48.6,29129.0,28579.0 -0,Woodbury County,19193.0,IA,49.07,49.59,21983.0,22219.0 -0,Sac County,19161.0,IA,44.65,53.53,2256.0,2705.0 -0,Ida County,19093.0,IA,40.99,57.4,1454.0,2036.0 -0,Calhoun County,19025.0,IA,45.06,52.76,2341.0,2741.0 -0,Hamilton County,19079.0,IA,49.74,48.44,4018.0,3913.0 -0,Hardin County,19083.0,IA,49.59,48.71,4393.0,4315.0 -0,Grundy County,19075.0,IA,40.86,57.78,2790.0,3945.0 -0,Hampshire County,25015.0,MA,71.47,25.91,56869.0,20618.0 -0,Schuyler County,36097.0,NY,45.73,52.81,3933.0,4542.0 -0,Saint Clair County,26147.0,MI,50.28,47.63,40677.0,38536.0 -0,Cattaraugus County,36009.0,NY,43.86,54.48,14307.0,17770.0 -0,Dakota County,31043.0,NE,46.81,51.47,2994.0,3292.0 -0,Allegany County,36003.0,NY,38.12,59.83,7016.0,11013.0 -0,Delaware County,36025.0,NY,46.41,51.62,9462.0,10524.0 -0,Jo Daviess County,17085.0,IL,54.49,44.0,6403.0,5170.0 -0,Columbia County,36021.0,NY,55.85,42.43,17556.0,13337.0 -0,Stephenson County,17177.0,IL,52.53,45.86,11349.0,9909.0 -0,Winnebago County,17201.0,IL,55.57,42.76,70034.0,53886.0 -0,Oneida County,16071.0,ID,17.62,79.74,381.0,1724.0 -0,McHenry County,17111.0,IL,51.91,46.56,72288.0,64845.0 -0,Boone County,17007.0,IL,51.15,46.95,11333.0,10403.0 -0,Lake County,17097.0,IL,59.26,39.63,177242.0,118545.0 -0,Greene County,36039.0,NY,44.1,53.99,9850.0,12059.0 -0,Wayne County,26163.0,MI,74.14,24.66,660085.0,219582.0 -0,Suffolk County,25025.0,MA,76.94,21.24,207127.0,57194.0 -0,Pierce County,31139.0,NE,24.27,73.93,783.0,2385.0 -0,Box Butte County,31013.0,NE,37.88,58.89,1886.0,2932.0 -0,Antelope County,31003.0,NE,23.77,74.82,757.0,2383.0 -0,Washtenaw County,26161.0,MI,69.78,28.83,130578.0,53946.0 -0,Carbon County,56007.0,WY,34.08,63.19,2336.0,4331.0 -0,Albany County,56001.0,WY,50.5,46.36,8644.0,7936.0 -0,Franklin County,16041.0,ID,11.83,83.7,600.0,4246.0 -0,Jackson County,26075.0,MI,50.31,47.91,37480.0,35692.0 -0,Calhoun County,26025.0,MI,53.84,44.48,34561.0,28553.0 -0,Van Buren County,26159.0,MI,53.47,44.68,18588.0,15534.0 -0,Kalamazoo County,26077.0,MI,58.92,39.42,77051.0,51554.0 -0,Broome County,36007.0,NY,53.14,45.11,47204.0,40077.0 -0,Tioga County,36107.0,NY,43.98,54.2,10172.0,12536.0 -0,Jackson County,19097.0,IA,61.3,36.9,6102.0,3673.0 -0,Wayne County,26163.0,MI,74.14,24.66,660085.0,219582.0 -0,Wayne County,31179.0,NE,32.8,65.73,1249.0,2503.0 -0,Norfolk County,25021.0,MA,58.18,39.67,200675.0,136841.0 -0,Hampden County,25013.0,MA,61.43,36.09,121454.0,71350.0 -0,Norfolk County,25021.0,MA,58.18,39.67,200675.0,136841.0 -0,Suffolk County,25025.0,MA,76.94,21.24,207127.0,57194.0 -0,Plymouth County,25023.0,MA,52.77,45.19,131817.0,112904.0 -0,Plymouth County,25023.0,MA,52.77,45.19,131817.0,112904.0 -0,Benton County,19011.0,IA,51.47,47.02,7058.0,6447.0 -0,Linn County,19113.0,IA,60.02,38.49,68037.0,43626.0 -0,Tama County,19171.0,IA,55.36,43.16,4899.0,3820.0 -0,Jones County,19105.0,IA,54.44,44.03,5446.0,4405.0 -0,Chemung County,36015.0,NY,48.81,50.04,18888.0,19364.0 -0,Thurston County,31173.0,NE,52.68,45.72,1120.0,972.0 -0,Sweetwater County,56037.0,WY,34.5,62.02,5762.0,10360.0 -0,Erie County,42049.0,PA,59.34,39.43,75775.0,50351.0 -0,Norfolk County,25021.0,MA,58.18,39.67,200675.0,136841.0 -0,Berrien County,26021.0,MI,51.99,46.52,40381.0,36130.0 -0,Monona County,19133.0,IA,47.85,50.27,2295.0,2411.0 -0,Marshall County,19127.0,IA,53.72,44.37,10023.0,8278.0 -0,Carroll County,19027.0,IA,51.04,47.39,5302.0,4922.0 -0,Crawford County,19047.0,IA,51.66,46.52,3715.0,3345.0 -0,Boone County,19015.0,IA,52.81,45.18,7356.0,6293.0 -0,Greene County,19073.0,IA,49.35,48.9,2371.0,2349.0 -0,Story County,19169.0,IA,57.0,40.78,26548.0,18995.0 -0,Ogle County,17141.0,IL,45.28,52.89,11253.0,13144.0 -0,Carroll County,17015.0,IL,51.67,46.86,3965.0,3596.0 -0,Wayne County,26163.0,MI,74.14,24.66,660085.0,219582.0 -0,Ulster County,36111.0,NY,60.93,37.35,54320.0,33300.0 -0,Cook County,17031.0,IL,76.21,22.82,1629024.0,487736.0 -0,DeKalb County,17037.0,IL,57.53,40.76,25784.0,18266.0 -0,Kane County,17089.0,IL,55.23,43.44,106756.0,83963.0 -0,Grant County,31075.0,NE,11.17,86.65,41.0,318.0 -0,Bristol County,25005.0,MA,60.41,37.24,146861.0,90531.0 -0,Monroe County,26115.0,MI,51.27,46.92,39180.0,35858.0 -0,Hooker County,31091.0,NE,17.12,81.05,75.0,355.0 -0,Cuming County,31039.0,NE,31.17,66.85,1274.0,2732.0 -0,Madison County,31119.0,NE,29.49,68.74,4142.0,9655.0 -0,Stanton County,31167.0,NE,26.61,71.38,664.0,1781.0 -0,Thomas County,31171.0,NE,13.08,84.87,51.0,331.0 -0,Wheeler County,31183.0,NE,21.82,75.91,96.0,334.0 -0,Wayne County,26163.0,MI,74.14,24.66,660085.0,219582.0 -0,Blaine County,31009.0,NE,13.61,84.18,43.0,266.0 -0,Loup County,31115.0,NE,21.88,76.84,86.0,302.0 -0,Garfield County,31071.0,NE,20.58,77.67,212.0,800.0 -0,Wayne County,26163.0,MI,74.14,24.66,660085.0,219582.0 -0,Lenawee County,26091.0,MI,51.62,46.56,24640.0,22225.0 -0,Dutchess County,36027.0,NY,53.71,45.07,71060.0,59628.0 -0,Barnstable County,25001.0,MA,56.15,42.11,74264.0,55694.0 -0,Wayne County,26163.0,MI,74.14,24.66,660085.0,219582.0 -0,Branch County,26023.0,MI,46.01,52.14,8413.0,9534.0 -0,Hillsdale County,26059.0,MI,42.86,54.87,8765.0,11221.0 -0,Saint Joseph County,26149.0,MI,47.94,50.14,12322.0,12886.0 -0,Cass County,26027.0,MI,51.25,47.14,12083.0,11114.0 -0,Litchfield County,9005.0,CT,51.6,46.7,51041.0,46173.0 -0,Burt County,31021.0,NE,41.72,56.3,1413.0,1907.0 -0,Hartford County,9003.0,CT,65.11,33.7,268721.0,138984.0 -0,Tolland County,9013.0,CT,59.7,38.8,45053.0,29266.0 -0,Clinton County,19045.0,IA,60.75,37.72,15018.0,9324.0 -0,Windham County,9015.0,CT,56.4,41.7,28673.0,21210.0 -0,Providence County,44007.0,RI,66.4,31.97,167704.0,80748.0 -0,Sullivan County,36105.0,NY,54.04,44.58,16850.0,13900.0 -0,Siskiyou County,6093.0,CA,43.3,53.7,9292.0,11520.0 -0,Garden County,31069.0,NE,24.87,74.17,283.0,844.0 -0,Morrill County,31123.0,NE,23.69,73.37,557.0,1725.0 -0,Cache County,49005.0,UT,24.91,70.47,10294.0,29127.0 -0,Scotts Bluff County,31157.0,NE,32.21,65.91,4745.0,9708.0 -0,Rich County,49033.0,UT,15.31,82.6,154.0,831.0 -0,Bradford County,42015.0,PA,39.97,58.39,10306.0,15057.0 -0,Tioga County,42117.0,PA,35.53,62.98,6390.0,11326.0 -0,Box Elder County,49003.0,UT,17.37,79.9,3311.0,15228.0 -0,Humboldt County,32013.0,NV,34.1,64.0,1909.0,3586.0 -0,Elko County,32007.0,NV,28.6,69.0,4541.0,10969.0 -0,McKean County,42083.0,PA,40.54,57.84,6465.0,9224.0 -0,Potter County,42105.0,PA,30.64,68.06,2300.0,5109.0 -0,Del Norte County,6015.0,CA,45.4,52.1,4323.0,4967.0 -0,Wayne County,42127.0,PA,43.32,55.63,9892.0,12702.0 -0,Susquehanna County,42115.0,PA,43.46,55.13,8381.0,10633.0 -0,Warren County,42123.0,PA,46.1,52.3,8537.0,9685.0 -0,Modoc County,6049.0,CA,29.7,67.4,1313.0,2981.0 -0,Washoe County,32031.0,NV,55.6,42.9,99671.0,76880.0 -0,DuPage County,17043.0,IL,54.72,43.93,228698.0,183626.0 -0,Ashtabula County,39007.0,OH,55.8,42.2,25027.0,18949.0 -0,Cedar County,19031.0,IA,54.02,44.38,5221.0,4289.0 -0,Whiteside County,17195.0,IL,58.01,40.45,15607.0,10883.0 -0,Boone County,31011.0,NE,26.16,72.0,742.0,2042.0 -0,Lee County,17103.0,IL,47.59,50.61,7765.0,8258.0 -0,Harrison County,19085.0,IA,46.91,51.58,3555.0,3909.0 -0,Iowa County,19095.0,IA,49.17,49.01,4202.0,4188.0 -0,Dallas County,19049.0,IA,46.41,51.94,15149.0,16954.0 -0,Shelby County,19165.0,IA,44.37,54.05,2863.0,3488.0 -0,Audubon County,19009.0,IA,50.63,47.57,1739.0,1634.0 -0,Poweshiek County,19157.0,IA,55.02,43.27,5519.0,4340.0 -0,Polk County,19153.0,IA,56.43,41.83,120984.0,89668.0 -0,Jasper County,19099.0,IA,52.78,45.28,10250.0,8794.0 -0,Guthrie County,19077.0,IA,44.89,52.57,2625.0,3074.0 -0,Johnson County,19103.0,IA,69.92,28.41,51027.0,20732.0 -0,Lake County,39085.0,OH,49.6,48.7,60155.0,59142.0 -0,Crawford County,42039.0,PA,44.0,54.41,16780.0,20750.0 -0,Rock Island County,17161.0,IL,61.71,37.08,42210.0,25364.0 -0,Bristol County,44001.0,RI,62.63,35.88,16162.0,9260.0 -0,Scott County,19163.0,IA,56.65,42.1,48927.0,36365.0 -0,Kent County,44003.0,RI,57.85,40.37,48406.0,33780.0 -0,Elkhart County,18039.0,IN,43.9,55.1,31398.0,39396.0 -0,Saint Joseph County,18141.0,IN,58.0,41.0,68710.0,48510.0 -0,LaPorte County,18091.0,IN,60.2,38.2,28258.0,17918.0 -0,Steuben County,18151.0,IN,44.4,54.3,6284.0,7674.0 -0,LaGrange County,18087.0,IN,38.6,60.1,3663.0,5702.0 -0,Barnstable County,25001.0,MA,56.15,42.11,74264.0,55694.0 -0,Colfax County,31037.0,NE,35.12,63.0,1125.0,2018.0 -0,Platte County,31141.0,NE,28.29,69.84,3796.0,9373.0 -0,Dodge County,31053.0,NE,43.02,55.03,6689.0,8557.0 -0,McPherson County,31117.0,NE,15.36,81.91,45.0,240.0 -0,Arthur County,31005.0,NE,14.83,82.51,39.0,217.0 -0,Greeley County,31077.0,NE,38.2,59.63,458.0,715.0 -0,Monroe County,26115.0,MI,51.27,46.92,39180.0,35858.0 -0,Custer County,31041.0,NE,21.37,77.11,1192.0,4301.0 -0,Logan County,31113.0,NE,19.47,78.61,81.0,327.0 -0,Valley County,31175.0,NE,29.14,68.39,706.0,1657.0 -0,Lucas County,39095.0,OH,65.0,33.5,142852.0,73706.0 -0,Will County,17197.0,IL,56.0,42.8,160406.0,122597.0 -0,Kendall County,17093.0,IL,53.06,45.85,24742.0,21380.0 -0,Barnstable County,25001.0,MA,56.15,42.11,74264.0,55694.0 -0,Fulton County,39051.0,OH,45.1,53.2,9900.0,11689.0 -0,Geauga County,39055.0,OH,41.6,56.9,21250.0,29096.0 -0,New London County,9011.0,CT,59.9,38.8,74776.0,48491.0 -0,Lake County,18089.0,IN,66.7,32.5,139301.0,67742.0 -0,Porter County,18127.0,IN,53.0,45.8,39178.0,33857.0 -0,Williams County,39171.0,OH,44.4,53.7,8174.0,9880.0 -0,Banner County,31007.0,NE,14.9,83.65,62.0,348.0 -0,Washington County,31177.0,NE,35.96,62.26,3711.0,6425.0 -0,Newport County,44005.0,RI,60.89,37.56,25479.0,15717.0 -0,Fairfield County,9001.0,CT,58.7,40.5,242936.0,167736.0 -0,Newport County,44005.0,RI,60.89,37.56,25479.0,15717.0 -0,Laramie County,56021.0,WY,38.61,58.98,16072.0,24549.0 -0,Washington County,44009.0,RI,68.88,29.54,116156.0,49810.0 -0,Wyoming County,42131.0,PA,45.55,53.15,5985.0,6983.0 -0,Newport County,44005.0,RI,60.89,37.56,25479.0,15717.0 -0,Newport County,44005.0,RI,60.89,37.56,25479.0,15717.0 -0,Middlesex County,9007.0,CT,60.7,37.7,52983.0,32918.0 -0,Barnstable County,25001.0,MA,56.15,42.11,74264.0,55694.0 -0,New Haven County,9009.0,CT,61.0,37.8,233589.0,144650.0 -0,Lackawanna County,42069.0,PA,62.59,36.6,67520.0,39488.0 -0,Orange County,36071.0,NY,51.54,47.4,78326.0,72042.0 -0,La Salle County,17099.0,IL,54.68,43.58,27443.0,21872.0 -0,Elk County,42047.0,PA,51.08,46.78,7290.0,6676.0 -0,Forest County,42053.0,PA,42.47,55.89,1038.0,1366.0 -0,Venango County,42121.0,PA,39.64,58.86,9238.0,13718.0 -0,Erie County,39043.0,OH,56.1,42.3,23148.0,17432.0 -0,Barnstable County,25001.0,MA,56.15,42.11,74264.0,55694.0 -0,Wood County,39173.0,OH,52.7,45.6,34285.0,29648.0 -0,Cameron County,42023.0,PA,39.15,58.93,879.0,1323.0 -0,Bristol County,25005.0,MA,60.41,37.24,146861.0,90531.0 -0,Pike County,42103.0,PA,47.33,51.55,11493.0,12518.0 -0,Muscatine County,19139.0,IA,57.12,41.47,10920.0,7929.0 -0,Lycoming County,42081.0,PA,37.33,61.5,18381.0,30280.0 -0,Sullivan County,42113.0,PA,39.52,59.01,1233.0,1841.0 -0,Bureau County,17011.0,IL,51.94,46.23,8889.0,7911.0 -0,Henry County,17073.0,IL,53.18,45.44,13181.0,11263.0 -0,Uinta County,56041.0,WY,27.64,68.75,2317.0,5763.0 -0,Newport County,44005.0,RI,60.89,37.56,25479.0,15717.0 -0,DeKalb County,18033.0,IN,41.8,57.0,7175.0,9780.0 -0,Noble County,18113.0,IN,41.6,57.0,7064.0,9673.0 -0,Nance County,31125.0,NE,32.16,65.38,549.0,1116.0 -0,Putnam County,36079.0,NY,45.75,53.22,21613.0,25145.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Lorain County,39093.0,OH,58.1,40.2,85276.0,59068.0 -0,Washington County,19183.0,IA,48.65,49.38,5170.0,5247.0 -0,Warren County,19181.0,IA,49.43,48.81,12299.0,12144.0 -0,Keokuk County,19107.0,IA,46.97,50.59,2518.0,2712.0 -0,Madison County,19121.0,IA,44.02,54.0,3733.0,4579.0 -0,Mahaska County,19123.0,IA,40.83,57.36,4464.0,6271.0 -0,Marion County,19125.0,IA,43.58,54.35,7421.0,9256.0 -0,Pottawattamie County,19155.0,IA,48.29,50.18,20436.0,21237.0 -0,Cass County,19029.0,IA,43.69,54.5,3211.0,4006.0 -0,Adair County,19001.0,IA,47.47,50.83,1924.0,2060.0 -0,Trumbull County,39155.0,OH,60.0,37.6,64145.0,40164.0 -0,Mercer County,42085.0,PA,49.07,49.36,26411.0,26565.0 -0,Erie County,39043.0,OH,56.1,42.3,23148.0,17432.0 -0,Henry County,39069.0,OH,42.6,55.5,6320.0,8239.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Marshall County,18099.0,IN,42.5,56.1,7889.0,10406.0 -0,Clinton County,42035.0,PA,47.98,50.73,7097.0,7504.0 -0,Humboldt County,6023.0,CA,62.3,34.1,39692.0,21713.0 -0,Grundy County,17063.0,IL,49.9,48.2,11063.0,10687.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Butler County,31023.0,NE,31.0,66.61,1190.0,2557.0 -0,Saunders County,31155.0,NE,36.89,60.6,3767.0,6188.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Kosciusko County,18085.0,IN,30.6,68.0,9236.0,20488.0 -0,Cheyenne County,31033.0,NE,24.24,73.82,1173.0,3572.0 -0,Clarion County,42031.0,PA,38.03,60.44,6756.0,10737.0 -0,Weber County,49057.0,UT,34.97,62.52,25666.0,45885.0 -0,Starke County,18149.0,IN,50.5,47.3,4778.0,4473.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Luzerne County,42079.0,PA,53.63,45.22,72492.0,61127.0 -0,Defiance County,39039.0,OH,43.8,54.2,8399.0,10407.0 -0,Louisa County,19115.0,IA,51.28,47.03,2523.0,2314.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Keith County,31101.0,NE,24.55,74.14,974.0,2942.0 -0,Lincoln County,31111.0,NE,31.0,66.46,5046.0,10817.0 -0,Nantucket County,25019.0,MA,67.3,30.78,4073.0,1863.0 -0,Polk County,31143.0,NE,26.27,71.65,668.0,1822.0 -0,Kimball County,31105.0,NE,24.24,74.32,439.0,1346.0 -0,Merrick County,31121.0,NE,28.74,69.22,986.0,2375.0 -0,Howard County,31093.0,NE,36.15,61.65,1083.0,1847.0 -0,Sherman County,31163.0,NE,37.21,60.43,585.0,950.0 -0,Douglas County,31055.0,NE,51.53,46.89,116810.0,106291.0 -0,Morgan County,49029.0,UT,16.56,79.57,689.0,3311.0 -0,Jefferson County,42065.0,PA,34.29,64.13,6447.0,12057.0 -0,Trinity County,6105.0,CA,50.7,46.1,3233.0,2940.0 -0,Westchester County,36119.0,NY,63.39,35.79,261810.0,147824.0 -0,Sussex County,34037.0,NJ,38.89,59.58,28840.0,44184.0 -0,Portage County,39133.0,OH,53.5,44.5,41856.0,34822.0 -0,New London County,9011.0,CT,59.9,38.8,74776.0,48491.0 -0,Nantucket County,25019.0,MA,67.3,30.78,4073.0,1863.0 -0,Mercer County,17131.0,IL,55.23,43.32,4887.0,3833.0 -0,Putnam County,17155.0,IL,56.94,41.29,1900.0,1378.0 -0,Rockland County,36087.0,NY,52.61,46.71,69543.0,61752.0 -0,Nantucket County,25019.0,MA,67.3,30.78,4073.0,1863.0 -0,Columbia County,42037.0,PA,47.14,51.59,13230.0,14477.0 -0,Kankakee County,17091.0,IL,51.55,46.92,24750.0,22527.0 -0,Whitley County,18183.0,IN,38.6,60.1,5862.0,9124.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Huron County,39077.0,OH,47.2,50.4,12076.0,12884.0 -0,Jasper County,18073.0,IN,39.2,59.6,5044.0,7669.0 -0,Medina County,39103.0,OH,45.2,53.3,40924.0,48189.0 -0,Allen County,18003.0,IN,47.4,51.8,71263.0,77793.0 -0,Dukes County,25007.0,MA,74.98,23.14,7913.0,2442.0 -0,Seneca County,39147.0,OH,47.7,50.4,13087.0,13823.0 -0,Clearfield County,42033.0,PA,43.05,55.19,14555.0,18662.0 -0,Summit County,49043.0,UT,56.71,41.38,9532.0,6956.0 -0,Centre County,42027.0,PA,55.37,43.55,41950.0,32992.0 -0,Monroe County,42089.0,PA,57.64,41.34,39453.0,28293.0 -0,Paulding County,39125.0,OH,42.6,54.4,4165.0,5317.0 -0,Stark County,17175.0,IL,46.68,52.05,1357.0,1513.0 -0,Washington County,44009.0,RI,68.88,29.54,116156.0,49810.0 -0,Deuel County,31049.0,NE,24.47,73.72,243.0,732.0 -0,Newton County,18111.0,IN,43.4,54.6,2625.0,3301.0 -0,Passaic County,34031.0,NJ,60.44,38.72,113257.0,72552.0 -0,Sarpy County,31153.0,NE,41.18,57.06,28010.0,38816.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Lassen County,6035.0,CA,31.5,65.7,3586.0,7483.0 -0,Shasta County,6089.0,CA,35.9,61.7,28867.0,49588.0 -0,Northumberland County,42097.0,PA,42.22,56.04,14329.0,19018.0 -0,Fulton County,18049.0,IN,41.1,57.2,3702.0,5147.0 -0,Hamilton County,31081.0,NE,27.76,70.62,1332.0,3389.0 -0,Pulaski County,18131.0,IN,41.3,56.8,2466.0,3388.0 -0,Montour County,42093.0,PA,41.93,57.01,3364.0,4574.0 -0,Butler County,42019.0,PA,35.68,63.12,32260.0,57074.0 -0,Armstrong County,42005.0,PA,37.03,61.64,11138.0,18542.0 -0,Hancock County,39063.0,OH,37.5,60.6,13870.0,22420.0 -0,Putnam County,39137.0,OH,28.3,70.0,5281.0,13072.0 -0,Jefferson County,19101.0,IA,58.74,38.51,5070.0,3324.0 -0,Henry County,19087.0,IA,46.38,51.42,4349.0,4822.0 -0,Wapello County,19179.0,IA,55.36,41.82,8820.0,6663.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Clarke County,19039.0,IA,49.92,47.67,2218.0,2118.0 -0,Lucas County,19117.0,IA,45.38,52.11,2029.0,2330.0 -0,Monroe County,19135.0,IA,46.42,51.64,1798.0,2000.0 -0,Mills County,19129.0,IA,40.87,57.44,2976.0,4183.0 -0,Montgomery County,19137.0,IA,43.99,54.61,2326.0,2887.0 -0,Adams County,19003.0,IA,50.68,47.42,1118.0,1046.0 -0,Union County,19175.0,IA,50.77,47.06,3000.0,2781.0 -0,Davis County,49011.0,UT,27.48,69.74,30477.0,77341.0 -0,Knox County,17095.0,IL,59.16,39.27,14191.0,9419.0 -0,Union County,42119.0,PA,42.14,56.66,7333.0,9859.0 -0,Marshall County,17123.0,IL,48.65,49.66,3081.0,3145.0 -0,Bergen County,34003.0,NJ,54.34,44.88,225367.0,186118.0 -0,Mahoning County,39099.0,OH,62.3,35.7,79173.0,45319.0 -0,Carbon County,42025.0,PA,50.01,48.13,13464.0,12957.0 -0,Lawrence County,42073.0,PA,46.82,51.9,19711.0,21851.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Livingston County,17105.0,IL,39.61,58.82,6189.0,9191.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Warren County,34041.0,NJ,42.15,56.19,20628.0,27500.0 -0,Morris County,34027.0,NJ,45.47,53.59,112275.0,132331.0 -0,Tooele County,49045.0,UT,33.63,63.44,5830.0,10998.0 -0,Des Moines County,19057.0,IA,60.58,37.54,12462.0,7721.0 -0,Henderson County,17071.0,IL,58.08,40.4,2215.0,1541.0 -0,Warren County,17187.0,IL,53.38,45.3,4286.0,3637.0 -0,Ashland County,39005.0,OH,37.0,60.2,9300.0,15158.0 -0,Cass County,31025.0,NE,39.21,58.74,4753.0,7120.0 -0,York County,31185.0,NE,24.47,73.81,1607.0,4848.0 -0,Hall County,31079.0,NE,36.93,61.01,7855.0,12977.0 -0,Dawson County,31047.0,NE,30.04,68.37,2399.0,5460.0 -0,Buffalo County,31019.0,NE,30.41,67.88,5867.0,13097.0 -0,Seward County,31159.0,NE,35.9,61.72,2703.0,4647.0 -0,Lancaster County,31109.0,NE,51.56,46.59,65734.0,59398.0 -0,Wabash County,18169.0,IN,39.3,59.4,5456.0,8238.0 -0,Iroquois County,17075.0,IL,34.15,63.95,4643.0,8695.0 -0,Huntington County,18069.0,IN,35.8,63.0,5843.0,10291.0 -0,Weld County,8123.0,CO,44.7,53.4,47292.0,56526.0 -0,Perkins County,31135.0,NE,21.83,76.9,310.0,1092.0 -0,Routt County,8107.0,CO,62.7,35.8,8270.0,4725.0 -0,Jackson County,8057.0,CO,30.3,68.4,277.0,624.0 -0,Moffat County,8081.0,CO,27.0,70.4,1582.0,4135.0 -0,Logan County,8075.0,CO,31.7,66.9,2846.0,6002.0 -0,Sedgwick County,8115.0,CO,34.6,63.4,468.0,857.0 -0,Daggett County,49009.0,UT,29.84,67.65,131.0,297.0 -0,Eureka County,32011.0,NV,19.8,77.5,144.0,564.0 -0,Lander County,32015.0,NV,27.7,70.4,577.0,1466.0 -0,Larimer County,8069.0,CO,54.0,44.3,89822.0,73641.0 -0,Miami County,18103.0,IN,39.4,58.9,5564.0,8312.0 -0,Crawford County,39033.0,OH,39.1,58.2,8288.0,12316.0 -0,Ford County,17053.0,IL,34.87,63.87,2227.0,4079.0 -0,Richland County,39139.0,OH,42.1,55.7,25727.0,34034.0 -0,Wyandot County,39175.0,OH,40.6,57.1,4461.0,6270.0 -0,Wayne County,39169.0,OH,41.6,56.3,21712.0,29342.0 -0,Van Wert County,39161.0,OH,35.3,62.6,5178.0,9168.0 -0,Stark County,39151.0,OH,51.7,46.3,96990.0,86743.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Peoria County,17143.0,IL,56.19,42.32,45906.0,34579.0 -0,Northampton County,42095.0,PA,55.5,43.18,75255.0,58551.0 -0,Pershing County,32027.0,NV,37.4,59.7,673.0,1075.0 -0,Schuylkill County,42107.0,PA,44.88,53.55,28300.0,33767.0 -0,Columbiana County,39029.0,OH,45.1,52.8,21882.0,25585.0 -0,Woodford County,17203.0,IL,35.92,62.57,6999.0,12191.0 -0,Adams County,18001.0,IN,36.5,62.2,4928.0,8404.0 -0,Allen County,39003.0,OH,38.8,59.6,19522.0,29940.0 -0,Salt Lake County,49035.0,UT,48.66,48.58,176988.0,176692.0 -0,Bronx County,36005.0,NY,88.71,10.93,338261.0,41683.0 -0,Wells County,18179.0,IN,33.7,65.1,4403.0,8504.0 -0,Nassau County,36059.0,NY,53.84,45.43,342185.0,288776.0 -0,White County,18181.0,IN,44.9,53.2,4839.0,5731.0 -0,Cass County,18017.0,IN,44.8,53.3,7011.0,8346.0 -0,Indiana County,42063.0,PA,45.75,52.88,17065.0,19727.0 -0,Essex County,34013.0,NJ,76.0,23.42,240306.0,74063.0 -0,Fremont County,19071.0,IA,47.46,51.08,1848.0,1989.0 -0,Page County,19145.0,IA,39.42,59.15,2900.0,4351.0 -0,Taylor County,19173.0,IA,44.51,53.11,1347.0,1607.0 -0,Van Buren County,19177.0,IA,42.85,55.04,1546.0,1986.0 -0,Davis County,19051.0,IA,44.04,53.18,1680.0,2029.0 -0,Ringgold County,19159.0,IA,45.97,52.1,1236.0,1401.0 -0,Decatur County,19053.0,IA,48.42,49.24,1986.0,2020.0 -0,Wayne County,19185.0,IA,45.54,52.52,1357.0,1565.0 -0,Appanoose County,19007.0,IA,48.09,49.97,2970.0,3086.0 -0,Snyder County,42109.0,PA,34.77,63.96,5382.0,9900.0 -0,New York County,36061.0,NY,85.7,13.47,572126.0,89906.0 -0,Uintah County,49047.0,UT,14.4,83.15,1462.0,8441.0 -0,Beaver County,42007.0,PA,47.93,50.77,40499.0,42895.0 -0,Mifflin County,42087.0,PA,32.57,66.23,5375.0,10929.0 -0,Duchesne County,49013.0,UT,15.86,81.63,911.0,4689.0 -0,Hardin County,39065.0,OH,38.2,59.1,5013.0,7749.0 -0,Hudson County,34017.0,NJ,72.94,26.2,154140.0,55360.0 -0,Humboldt County,6023.0,CA,62.3,34.1,39692.0,21713.0 -0,Lee County,19111.0,IA,57.02,41.0,9821.0,7062.0 -0,Queens County,36081.0,NY,75.09,24.25,480692.0,155221.0 -0,Hunterdon County,34019.0,NJ,42.63,55.97,29776.0,39092.0 -0,Lehigh County,42077.0,PA,57.12,41.57,87089.0,63382.0 -0,Otoe County,31131.0,NE,41.1,56.87,2915.0,4033.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Somerset County,34035.0,NJ,52.5,46.39,79321.0,70085.0 -0,McLean County,17113.0,IL,49.75,48.54,37689.0,36767.0 -0,Phillips County,8095.0,CO,27.5,71.3,622.0,1612.0 -0,Tazewell County,17179.0,IL,46.02,52.07,29384.0,33247.0 -0,Huntingdon County,42061.0,PA,35.54,63.04,6621.0,11745.0 -0,Blair County,42013.0,PA,37.31,61.59,19813.0,32708.0 -0,Kings County,36047.0,NY,79.43,19.99,603525.0,151872.0 -0,Benton County,18007.0,IN,41.0,57.2,1563.0,2183.0 -0,Union County,34039.0,NJ,63.67,35.47,141417.0,78768.0 -0,Carroll County,18015.0,IN,42.8,55.6,3736.0,4858.0 -0,Carroll County,39019.0,OH,46.0,50.9,6423.0,7097.0 -0,Mercer County,39107.0,OH,27.5,71.0,5853.0,15100.0 -0,Cambria County,42021.0,PA,49.42,48.72,32451.0,31995.0 -0,Fulton County,17057.0,IL,59.62,38.3,9732.0,6251.0 -0,Morrow County,39117.0,OH,37.1,60.5,6177.0,10067.0 -0,Marion County,39101.0,OH,44.4,53.3,12870.0,15454.0 -0,Frontier County,31063.0,NE,24.86,73.65,349.0,1034.0 -0,Adams County,31001.0,NE,35.47,62.47,4685.0,8252.0 -0,Gosper County,31073.0,NE,24.81,74.05,260.0,776.0 -0,Hayes County,31085.0,NE,15.37,83.36,85.0,461.0 -0,Chase County,31029.0,NE,18.49,80.1,341.0,1477.0 -0,Fillmore County,31059.0,NE,32.64,64.91,962.0,1913.0 -0,Saline County,31151.0,NE,50.92,46.35,2674.0,2434.0 -0,Clay County,31035.0,NE,25.72,71.78,780.0,2177.0 -0,Juniata County,42067.0,PA,31.59,66.77,3068.0,6484.0 -0,Wasatch County,49051.0,UT,33.9,63.65,2892.0,5430.0 -0,Kearney County,31099.0,NE,27.81,70.6,876.0,2224.0 -0,Auglaize County,39011.0,OH,28.6,69.8,6727.0,16395.0 -0,Phelps County,31137.0,NE,23.47,75.12,1050.0,3360.0 -0,Westmoreland County,42129.0,PA,41.11,57.83,72721.0,102294.0 -0,Berks County,42011.0,PA,53.92,44.73,97047.0,80513.0 -0,Allegheny County,42003.0,PA,57.28,41.81,373153.0,272347.0 -0,Holmes County,39075.0,OH,28.3,69.5,3141.0,7720.0 -0,Tuscarawas County,39157.0,OH,50.1,47.6,21498.0,20454.0 -0,Suffolk County,36103.0,NY,52.53,46.53,346549.0,307021.0 -0,Dauphin County,42043.0,PA,54.02,44.96,69975.0,58238.0 -0,Grant County,18053.0,IN,42.9,56.0,11293.0,14734.0 -0,Richmond County,36085.0,NY,47.61,51.66,79311.0,86062.0 -0,Queens County,36081.0,NY,75.09,24.25,480692.0,155221.0 -0,Hancock County,17067.0,IL,43.73,54.5,4141.0,5161.0 -0,Hancock County,54029.0,WV,41.63,56.87,5504.0,7518.0 -0,McDonough County,17109.0,IL,52.01,46.43,6783.0,6055.0 -0,Perry County,42099.0,PA,32.39,66.13,6396.0,13058.0 -0,Nassau County,36059.0,NY,53.84,45.43,342185.0,288776.0 -0,Clark County,29045.0,MO,45.49,51.56,1572.0,1782.0 -0,Queens County,36081.0,NY,75.09,24.25,480692.0,155221.0 -0,Bucks County,42017.0,PA,53.78,45.13,179031.0,150248.0 -0,Middlesex County,34023.0,NJ,60.37,38.53,193812.0,123695.0 -0,Scotland County,29199.0,MO,37.8,59.53,793.0,1249.0 -0,Jefferson County,39081.0,OH,49.1,48.9,17635.0,17559.0 -0,Schuyler County,29197.0,MO,39.08,57.44,775.0,1139.0 -0,Putnam County,29171.0,MO,29.71,68.02,695.0,1591.0 -0,Atchison County,29005.0,MO,33.6,65.05,1000.0,1936.0 -0,Mercer County,29129.0,MO,29.69,66.88,519.0,1169.0 -0,Nodaway County,29147.0,MO,43.97,54.49,4493.0,5568.0 -0,Utah County,49049.0,UT,18.8,77.71,29567.0,122224.0 -0,Harrison County,29081.0,MO,32.87,64.16,1287.0,2512.0 -0,Knox County,39083.0,OH,39.0,58.9,11014.0,16640.0 -0,Jay County,18075.0,IN,45.1,52.9,3748.0,4401.0 -0,Worth County,29227.0,MO,36.37,60.22,427.0,707.0 -0,Blackford County,18009.0,IN,49.2,49.4,2677.0,2690.0 -0,Howard County,18067.0,IN,46.3,52.4,17871.0,20248.0 -0,Tippecanoe County,18157.0,IN,55.2,43.6,37781.0,29822.0 -0,Nemaha County,31127.0,NE,35.69,61.43,1240.0,2134.0 -0,Lebanon County,42075.0,PA,39.98,58.86,23310.0,34314.0 -0,Logan County,39091.0,OH,35.7,62.3,7936.0,13848.0 -0,Morgan County,8087.0,CO,37.3,61.3,3813.0,6272.0 -0,Gage County,31067.0,NE,44.03,53.49,4473.0,5435.0 -0,Johnson County,31097.0,NE,43.32,54.12,914.0,1142.0 -0,Union County,39159.0,OH,35.1,63.2,8761.0,15744.0 -0,Vermilion County,17183.0,IL,49.42,48.84,16246.0,16054.0 -0,Grand County,8049.0,CO,48.6,49.7,4037.0,4128.0 -0,Shelby County,39149.0,OH,30.9,67.3,7317.0,15924.0 -0,Washington County,42125.0,PA,47.04,51.76,46122.0,50752.0 -0,Warren County,18171.0,IN,43.9,54.2,1755.0,2166.0 -0,Monmouth County,34025.0,NJ,47.58,51.32,148737.0,160433.0 -0,Coshocton County,39031.0,OH,45.6,51.4,7689.0,8675.0 -0,Montgomery County,42091.0,PA,59.99,39.19,253393.0,165552.0 -0,Tehama County,6103.0,CA,36.6,60.7,8945.0,14843.0 -0,Plumas County,6063.0,CA,42.8,54.7,4715.0,6035.0 -0,Delaware County,39041.0,OH,39.7,59.3,36653.0,54778.0 -0,Yuma County,8125.0,CO,24.9,73.3,1117.0,3286.0 -0,Washington County,8121.0,CO,21.1,77.6,529.0,1949.0 -0,Mason County,17125.0,IL,52.03,46.14,3542.0,3141.0 -0,Harrison County,39067.0,OH,47.3,49.7,3683.0,3872.0 -0,Clinton County,18023.0,IN,42.8,55.8,5307.0,6919.0 -0,Mercer County,34021.0,NJ,67.44,31.38,107926.0,50223.0 -0,Tipton County,18159.0,IN,41.5,56.9,3250.0,4452.0 -0,Brooke County,54009.0,WV,47.86,50.34,4717.0,4961.0 -0,Champaign County,17019.0,IL,57.76,40.25,48597.0,33871.0 -0,Sullivan County,29211.0,MO,40.89,56.01,1173.0,1607.0 -0,Gentry County,29075.0,MO,37.52,59.66,1235.0,1964.0 -0,Madison County,18095.0,IN,52.6,46.1,30152.0,26403.0 -0,Delaware County,18035.0,IN,56.9,42.0,28384.0,20916.0 -0,Fountain County,18045.0,IN,41.8,56.1,3094.0,4158.0 -0,Darke County,39037.0,OH,30.9,67.0,7964.0,17290.0 -0,Webster County,31181.0,NE,30.38,67.86,552.0,1233.0 -0,Franklin County,31061.0,NE,28.48,69.52,442.0,1079.0 -0,Nuckolls County,31129.0,NE,29.58,67.45,657.0,1498.0 -0,Dundy County,31057.0,NE,21.39,76.84,218.0,783.0 -0,Furnas County,31065.0,NE,23.88,74.1,556.0,1725.0 -0,Thayer County,31169.0,NE,32.34,65.78,860.0,1749.0 -0,Jefferson County,31095.0,NE,41.11,56.88,1520.0,2103.0 -0,Red Willow County,31145.0,NE,24.11,74.05,1216.0,3735.0 -0,Hitchcock County,31087.0,NE,25.09,72.59,346.0,1001.0 -0,Harlan County,31083.0,NE,22.76,75.25,402.0,1329.0 -0,Adair County,29001.0,MO,48.31,49.63,5735.0,5891.0 -0,Cumberland County,42041.0,PA,42.63,56.25,48306.0,63739.0 -0,Logan County,17107.0,IL,40.71,57.61,5250.0,7429.0 -0,Bedford County,42009.0,PA,27.0,71.84,6059.0,16124.0 -0,Lancaster County,42071.0,PA,43.65,55.48,99586.0,126568.0 -0,Randolph County,18135.0,IN,44.8,53.6,4839.0,5788.0 -0,Knox County,29103.0,MO,37.5,59.88,759.0,1212.0 -0,Franklin County,42055.0,PA,33.26,65.85,21169.0,41906.0 -0,Somerset County,42111.0,PA,36.62,61.66,12878.0,21686.0 -0,De Witt County,17039.0,IL,42.4,55.74,3308.0,4348.0 -0,Schuyler County,17169.0,IL,49.7,47.95,1900.0,1833.0 -0,Piatt County,17147.0,IL,42.88,55.46,3859.0,4991.0 -0,Champaign County,39021.0,OH,39.1,59.0,7385.0,11141.0 -0,Grundy County,29079.0,MO,33.33,63.42,1580.0,3006.0 -0,Boulder County,8013.0,CO,72.3,26.1,124159.0,44904.0 -0,Pawnee County,31133.0,NE,34.9,62.07,483.0,859.0 -0,Richardson County,31147.0,NE,38.13,59.02,1513.0,2342.0 -0,Holt County,29087.0,MO,30.46,68.14,802.0,1794.0 -0,Lewis County,29111.0,MO,40.8,57.62,1837.0,2594.0 -0,Chester County,42029.0,PA,54.19,44.98,137833.0,114421.0 -0,York County,42133.0,PA,42.65,56.26,82839.0,109268.0 -0,Rio Blanco County,8103.0,CO,20.8,77.4,655.0,2437.0 -0,Guernsey County,39059.0,OH,44.0,53.1,7625.0,9197.0 -0,Hamilton County,18057.0,IN,38.5,60.8,49704.0,78401.0 -0,Montgomery County,18107.0,IN,39.3,59.3,6013.0,9060.0 -0,Adams County,17001.0,IL,38.26,60.7,11794.0,18711.0 -0,Miami County,39109.0,OH,34.8,63.3,18372.0,33417.0 -0,Ohio County,54069.0,WV,43.98,54.73,8593.0,10694.0 -0,Burlington County,34005.0,NJ,58.8,40.16,131219.0,89626.0 -0,Boone County,18011.0,IN,36.6,62.4,9752.0,16622.0 -0,Belmont County,39013.0,OH,50.3,47.6,16302.0,15422.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Muskingum County,39119.0,OH,45.4,52.6,17730.0,20549.0 -0,Fulton County,42057.0,PA,24.99,73.61,1576.0,4642.0 -0,Menard County,17129.0,IL,41.86,56.81,2706.0,3672.0 -0,Butte County,6007.0,CA,49.8,47.5,49013.0,46706.0 -0,Vermillion County,18165.0,IN,56.1,42.2,4003.0,3010.0 -0,Fayette County,42051.0,PA,49.21,49.62,25866.0,26081.0 -0,Philadelphia County,42101.0,PA,83.08,16.34,595980.0,117221.0 -0,Daviess County,29061.0,MO,36.98,59.77,1400.0,2263.0 -0,Andrew County,29003.0,MO,38.05,60.06,3345.0,5279.0 -0,White Pine County,32033.0,NV,32.6,64.7,1230.0,2440.0 -0,Cass County,17017.0,IL,49.74,48.39,2690.0,2617.0 -0,Brown County,17009.0,IL,38.38,60.1,986.0,1544.0 -0,Garfield County,8045.0,CO,49.2,49.2,11357.0,11359.0 -0,Henry County,18065.0,IN,47.2,51.1,10059.0,10896.0 -0,Adams County,42001.0,PA,39.63,59.22,17633.0,26349.0 -0,Delaware County,42045.0,PA,60.22,38.81,178870.0,115273.0 -0,Macon County,17115.0,IL,49.76,48.71,25487.0,24948.0 -0,Broomfield County,8014.0,CO,54.9,43.3,16168.0,12757.0 -0,Macon County,29121.0,MO,37.25,61.36,2784.0,4586.0 -0,Clark County,39023.0,OH,47.9,50.4,31958.0,33634.0 -0,Linn County,29115.0,MO,44.48,52.94,2638.0,3140.0 -0,DeKalb County,29063.0,MO,36.13,61.69,1692.0,2889.0 -0,Marshall County,54051.0,WV,42.83,55.42,5996.0,7759.0 -0,Greene County,42059.0,PA,49.0,49.38,7829.0,7889.0 -0,Juab County,49023.0,UT,20.49,74.2,741.0,2683.0 -0,Wayne County,18177.0,IN,47.1,51.0,13459.0,14558.0 -0,Cheyenne County,20023.0,KS,21.56,76.64,323.0,1148.0 -0,Rawlins County,20153.0,KS,17.62,80.5,273.0,1247.0 -0,Mendocino County,6045.0,CA,69.6,26.8,27843.0,10721.0 -0,Jewell County,20089.0,KS,19.76,77.71,313.0,1231.0 -0,Smith County,20183.0,KS,20.24,77.99,446.0,1719.0 -0,Republic County,20157.0,KS,23.96,74.05,640.0,1978.0 -0,Washington County,20201.0,KS,22.11,75.44,659.0,2248.0 -0,Decatur County,20039.0,KS,22.16,76.81,343.0,1189.0 -0,Churchill County,32001.0,NV,33.3,65.1,3494.0,6832.0 -0,Norton County,20137.0,KS,20.58,77.76,497.0,1878.0 -0,Phillips County,20147.0,KS,19.69,78.93,525.0,2105.0 -0,Marshall County,20117.0,KS,35.42,62.69,1784.0,3157.0 -0,Adams County,8001.0,CO,58.2,39.9,93443.0,63976.0 -0,Brown County,20013.0,KS,30.1,68.21,1317.0,2985.0 -0,Nemaha County,20131.0,KS,26.72,71.23,1432.0,3817.0 -0,Doniphan County,20043.0,KS,31.29,66.55,1115.0,2372.0 -0,Camden County,34007.0,NJ,67.57,31.32,159259.0,73819.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Sangamon County,17167.0,IL,51.39,47.03,51300.0,46945.0 -0,Livingston County,29117.0,MO,37.16,60.94,2435.0,3993.0 -0,Shelby County,29205.0,MO,33.59,65.32,1114.0,2166.0 -0,Parke County,18121.0,IN,42.0,56.1,2924.0,3909.0 -0,Noble County,39121.0,OH,40.1,55.9,2474.0,3450.0 -0,Marion County,29127.0,MO,37.47,61.38,4703.0,7705.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Hancock County,18059.0,IN,34.7,64.3,11874.0,22008.0 -0,Fairfield County,39045.0,OH,40.7,57.8,29250.0,41580.0 -0,Gilpin County,8047.0,CO,59.2,38.0,1954.0,1253.0 -0,Perry County,39127.0,OH,47.1,50.1,7261.0,7721.0 -0,Marion County,18097.0,IN,63.8,35.4,241987.0,134313.0 -0,Eagle County,8037.0,CO,60.9,37.8,13187.0,8179.0 -0,Summit County,8117.0,CO,65.8,32.8,9802.0,4883.0 -0,Hendricks County,18063.0,IN,37.8,61.2,24548.0,39728.0 -0,Montgomery County,39113.0,OH,52.4,46.2,145997.0,128679.0 -0,Preble County,39135.0,OH,33.3,64.6,6999.0,13562.0 -0,Jefferson County,8059.0,CO,53.6,44.6,158153.0,131627.0 -0,Denver County,8031.0,CO,75.5,23.0,204882.0,62567.0 -0,Gloucester County,34015.0,NJ,55.42,43.26,77267.0,60315.0 -0,Edgar County,17045.0,IL,45.34,53.28,3743.0,4398.0 -0,Douglas County,17041.0,IL,38.63,59.9,3228.0,5005.0 -0,Morgan County,17137.0,IL,48.64,49.44,7467.0,7591.0 -0,Monroe County,39111.0,OH,53.1,43.9,3705.0,3066.0 -0,Putnam County,18133.0,IN,43.2,55.2,6334.0,8086.0 -0,Clear Creek County,8019.0,CO,57.8,39.9,3332.0,2300.0 -0,Greene County,39057.0,OH,40.1,58.5,33540.0,48936.0 -0,Pike County,17149.0,IL,39.71,58.52,3024.0,4457.0 -0,New Castle County,10003.0,DE,69.7,29.1,178768.0,74608.0 -0,Christian County,17021.0,IL,45.81,52.13,6918.0,7872.0 -0,Buchanan County,29021.0,MO,49.09,48.95,19164.0,19110.0 -0,Carbon County,49007.0,UT,44.59,52.6,3468.0,4091.0 -0,Sanpete County,49039.0,UT,18.6,75.98,1631.0,6664.0 -0,Pickaway County,39129.0,OH,38.3,60.0,9077.0,14228.0 -0,Glenn County,6021.0,CA,37.8,59.8,3734.0,5910.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Moultrie County,17139.0,IL,42.62,55.45,2668.0,3471.0 -0,Fayette County,18041.0,IN,46.4,52.0,4389.0,4917.0 -0,Rush County,18139.0,IN,42.3,56.0,3229.0,4271.0 -0,Scott County,17171.0,IL,41.92,55.96,1090.0,1455.0 -0,Caldwell County,29025.0,MO,39.75,58.15,1814.0,2654.0 -0,Salem County,34033.0,NJ,51.16,47.24,16044.0,14816.0 -0,Sierra County,6091.0,CA,37.3,58.2,743.0,1158.0 -0,Morgan County,39115.0,OH,44.9,52.1,2966.0,3440.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Clinton County,29049.0,MO,43.48,54.61,4545.0,5709.0 -0,Arapahoe County,8005.0,CO,55.7,42.8,148218.0,113866.0 -0,Lyon County,32019.0,NV,40.2,58.1,8405.0,12154.0 -0,Atlantic County,34001.0,NJ,56.98,41.92,67830.0,49902.0 -0,Union County,18161.0,IN,36.6,61.6,1224.0,2061.0 -0,Washington County,24043.0,MD,42.61,55.47,26245.0,34169.0 -0,Allegany County,24001.0,MD,35.95,61.88,10693.0,18405.0 -0,Garrett County,24023.0,MD,29.02,69.17,3736.0,8903.0 -0,Cecil County,24015.0,MD,41.57,56.14,17665.0,23855.0 -0,Monongalia County,54061.0,WV,51.11,47.26,17060.0,15775.0 -0,Preston County,54077.0,WV,35.65,62.11,4205.0,7325.0 -0,Harford County,24025.0,MD,39.38,58.19,48552.0,71751.0 -0,Wetzel County,54103.0,WV,45.6,51.8,2942.0,3342.0 -0,Baltimore County,24005.0,MD,56.22,41.66,214151.0,158714.0 -0,Carroll County,24013.0,MD,33.11,64.3,28060.0,54503.0 -0,Frederick County,24021.0,MD,48.58,49.62,54013.0,55170.0 -0,Fayette County,39047.0,OH,37.6,60.7,4401.0,7102.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Emery County,49015.0,UT,21.88,75.49,973.0,3358.0 -0,Chariton County,29041.0,MO,42.69,55.51,1799.0,2339.0 -0,Shelby County,18145.0,IN,39.8,58.8,6987.0,10333.0 -0,Morgan County,54065.0,WV,37.4,60.86,2721.0,4428.0 -0,Ralls County,29173.0,MO,40.15,58.75,2041.0,2987.0 -0,Coles County,17029.0,IL,50.77,47.57,11716.0,10978.0 -0,Monroe County,29137.0,MO,39.48,58.72,1703.0,2533.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Cloud County,20029.0,KS,27.7,70.12,1233.0,3121.0 -0,Jackson County,20085.0,KS,36.91,60.95,2308.0,3811.0 -0,Atchison County,20005.0,KS,45.07,52.72,3241.0,3791.0 -0,Shelby County,17173.0,IL,39.06,58.85,4245.0,6396.0 -0,Mineral County,54057.0,WV,32.48,65.96,3750.0,7616.0 -0,Washington County,39167.0,OH,6.6,90.5,1238.0,17019.0 -0,Marion County,54049.0,WV,49.22,48.73,11618.0,11501.0 -0,Johnson County,18081.0,IN,36.8,62.2,21553.0,36487.0 -0,Yuba County,6115.0,CA,41.4,56.1,8866.0,12007.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Morgan County,18109.0,IN,35.9,62.9,10330.0,18129.0 -0,Storey County,32029.0,NV,46.1,52.1,1102.0,1247.0 -0,Berkeley County,54003.0,WV,42.89,55.89,15994.0,20841.0 -0,Carroll County,29033.0,MO,33.83,65.12,1535.0,2955.0 -0,Randolph County,29175.0,MO,37.5,60.78,3984.0,6457.0 -0,Vigo County,18167.0,IN,57.3,41.5,25040.0,18121.0 -0,Clay County,18021.0,IN,43.5,55.0,4954.0,6267.0 -0,Tyler County,54095.0,WV,33.17,64.55,1241.0,2415.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Pike County,29163.0,MO,44.25,54.16,3487.0,4268.0 -0,Warren County,39165.0,OH,31.4,67.5,33398.0,71691.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Lake County,6033.0,CA,58.2,38.9,14854.0,9935.0 -0,Kit Carson County,8063.0,CO,26.5,71.3,912.0,2455.0 -0,Cumberland County,34011.0,NJ,60.14,38.51,34919.0,22360.0 -0,Rooks County,20163.0,KS,18.08,79.91,468.0,2068.0 -0,Sherman County,20181.0,KS,25.44,72.45,688.0,1959.0 -0,Thomas County,20193.0,KS,21.43,77.24,787.0,2837.0 -0,Osborne County,20141.0,KS,20.88,77.2,403.0,1490.0 -0,Sheridan County,20179.0,KS,18.46,80.52,254.0,1108.0 -0,Clay County,20027.0,KS,24.89,73.95,1009.0,2998.0 -0,Mitchell County,20123.0,KS,21.89,76.18,701.0,2440.0 -0,Graham County,20065.0,KS,22.84,74.49,325.0,1060.0 -0,Riley County,20161.0,KS,45.64,52.66,10495.0,12111.0 -0,Douglas County,8035.0,CO,40.8,58.0,61960.0,88108.0 -0,Elbert County,8039.0,CO,28.9,69.0,3819.0,9108.0 -0,Pottawatomie County,20149.0,KS,26.42,70.44,2599.0,6929.0 -0,Lincoln County,8073.0,CO,23.7,74.5,546.0,1717.0 -0,Park County,8093.0,CO,45.3,52.2,4250.0,4896.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Millard County,49027.0,UT,15.99,77.08,758.0,3653.0 -0,Hampshire County,54027.0,WV,35.74,62.57,2983.0,5222.0 -0,Platte County,29165.0,MO,46.17,52.62,21495.0,24460.0 -0,Franklin County,18047.0,IN,32.1,66.2,3404.0,7018.0 -0,Ray County,29177.0,MO,47.42,50.6,5241.0,5593.0 -0,Montgomery County,17135.0,IL,50.43,47.78,6491.0,6150.0 -0,Macoupin County,17117.0,IL,54.04,44.21,12090.0,9891.0 -0,Nevada County,6057.0,CA,51.4,46.1,28617.0,25663.0 -0,Greene County,17061.0,IL,45.1,52.57,2619.0,3053.0 -0,Ross County,39141.0,OH,45.4,52.6,14455.0,16759.0 -0,Ocean County,34029.0,NJ,40.17,58.58,110189.0,160677.0 -0,Jefferson County,54037.0,WV,51.85,47.03,11687.0,10600.0 -0,Grand County,49019.0,UT,50.7,45.89,2067.0,1871.0 -0,Clark County,17023.0,IL,45.15,53.2,3742.0,4409.0 -0,Atlantic County,34001.0,NJ,56.98,41.92,67830.0,49902.0 -0,Harford County,24025.0,MD,39.38,58.19,48552.0,71751.0 -0,Pleasants County,54073.0,WV,38.4,59.58,1142.0,1772.0 -0,Owen County,18119.0,IN,43.7,54.0,3570.0,4415.0 -0,Harrison County,54033.0,WV,42.62,55.93,13582.0,17824.0 -0,Frederick County,51069.0,VA,38.56,59.95,12961.0,20149.0 -0,Clay County,29047.0,MO,49.05,49.74,53761.0,54516.0 -0,Decatur County,18031.0,IN,37.1,61.5,3892.0,6449.0 -0,Taylor County,54091.0,WV,39.69,58.12,2462.0,3605.0 -0,Doddridge County,54017.0,WV,24.35,73.49,735.0,2218.0 -0,Atlantic County,34001.0,NJ,56.98,41.92,67830.0,49902.0 -0,Atlantic County,34001.0,NJ,56.98,41.92,67830.0,49902.0 -0,Jefferson County,20087.0,KS,39.58,58.32,3542.0,5220.0 -0,Leavenworth County,20103.0,KS,43.34,54.9,13255.0,16791.0 -0,Colusa County,6011.0,CA,40.0,58.1,2569.0,3733.0 -0,Saline County,29195.0,MO,47.85,50.39,4712.0,4962.0 -0,Wood County,54107.0,WV,34.93,63.62,12573.0,22896.0 -0,Calhoun County,17013.0,IL,52.72,45.24,1423.0,1221.0 -0,Vinton County,39163.0,OH,43.6,53.5,2463.0,3021.0 -0,Ritchie County,54085.0,WV,25.96,72.33,998.0,2781.0 -0,Kent County,24029.0,MD,49.43,48.95,4953.0,4905.0 -0,Lake County,8065.0,CO,61.93,35.91,1859.0,1078.0 -0,Cumberland County,17035.0,IL,38.62,59.31,2055.0,3156.0 -0,Baltimore City,24510.0,MD,87.16,11.66,214385.0,28681.0 -0,Howard County,24027.0,MD,59.99,38.14,87120.0,55393.0 -0,Mesa County,8077.0,CO,34.5,64.0,24008.0,44578.0 -0,Pitkin County,8097.0,CO,73.7,24.9,7349.0,2484.0 -0,Kent County,10001.0,DE,54.4,44.6,36392.0,29827.0 -0,Monroe County,18105.0,IN,65.6,33.4,41450.0,21118.0 -0,Bartholomew County,18005.0,IN,43.7,55.0,13567.0,17067.0 -0,Audrain County,29007.0,MO,41.13,57.2,4434.0,6167.0 -0,Montgomery County,24031.0,MD,71.58,27.0,314444.0,118608.0 -0,Brown County,18013.0,IN,47.8,50.4,3854.0,4060.0 -0,Howard County,29089.0,MO,41.94,55.78,2036.0,2708.0 -0,Grant County,54023.0,WV,23.64,75.06,997.0,3166.0 -0,Cape May County,34009.0,NJ,45.03,53.68,22893.0,27288.0 -0,Loudoun County,51107.0,VA,53.67,45.42,74845.0,63336.0 -0,Atlantic County,34001.0,NJ,56.98,41.92,67830.0,49902.0 -0,Placer County,6061.0,CA,43.4,54.7,75112.0,94647.0 -0,Ripley County,18137.0,IN,34.4,64.0,4187.0,7794.0 -0,Dearborn County,18029.0,IN,32.1,67.0,7123.0,14886.0 -0,Ottawa County,20143.0,KS,22.81,75.28,704.0,2323.0 -0,Sutter County,6101.0,CA,40.7,57.4,13412.0,18911.0 -0,Barbour County,54001.0,WV,38.82,59.13,2419.0,3685.0 -0,Harford County,24025.0,MD,39.38,58.19,48552.0,71751.0 -0,Lafayette County,29107.0,MO,41.58,56.88,6902.0,9442.0 -0,Tucker County,54093.0,WV,36.73,60.54,1288.0,2123.0 -0,Clermont County,39025.0,OH,33.1,65.5,31611.0,62559.0 -0,Clarke County,51043.0,VA,46.52,51.68,3457.0,3840.0 -0,Jersey County,17083.0,IL,47.64,50.35,5042.0,5329.0 -0,Queen Anne's County,24035.0,MD,35.66,62.74,8575.0,15087.0 -0,Sullivan County,18153.0,IN,48.8,49.5,4284.0,4343.0 -0,Gunnison County,8051.0,CO,62.6,35.3,5556.0,3131.0 -0,Brown County,39015.0,OH,37.3,60.6,7503.0,12192.0 -0,Baltimore County,24005.0,MD,56.22,41.66,214151.0,158714.0 -0,Boone County,29019.0,MO,55.2,43.22,47062.0,36849.0 -0,Carson City,32510.0,NV,49.5,48.7,11623.0,11419.0 -0,Hardy County,54031.0,WV,35.16,62.45,1901.0,3376.0 -0,Anne Arundel County,24003.0,MD,48.15,49.95,125015.0,129682.0 -0,Jackson County,29095.0,MO,62.14,36.75,210824.0,124687.0 -0,Lincoln County,29113.0,MO,43.46,54.88,10234.0,12924.0 -0,Geary County,20061.0,KS,43.13,55.5,3491.0,4492.0 -0,Delta County,8029.0,CO,32.9,65.2,5084.0,10067.0 -0,Lincoln County,20105.0,KS,21.88,75.91,347.0,1204.0 -0,Baltimore City,24510.0,MD,87.16,11.66,214385.0,28681.0 -0,Shawnee County,20177.0,KS,48.99,49.27,41235.0,41476.0 -0,Fayette County,17051.0,IL,40.98,56.81,3967.0,5499.0 -0,Effingham County,17049.0,IL,31.26,67.26,5262.0,11323.0 -0,Wabaunsee County,20197.0,KS,29.42,68.02,1036.0,2395.0 -0,Jackson County,39079.0,OH,38.6,58.7,5397.0,8219.0 -0,Meigs County,39105.0,OH,39.5,58.1,4094.0,6015.0 -0,Winchester City,51840.0,VA,52.02,46.66,5268.0,4725.0 -0,Wyandotte County,20209.0,KS,69.73,28.87,39865.0,16506.0 -0,Pike County,39131.0,OH,48.2,49.3,6033.0,6162.0 -0,Jennings County,18079.0,IN,44.9,52.9,5312.0,6261.0 -0,Wirt County,54105.0,WV,33.65,64.37,782.0,1496.0 -0,Crawford County,17033.0,IL,42.53,55.54,3883.0,5070.0 -0,Jasper County,17079.0,IL,40.21,57.77,2063.0,2964.0 -0,Greene County,18055.0,IN,41.9,56.4,5709.0,7691.0 -0,Lewis County,54041.0,WV,31.94,65.65,2109.0,4335.0 -0,Nye County,32023.0,NV,41.8,55.2,7226.0,9537.0 -0,Montgomery County,29139.0,MO,40.08,58.54,2347.0,3428.0 -0,Boone County,21015.0,KY,32.09,66.59,16292.0,33812.0 -0,Caroline County,24011.0,MD,37.61,60.64,4971.0,8015.0 -0,Logan County,20109.0,KS,15.63,82.43,225.0,1187.0 -0,Wallace County,20199.0,KS,11.94,85.82,96.0,690.0 -0,Ellis County,20051.0,KS,32.22,65.94,4010.0,8207.0 -0,Gove County,20063.0,KS,18.41,80.11,261.0,1136.0 -0,Dickinson County,20041.0,KS,27.95,70.16,2422.0,6081.0 -0,Russell County,20167.0,KS,22.35,76.19,736.0,2509.0 -0,Trego County,20195.0,KS,25.13,73.31,420.0,1225.0 -0,Prince George's County,24033.0,MD,88.87,10.38,332396.0,38833.0 -0,Teller County,8119.0,CO,35.0,63.1,4513.0,8146.0 -0,El Paso County,8041.0,CO,39.9,58.7,108899.0,160318.0 -0,Campbell County,21037.0,KY,38.77,59.67,15622.0,24046.0 -0,Randolph County,54083.0,WV,41.91,55.95,4539.0,6060.0 -0,Douglas County,32005.0,NV,41.5,56.9,10672.0,14648.0 -0,Upshur County,54097.0,WV,32.61,65.9,2925.0,5911.0 -0,Gilmer County,54021.0,WV,39.83,57.32,1004.0,1445.0 -0,Shenandoah County,51171.0,VA,35.96,62.45,6912.0,12005.0 -0,Kenton County,21117.0,KY,38.82,59.69,26480.0,40714.0 -0,Jackson County,54035.0,WV,39.76,58.47,4861.0,7148.0 -0,Mineral County,32021.0,NV,47.6,49.8,1082.0,1131.0 -0,Jackson County,18071.0,IN,42.3,56.0,7354.0,9726.0 -0,Douglas County,20045.0,KS,64.42,33.58,34398.0,17929.0 -0,El Dorado County,6017.0,CA,43.6,54.1,40529.0,50314.0 -0,Callaway County,29027.0,MO,39.23,58.95,7580.0,11389.0 -0,Cooper County,29053.0,MO,37.33,61.08,2996.0,4902.0 -0,Fairfax County,51059.0,VA,60.12,38.93,310359.0,200994.0 -0,Chaffee County,8015.0,CO,49.0,49.1,4861.0,4873.0 -0,Johnson County,20091.0,KS,44.84,53.85,127091.0,152627.0 -0,Adams County,39001.0,OH,36.6,60.7,4170.0,6914.0 -0,Sevier County,49041.0,UT,16.97,79.86,1359.0,6394.0 -0,Cheyenne County,8017.0,CO,17.8,80.1,198.0,890.0 -0,Calhoun County,54013.0,WV,40.88,56.24,993.0,1366.0 -0,Queen Anne's County,24035.0,MD,35.66,62.74,8575.0,15087.0 -0,Warren County,51187.0,VA,43.39,55.06,6997.0,8879.0 -0,Gallia County,39053.0,OH,35.9,61.9,4777.0,8247.0 -0,Ohio County,18115.0,IN,39.7,58.7,1158.0,1713.0 -0,Mason County,54053.0,WV,42.29,55.2,4484.0,5853.0 -0,Bond County,17005.0,IL,48.5,49.81,3843.0,3947.0 -0,Scioto County,39145.0,OH,45.8,52.2,14926.0,16994.0 -0,Fauquier County,51061.0,VA,42.71,56.19,14616.0,19227.0 -0,Madison County,17119.0,IL,53.75,44.55,68979.0,57177.0 -0,Warren County,29219.0,MO,43.05,55.69,6705.0,8675.0 -0,District of Columbia,11001.0,DC,92.5,6.5,245800.0,17367.0 -0,Lawrence County,18093.0,IN,38.9,59.5,7208.0,11018.0 -0,Saint Charles County,29183.0,MO,44.65,54.39,84183.0,102550.0 -0,Sussex County,10005.0,DE,45.2,53.8,40299.0,47939.0 -0,Saline County,20169.0,KS,35.92,62.16,8186.0,14165.0 -0,Pendleton County,54071.0,WV,38.59,59.94,1310.0,2035.0 -0,Pettis County,29159.0,MO,38.07,60.51,6932.0,11018.0 -0,Talbot County,24041.0,MD,44.45,54.09,9035.0,10995.0 -0,Prince William County,51153.0,VA,57.52,41.63,93435.0,67621.0 -0,Roane County,54087.0,WV,45.14,52.9,2511.0,2943.0 -0,Johnson County,29101.0,MO,42.93,55.18,9480.0,12183.0 -0,Arlington County,51013.0,VA,71.71,27.12,78994.0,29876.0 -0,Alpine County,6003.0,CA,61.0,36.4,422.0,252.0 -0,Switzerland County,18155.0,IN,45.0,53.3,1638.0,1940.0 -0,Moniteau County,29135.0,MO,31.27,67.02,2084.0,4467.0 -0,Yolo County,6113.0,CA,67.1,30.8,53488.0,24592.0 -0,Queen Anne's County,24035.0,MD,35.66,62.74,8575.0,15087.0 -0,Jefferson County,18077.0,IN,46.4,52.3,6255.0,7053.0 -0,Clay County,17025.0,IL,37.57,60.83,2425.0,3926.0 -0,Knox County,18083.0,IN,46.1,52.6,7569.0,8639.0 -0,Martin County,18101.0,IN,34.8,63.7,1706.0,3122.0 -0,Daviess County,18027.0,IN,31.8,67.1,3370.0,7098.0 -0,Braxton County,54007.0,WV,50.0,48.61,2704.0,2629.0 -0,Queen Anne's County,24035.0,MD,35.66,62.74,8575.0,15087.0 -0,Falls Church City,51610.0,VA,69.56,29.19,4695.0,1970.0 -0,Saint Louis County,29189.0,MO,59.5,39.6,333123.0,221705.0 -0,Pendleton County,21191.0,KY,34.94,63.36,2027.0,3676.0 -0,Morris County,20127.0,KS,31.93,66.0,907.0,1875.0 -0,Ellsworth County,20053.0,KS,28.97,68.79,851.0,2021.0 -0,Osage County,20139.0,KS,33.59,63.89,2534.0,4820.0 -0,Fairfax City,51600.0,VA,57.69,41.16,6575.0,4691.0 -0,Napa County,6055.0,CA,65.1,32.7,38849.0,19484.0 -0,Rappahannock County,51157.0,VA,47.79,50.56,2105.0,2227.0 -0,Gallatin County,21077.0,KY,40.03,57.63,1278.0,1840.0 -0,Sonoma County,6097.0,CA,73.6,24.0,168888.0,55127.0 -0,Lawrence County,17101.0,IL,46.14,52.07,3016.0,3403.0 -0,Rockingham County,51165.0,VA,31.36,67.4,10453.0,22468.0 -0,Richland County,17159.0,IL,41.58,56.59,3181.0,4329.0 -0,Lawrence County,39087.0,OH,41.4,56.7,11262.0,15415.0 -0,Cass County,29037.0,MO,39.55,59.18,19844.0,29695.0 -0,Alexandria City,51510.0,VA,71.73,27.26,50473.0,19181.0 -0,Page County,51139.0,VA,40.76,58.15,4235.0,6041.0 -0,Scott County,18143.0,IN,48.1,50.1,4271.0,4445.0 -0,Bracken County,21023.0,KY,36.51,60.78,1241.0,2066.0 -0,Marion County,17121.0,IL,48.06,50.05,8345.0,8691.0 -0,Grant County,21081.0,KY,35.55,62.94,3112.0,5510.0 -0,Manassas Park City,51685.0,VA,59.49,39.47,2463.0,1634.0 -0,Washington County,18175.0,IN,40.4,57.7,4562.0,6519.0 -0,Manassas City,51683.0,VA,55.17,43.85,7518.0,5975.0 -0,Talbot County,24041.0,MD,44.45,54.09,9035.0,10995.0 -0,Saint Louis City,29510.0,MO,83.68,15.52,132925.0,24662.0 -0,Calvert County,24009.0,MD,46.07,52.42,20299.0,23095.0 -0,Mason County,21161.0,KY,40.6,57.6,2891.0,4102.0 -0,Carroll County,21041.0,KY,44.75,52.99,1716.0,2032.0 -0,Talbot County,24041.0,MD,44.45,54.09,9035.0,10995.0 -0,Greenup County,21089.0,KY,41.91,56.01,6621.0,8849.0 -0,Clinton County,17027.0,IL,44.22,54.04,7657.0,9357.0 -0,Pocahontas County,54075.0,WV,42.52,55.23,1548.0,2011.0 -0,Cole County,29051.0,MO,36.03,62.94,13959.0,24385.0 -0,Lyon County,20111.0,KS,45.88,51.88,5924.0,6698.0 -0,Franklin County,20059.0,KS,37.76,60.3,4433.0,7079.0 -0,Miami County,20121.0,KS,37.34,61.01,5742.0,9382.0 -0,Webster County,54101.0,WV,50.85,45.41,1552.0,1386.0 -0,Sacramento County,6067.0,CA,58.5,39.5,316506.0,213583.0 -0,Trimble County,21223.0,KY,38.93,58.74,1484.0,2239.0 -0,Owen County,21187.0,KY,35.66,62.49,1694.0,2969.0 -0,Lewis County,21135.0,KY,31.52,67.06,1510.0,3213.0 -0,Gasconade County,29073.0,MO,37.31,61.29,2899.0,4763.0 -0,Mono County,6051.0,CA,55.5,42.3,3093.0,2354.0 -0,Franklin County,29071.0,MO,43.12,55.49,21256.0,27355.0 -0,Osage County,29151.0,MO,26.94,71.51,1907.0,5062.0 -0,Amador County,6005.0,CA,41.5,56.1,7813.0,10561.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Scott County,20171.0,KS,14.73,83.66,321.0,1823.0 -0,Lane County,20101.0,KS,18.79,79.26,193.0,814.0 -0,Greeley County,20071.0,KS,20.27,79.33,151.0,591.0 -0,Wichita County,20203.0,KS,16.0,82.43,163.0,840.0 -0,Culpeper County,51047.0,VA,44.59,54.26,8802.0,10711.0 -0,Ness County,20135.0,KS,18.95,79.15,289.0,1207.0 -0,Morgan County,29141.0,MO,38.97,59.58,3565.0,5451.0 -0,Barton County,20009.0,KS,27.46,70.78,3027.0,7802.0 -0,Fremont County,8043.0,CO,34.4,63.6,6844.0,12668.0 -0,Rush County,20165.0,KS,28.3,68.78,504.0,1225.0 -0,Charles County,24017.0,MD,62.22,36.69,43635.0,25732.0 -0,Orange County,18117.0,IN,41.9,56.1,3390.0,4536.0 -0,Putnam County,54079.0,WV,37.67,61.19,9334.0,15162.0 -0,Lincoln County,32017.0,NV,25.0,72.3,518.0,1498.0 -0,Montrose County,8085.0,CO,33.9,63.7,6495.0,12199.0 -0,Clay County,54015.0,WV,43.52,53.75,1421.0,1755.0 -0,Saint Clair County,17163.0,IL,60.57,38.14,76160.0,47958.0 -0,Madison County,51113.0,VA,42.72,56.1,2862.0,3758.0 -0,Kanawha County,54039.0,WV,49.22,49.65,40594.0,40952.0 -0,Kiowa County,8061.0,CO,20.9,76.3,178.0,650.0 -0,McPherson County,20113.0,KS,31.51,66.77,4218.0,8937.0 -0,Marion County,20115.0,KS,29.72,68.64,1801.0,4159.0 -0,Robertson County,21201.0,KY,44.43,52.51,451.0,533.0 -0,Wayne County,17191.0,IL,31.56,66.78,2547.0,5390.0 -0,Clark County,18019.0,IN,46.0,53.1,21953.0,25326.0 -0,Cabell County,54011.0,WV,44.21,54.33,15292.0,18793.0 -0,Henry County,21103.0,KY,39.38,58.98,2725.0,4081.0 -0,Highland County,51091.0,VA,37.97,59.85,590.0,930.0 -0,Stafford County,51179.0,VA,46.37,52.69,25716.0,29221.0 -0,Harrison County,21097.0,KY,38.42,59.55,2916.0,4520.0 -0,Beaver County,49001.0,UT,21.6,75.81,542.0,1902.0 -0,Edwards County,17047.0,IL,34.03,63.79,1140.0,2137.0 -0,Wabash County,17185.0,IL,42.58,56.28,2462.0,3254.0 -0,Henry County,29083.0,MO,43.63,54.62,4869.0,6095.0 -0,Wicomico County,24045.0,MD,46.44,52.21,19436.0,21849.0 -0,Nicholas County,54067.0,WV,46.54,51.32,4357.0,4804.0 -0,Pike County,18125.0,IN,44.8,53.4,2700.0,3221.0 -0,Solano County,6095.0,CA,63.4,34.8,102095.0,56035.0 -0,Benton County,29015.0,MO,37.93,60.2,3629.0,5759.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Gibson County,18051.0,IN,42.8,56.0,6455.0,8449.0 -0,Dubois County,18037.0,IN,47.1,51.3,8748.0,9526.0 -0,Fleming County,21069.0,KY,39.08,58.85,2279.0,3432.0 -0,Oldham County,21185.0,KY,34.11,64.8,10000.0,18997.0 -0,Chase County,20017.0,KS,27.67,70.52,383.0,976.0 -0,Pueblo County,8101.0,CO,56.7,41.8,41097.0,30257.0 -0,Crowley County,8025.0,CO,35.4,62.6,552.0,976.0 -0,Rice County,20159.0,KS,28.92,69.14,1163.0,2780.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Monroe County,17133.0,IL,43.98,54.64,7953.0,9881.0 -0,Washington County,17189.0,IL,42.13,56.39,3342.0,4473.0 -0,Saint Mary's County,24037.0,MD,42.84,55.63,19023.0,24705.0 -0,Calaveras County,6009.0,CA,42.1,55.1,9813.0,12835.0 -0,Piute County,49031.0,UT,17.67,79.57,141.0,635.0 -0,Wayne County,49055.0,UT,25.49,71.54,335.0,940.0 -0,Jefferson County,29099.0,MO,50.58,48.06,53467.0,50804.0 -0,Boyd County,21019.0,KY,42.99,55.3,8886.0,11430.0 -0,Carter County,21043.0,KY,43.98,53.52,4316.0,5252.0 -0,San Juan County,49037.0,UT,46.9,51.42,2406.0,2638.0 -0,Scott County,21209.0,KY,39.09,59.72,7712.0,11782.0 -0,Harrisonburg City,51660.0,VA,57.54,41.21,8444.0,6048.0 -0,Greene County,51079.0,VA,38.43,60.29,3174.0,4980.0 -0,Augusta County,51015.0,VA,29.47,69.35,9825.0,23120.0 -0,Jefferson County,17081.0,IL,43.53,54.27,7462.0,9302.0 -0,Bates County,29013.0,MO,39.49,58.35,3271.0,4833.0 -0,Esmeralda County,32009.0,NV,24.4,71.0,104.0,303.0 -0,Nicholas County,21181.0,KY,42.83,55.02,1272.0,1634.0 -0,Saguache County,8109.0,CO,63.0,34.7,1730.0,953.0 -0,Worcester County,24047.0,MD,41.59,57.07,11374.0,15607.0 -0,Worcester County,24047.0,MD,41.59,57.07,11374.0,15607.0 -0,Tuolumne County,6109.0,CA,42.4,55.1,11532.0,14988.0 -0,Coffey County,20031.0,KS,26.49,72.16,1121.0,3054.0 -0,Miller County,29131.0,MO,30.8,67.59,3553.0,7797.0 -0,Crawford County,18025.0,IN,48.2,50.4,2286.0,2393.0 -0,Harrison County,18061.0,IN,40.3,58.3,7288.0,10551.0 -0,Wayne County,54099.0,WV,39.78,58.0,6137.0,8947.0 -0,Floyd County,18043.0,IN,44.5,54.6,16263.0,19957.0 -0,King George County,51099.0,VA,42.71,56.22,4473.0,5888.0 -0,Rowan County,21205.0,KY,49.96,47.92,4074.0,3907.0 -0,Orange County,51137.0,VA,44.98,53.83,7107.0,8506.0 -0,Anderson County,20003.0,KS,32.4,65.14,1175.0,2362.0 -0,Linn County,20107.0,KS,30.86,66.84,1425.0,3086.0 -0,Jefferson County,21111.0,KY,55.51,43.5,196435.0,153957.0 -0,Spotsylvania County,51177.0,VA,46.05,52.91,24897.0,28610.0 -0,Lincoln County,54043.0,WV,44.32,53.21,3029.0,3637.0 -0,Franklin County,21073.0,KY,48.87,49.47,11767.0,11911.0 -0,Bourbon County,21017.0,KY,40.64,57.86,3385.0,4820.0 -0,Shelby County,21211.0,KY,37.06,61.76,6871.0,11451.0 -0,Pawnee County,20145.0,KS,30.76,67.88,882.0,1946.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Ouray County,8091.0,CO,53.5,44.7,1636.0,1367.0 -0,Fredericksburg City,51630.0,VA,63.6,35.27,6155.0,3413.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Worcester County,24047.0,MD,41.59,57.07,11374.0,15607.0 -0,Marin County,6041.0,CA,78.0,20.2,109320.0,28384.0 -0,Bath County,21011.0,KY,48.65,49.17,2210.0,2234.0 -0,San Joaquin County,6077.0,CA,54.4,43.8,113974.0,91607.0 -0,Maries County,29125.0,MO,35.16,62.73,1599.0,2853.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Albemarle County,51003.0,VA,58.38,40.41,29729.0,20576.0 -0,Westmoreland County,51193.0,VA,54.64,44.4,4577.0,3719.0 -0,Camden County,29029.0,MO,35.12,63.59,7773.0,14074.0 -0,Lawrence County,21127.0,KY,36.04,62.01,2036.0,3503.0 -0,Bath County,51017.0,VA,42.89,55.47,1043.0,1349.0 -0,Charles County,24017.0,MD,62.22,36.69,43635.0,25732.0 -0,Prowers County,8099.0,CO,32.2,65.9,1487.0,3043.0 -0,Greenbrier County,54025.0,WV,42.85,55.13,5881.0,7567.0 -0,Elliott County,21063.0,KY,61.03,35.86,1535.0,902.0 -0,Custer County,8027.0,CO,34.7,63.6,912.0,1672.0 -0,Bent County,8011.0,CO,41.6,56.1,799.0,1077.0 -0,Otero County,8089.0,CO,44.0,54.5,3546.0,4393.0 -0,Perry County,18123.0,IN,60.6,37.7,5141.0,3202.0 -0,Fayette County,54019.0,WV,47.67,50.41,7242.0,7658.0 -0,Kearny County,20093.0,KS,20.85,78.21,309.0,1159.0 -0,Finney County,20055.0,KS,31.63,66.89,3275.0,6926.0 -0,Hamilton County,20075.0,KS,21.26,77.01,233.0,844.0 -0,White County,17193.0,IL,44.48,53.5,3315.0,3987.0 -0,Stafford County,20185.0,KS,26.13,72.08,542.0,1495.0 -0,Hodgeman County,20083.0,KS,19.25,78.92,211.0,865.0 -0,Hamilton County,17065.0,IL,42.12,55.18,1796.0,2353.0 -0,Caroline County,51033.0,VA,55.45,43.48,7163.0,5617.0 -0,Warrick County,18173.0,IN,43.0,55.9,12329.0,16013.0 -0,Posey County,18129.0,IN,45.6,53.3,5828.0,6804.0 -0,Boone County,54005.0,WV,54.14,43.41,4529.0,3632.0 -0,Randolph County,17157.0,IL,48.64,49.59,7395.0,7538.0 -0,Saint Clair County,29185.0,MO,37.81,59.76,1886.0,2981.0 -0,Perry County,17145.0,IL,47.03,50.89,4701.0,5086.0 -0,Crawford County,29055.0,MO,38.78,59.56,3911.0,6007.0 -0,Fayette County,21067.0,KY,51.74,46.92,66042.0,59884.0 -0,Washington County,29221.0,MO,49.0,48.95,4711.0,4706.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Spencer County,18147.0,IN,49.5,49.1,5039.0,5001.0 -0,Meade County,21163.0,KY,38.76,59.71,4343.0,6691.0 -0,Staunton City,51790.0,VA,50.56,48.39,5569.0,5330.0 -0,Woodford County,21239.0,KY,40.88,57.98,5027.0,7130.0 -0,Montgomery County,21173.0,KY,40.98,57.56,4234.0,5947.0 -0,Harvey County,20079.0,KS,40.47,57.68,6318.0,9006.0 -0,Greenwood County,20073.0,KS,27.29,71.04,622.0,1619.0 -0,Reno County,20155.0,KS,37.4,60.77,9916.0,16112.0 -0,Vanderburgh County,18163.0,IN,50.8,48.3,39423.0,37512.0 -0,Westmoreland County,51193.0,VA,54.64,44.4,4577.0,3719.0 -0,Solano County,6095.0,CA,63.4,34.8,102095.0,56035.0 -0,Phelps County,29161.0,MO,38.04,60.22,7394.0,11706.0 -0,Garfield County,49017.0,UT,18.76,79.2,405.0,1710.0 -0,Essex County,51057.0,VA,54.7,44.35,2934.0,2379.0 -0,San Miguel County,8113.0,CO,77.0,21.5,3349.0,933.0 -0,Louisa County,51109.0,VA,45.45,53.29,6978.0,8182.0 -0,Iron County,49021.0,UT,19.81,76.1,3258.0,12518.0 -0,Spencer County,21215.0,KY,31.3,66.82,2519.0,5378.0 -0,Hinsdale County,8053.0,CO,40.1,57.4,240.0,344.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Dorchester County,24019.0,MD,45.25,53.48,6912.0,8168.0 -0,Anderson County,21005.0,KY,32.81,65.25,3462.0,6885.0 -0,Franklin County,17055.0,IL,47.64,50.45,8880.0,9404.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Richmond County,51159.0,VA,43.2,55.86,1618.0,2092.0 -0,Saint Mary's County,24037.0,MD,42.84,55.63,19023.0,24705.0 -0,Sainte Genevieve County,29186.0,MO,56.42,42.29,4979.0,3732.0 -0,Bullitt County,21029.0,KY,33.12,65.42,10177.0,20102.0 -0,Morgan County,21175.0,KY,42.91,54.72,1879.0,2396.0 -0,Clark County,21049.0,KY,36.79,61.84,5749.0,9664.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Solano County,6095.0,CA,63.4,34.8,102095.0,56035.0 -0,Contra Costa County,6013.0,CA,68.0,30.2,306983.0,136436.0 -0,Waynesboro City,51820.0,VA,44.09,54.35,3906.0,4815.0 -0,Solano County,6095.0,CA,63.4,34.8,102095.0,56035.0 -0,Butler County,20015.0,KS,32.86,65.13,9159.0,18155.0 -0,Edwards County,20047.0,KS,24.54,73.32,333.0,995.0 -0,Rockbridge County,51163.0,VA,42.64,56.22,4347.0,5732.0 -0,Worcester County,24047.0,MD,41.59,57.07,11374.0,15607.0 -0,Worcester County,24047.0,MD,41.59,57.07,11374.0,15607.0 -0,Saint Francois County,29187.0,MO,47.01,51.57,11540.0,12660.0 -0,Stanislaus County,6099.0,CA,49.9,48.1,80279.0,77497.0 -0,Hickory County,29085.0,MO,42.44,55.72,2171.0,2850.0 -0,Charlottesville City,51540.0,VA,78.35,20.35,15705.0,4078.0 -0,Sacramento County,6067.0,CA,58.5,39.5,316506.0,213583.0 -0,Worcester County,24047.0,MD,41.59,57.07,11374.0,15607.0 -0,Contra Costa County,6013.0,CA,68.0,30.2,306983.0,136436.0 -0,Vernon County,29217.0,MO,38.08,60.08,3381.0,5334.0 -0,Menifee County,21165.0,KY,51.27,46.4,1276.0,1155.0 -0,Nelson County,51125.0,VA,53.99,44.84,4391.0,3647.0 -0,Breckinridge County,21027.0,KY,36.49,61.97,3110.0,5281.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Woodson County,20207.0,KS,32.02,65.98,512.0,1055.0 -0,Allen County,20001.0,KS,37.36,60.62,2189.0,3552.0 -0,Bourbon County,20011.0,KS,35.3,62.53,2394.0,4240.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Logan County,54045.0,WV,43.62,54.41,5873.0,7326.0 -0,Northumberland County,51133.0,VA,44.72,54.56,3312.0,4041.0 -0,Pulaski County,29169.0,MO,34.99,63.68,5249.0,9552.0 -0,Huerfano County,8055.0,CO,54.6,43.4,1989.0,1580.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Hanover County,51085.0,VA,32.8,66.39,18447.0,37344.0 -0,Fluvanna County,51065.0,VA,48.57,50.41,6185.0,6420.0 -0,Hardin County,21093.0,KY,39.13,59.75,15650.0,23896.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Jessamine County,21113.0,KY,30.85,67.83,6236.0,13711.0 -0,Johnson County,21115.0,KY,28.26,69.84,2407.0,5948.0 -0,Gray County,20069.0,KS,20.58,77.54,436.0,1643.0 -0,Hancock County,21091.0,KY,51.52,46.53,2135.0,1928.0 -0,Raleigh County,54081.0,WV,36.23,62.1,10237.0,17548.0 -0,Nelson County,21179.0,KY,42.18,55.87,7654.0,10139.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Mingo County,54059.0,WV,42.96,55.01,3582.0,4587.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Henderson County,21101.0,KY,50.6,47.95,10049.0,9523.0 -0,King and Queen County,51097.0,VA,51.77,47.58,1918.0,1763.0 -0,San Juan County,8111.0,CO,53.2,44.0,264.0,218.0 -0,Mercer County,21167.0,KY,31.4,67.41,3159.0,6781.0 -0,Mineral County,8079.0,CO,43.3,53.6,270.0,334.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Martin County,21159.0,KY,21.89,76.49,808.0,2824.0 -0,Alleghany County,51005.0,VA,48.22,50.41,3553.0,3715.0 -0,Jackson County,17077.0,IL,59.72,37.94,15248.0,9687.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Powell County,21197.0,KY,41.53,57.06,2065.0,2837.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Daviess County,21059.0,KY,44.2,54.31,19282.0,23692.0 -0,Madison County,21151.0,KY,38.09,60.53,12392.0,19694.0 -0,Somerset County,24039.0,MD,48.16,50.76,4779.0,5037.0 -0,Gallatin County,17059.0,IL,55.51,42.39,1587.0,1212.0 -0,Washington County,21229.0,KY,35.83,62.65,1890.0,3305.0 -0,Ford County,20057.0,KS,33.74,64.64,2991.0,5730.0 -0,Sedgwick County,20173.0,KS,42.72,55.44,82337.0,106849.0 -0,Saline County,17165.0,IL,44.48,53.37,5083.0,6099.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,King William County,51101.0,VA,39.87,59.2,3344.0,4966.0 -0,Dallas County,29059.0,MO,34.57,63.71,2656.0,4895.0 -0,Alameda County,6001.0,CA,78.8,19.3,489106.0,119555.0 -0,Goochland County,51075.0,VA,38.31,60.84,4813.0,7643.0 -0,Perry County,29157.0,MO,34.75,63.92,3005.0,5527.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Cedar County,29039.0,MO,32.42,66.01,2060.0,4194.0 -0,Mariposa County,6043.0,CA,42.5,54.9,4100.0,5298.0 -0,Union County,21225.0,KY,46.47,51.71,2804.0,3120.0 -0,Laclede County,29105.0,MO,31.97,66.62,5218.0,10875.0 -0,Dolores County,8033.0,CO,30.3,67.2,369.0,818.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Magoffin County,21153.0,KY,45.26,52.33,2105.0,2434.0 -0,Marin County,6041.0,CA,78.0,20.2,109320.0,28384.0 -0,Summers County,54089.0,WV,43.08,54.38,2290.0,2891.0 -0,Williamson County,17199.0,IL,41.77,56.53,12589.0,17039.0 -0,Wolfe County,21237.0,KY,50.3,47.44,1493.0,1408.0 -0,Estill County,21065.0,KY,29.26,69.35,1555.0,3685.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Lancaster County,51103.0,VA,46.63,52.57,3235.0,3647.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Rio Grande County,8105.0,CO,45.0,53.8,2448.0,2930.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Polk County,29167.0,MO,33.24,65.39,4553.0,8956.0 -0,Garrard County,21079.0,KY,27.91,70.98,2012.0,5118.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Pratt County,20151.0,KS,30.88,67.35,1294.0,2822.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Covington City,51580.0,VA,55.4,43.33,1304.0,1020.0 -0,Amherst County,51009.0,VA,41.46,57.62,6094.0,8470.0 -0,Las Animas County,8071.0,CO,52.7,45.6,3562.0,3086.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Botetourt County,51023.0,VA,32.71,65.9,5693.0,11471.0 -0,Lexington City,51678.0,VA,62.24,36.87,1543.0,914.0 -0,Alameda County,6001.0,CA,78.8,19.3,489106.0,119555.0 -0,Dent County,29065.0,MO,29.94,67.78,2056.0,4655.0 -0,Wyoming County,54109.0,WV,36.32,61.37,2735.0,4621.0 -0,Buckingham County,51029.0,VA,49.89,49.01,3489.0,3428.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Madera County,6039.0,CA,42.4,55.7,17952.0,23583.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Middlesex County,51119.0,VA,39.81,59.02,2391.0,3545.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Buena Vista City,51530.0,VA,45.73,52.91,1108.0,1282.0 -0,Floyd County,21071.0,KY,48.09,49.43,7530.0,7741.0 -0,Alamosa County,8003.0,CO,56.0,41.9,3521.0,2635.0 -0,Cumberland County,51049.0,VA,47.73,51.19,2255.0,2418.0 -0,Pike County,21195.0,KY,42.07,55.89,9525.0,12655.0 -0,Iron County,29093.0,MO,50.14,47.35,2213.0,2090.0 -0,Stanton County,20187.0,KS,22.73,75.94,188.0,628.0 -0,Ohio County,21183.0,KY,40.84,57.22,4059.0,5687.0 -0,Grant County,20067.0,KS,23.86,74.97,635.0,1995.0 -0,Haskell County,20081.0,KS,17.71,81.34,278.0,1277.0 -0,Kiowa County,20097.0,KS,17.62,80.35,200.0,912.0 -0,Kingman County,20095.0,KS,26.28,71.04,963.0,2603.0 -0,Wilson County,20205.0,KS,28.39,69.16,1170.0,2850.0 -0,Neosho County,20133.0,KS,35.64,62.19,2563.0,4473.0 -0,Larue County,21123.0,KY,30.96,67.22,1913.0,4153.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Marion County,21155.0,KY,47.22,50.45,3596.0,3842.0 -0,Monroe County,54063.0,WV,36.13,60.93,2014.0,3397.0 -0,Lee County,21129.0,KY,27.12,71.33,752.0,1978.0 -0,Boyle County,21021.0,KY,37.74,60.95,4769.0,7701.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Henrico County,51087.0,VA,55.7,43.48,86323.0,67381.0 -0,San Mateo County,6081.0,CA,73.5,24.7,222826.0,75057.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,San Francisco County,6075.0,CA,84.2,13.7,322220.0,52292.0 -0,Breathitt County,21025.0,KY,43.84,53.1,2205.0,2671.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Powhatan County,51145.0,VA,29.31,69.78,4237.0,10088.0 -0,McLean County,21149.0,KY,44.39,53.96,1963.0,2386.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Crawford County,20037.0,KS,49.5,48.12,7957.0,7735.0 -0,Craig County,51045.0,VA,33.46,64.67,877.0,1695.0 -0,Costilla County,8023.0,CO,73.4,24.5,1245.0,415.0 -0,Barton County,29011.0,MO,24.46,74.21,1455.0,4414.0 -0,Webster County,21233.0,KY,43.14,54.82,2390.0,3037.0 -0,Madison County,29123.0,MO,40.61,57.62,2042.0,2897.0 -0,Baca County,8009.0,CO,24.6,72.3,536.0,1572.0 -0,Lancaster County,51103.0,VA,46.63,52.57,3235.0,3647.0 -0,Montezuma County,8083.0,CO,39.4,58.9,4661.0,6961.0 -0,La Plata County,8067.0,CO,57.39,41.11,16057.0,11503.0 -0,Merced County,6047.0,CA,53.3,45.0,34031.0,28704.0 -0,Lincoln County,21137.0,KY,30.07,68.55,2752.0,6273.0 -0,New Kent County,51127.0,VA,34.96,63.91,3493.0,6385.0 -0,Grayson County,21085.0,KY,31.85,66.7,3154.0,6605.0 -0,Bedford County,51019.0,VA,30.75,68.16,11017.0,24420.0 -0,Washington County,49053.0,UT,21.86,75.33,10826.0,37311.0 -0,Elk County,20049.0,KS,25.31,72.66,363.0,1042.0 -0,Reynolds County,29179.0,MO,43.14,54.21,1418.0,1782.0 -0,Cape Girardeau County,29031.0,MO,32.68,66.3,12208.0,24768.0 -0,Texas County,29215.0,MO,31.43,66.49,3410.0,7215.0 -0,Hardin County,17069.0,IL,39.56,58.98,892.0,1330.0 -0,Pope County,17151.0,IL,37.88,60.2,845.0,1343.0 -0,Richmond City,51760.0,VA,79.09,20.03,73623.0,18649.0 -0,Johnson County,17087.0,IL,31.71,66.29,1871.0,3912.0 -0,Union County,17181.0,IL,42.98,54.88,3918.0,5003.0 -0,Gloucester County,51073.0,VA,35.98,62.89,6916.0,12089.0 -0,Bollinger County,29017.0,MO,29.22,68.67,1690.0,3972.0 -0,Mercer County,54055.0,WV,35.44,63.01,7450.0,13246.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Fresno County,6019.0,CA,50.2,48.1,136706.0,131015.0 -0,Dade County,29057.0,MO,28.79,69.65,1184.0,2864.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Jackson County,21109.0,KY,14.22,84.36,743.0,4407.0 -0,Hopkins County,21107.0,KY,36.72,61.59,7104.0,11916.0 -0,Chesterfield County,51041.0,VA,45.85,53.31,74310.0,86413.0 -0,Appomattox County,51011.0,VA,34.61,64.26,2641.0,4903.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Casey County,21045.0,KY,20.46,78.55,1219.0,4679.0 -0,McDowell County,54047.0,WV,53.34,44.82,3430.0,2882.0 -0,Crittenden County,21055.0,KY,31.91,66.26,1254.0,2604.0 -0,Kane County,49025.0,UT,27.14,70.13,856.0,2212.0 -0,Owsley County,21189.0,KY,22.6,75.86,381.0,1279.0 -0,Rockcastle County,21203.0,KY,22.47,75.82,1410.0,4757.0 -0,Buchanan County,51027.0,VA,46.52,51.99,4063.0,4541.0 -0,Mathews County,51115.0,VA,35.55,63.53,1934.0,3456.0 -0,Knott County,21119.0,KY,44.88,52.75,2612.0,3070.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Mathews County,51115.0,VA,35.55,63.53,1934.0,3456.0 -0,Amelia County,51007.0,VA,38.11,60.81,2488.0,3970.0 -0,Charles City County,51036.0,VA,68.34,31.01,2838.0,1288.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Webster County,29225.0,MO,34.76,63.77,5685.0,10431.0 -0,Santa Clara County,6085.0,CA,69.4,28.6,462241.0,190039.0 -0,Taylor County,21217.0,KY,29.14,69.69,3165.0,7568.0 -0,Wright County,29229.0,MO,30.03,67.94,2557.0,5784.0 -0,Giles County,51071.0,VA,40.95,57.24,3192.0,4462.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Cowley County,20035.0,KS,36.35,61.59,5012.0,8492.0 -0,Sumner County,20191.0,KS,32.44,65.17,3353.0,6737.0 -0,Meade County,20119.0,KS,18.49,79.75,357.0,1540.0 -0,Clark County,20025.0,KS,21.14,77.39,245.0,897.0 -0,Accomack County,51001.0,VA,48.69,50.14,7607.0,7833.0 -0,Barber County,20007.0,KS,24.29,74.45,598.0,1833.0 -0,Green County,21087.0,KY,23.71,74.52,1204.0,3785.0 -0,Lynchburg City,51680.0,VA,47.37,51.36,16269.0,17638.0 -0,Inyo County,6027.0,CA,43.9,53.0,3743.0,4523.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,James City County,51095.0,VA,44.95,54.17,17352.0,20912.0 -0,Hart County,21099.0,KY,33.59,64.49,2290.0,4397.0 -0,Perry County,21193.0,KY,33.2,65.18,3444.0,6762.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Campbell County,51031.0,VA,31.34,67.58,8091.0,17444.0 -0,Greene County,29077.0,MO,41.4,57.25,56181.0,77683.0 -0,Livingston County,21139.0,KY,35.31,62.92,1622.0,2890.0 -0,Shannon County,29203.0,MO,42.65,54.06,1637.0,2075.0 -0,Archuleta County,8007.0,CO,42.8,54.9,2836.0,3638.0 -0,Roanoke County,51161.0,VA,38.87,59.97,19812.0,30571.0 -0,Muhlenberg County,21177.0,KY,48.27,50.02,6221.0,6447.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Prince Edward County,51147.0,VA,54.34,44.46,5101.0,4174.0 -0,Conejos County,8021.0,CO,55.6,42.7,2154.0,1653.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Butler County,21031.0,KY,29.3,69.64,1555.0,3696.0 -0,Morton County,20129.0,KS,16.33,82.24,229.0,1153.0 -0,Stevens County,20189.0,KS,13.31,85.33,283.0,1815.0 -0,Seward County,20175.0,KS,27.98,71.05,1493.0,3791.0 -0,Montgomery County,20125.0,KS,31.19,66.94,4338.0,9309.0 -0,Harper County,20077.0,KS,26.32,71.49,736.0,1999.0 -0,Comanche County,20033.0,KS,19.92,78.54,194.0,765.0 -0,Labette County,20099.0,KS,42.51,55.38,3839.0,5001.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Caldwell County,21033.0,KY,35.68,62.36,2212.0,3866.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,York County,51199.0,VA,40.42,58.51,13700.0,19833.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Jasper County,29097.0,MO,32.75,65.94,15730.0,31667.0 -0,Montgomery County,51121.0,VA,51.73,46.81,21031.0,19028.0 -0,Bedford City,51515.0,VA,44.18,54.75,1208.0,1497.0 -0,Clay County,21051.0,KY,21.08,77.54,1552.0,5710.0 -0,Pulaski County,21199.0,KY,21.7,77.09,5590.0,19862.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Cherokee County,20021.0,KS,37.19,60.9,3594.0,5886.0 -0,Edmonson County,21061.0,KY,31.35,67.59,1652.0,3562.0 -0,Roanoke City,51770.0,VA,61.15,37.76,24934.0,15394.0 -0,Massac County,17127.0,IL,37.48,60.83,2693.0,4371.0 -0,Tazewell County,51185.0,VA,32.8,65.65,5596.0,11201.0 -0,Alexander County,17003.0,IL,55.6,42.98,2189.0,1692.0 -0,Laurel County,21125.0,KY,20.52,78.49,4618.0,17660.0 -0,Pulaski County,17153.0,IL,50.09,48.72,1638.0,1593.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Salem City,51775.0,VA,41.63,57.13,5164.0,7088.0 -0,Leslie County,21131.0,KY,17.42,81.28,766.0,3574.0 -0,Hopewell City,51670.0,VA,55.49,43.56,5285.0,4149.0 -0,Wayne County,29223.0,MO,36.45,61.49,2243.0,3784.0 -0,Prince George County,51149.0,VA,44.55,54.68,7130.0,8752.0 -0,Williamsburg City,51830.0,VA,63.77,34.67,4328.0,2353.0 -0,Adair County,21001.0,KY,22.86,75.53,1668.0,5512.0 -0,Dickenson County,51051.0,VA,48.54,49.22,3278.0,3324.0 -0,Chautauqua County,20019.0,KS,21.65,76.57,401.0,1418.0 -0,Bland County,51021.0,VA,29.2,68.64,864.0,2031.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Colonial Heights City,51570.0,VA,28.95,69.62,2562.0,6161.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Nottoway County,51135.0,VA,48.84,50.07,3413.0,3499.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Lawrence County,29109.0,MO,30.64,67.7,5097.0,11263.0 -0,Santa Cruz County,6087.0,CA,77.5,19.8,98745.0,25244.0 -0,Dinwiddie County,51053.0,VA,48.45,50.62,6246.0,6526.0 -0,Letcher County,21133.0,KY,31.85,65.17,2623.0,5367.0 -0,Scott County,29201.0,MO,34.72,64.15,6258.0,11563.0 -0,Charlotte County,51037.0,VA,43.93,54.77,2705.0,3372.0 -0,Pulaski County,51155.0,VA,39.32,58.85,5918.0,8857.0 -0,Petersburg City,51730.0,VA,88.64,10.19,13774.0,1583.0 -0,Surry County,51181.0,VA,60.72,38.45,2626.0,1663.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,York County,51199.0,VA,40.42,58.51,13700.0,19833.0 -0,Franklin County,51067.0,VA,37.86,60.68,9618.0,15414.0 -0,Ballard County,21007.0,KY,35.15,62.49,1427.0,2537.0 -0,McCracken County,21145.0,KY,36.69,61.92,11285.0,19043.0 -0,Newport News City,51700.0,VA,63.93,35.26,51972.0,28667.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Wise County,51195.0,VA,35.33,63.05,4995.0,8914.0 -0,Warren County,21227.0,KY,40.02,58.88,17669.0,25993.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Russell County,21207.0,KY,20.99,77.31,1569.0,5779.0 -0,Metcalfe County,21169.0,KY,32.15,65.11,1350.0,2734.0 -0,Lyon County,21143.0,KY,40.91,57.59,1577.0,2220.0 -0,Poquoson City,51735.0,VA,24.74,74.01,1748.0,5229.0 -0,Barren County,21009.0,KY,32.33,66.24,5434.0,11133.0 -0,Christian County,21047.0,KY,38.98,60.14,8880.0,13699.0 -0,Radford City,51750.0,VA,53.97,44.54,2930.0,2418.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Isle of Wight County,51093.0,VA,42.87,56.3,8573.0,11258.0 -0,Russell County,51167.0,VA,42.91,55.59,4932.0,6389.0 -0,Pittsylvania County,51143.0,VA,37.51,61.55,11415.0,18730.0 -0,Floyd County,51063.0,VA,39.08,59.09,2937.0,4441.0 -0,Stoddard County,29207.0,MO,29.4,69.16,3899.0,9172.0 -0,Lunenburg County,51111.0,VA,47.84,51.33,2703.0,2900.0 -0,Hampton City,51650.0,VA,69.05,30.14,46917.0,20476.0 -0,Northampton County,51131.0,VA,57.7,41.19,3800.0,2713.0 -0,Sussex County,51183.0,VA,61.55,37.78,3301.0,2026.0 -0,Carter County,29035.0,MO,33.95,63.49,984.0,1840.0 -0,Christian County,29043.0,MO,31.52,67.33,11883.0,25382.0 -0,Wythe County,51197.0,VA,32.88,65.7,4107.0,8207.0 -0,Logan County,21141.0,KY,35.0,63.59,3811.0,6925.0 -0,Todd County,21219.0,KY,31.23,67.52,1543.0,3336.0 -0,Douglas County,29067.0,MO,31.88,65.63,2140.0,4405.0 -0,Marshall County,21157.0,KY,36.7,61.42,5683.0,9512.0 -0,Mississippi County,29133.0,MO,41.95,56.65,2247.0,3034.0 -0,Halifax County,51083.0,VA,48.23,51.04,8126.0,8600.0 -0,Howell County,29091.0,MO,33.68,64.49,5736.0,10982.0 -0,Newton County,29145.0,MO,29.32,69.42,7450.0,17637.0 -0,Knox County,21121.0,KY,26.99,71.56,3074.0,8150.0 -0,Brunswick County,51025.0,VA,62.84,36.35,4973.0,2877.0 -0,Harlan County,21095.0,KY,26.08,72.27,2586.0,7165.0 -0,Smyth County,51173.0,VA,34.46,63.54,4239.0,7817.0 -0,Navajo County,4017.0,AZ,43.5,55.2,15579.0,19761.0 -0,Coconino County,4005.0,AZ,57.8,40.8,31433.0,22186.0 -0,Mohave County,4015.0,AZ,32.7,65.6,22092.0,44333.0 -0,Trigg County,21221.0,KY,34.41,64.18,2246.0,4189.0 -0,Nowata County,40105.0,OK,31.76,68.24,1411.0,3031.0 -0,Osage County,40113.0,OK,38.14,61.86,7498.0,12160.0 -0,Woods County,40151.0,OK,22.29,77.71,873.0,3043.0 -0,Craig County,40035.0,OK,34.95,65.05,2073.0,3858.0 -0,Washington County,40147.0,OK,27.71,72.29,6308.0,16457.0 -0,Grant County,40053.0,OK,21.87,78.13,514.0,1836.0 -0,Alfalfa County,40003.0,OK,16.89,83.11,411.0,2023.0 -0,Kay County,40071.0,OK,29.22,70.78,5463.0,13230.0 -0,Ottawa County,40115.0,OK,38.2,61.8,4268.0,6905.0 -0,Harper County,40059.0,OK,14.14,85.86,221.0,1342.0 -0,Rio Arriba County,35039.0,NM,75.0,24.1,12703.0,4086.0 -0,San Juan County,35045.0,NM,38.8,59.9,18028.0,27869.0 -0,Apache County,4001.0,AZ,63.4,35.2,15390.0,8551.0 -0,Union County,35059.0,NM,28.2,70.4,492.0,1227.0 -0,Cimarron County,40025.0,OK,11.96,88.04,152.0,1119.0 -0,Texas County,40139.0,OK,14.75,85.25,923.0,5336.0 -0,Beaver County,40007.0,OK,10.75,89.25,265.0,2199.0 -0,Southampton County,51175.0,VA,48.55,50.55,4402.0,4583.0 -0,Wayne County,21231.0,KY,30.59,67.65,2201.0,4868.0 -0,Taos County,35055.0,NM,81.8,17.0,13816.0,2866.0 -0,Colfax County,35007.0,NM,54.7,43.9,3490.0,2805.0 -0,Stone County,29209.0,MO,30.69,68.02,5029.0,11147.0 -0,San Benito County,6069.0,CA,60.5,37.7,11917.0,7425.0 -0,Whitley County,21235.0,KY,25.42,73.08,3484.0,10015.0 -0,Norfolk City,51710.0,VA,71.03,28.06,62819.0,24814.0 -0,McCreary County,21147.0,KY,23.27,75.42,1258.0,4078.0 -0,Norton City,51720.0,VA,49.14,49.21,743.0,744.0 -0,Bell County,21013.0,KY,28.99,69.61,2782.0,6681.0 -0,Carlisle County,21039.0,KY,33.59,64.92,879.0,1699.0 -0,Graves County,21083.0,KY,36.17,62.25,5843.0,10056.0 -0,Cumberland County,21057.0,KY,24.92,73.51,697.0,2056.0 -0,Allen County,21003.0,KY,27.39,71.15,2024.0,5258.0 -0,Barry County,29009.0,MO,31.62,66.63,4630.0,9758.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Carroll County,51035.0,VA,32.67,65.08,4109.0,8187.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Washington County,51191.0,VA,32.91,65.62,8063.0,16077.0 -0,Butler County,29023.0,MO,30.66,68.09,5316.0,11805.0 -0,Portsmouth City,51740.0,VA,69.27,29.97,32327.0,13984.0 -0,Suffolk City,51800.0,VA,56.24,43.01,22446.0,17165.0 -0,Monterey County,6053.0,CA,68.2,29.9,88453.0,38797.0 -0,Greensville County,51081.0,VA,63.88,35.38,3122.0,1729.0 -0,Lee County,51105.0,VA,34.89,63.13,3219.0,5825.0 -0,Mecklenburg County,51117.0,VA,47.26,51.83,7127.0,7817.0 -0,Clinton County,21053.0,KY,18.24,80.68,761.0,3366.0 -0,Oregon County,29149.0,MO,39.45,57.77,1811.0,2652.0 -0,Scott County,51169.0,VA,27.59,70.68,2725.0,6980.0 -0,Simpson County,21213.0,KY,37.97,60.71,2775.0,4437.0 -0,Patrick County,51141.0,VA,33.75,64.37,2879.0,5491.0 -0,New Madrid County,29143.0,MO,41.65,56.76,3370.0,4593.0 -0,Chesapeake City,51550.0,VA,50.22,48.94,53994.0,52625.0 -0,Portsmouth City,51740.0,VA,69.27,29.97,32327.0,13984.0 -0,Henry County,51089.0,VA,44.09,54.56,11118.0,13758.0 -0,Clark County,32003.0,NV,58.8,39.7,380765.0,257078.0 -0,Monroe County,21171.0,KY,22.87,75.82,1067.0,3537.0 -0,Ripley County,29181.0,MO,33.47,63.53,1795.0,3407.0 -0,Taney County,29213.0,MO,30.85,68.02,6683.0,14736.0 -0,Woodward County,40153.0,OK,17.41,82.59,1350.0,6404.0 -0,Grayson County,51077.0,VA,34.35,62.88,2480.0,4540.0 -0,Ozark County,29153.0,MO,35.45,62.27,1661.0,2918.0 -0,Hickman County,21105.0,KY,36.09,62.49,812.0,1406.0 -0,McDonald County,29119.0,MO,30.17,67.6,2454.0,5499.0 -0,Calloway County,21035.0,KY,40.02,58.37,6165.0,8991.0 -0,Tulare County,6107.0,CA,41.5,56.8,43634.0,59765.0 -0,Emporia City,51595.0,VA,65.04,34.28,1702.0,897.0 -0,Martinsville City,51690.0,VA,63.48,35.44,4139.0,2311.0 -0,Franklin City,51620.0,VA,63.68,35.6,2819.0,1576.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Galax City,51640.0,VA,43.8,54.83,1052.0,1317.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Stewart County,47161.0,TN,44.85,53.68,2470.0,2956.0 -0,Delaware County,40041.0,OK,33.1,66.9,5085.0,10277.0 -0,Robertson County,47147.0,TN,33.74,64.83,9318.0,17903.0 -0,Sumner County,47165.0,TN,31.96,66.86,21487.0,44949.0 -0,Fulton County,21075.0,KY,43.82,54.16,1238.0,1530.0 -0,Montgomery County,47125.0,TN,45.5,53.39,25716.0,30175.0 -0,Danville City,51590.0,VA,59.13,40.02,12352.0,8361.0 -0,Macon County,47111.0,TN,39.4,58.98,4506.0,6746.0 -0,Bristol City,51520.0,VA,36.21,62.22,2665.0,4579.0 -0,Dunklin County,29069.0,MO,38.59,59.88,4540.0,7044.0 -0,Pickett County,47137.0,TN,31.97,66.87,854.0,1786.0 -0,Clay County,47027.0,TN,41.68,55.98,1248.0,1676.0 -0,Sullivan County,47163.0,TN,28.68,70.02,18354.0,44808.0 -0,Johnson County,47091.0,TN,27.87,70.11,1837.0,4621.0 -0,Scott County,47151.0,TN,25.36,72.7,1720.0,4931.0 -0,Claiborne County,47025.0,TN,29.54,68.86,3078.0,7175.0 -0,Noble County,40103.0,OK,23.22,76.78,1174.0,3881.0 -0,Hancock County,47067.0,TN,26.95,70.86,604.0,1588.0 -0,Rogers County,40131.0,OK,27.97,72.03,10772.0,27743.0 -0,Campbell County,47013.0,TN,30.62,67.59,3867.0,8535.0 -0,Hawkins County,47073.0,TN,28.18,70.13,5930.0,14756.0 -0,Garfield County,40047.0,OK,24.52,75.48,5545.0,17067.0 -0,Ellis County,40045.0,OK,14.77,85.23,282.0,1627.0 -0,Ashe County,37009.0,NC,37.28,60.57,4872.0,7916.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Fentress County,47049.0,TN,27.17,71.06,1831.0,4789.0 -0,Fulton County,21075.0,KY,43.82,54.16,1238.0,1530.0 -0,Virginia Beach City,51810.0,VA,49.14,49.85,98885.0,100319.0 -0,Alleghany County,37005.0,NC,38.4,59.36,2021.0,3124.0 -0,Pawnee County,40117.0,OK,31.28,68.72,2063.0,4533.0 -0,Surry County,37171.0,NC,35.48,63.44,10475.0,18730.0 -0,Gates County,37073.0,NC,52.21,46.99,2830.0,2547.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Stokes County,37169.0,NC,31.62,66.63,6875.0,14488.0 -0,Camden County,37029.0,NC,33.13,65.13,1597.0,3140.0 -0,Warren County,37185.0,NC,69.5,30.04,7086.0,3063.0 -0,Northampton County,37131.0,NC,65.01,34.57,6903.0,3671.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Hertford County,37091.0,NC,70.54,29.0,7513.0,3089.0 -0,Person County,37145.0,NC,45.33,53.83,8446.0,10030.0 -0,Vance County,37181.0,NC,63.08,36.44,13166.0,7606.0 -0,Granville County,37077.0,NC,52.88,46.3,13074.0,11447.0 -0,Rockingham County,37157.0,NC,41.47,57.43,17255.0,23899.0 -0,Caswell County,37033.0,NC,51.05,47.95,5545.0,5208.0 -0,Overton County,47133.0,TN,42.25,55.57,3419.0,4497.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Jackson County,47087.0,TN,49.41,48.54,2224.0,2185.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Halifax County,37083.0,NC,63.96,35.71,16047.0,8961.0 -0,Mayes County,40097.0,OK,35.97,64.03,5749.0,10234.0 -0,Carter County,47019.0,TN,25.66,72.82,5587.0,15852.0 -0,Pasquotank County,37139.0,NC,56.5,42.78,10272.0,7778.0 -0,Obion County,47131.0,TN,32.17,66.26,4308.0,8873.0 -0,Major County,40093.0,OK,14.84,85.16,515.0,2956.0 -0,Weakley County,47183.0,TN,33.57,64.68,4596.0,8855.0 -0,Lake County,47095.0,TN,45.76,52.5,1024.0,1175.0 -0,Sherman County,48421.0,TX,12.45,86.67,127.0,884.0 -0,Henry County,47079.0,TN,38.04,60.41,5153.0,8182.0 -0,Hansford County,48195.0,TX,11.42,87.87,240.0,1847.0 -0,Dallam County,48111.0,TX,19.01,79.86,302.0,1269.0 -0,Ochiltree County,48357.0,TX,7.82,91.7,243.0,2851.0 -0,Lipscomb County,48295.0,TX,12.34,87.02,155.0,1093.0 -0,Benton County,5007.0,AR,30.7,67.2,23331.0,51124.0 -0,Fulton County,5049.0,AR,38.9,57.8,1819.0,2702.0 -0,Carroll County,5015.0,AR,39.4,57.5,4172.0,6083.0 -0,Sharp County,5135.0,AR,33.6,62.5,2436.0,4535.0 -0,Randolph County,5121.0,AR,39.1,57.2,2469.0,3615.0 -0,Boone County,5009.0,AR,28.7,68.3,4435.0,10575.0 -0,Marion County,5089.0,AR,33.3,63.2,2384.0,4524.0 -0,Baxter County,5005.0,AR,32.7,64.3,6539.0,12852.0 -0,Clay County,5021.0,AR,40.7,55.0,2244.0,3032.0 -0,Kings County,6031.0,CA,42.0,56.1,14747.0,19710.0 -0,Trousdale County,47169.0,TN,45.54,52.11,1475.0,1688.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Cheatham County,47021.0,TN,33.47,65.14,5498.0,10702.0 -0,Washington County,47179.0,TN,32.54,66.03,15941.0,32341.0 -0,Wilkes County,37193.0,NC,30.06,68.25,8934.0,20288.0 -0,Union County,47173.0,TN,28.58,69.81,1829.0,4467.0 -0,Smith County,47159.0,TN,38.65,58.95,2992.0,4563.0 -0,Pemiscot County,29155.0,MO,42.98,56.11,3029.0,3954.0 -0,Tulsa County,40143.0,OK,37.77,62.23,96133.0,158363.0 -0,Grainger County,47057.0,TN,27.54,70.6,2066.0,5297.0 -0,Davidson County,47037.0,TN,59.9,38.91,158423.0,102915.0 -0,Greene County,47059.0,TN,28.82,69.52,7110.0,17151.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Watauga County,37189.0,NC,51.31,47.03,14558.0,13344.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Perquimans County,37143.0,NC,42.64,56.58,2772.0,3678.0 -0,Morgan County,47129.0,TN,28.86,69.14,1969.0,4717.0 -0,Houston County,47083.0,TN,50.03,47.94,1678.0,1608.0 -0,Benton County,47005.0,TN,40.82,57.05,2645.0,3696.0 -0,Wilson County,47189.0,TN,31.05,67.62,15886.0,34595.0 -0,Chowan County,37041.0,NC,49.09,50.23,3688.0,3773.0 -0,Hamblen County,47063.0,TN,30.03,68.41,6807.0,15508.0 -0,Dickson County,47043.0,TN,38.45,59.82,7506.0,11677.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Madison County,5087.0,AR,33.9,62.8,2144.0,3972.0 -0,Putnam County,47141.0,TN,35.65,62.6,9739.0,17101.0 -0,Anderson County,47001.0,TN,36.1,62.32,11396.0,19675.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Chowan County,37041.0,NC,49.09,50.23,3688.0,3773.0 -0,Yadkin County,37197.0,NC,26.4,72.37,4527.0,12409.0 -0,Avery County,37011.0,NC,27.42,71.52,2178.0,5681.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Franklin County,37069.0,NC,49.12,49.83,13085.0,13273.0 -0,Greene County,5055.0,AR,33.4,63.0,4541.0,8578.0 -0,Mora County,35033.0,NM,78.6,20.6,2168.0,569.0 -0,Forsyth County,37067.0,NC,54.83,44.35,91085.0,73674.0 -0,Izard County,5065.0,AR,34.3,61.2,1792.0,3193.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Unicoi County,47171.0,TN,29.17,69.38,2107.0,5011.0 -0,Lawrence County,5075.0,AR,36.7,57.6,2138.0,3357.0 -0,Guilford County,37081.0,NC,58.78,40.42,142101.0,97718.0 -0,Alamance County,37001.0,NC,44.94,54.17,28918.0,34859.0 -0,Payne County,40119.0,OK,36.51,63.49,10601.0,18435.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Humphreys County,47085.0,TN,47.49,50.37,3600.0,3818.0 -0,Bertie County,37015.0,NC,65.2,34.58,6365.0,3376.0 -0,Orange County,37135.0,NC,71.83,27.05,53806.0,20266.0 -0,Durham County,37063.0,NC,75.57,23.63,103456.0,32353.0 -0,Washington County,5143.0,AR,42.4,55.5,29021.0,37963.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Gibson County,47053.0,TN,34.85,63.6,7406.0,13516.0 -0,Sandoval County,35043.0,NM,55.7,43.0,32669.0,25193.0 -0,Harding County,35021.0,NM,41.5,57.2,260.0,358.0 -0,Currituck County,37053.0,NC,33.66,65.16,3737.0,7234.0 -0,Dyer County,47045.0,TN,30.53,68.23,4411.0,9859.0 -0,Nash County,37127.0,NC,49.02,50.36,23099.0,23728.0 -0,Jefferson County,47089.0,TN,27.94,70.65,5178.0,13092.0 -0,Knox County,47093.0,TN,37.73,60.73,70215.0,113015.0 -0,Cocke County,47029.0,TN,26.76,71.67,3340.0,8945.0 -0,Cumberland County,47035.0,TN,30.68,67.81,7889.0,17436.0 -0,Kingfisher County,40073.0,OK,15.81,84.19,1009.0,5372.0 -0,Logan County,40083.0,OK,31.29,68.71,5717.0,12556.0 -0,Blaine County,40011.0,OK,24.59,75.41,1011.0,3101.0 -0,Dewey County,40043.0,OK,15.71,84.29,346.0,1857.0 -0,Creek County,40037.0,OK,29.18,70.82,8318.0,20187.0 -0,Wagoner County,40145.0,OK,29.12,70.88,8810.0,21441.0 -0,Cherokee County,40021.0,OK,43.92,56.08,7194.0,9186.0 -0,Adair County,40001.0,OK,30.67,69.33,2052.0,4638.0 -0,Mitchell County,37121.0,NC,28.52,70.09,2238.0,5499.0 -0,Edgecombe County,37065.0,NC,67.12,32.57,17403.0,8445.0 -0,Carroll County,47017.0,TN,34.17,64.01,3980.0,7455.0 -0,DeKalb County,47041.0,TN,40.08,57.82,2832.0,4085.0 -0,Stone County,5137.0,AR,30.0,66.4,1598.0,3534.0 -0,Newton County,5101.0,AR,29.8,65.4,1182.0,2588.0 -0,Caldwell County,37027.0,NC,34.36,64.08,12081.0,22526.0 -0,Searcy County,5129.0,AR,25.0,70.9,961.0,2726.0 -0,Rutherford County,47149.0,TN,39.77,58.87,40460.0,59892.0 -0,Yancey County,37199.0,NC,46.17,51.92,4486.0,5045.0 -0,White County,47185.0,TN,34.95,63.26,3372.0,6103.0 -0,Wake County,37183.0,NC,56.73,42.28,250891.0,187001.0 -0,Martin County,37117.0,NC,52.14,47.5,6539.0,5957.0 -0,Madison County,37115.0,NC,48.42,50.02,5026.0,5192.0 -0,Davie County,37059.0,NC,30.33,68.64,6178.0,13981.0 -0,Roberts County,48393.0,TX,7.92,92.08,41.0,477.0 -0,Hemphill County,48211.0,TX,13.76,85.67,216.0,1345.0 -0,Hutchinson County,48233.0,TX,15.09,84.02,1322.0,7361.0 -0,Hartley County,48205.0,TX,12.59,86.2,250.0,1711.0 -0,Iredell County,37097.0,NC,37.34,61.71,27318.0,45148.0 -0,Moore County,48341.0,TX,20.65,78.76,1123.0,4282.0 -0,Williamson County,47187.0,TN,29.78,69.26,27886.0,64858.0 -0,Alexander County,37003.0,NC,29.95,68.33,5167.0,11790.0 -0,Roane County,47145.0,TN,31.04,67.27,7224.0,15658.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Sevier County,47155.0,TN,25.35,73.43,8604.0,24922.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Davidson County,37057.0,NC,32.71,66.23,22433.0,45419.0 -0,Roger Mills County,40129.0,OK,16.04,83.96,287.0,1502.0 -0,McKinley County,35031.0,NM,71.4,27.5,16572.0,6382.0 -0,Santa Fe County,35049.0,NM,76.9,21.9,55567.0,15807.0 -0,Mississippi County,5093.0,AR,47.6,49.8,6667.0,6976.0 -0,Burke County,37023.0,NC,39.8,59.03,14901.0,22102.0 -0,Crockett County,47033.0,TN,32.58,66.16,1967.0,3994.0 -0,Craighead County,5031.0,AR,36.5,61.0,11294.0,18881.0 -0,Tyrrell County,37177.0,NC,48.85,50.26,933.0,960.0 -0,Hickman County,47081.0,TN,41.93,56.3,3563.0,4784.0 -0,Washington County,37187.0,NC,58.07,41.37,3748.0,2670.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Los Alamos County,35028.0,NM,52.6,45.8,5824.0,5064.0 -0,Cannon County,47015.0,TN,36.85,60.88,2011.0,3322.0 -0,McDowell County,37111.0,NC,35.74,62.73,6571.0,11534.0 -0,Lauderdale County,47097.0,TN,46.28,52.83,4322.0,4933.0 -0,Lincoln County,40081.0,OK,25.08,74.92,3504.0,10470.0 -0,Independence County,5063.0,AR,30.0,67.1,3688.0,8255.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Randolph County,37151.0,NC,28.23,70.51,16414.0,40998.0 -0,Loudon County,47105.0,TN,27.31,71.29,6058.0,15815.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Jackson County,5067.0,AR,39.5,55.9,2207.0,3118.0 -0,Blount County,47009.0,TN,29.53,68.88,15253.0,35571.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Chatham County,37037.0,NC,54.32,44.61,17862.0,14668.0 -0,San Miguel County,35047.0,NM,79.7,19.2,10320.0,2478.0 -0,Wilson County,37195.0,NC,52.84,46.72,19652.0,17375.0 -0,Rowan County,37159.0,NC,38.0,60.84,23391.0,37451.0 -0,Okmulgee County,40111.0,OK,41.5,58.5,6191.0,8727.0 -0,Muskogee County,40101.0,OK,42.49,57.51,11294.0,15289.0 -0,Sandoval County,35043.0,NM,55.7,43.0,32669.0,25193.0 -0,Warren County,47177.0,TN,38.3,59.46,5515.0,8562.0 -0,Maury County,47119.0,TN,30.04,68.46,3131.0,7135.0 -0,Decatur County,47039.0,TN,32.88,65.11,1566.0,3101.0 -0,Perry County,47135.0,TN,44.3,53.2,1329.0,1596.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Pitt County,37147.0,NC,54.08,45.31,40501.0,33927.0 -0,Catawba County,37035.0,NC,36.94,61.9,25656.0,42993.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Buncombe County,37021.0,NC,56.32,42.4,69716.0,52494.0 -0,Rhea County,47143.0,TN,26.18,72.41,2907.0,8042.0 -0,Van Buren County,47175.0,TN,38.94,59.36,849.0,1294.0 -0,Henderson County,47077.0,TN,27.88,70.79,3021.0,7669.0 -0,Haywood County,47075.0,TN,60.25,38.97,4893.0,3165.0 -0,Johnston County,37101.0,NC,37.73,61.42,26795.0,43622.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Custer County,40039.0,OK,25.33,74.67,2660.0,7842.0 -0,San Bernardino County,6071.0,CA,52.1,45.8,315720.0,277408.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,San Luis Obispo County,6079.0,CA,51.4,46.0,68176.0,61055.0 -0,Kern County,6029.0,CA,40.1,57.9,93457.0,134793.0 -0,Madison County,47113.0,TN,38.27,59.84,4320.0,6755.0 -0,Van Buren County,5141.0,AR,32.1,63.8,2151.0,4276.0 -0,Haywood County,37087.0,NC,45.36,53.12,12730.0,14910.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Franklin County,5047.0,AR,28.9,68.1,1869.0,4411.0 -0,Bledsoe County,47007.0,TN,31.71,66.18,1517.0,3166.0 -0,Johnson County,5071.0,AR,37.1,60.2,3034.0,4922.0 -0,Crawford County,5033.0,AR,25.5,71.5,5238.0,14688.0 -0,Meigs County,47121.0,TN,32.38,66.01,1372.0,2797.0 -0,Quay County,35037.0,NM,38.7,59.2,1547.0,2367.0 -0,Beaufort County,37013.0,NC,41.09,58.5,9454.0,13460.0 -0,Pope County,5115.0,AR,27.2,70.5,6002.0,15568.0 -0,Canadian County,40017.0,OK,23.88,76.12,11426.0,36428.0 -0,Oklahoma County,40109.0,OK,41.59,58.41,116182.0,163172.0 -0,Cleburne County,5023.0,AR,26.0,70.2,2951.0,7962.0 -0,Marshall County,47117.0,TN,29.49,69.13,5541.0,12989.0 -0,Poinsett County,5111.0,AR,34.6,61.8,2742.0,4903.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Coffee County,47031.0,TN,34.3,63.73,7132.0,13250.0 -0,Bedford County,47003.0,TN,32.42,65.89,5027.0,10217.0 -0,Swain County,37173.0,NC,48.4,50.02,2806.0,2900.0 -0,Monroe County,47123.0,TN,30.12,68.45,5053.0,11484.0 -0,Lewis County,47101.0,TN,37.32,61.05,1804.0,2951.0 -0,Greene County,37079.0,NC,46.85,52.72,3796.0,4272.0 -0,Tipton County,47167.0,TN,31.33,67.8,7931.0,17165.0 -0,McMinn County,47107.0,TN,27.99,69.9,2060.0,5145.0 -0,Sequoyah County,40135.0,OK,32.0,68.0,4454.0,9466.0 -0,Okfuskee County,40107.0,OK,35.9,64.1,1480.0,2643.0 -0,Lee County,37105.0,NC,45.33,53.7,10784.0,12775.0 -0,Oldham County,48359.0,TX,11.09,88.37,102.0,813.0 -0,Carson County,48065.0,TX,13.62,85.5,406.0,2548.0 -0,Gray County,48179.0,TX,14.18,85.13,1153.0,6924.0 -0,Wheeler County,48483.0,TX,13.99,85.43,314.0,1918.0 -0,Potter County,48375.0,TX,29.78,69.17,8939.0,20761.0 -0,Rutherford County,37161.0,NC,33.57,65.35,9641.0,18769.0 -0,Wayne County,37191.0,NC,45.45,54.03,22671.0,26952.0 -0,Chester County,47023.0,TN,27.82,71.02,1797.0,4587.0 -0,Harnett County,37085.0,NC,41.24,57.93,16785.0,23579.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Cleveland County,37045.0,NC,39.61,59.49,17363.0,26078.0 -0,Lincoln County,37109.0,NC,32.72,66.01,11713.0,23631.0 -0,Sequatchie County,47153.0,TN,31.58,66.4,1717.0,3610.0 -0,Beaufort County,37013.0,NC,41.09,58.5,9454.0,13460.0 -0,McIntosh County,40091.0,OK,40.37,59.63,3320.0,4903.0 -0,Caddo County,40015.0,OK,34.67,65.33,3404.0,6413.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,White County,5145.0,AR,25.0,72.2,6732.0,19467.0 -0,Grundy County,47061.0,TN,42.55,55.33,1971.0,2563.0 -0,Yavapai County,4025.0,AZ,37.0,61.4,36889.0,61192.0 -0,Jackson County,37099.0,NC,51.97,46.57,8766.0,7854.0 -0,Mecklenburg County,37119.0,NC,61.82,37.45,253958.0,153848.0 -0,Moore County,37125.0,NC,38.88,60.26,17624.0,27314.0 -0,Montgomery County,37123.0,NC,43.94,54.91,4926.0,6155.0 -0,Cabarrus County,37025.0,NC,40.45,58.88,31546.0,45924.0 -0,Beckham County,40009.0,OK,21.97,78.03,1625.0,5772.0 -0,Stanly County,37167.0,NC,31.14,67.81,8878.0,19329.0 -0,Henderson County,37089.0,NC,38.91,59.93,20082.0,30930.0 -0,Wayne County,47181.0,TN,24.52,73.75,1355.0,4076.0 -0,Tipton County,47167.0,TN,31.33,67.8,7931.0,17165.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Seminole County,40133.0,OK,34.71,65.29,2977.0,5600.0 -0,Graham County,37075.0,NC,30.33,67.71,1265.0,2824.0 -0,Washita County,40149.0,OK,22.03,77.97,1052.0,3724.0 -0,Pottawatomie County,40125.0,OK,30.82,69.18,7910.0,17753.0 -0,Conway County,5029.0,AR,38.7,57.6,3149.0,4691.0 -0,Lawrence County,47099.0,TN,32.22,65.96,5161.0,10566.0 -0,Haskell County,40061.0,OK,31.49,68.51,1474.0,3207.0 -0,Hamilton County,47065.0,TN,43.55,55.38,64246.0,81702.0 -0,Giles County,47055.0,TN,39.47,59.05,4614.0,6902.0 -0,Sebastian County,5131.0,AR,31.6,66.3,13673.0,28637.0 -0,Cross County,5037.0,AR,36.2,61.6,2580.0,4393.0 -0,Woodruff County,5147.0,AR,51.1,43.7,1412.0,1206.0 -0,Crittenden County,5035.0,AR,56.6,41.9,10330.0,7650.0 -0,Hardeman County,47069.0,TN,52.67,46.5,5919.0,5225.0 -0,Lenoir County,37107.0,NC,49.74,49.82,13378.0,13401.0 -0,Logan County,5083.0,AR,28.9,67.7,2286.0,5350.0 -0,Transylvania County,37175.0,NC,43.02,55.6,7275.0,9401.0 -0,Hardin County,47071.0,TN,27.84,70.52,2794.0,7077.0 -0,Gaston County,37071.0,NC,37.18,62.21,31384.0,52507.0 -0,Craven County,37049.0,NC,43.39,55.83,19352.0,24901.0 -0,Moore County,47127.0,TN,29.84,68.09,881.0,2010.0 -0,Shelby County,47157.0,TN,63.41,35.99,256297.0,145458.0 -0,Polk County,37149.0,NC,41.62,56.71,4396.0,5990.0 -0,Fayette County,47047.0,TN,35.8,63.22,6892.0,12173.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,McNairy County,47109.0,TN,46.09,53.12,20209.0,23290.0 -0,Le Flore County,40079.0,OK,30.68,69.32,5136.0,11605.0 -0,Grady County,40051.0,OK,26.65,73.35,5520.0,15195.0 -0,Cleveland County,40027.0,OK,38.0,62.0,39681.0,64749.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Lincoln County,47103.0,TN,28.14,70.3,3695.0,9231.0 -0,Faulkner County,5045.0,AR,36.3,61.6,14955.0,25362.0 -0,Franklin County,47051.0,TN,37.94,60.46,6613.0,10539.0 -0,Beaufort County,37013.0,NC,41.09,58.5,9454.0,13460.0 -0,Bradley County,47011.0,TN,24.5,74.19,9357.0,28333.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Cibola County,35006.0,NM,64.1,34.4,5827.0,3131.0 -0,Beaufort County,37013.0,NC,41.09,58.5,9454.0,13460.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,McClain County,40087.0,OK,24.08,75.92,3551.0,11193.0 -0,Macon County,37113.0,NC,38.4,59.85,6620.0,10317.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Pamlico County,37137.0,NC,42.28,56.96,2838.0,3823.0 -0,Pamlico County,37137.0,NC,42.28,56.96,2838.0,3823.0 -0,Marion County,47115.0,TN,38.67,60.08,13058.0,20288.0 -0,Sampson County,37163.0,NC,45.46,53.91,11836.0,14038.0 -0,Yell County,5149.0,AR,33.2,63.1,2003.0,3808.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Pittsburg County,40121.0,OK,31.71,68.29,5457.0,11752.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Cherokee County,37039.0,NC,30.07,68.67,3785.0,8643.0 -0,Hughes County,40063.0,OK,35.29,64.71,1709.0,3134.0 -0,Polk County,47139.0,TN,32.67,65.64,2124.0,4267.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Dare County,37055.0,NC,44.74,53.99,8074.0,9745.0 -0,Cumberland County,37051.0,NC,58.55,40.88,74693.0,52151.0 -0,Jones County,37103.0,NC,45.49,53.89,2378.0,2817.0 -0,Bernalillo County,35001.0,NM,60.0,38.7,171556.0,110521.0 -0,Guadalupe County,35019.0,NM,70.9,28.2,1557.0,620.0 -0,Greenville County,45045.0,SC,37.18,61.03,70886.0,116363.0 -0,Anson County,37007.0,NC,60.15,39.2,6456.0,4207.0 -0,Hoke County,37093.0,NC,59.05,40.27,9227.0,6293.0 -0,Union County,37179.0,NC,36.23,62.87,31189.0,54123.0 -0,Pamlico County,37137.0,NC,42.28,56.96,2838.0,3823.0 -0,Spartanburg County,45083.0,SC,38.43,60.04,41632.0,65042.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Duplin County,37061.0,NC,45.01,54.43,8958.0,10834.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Deaf Smith County,48117.0,TX,26.29,73.06,1247.0,3466.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,Cherokee County,45021.0,SC,34.74,64.07,7215.0,13305.0 -0,Donley County,48129.0,TX,17.22,81.3,291.0,1374.0 -0,Collingsworth County,48087.0,TX,19.58,78.91,234.0,943.0 -0,Randall County,48381.0,TX,18.27,80.93,9468.0,41948.0 -0,Richmond County,37153.0,NC,50.26,48.76,9713.0,9424.0 -0,Armstrong County,48011.0,TX,12.93,86.46,128.0,856.0 -0,Hyde County,37095.0,NC,50.26,49.09,1241.0,1212.0 -0,York County,45091.0,SC,40.47,58.17,37918.0,54500.0 -0,Clay County,37043.0,NC,31.28,66.88,1734.0,3707.0 -0,Saint Francis County,5123.0,AR,57.7,41.2,5486.0,3917.0 -0,Kiowa County,40075.0,OK,32.58,67.42,1226.0,2537.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Greer County,40055.0,OK,26.77,73.23,566.0,1548.0 -0,Santa Barbara County,6083.0,CA,60.4,37.5,105614.0,65585.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Perry County,5105.0,AR,31.6,64.1,1352.0,2743.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Scott County,5127.0,AR,26.4,69.9,1053.0,2791.0 -0,Craven County,37049.0,NC,43.39,55.83,19352.0,24901.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Prairie County,5117.0,AR,31.0,65.8,1048.0,2223.0 -0,Pickens County,45077.0,SC,25.91,72.13,11691.0,32552.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Lonoke County,5085.0,AR,25.1,72.6,5968.0,17242.0 -0,Lancaster County,45057.0,SC,41.97,56.85,12139.0,16441.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Latimer County,40077.0,OK,31.46,68.54,1313.0,2860.0 -0,Oconee County,45073.0,SC,30.45,67.98,9481.0,21164.0 -0,Torrance County,35057.0,NM,44.5,53.8,3087.0,3735.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Scotland County,37165.0,NC,57.33,42.24,8151.0,6005.0 -0,Harmon County,40057.0,OK,30.55,69.45,333.0,757.0 -0,Pulaski County,5119.0,AR,55.1,43.5,88854.0,70212.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Lauderdale County,1077.0,AL,35.0,63.2,13329.0,24068.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Monroe County,5095.0,AR,46.8,50.9,1615.0,1754.0 -0,Rabun County,13241.0,GA,26.3,72.2,2001.0,5487.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Limestone County,1083.0,AL,28.4,70.3,9536.0,23598.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Alcorn County,28003.0,MS,27.2,71.17,4130.0,10805.0 -0,Tishomingo County,28141.0,MS,23.3,74.22,1962.0,6249.0 -0,Tippah County,28139.0,MS,26.97,71.33,2623.0,6937.0 -0,DeSoto County,28033.0,MS,30.51,68.75,19627.0,44222.0 -0,Benton County,28009.0,MS,48.02,50.22,2227.0,2329.0 -0,Marshall County,28093.0,MS,58.78,40.56,9685.0,6683.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Towns County,13281.0,GA,24.2,74.8,1391.0,4292.0 -0,Madison County,1089.0,AL,41.9,56.9,64117.0,86965.0 -0,Jackson County,1071.0,AL,30.5,67.5,6374.0,14083.0 -0,Murray County,13213.0,GA,26.6,71.9,3026.0,8180.0 -0,Fannin County,13111.0,GA,24.7,73.8,2611.0,7807.0 -0,Whitfield County,13313.0,GA,29.5,69.5,8167.0,19230.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Catoosa County,13047.0,GA,24.6,74.4,6025.0,18218.0 -0,Union County,13291.0,GA,23.4,75.4,2486.0,8013.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Dade County,13083.0,GA,25.2,73.4,1612.0,4703.0 -0,Walker County,13295.0,GA,25.9,72.7,6095.0,17110.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Pontotoc County,40123.0,OK,31.64,68.36,4512.0,9750.0 -0,Valencia County,35061.0,NM,53.2,45.5,15366.0,13136.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Robeson County,37155.0,NC,56.47,42.69,23058.0,17433.0 -0,Curry County,35009.0,NM,32.3,66.5,4670.0,9599.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Union County,45087.0,SC,43.8,54.97,5935.0,7449.0 -0,Lee County,5077.0,AR,60.1,38.6,2263.0,1454.0 -0,Colbert County,1033.0,AL,39.1,59.3,9703.0,14739.0 -0,Ventura County,6111.0,CA,55.2,42.9,187601.0,145853.0 -0,Tunica County,28143.0,MS,75.69,23.48,3279.0,1017.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,DeKalb County,1049.0,AL,23.6,74.8,5658.0,17957.0 -0,Bladen County,37017.0,NC,50.73,48.66,7853.0,7532.0 -0,Jackson County,40065.0,OK,25.2,74.8,2264.0,6719.0 -0,Saline County,5125.0,AR,28.4,69.4,12695.0,30981.0 -0,Comanche County,40031.0,OK,41.23,58.77,14120.0,20127.0 -0,Garvin County,40049.0,OK,28.2,71.8,3028.0,7710.0 -0,Gilmer County,13123.0,GA,23.5,75.4,2614.0,8408.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Habersham County,13137.0,GA,19.6,79.5,2900.0,11766.0 -0,Los Angeles County,6037.0,CA,69.2,28.8,2295853.0,956425.0 -0,Chester County,45023.0,SC,53.49,45.19,7478.0,6318.0 -0,Anderson County,45007.0,SC,32.7,65.99,24132.0,48690.0 -0,Chesterfield County,45025.0,SC,47.94,50.89,7842.0,8325.0 -0,Marlboro County,45069.0,SC,52.66,46.58,2755.0,2437.0 -0,Lawrence County,1079.0,AL,35.2,63.2,5164.0,9277.0 -0,White County,13311.0,GA,20.2,78.7,2174.0,8467.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Laurens County,45059.0,SC,40.25,58.34,10578.0,15334.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,DeBaca County,35011.0,NM,34.4,64.8,359.0,676.0 -0,Tate County,28137.0,MS,39.15,60.09,5003.0,7678.0 -0,Garland County,5051.0,AR,36.4,61.4,15899.0,26825.0 -0,Coal County,40029.0,OK,26.41,73.59,600.0,1672.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Prentiss County,28117.0,MS,27.6,70.39,3020.0,7703.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Swisher County,48437.0,TX,32.07,66.39,813.0,1683.0 -0,Briscoe County,48045.0,TX,24.7,74.34,205.0,617.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Castro County,48069.0,TX,31.38,68.18,719.0,1562.0 -0,Hall County,48191.0,TX,25.63,73.58,324.0,930.0 -0,Childress County,48075.0,TX,21.65,77.61,497.0,1782.0 -0,Montgomery County,5097.0,AR,30.1,65.3,1092.0,2365.0 -0,Parmer County,48369.0,TX,19.36,79.96,719.0,2969.0 -0,Lumpkin County,13187.0,GA,23.4,75.2,2586.0,8326.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Polk County,5113.0,AR,25.5,71.3,1957.0,5473.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Morgan County,1103.0,AL,27.5,71.3,13895.0,36014.0 -0,Stephens County,13257.0,GA,25.7,73.1,2705.0,7689.0 -0,Stephens County,40137.0,OK,23.97,76.03,4538.0,14394.0 -0,Atoka County,40005.0,OK,28.07,71.93,1370.0,3511.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Pushmataha County,40127.0,OK,28.28,71.72,1265.0,3208.0 -0,Carteret County,37031.0,NC,32.17,66.86,11130.0,23131.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Phillips County,5107.0,AR,63.5,34.5,5695.0,3097.0 -0,Murray County,40099.0,OK,29.82,70.18,1592.0,3746.0 -0,Tillman County,40141.0,OK,32.19,67.81,1042.0,2195.0 -0,Gordon County,13129.0,GA,24.2,74.5,4268.0,13113.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Dillon County,45033.0,SC,55.21,43.78,7408.0,5874.0 -0,Dawson County,13085.0,GA,16.4,82.6,1632.0,8242.0 -0,Kershaw County,45055.0,SC,40.11,58.84,11226.0,16466.0 -0,Roosevelt County,35041.0,NM,34.3,64.2,2303.0,4311.0 -0,Union County,28145.0,MS,24.48,74.39,2985.0,9072.0 -0,Marshall County,1095.0,AL,21.2,77.6,7038.0,25727.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Chattooga County,13055.0,GA,31.3,67.1,2596.0,5572.0 -0,Floyd County,13115.0,GA,31.3,67.6,10691.0,23132.0 -0,Socorro County,35053.0,NM,59.5,38.4,4696.0,3032.0 -0,Catron County,35003.0,NM,31.4,66.2,664.0,1398.0 -0,Franklin County,1059.0,AL,29.7,68.8,3469.0,8048.0 -0,Hardeman County,48197.0,TX,23.39,75.17,373.0,1199.0 -0,Fairfield County,45039.0,SC,65.33,33.67,7591.0,3912.0 -0,Arkansas County,5001.0,AR,37.5,60.0,2619.0,4185.0 -0,Pickens County,13227.0,GA,20.3,78.2,2595.0,10004.0 -0,Lafayette County,28071.0,MS,43.32,55.68,7997.0,10278.0 -0,Panola County,28107.0,MS,52.94,46.42,8690.0,7620.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Franklin County,13119.0,GA,23.7,75.2,1914.0,6069.0 -0,Darlington County,45031.0,SC,49.45,49.58,14505.0,14544.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Newberry County,45071.0,SC,40.6,58.19,6708.0,9616.0 -0,Cherokee County,1019.0,AL,23.7,74.9,2306.0,7298.0 -0,Coahoma County,28027.0,MS,71.89,27.6,7597.0,2917.0 -0,Quitman County,28119.0,MS,67.25,32.01,2803.0,1334.0 -0,Hall County,13139.0,GA,24.1,75.0,14457.0,44962.0 -0,Lee County,28081.0,MS,34.39,64.91,12021.0,22694.0 -0,Carter County,40019.0,OK,29.73,70.27,5603.0,13241.0 -0,Johnston County,40069.0,OK,31.56,68.44,1249.0,2708.0 -0,Cotton County,40033.0,OK,27.79,72.21,690.0,1793.0 -0,McCurtain County,40089.0,OK,26.51,73.49,2794.0,7745.0 -0,Hot Spring County,5059.0,AR,35.9,60.3,4288.0,7209.0 -0,Gila County,4007.0,AZ,35.3,63.1,7884.0,14095.0 -0,Hart County,13147.0,GA,33.6,65.4,3365.0,6537.0 -0,Grant County,5053.0,AR,23.0,73.9,1562.0,5023.0 -0,Jefferson County,5069.0,AR,62.2,35.9,18465.0,10655.0 -0,Banks County,13011.0,GA,16.5,82.0,1027.0,5120.0 -0,Columbus County,37047.0,NC,45.61,53.51,11076.0,12994.0 -0,Abbeville County,45001.0,SC,41.75,56.94,4593.0,6264.0 -0,Onslow County,37133.0,NC,38.84,60.31,19499.0,30278.0 -0,Itawamba County,28057.0,MS,20.94,77.01,2084.0,7663.0 -0,Wilbarger County,48487.0,TX,26.52,72.81,1196.0,3283.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Bartow County,13015.0,GA,26.8,72.0,9662.0,25976.0 -0,Cherokee County,13057.0,GA,23.8,75.0,22350.0,70279.0 -0,Greenwood County,45047.0,SC,41.62,57.29,12348.0,16995.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Pontotoc County,28115.0,MS,23.17,75.59,2982.0,9727.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Lee County,45061.0,SC,65.12,33.58,5960.0,3074.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Howard County,5061.0,AR,36.0,61.0,1746.0,2957.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Pike County,5109.0,AR,27.5,68.8,1089.0,2727.0 -0,Lincoln County,35027.0,NM,36.5,61.9,3535.0,6001.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Clark County,5019.0,AR,46.9,50.7,4267.0,4608.0 -0,Forsyth County,13117.0,GA,20.4,78.5,15406.0,59166.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Marion County,1093.0,AL,21.0,77.2,2600.0,9536.0 -0,La Paz County,4012.0,AZ,34.7,63.2,1929.0,3509.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Motley County,48345.0,TX,11.28,87.88,67.0,522.0 -0,Cottle County,48101.0,TX,26.52,72.2,187.0,509.0 -0,Cullman County,1043.0,AL,16.6,81.9,5864.0,28896.0 -0,Floyd County,48153.0,TX,28.96,70.77,730.0,1784.0 -0,Hale County,48189.0,TX,27.24,72.12,2708.0,7171.0 -0,Lamb County,48279.0,TX,25.55,73.9,1156.0,3344.0 -0,Florence County,45041.0,SC,47.99,51.16,28012.0,29861.0 -0,Bailey County,48017.0,TX,29.45,69.86,682.0,1618.0 -0,Winston County,1133.0,AL,17.5,80.8,1757.0,8103.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Horry County,45051.0,SC,37.1,61.65,38879.0,64609.0 -0,Marion County,45067.0,SC,62.47,36.74,6794.0,3996.0 -0,Jackson County,13157.0,GA,21.6,77.4,4950.0,17776.0 -0,Pender County,37141.0,NC,41.72,57.34,9907.0,13618.0 -0,Jefferson County,40067.0,OK,32.76,67.24,805.0,1652.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Elbert County,13105.0,GA,40.5,58.5,3366.0,4868.0 -0,Madison County,13195.0,GA,26.2,72.6,2965.0,8226.0 -0,Richland County,45079.0,SC,64.02,35.11,105656.0,57941.0 -0,Blount County,1009.0,AL,14.5,84.0,3522.0,20389.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Foard County,48155.0,TX,36.8,60.78,198.0,327.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Wichita County,48485.0,TX,30.16,69.01,13868.0,31731.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Etowah County,1055.0,AL,30.2,68.4,13497.0,30595.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Lexington County,45063.0,SC,30.41,68.45,33303.0,74960.0 -0,Yalobusha County,28161.0,MS,46.16,53.15,3151.0,3628.0 -0,Sevier County,5133.0,AR,28.2,68.2,1291.0,3125.0 -0,Saluda County,45081.0,SC,38.63,60.34,3323.0,5191.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Fulton County,13121.0,GA,67.2,32.1,272000.0,130136.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Marshall County,40095.0,OK,30.58,69.42,1643.0,3730.0 -0,Lincoln County,5079.0,AR,38.8,57.0,1710.0,2513.0 -0,Sumter County,45085.0,SC,57.33,41.89,25431.0,18581.0 -0,Gwinnett County,13135.0,GA,44.5,54.7,129025.0,158746.0 -0,Tallahatchie County,28135.0,MS,59.12,40.13,4105.0,2786.0 -0,Calhoun County,28013.0,MS,35.85,63.51,2522.0,4467.0 -0,Bryan County,40013.0,OK,32.23,67.77,4426.0,9307.0 -0,Choctaw County,40023.0,OK,33.27,66.73,1860.0,3730.0 -0,Dallas County,5039.0,AR,44.3,53.0,1471.0,1757.0 -0,Clay County,48077.0,TX,20.32,78.91,1085.0,4213.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Barrow County,13013.0,GA,27.1,71.7,6657.0,17625.0 -0,Bolivar County,28011.0,MS,67.19,31.8,10334.0,4891.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Desha County,5041.0,AR,54.9,42.7,2569.0,1999.0 -0,Polk County,13233.0,GA,28.7,69.8,4052.0,9850.0 -0,Monroe County,28095.0,MS,40.98,58.21,7169.0,10184.0 -0,Chaves County,35005.0,NM,37.1,61.7,8197.0,13651.0 -0,Cobb County,13067.0,GA,44.8,54.2,141216.0,170957.0 -0,Riverside County,6065.0,CA,50.2,47.9,325017.0,310041.0 -0,Paulding County,13223.0,GA,30.2,68.8,17229.0,39192.0 -0,McCormick County,45065.0,SC,63.32,35.69,9608.0,5416.0 -0,Santa Barbara County,6083.0,CA,60.4,37.5,105614.0,65585.0 -0,Santa Barbara County,6083.0,CA,60.4,37.5,105614.0,65585.0 -0,Chickasaw County,28017.0,MS,50.65,48.52,4588.0,4395.0 -0,Love County,40085.0,OK,32.68,67.32,1257.0,2589.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Santa Barbara County,6083.0,CA,60.4,37.5,105614.0,65585.0 -0,Cleveland County,5025.0,AR,26.0,69.9,911.0,2451.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Lamar County,1075.0,AL,22.8,76.6,1614.0,5419.0 -0,Oglethorpe County,13221.0,GA,34.6,64.3,2232.0,4144.0 -0,Maricopa County,4013.0,AZ,44.1,54.7,602166.0,746448.0 -0,Clarke County,13059.0,GA,65.0,33.7,29591.0,15333.0 -0,Santa Barbara County,6083.0,CA,60.4,37.5,105614.0,65585.0 -0,Ventura County,6111.0,CA,55.2,42.9,187601.0,145853.0 -0,Ventura County,6111.0,CA,55.2,42.9,187601.0,145853.0 -0,Ventura County,6111.0,CA,55.2,42.9,187601.0,145853.0 -0,Hempstead County,5057.0,AR,39.0,58.1,2869.0,4273.0 -0,Walker County,1127.0,AL,25.9,72.3,7420.0,20722.0 -0,Wilkes County,13317.0,GA,45.8,53.5,2315.0,2705.0 -0,Montague County,48337.0,TX,20.09,78.55,1597.0,6245.0 -0,Saint Clair County,1115.0,AL,17.9,81.1,6091.0,27649.0 -0,Sunflower County,28133.0,MS,70.03,28.99,7838.0,3245.0 -0,Lincoln County,13181.0,GA,37.4,61.8,1650.0,2731.0 -0,Edgefield County,45037.0,SC,44.05,54.98,5075.0,6334.0 -0,DeKalb County,13089.0,GA,79.0,20.4,254594.0,65581.0 -0,Calhoun County,1015.0,AL,33.2,65.7,16334.0,32348.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Oconee County,13219.0,GA,28.2,70.7,4825.0,12120.0 -0,Cleburne County,1029.0,AL,18.0,80.4,1168.0,5216.0 -0,Red River County,48387.0,TX,30.46,68.51,1539.0,3461.0 -0,Nevada County,5099.0,AR,40.6,56.7,1474.0,2062.0 -0,Grayson County,48181.0,TX,30.56,68.47,13900.0,31136.0 -0,Cooke County,48097.0,TX,20.3,78.97,3051.0,11871.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,New Hanover County,37129.0,NC,48.82,50.21,49145.0,50544.0 -0,Little River County,5081.0,AR,34.0,63.0,1753.0,3247.0 -0,Clarendon County,45027.0,SC,55.77,43.45,8673.0,6758.0 -0,Orange County,6059.0,CA,47.6,50.2,549558.0,579064.0 -0,Lamar County,48277.0,TX,28.55,70.54,5243.0,12952.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Walton County,13297.0,GA,23.5,75.7,8469.0,27253.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Fayette County,1057.0,AL,25.1,73.9,1994.0,5883.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Haralson County,13143.0,GA,20.3,78.0,2248.0,8658.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Grenada County,28043.0,MS,44.42,55.07,5029.0,6234.0 -0,Williamsburg County,45089.0,SC,68.59,30.43,11279.0,5004.0 -0,Fannin County,48147.0,TX,29.62,69.2,3464.0,8092.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Calhoun County,45017.0,SC,51.31,47.75,3970.0,3695.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Horry County,45051.0,SC,37.1,61.65,38879.0,64609.0 -0,Aiken County,45003.0,SC,37.41,61.41,26101.0,42849.0 -0,Brunswick County,37019.0,NC,40.55,58.46,21331.0,30753.0 -0,Jefferson County,1073.0,AL,52.2,47.1,166121.0,149921.0 -0,King County,48269.0,TX,4.91,92.64,8.0,151.0 -0,Knox County,48275.0,TX,26.83,72.08,367.0,986.0 -0,Archer County,48009.0,TX,16.95,82.36,740.0,3595.0 -0,Dickens County,48125.0,TX,24.07,75.1,234.0,730.0 -0,Crosby County,48107.0,TX,35.74,63.79,684.0,1221.0 -0,Baylor County,48023.0,TX,22.28,76.81,366.0,1262.0 -0,Lubbock County,48303.0,TX,31.26,67.98,30486.0,66304.0 -0,Cochran County,48079.0,TX,26.87,71.71,284.0,758.0 -0,Hockley County,48219.0,TX,23.51,75.8,1797.0,5795.0 -0,Ouachita County,5103.0,AR,43.6,54.5,4346.0,5427.0 -0,Morgan County,13211.0,GA,33.8,65.4,3091.0,5987.0 -0,Carroll County,13045.0,GA,33.0,65.9,14334.0,28661.0 -0,Leflore County,28083.0,MS,68.14,31.38,8914.0,4105.0 -0,Clay County,28025.0,MS,59.12,40.26,6558.0,4466.0 -0,Douglas County,13097.0,GA,50.5,48.7,27825.0,26812.0 -0,Calhoun County,5013.0,AR,31.2,65.9,691.0,1462.0 -0,Drew County,5043.0,AR,39.3,58.4,2598.0,3860.0 -0,Rockdale County,13247.0,GA,54.4,44.9,20526.0,16921.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Greenlee County,4011.0,AZ,40.0,58.8,1165.0,1712.0 -0,Los Angeles County,6037.0,CA,69.2,28.8,2295853.0,956425.0 -0,Greene County,13133.0,GA,42.2,57.2,3339.0,4532.0 -0,Lowndes County,28087.0,MS,48.09,50.95,13209.0,13994.0 -0,Newton County,13217.0,GA,50.3,49.1,20827.0,20337.0 -0,Webster County,28155.0,MS,24.72,74.62,1349.0,4072.0 -0,Taliaferro County,13265.0,GA,65.0,34.2,643.0,339.0 -0,Bowie County,48037.0,TX,30.74,68.67,10815.0,24162.0 -0,Orangeburg County,45075.0,SC,68.58,30.47,27263.0,12115.0 -0,Bradley County,5011.0,AR,41.6,56.0,1680.0,2262.0 -0,Columbia County,13073.0,GA,28.4,71.0,15703.0,39322.0 -0,Talladega County,1121.0,AL,40.3,58.8,13779.0,20112.0 -0,Montgomery County,28097.0,MS,45.68,53.76,2609.0,3071.0 -0,Carroll County,28015.0,MS,34.15,65.41,2037.0,3902.0 -0,McDuffie County,13189.0,GA,42.3,57.2,3989.0,5400.0 -0,Graham County,4009.0,AZ,29.0,69.8,3487.0,8376.0 -0,Clayton County,13063.0,GA,83.0,16.6,82527.0,16506.0 -0,Henry County,13151.0,GA,45.9,53.4,40567.0,47157.0 -0,Miller County,5091.0,AR,32.3,65.8,4869.0,9913.0 -0,Warren County,13301.0,GA,58.4,40.9,1554.0,1087.0 -0,Tuscaloosa County,1125.0,AL,41.6,57.5,32796.0,45405.0 -0,Lea County,35025.0,NM,27.4,71.6,5108.0,13347.0 -0,Oktibbeha County,28105.0,MS,49.63,49.6,9326.0,9320.0 -0,Chicot County,5017.0,AR,58.4,40.7,3043.0,2119.0 -0,Fayette County,13113.0,GA,34.2,64.9,20313.0,38501.0 -0,Shelby County,1117.0,AL,22.8,76.2,20625.0,69060.0 -0,Richmond County,13245.0,GA,65.7,33.8,52100.0,26842.0 -0,Pickens County,1107.0,AL,45.6,54.0,4594.0,5434.0 -0,Choctaw County,28019.0,MS,35.34,63.57,1459.0,2624.0 -0,Washington County,28151.0,MS,67.14,32.41,13148.0,6347.0 -0,Jasper County,13159.0,GA,32.8,66.3,1935.0,3916.0 -0,Coweta County,13077.0,GA,29.0,70.2,15521.0,37571.0 -0,Berkeley County,45015.0,SC,42.84,55.89,27755.0,36205.0 -0,San Diego County,6073.0,CA,54.1,43.9,666581.0,541032.0 -0,Randolph County,1111.0,AL,29.5,69.1,3064.0,7175.0 -0,Clay County,1027.0,AL,25.8,73.1,1760.0,4984.0 -0,Delta County,48119.0,TX,26.93,72.25,589.0,1580.0 -0,Santa Barbara County,6083.0,CA,60.4,37.5,105614.0,65585.0 -0,Barnwell County,45011.0,SC,50.33,48.67,4931.0,4769.0 -0,Putnam County,13237.0,GA,34.0,65.3,3102.0,5966.0 -0,Sierra County,35051.0,NM,42.9,55.0,2352.0,3017.0 -0,Lafayette County,5073.0,AR,39.0,58.1,1133.0,1685.0 -0,Los Angeles County,6037.0,CA,69.2,28.8,2295853.0,956425.0 -0,Hancock County,13141.0,GA,81.4,18.3,3535.0,795.0 -0,Yuma County,4027.0,AZ,42.6,56.3,18559.0,24577.0 -0,Pinal County,4021.0,AZ,42.2,56.7,44254.0,59421.0 -0,Jack County,48237.0,TX,15.55,83.63,470.0,2528.0 -0,Columbia County,5027.0,AR,37.2,61.3,3554.0,5861.0 -0,Butts County,13035.0,GA,33.7,65.4,3065.0,5947.0 -0,Bamberg County,45009.0,SC,64.95,33.89,4426.0,2309.0 -0,Imperial County,6025.0,CA,62.2,36.1,24162.0,14008.0 -0,Wise County,48497.0,TX,21.66,77.39,4471.0,15973.0 -0,Denton County,48121.0,TX,37.47,61.63,91160.0,149935.0 -0,Heard County,13149.0,GA,24.7,74.2,1042.0,3133.0 -0,Hunt County,48231.0,TX,29.11,69.68,8594.0,20573.0 -0,Collin County,48085.0,TX,36.77,62.34,109047.0,184897.0 -0,Kent County,48263.0,TX,22.1,76.34,99.0,342.0 -0,Stonewall County,48433.0,TX,28.03,71.29,206.0,524.0 -0,Titus County,48449.0,TX,34.02,65.2,3145.0,6028.0 -0,Garza County,48169.0,TX,21.43,77.49,375.0,1356.0 -0,Throckmorton County,48447.0,TX,19.81,80.07,166.0,671.0 -0,Young County,48503.0,TX,17.84,81.34,1303.0,5942.0 -0,Haskell County,48207.0,TX,33.03,65.6,699.0,1388.0 -0,Ashley County,5003.0,AR,34.4,62.6,2976.0,5406.0 -0,Lynn County,48305.0,TX,29.63,69.61,627.0,1473.0 -0,Otero County,35035.0,NM,39.6,58.8,8610.0,12806.0 -0,Yoakum County,48501.0,TX,18.31,80.92,450.0,1989.0 -0,Terry County,48445.0,TX,32.22,67.27,1379.0,2879.0 -0,Franklin County,48159.0,TX,23.07,75.53,1036.0,3392.0 -0,Union County,5139.0,AR,36.0,62.2,6190.0,10677.0 -0,Hopkins County,48223.0,TX,27.32,71.98,3530.0,9299.0 -0,Morris County,48343.0,TX,39.16,60.18,2055.0,3158.0 -0,Holmes County,28051.0,MS,81.37,17.96,7765.0,1714.0 -0,Spalding County,13255.0,GA,40.2,58.9,10141.0,14885.0 -0,Dorchester County,45035.0,SC,41.61,57.11,21806.0,29929.0 -0,Humphreys County,28053.0,MS,70.89,28.52,3634.0,1462.0 -0,Glascock County,13125.0,GA,14.7,84.2,210.0,1202.0 -0,Jefferson County,13163.0,GA,57.4,42.3,4149.0,3061.0 -0,Cass County,48067.0,TX,29.46,69.89,3490.0,8279.0 -0,Burke County,13033.0,GA,54.4,45.1,5233.0,4344.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Noxubee County,28103.0,MS,76.34,23.14,5030.0,1525.0 -0,Winston County,28159.0,MS,45.52,53.78,4653.0,5497.0 -0,Attala County,28007.0,MS,41.91,57.42,3849.0,5273.0 -0,Ventura County,6111.0,CA,55.2,42.9,187601.0,145853.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Bibb County,1007.0,AL,26.6,72.4,2299.0,6262.0 -0,Washington County,13303.0,GA,52.0,47.6,4607.0,4216.0 -0,Meriwether County,13199.0,GA,47.0,52.4,4465.0,4982.0 -0,Troup County,13285.0,GA,40.2,59.1,10455.0,15391.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Grant County,35017.0,NM,59.2,39.3,8142.0,5406.0 -0,Pike County,13231.0,GA,19.2,79.8,1575.0,6547.0 -0,Lamar County,13171.0,GA,35.8,63.4,2752.0,4873.0 -0,Monroe County,13207.0,GA,33.9,65.4,4106.0,7933.0 -0,Baldwin County,13009.0,GA,51.9,47.3,8587.0,7823.0 -0,Jones County,13169.0,GA,36.8,62.6,4572.0,7782.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Colleton County,45029.0,SC,49.74,49.22,8616.0,8525.0 -0,Georgetown County,45043.0,SC,46.88,52.13,14199.0,15790.0 -0,Allendale County,45005.0,SC,75.27,23.53,3029.0,947.0 -0,Greene County,1063.0,AL,83.1,16.5,4408.0,876.0 -0,Chambers County,1017.0,AL,45.5,53.9,6799.0,8067.0 -0,Tallapoosa County,1123.0,AL,31.4,67.9,6063.0,13116.0 -0,Coosa County,1037.0,AL,40.9,58.4,2273.0,3248.0 -0,Sharkey County,28125.0,MS,68.23,31.23,1907.0,873.0 -0,Camp County,48063.0,TX,37.97,61.27,1734.0,2798.0 -0,Chilton County,1021.0,AL,20.7,78.5,3674.0,13960.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Dona Ana County,35013.0,NM,58.1,40.5,40282.0,28068.0 -0,Screven County,13251.0,GA,46.7,52.8,3024.0,3423.0 -0,Los Angeles County,6037.0,CA,69.2,28.8,2295853.0,956425.0 -0,Los Angeles County,6037.0,CA,69.2,28.8,2295853.0,956425.0 -0,Hampton County,45049.0,SC,62.2,36.78,5816.0,3439.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Yazoo County,28163.0,MS,53.29,46.09,6116.0,5290.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Caddo Parish,22017.0,LA,51.11,48.07,55536.0,52228.0 -0,Bossier Parish,22015.0,LA,27.71,71.37,12703.0,32713.0 -0,Webster Parish,22119.0,LA,36.18,62.49,6610.0,11417.0 -0,Claiborne Parish,22027.0,LA,44.22,54.82,3025.0,3750.0 -0,Union Parish,22111.0,LA,28.55,70.1,3103.0,7619.0 -0,Wood County,48499.0,TX,22.55,76.8,4010.0,13658.0 -0,Issaquena County,28055.0,MS,60.95,38.32,579.0,364.0 -0,Wilkinson County,13319.0,GA,49.2,50.3,2298.0,2349.0 -0,Morehouse Parish,22067.0,LA,43.88,54.98,5792.0,7258.0 -0,Hale County,1065.0,AL,60.7,39.0,4982.0,3200.0 -0,West Carroll Parish,22123.0,LA,17.61,81.11,878.0,4045.0 -0,Palo Pinto County,48363.0,TX,25.27,73.45,2499.0,7264.0 -0,East Carroll Parish,22035.0,LA,63.7,35.23,2267.0,1254.0 -0,Parker County,48367.0,TX,21.9,77.11,10502.0,36974.0 -0,Upson County,13293.0,GA,35.6,63.8,4061.0,7291.0 -0,Sumter County,1119.0,AL,75.0,24.7,5264.0,1731.0 -0,Tarrant County,48439.0,TX,43.73,55.43,274880.0,348420.0 -0,Dallas County,48113.0,TX,57.28,41.98,422989.0,310000.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Rockwall County,48397.0,TX,26.48,72.66,8492.0,23300.0 -0,Rains County,48379.0,TX,24.74,74.27,1048.0,3146.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Scurry County,48415.0,TX,19.54,79.26,1088.0,4414.0 -0,Eddy County,35015.0,NM,36.6,62.2,7351.0,12500.0 -0,Fisher County,48151.0,TX,38.51,60.71,687.0,1083.0 -0,Borden County,48033.0,TX,11.08,87.53,40.0,316.0 -0,Dawson County,48115.0,TX,28.13,70.95,1152.0,2906.0 -0,Gaines County,48165.0,TX,15.98,83.23,650.0,3385.0 -0,Jones County,48253.0,TX,26.31,72.37,1528.0,4203.0 -0,Shackelford County,48417.0,TX,13.82,85.32,208.0,1284.0 -0,Stephens County,48429.0,TX,17.75,81.37,626.0,2869.0 -0,Jenkins County,13165.0,GA,43.1,56.3,1482.0,1936.0 -0,Bibb County,13021.0,GA,58.7,40.7,38987.0,27037.0 -0,Neshoba County,28099.0,MS,27.31,72.0,3114.0,8209.0 -0,Leake County,28079.0,MS,44.35,55.01,4151.0,5148.0 -0,Kemper County,28069.0,MS,62.34,37.05,3256.0,1935.0 -0,Upshur County,48459.0,TX,24.99,74.0,3790.0,11222.0 -0,Twiggs County,13289.0,GA,53.2,46.2,2402.0,2087.0 -0,Talbot County,13263.0,GA,64.0,35.2,2369.0,1301.0 -0,Marion County,48315.0,TX,38.66,60.37,1644.0,2567.0 -0,Madison County,28089.0,MS,41.95,57.55,19831.0,27203.0 -0,Perry County,1105.0,AL,72.4,27.3,4457.0,1679.0 -0,Harris County,13145.0,GA,28.1,71.4,4184.0,10648.0 -0,Crawford County,13079.0,GA,35.0,64.1,1832.0,3358.0 -0,Kaufman County,48257.0,TX,31.76,67.53,11161.0,23735.0 -0,Emanuel County,13107.0,GA,37.2,62.0,3068.0,5110.0 -0,Van Zandt County,48467.0,TX,22.09,77.15,4505.0,15734.0 -0,Johnson County,13167.0,GA,32.9,66.6,1198.0,2426.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Harrison County,48203.0,TX,33.97,65.38,8887.0,17103.0 -0,San Diego County,6073.0,CA,54.1,43.9,666581.0,541032.0 -0,Hidalgo County,35023.0,NM,50.9,48.0,993.0,936.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Elmore County,1051.0,AL,24.2,75.1,8301.0,25777.0 -0,Lincoln Parish,22061.0,LA,43.23,55.69,8292.0,10680.0 -0,Jasper County,45053.0,SC,60.87,38.01,5389.0,3365.0 -0,Taylor County,13269.0,GA,42.9,56.4,1536.0,2021.0 -0,Lee County,1081.0,AL,39.6,59.3,21498.0,32230.0 -0,Dallas County,1047.0,AL,67.1,32.6,13986.0,6798.0 -0,Ouachita Parish,22073.0,LA,36.9,62.07,24813.0,41741.0 -0,Laurens County,13175.0,GA,39.0,60.5,7769.0,12052.0 -0,Autauga County,1001.0,AL,25.8,73.6,6093.0,17403.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,Peach County,13225.0,GA,53.1,46.3,5927.0,5173.0 -0,Houston County,13153.0,GA,39.5,59.7,22094.0,33392.0 -0,Smith County,48423.0,TX,29.82,69.36,23726.0,55187.0 -0,Richland Parish,22083.0,LA,36.06,62.64,3311.0,5751.0 -0,Gregg County,48183.0,TX,30.9,68.54,13166.0,29203.0 -0,Bulloch County,13031.0,GA,40.1,59.3,9586.0,14174.0 -0,Scott County,28123.0,MS,43.06,56.41,5025.0,6584.0 -0,Warren County,28149.0,MS,48.19,51.24,10489.0,11152.0 -0,Muscogee County,13215.0,GA,59.6,39.9,44158.0,29568.0 -0,Luna County,35029.0,NM,51.7,46.4,4311.0,3870.0 -0,Effingham County,13103.0,GA,24.3,75.0,4936.0,15230.0 -0,Macon County,1087.0,AL,86.9,12.8,9450.0,1396.0 -0,Rankin County,28121.0,MS,22.78,76.29,14372.0,48140.0 -0,Bienville Parish,22013.0,LA,48.3,50.82,3589.0,3776.0 -0,Bleckley County,13023.0,GA,27.2,72.1,1380.0,3657.0 -0,Lauderdale County,28075.0,MS,40.26,59.14,13332.0,19582.0 -0,Newton County,28101.0,MS,32.65,66.76,3218.0,6579.0 -0,Hinds County,28049.0,MS,69.24,30.26,75401.0,32949.0 -0,Colleton County,45029.0,SC,49.74,49.22,8616.0,8525.0 -0,Madison Parish,22065.0,LA,58.49,40.6,3100.0,2152.0 -0,Marion County,13197.0,GA,43.4,55.7,1381.0,1772.0 -0,Candler County,13043.0,GA,34.4,65.0,1209.0,2286.0 -0,Hood County,48221.0,TX,22.51,76.56,5087.0,17299.0 -0,Johnson County,48251.0,TX,25.8,73.3,12912.0,36685.0 -0,Charleston County,45019.0,SC,53.55,45.21,82698.0,69822.0 -0,Ellis County,48139.0,TX,28.47,70.71,15333.0,38078.0 -0,Marengo County,1091.0,AL,51.7,48.1,5926.0,5516.0 -0,Chattahoochee County,13053.0,GA,50.6,49.4,830.0,811.0 -0,Howard County,48227.0,TX,26.27,72.55,2545.0,7029.0 -0,Mitchell County,48335.0,TX,24.11,74.66,586.0,1815.0 -0,Nolan County,48353.0,TX,30.04,68.83,1521.0,3485.0 -0,Martin County,48317.0,TX,18.31,80.99,314.0,1389.0 -0,Andrews County,48003.0,TX,17.07,82.44,790.0,3816.0 -0,Macon County,13193.0,GA,65.3,34.4,3251.0,1712.0 -0,Taylor County,48441.0,TX,26.75,72.34,12690.0,34317.0 -0,Eastland County,48133.0,TX,19.53,79.35,1271.0,5165.0 -0,Erath County,48143.0,TX,22.31,76.81,3128.0,10768.0 -0,Callahan County,48059.0,TX,18.6,80.28,1063.0,4589.0 -0,Pima County,4019.0,AZ,52.4,46.4,206254.0,182406.0 -0,Treutlen County,13283.0,GA,37.6,61.8,1112.0,1826.0 -0,Russell County,1113.0,AL,53.3,46.0,10085.0,8705.0 -0,Montgomery County,1101.0,AL,59.4,40.1,62166.0,42031.0 -0,Jackson Parish,22049.0,LA,31.75,67.09,2456.0,5190.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,Dodge County,13091.0,GA,31.6,67.5,2595.0,5543.0 -0,Schley County,13249.0,GA,27.6,72.0,479.0,1252.0 -0,Cochise County,4003.0,AZ,38.8,59.5,18943.0,29026.0 -0,Lowndes County,1085.0,AL,74.9,24.9,5449.0,1809.0 -0,Rusk County,48401.0,TX,26.62,72.89,4983.0,13646.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,Franklin Parish,22041.0,LA,31.64,67.09,2961.0,6278.0 -0,Pulaski County,13235.0,GA,34.8,64.6,1377.0,2553.0 -0,Panola County,48365.0,TX,25.31,74.22,2586.0,7582.0 -0,Henderson County,48213.0,TX,27.29,71.94,7913.0,20857.0 -0,Montgomery County,13209.0,GA,29.1,70.2,1045.0,2521.0 -0,Toombs County,13279.0,GA,30.6,68.7,2964.0,6658.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,De Soto Parish,22031.0,LA,42.77,56.16,5242.0,6883.0 -0,Beaufort County,45013.0,SC,44.14,54.92,30396.0,37821.0 -0,Navarro County,48349.0,TX,33.09,66.23,5400.0,10810.0 -0,Somervell County,48425.0,TX,22.62,75.77,799.0,2677.0 -0,Tattnall County,13267.0,GA,28.8,70.5,1932.0,4730.0 -0,Choctaw County,1023.0,AL,46.1,53.5,3636.0,4223.0 -0,Wheeler County,13309.0,GA,35.9,63.7,794.0,1408.0 -0,Bullock County,1011.0,AL,74.1,25.7,4011.0,1391.0 -0,Dooly County,13093.0,GA,51.4,47.9,2138.0,1991.0 -0,Evans County,13109.0,GA,35.6,63.9,1374.0,2462.0 -0,Caldwell Parish,22021.0,LA,22.85,75.54,1118.0,3696.0 -0,Wilcox County,1131.0,AL,71.0,28.8,4612.0,1868.0 -0,Hill County,48217.0,TX,28.9,70.25,3811.0,9264.0 -0,Comanche County,48093.0,TX,25.57,73.09,1334.0,3813.0 -0,Tensas Parish,22107.0,LA,54.14,44.97,1646.0,1367.0 -0,Bryan County,13029.0,GA,28.3,70.9,3636.0,9112.0 -0,Red River Parish,22081.0,LA,44.93,53.66,2080.0,2484.0 -0,Chatham County,13051.0,GA,56.9,42.5,62755.0,46829.0 -0,Webster County,13307.0,GA,46.4,52.9,515.0,588.0 -0,Stewart County,13259.0,GA,62.0,37.2,1305.0,783.0 -0,Sumter County,13261.0,GA,52.8,46.7,6454.0,5717.0 -0,Clarke County,28023.0,MS,37.17,62.27,3121.0,5229.0 -0,Claiborne County,28021.0,MS,85.86,13.72,4682.0,748.0 -0,Jasper County,28061.0,MS,54.56,44.9,5025.0,4135.0 -0,Smith County,28129.0,MS,23.7,75.44,1968.0,6265.0 -0,Bosque County,48035.0,TX,23.5,75.36,1797.0,5762.0 -0,Madison Parish,22065.0,LA,58.49,40.6,3100.0,2152.0 -0,Telfair County,13271.0,GA,42.6,56.8,1862.0,2486.0 -0,Winn Parish,22127.0,LA,30.23,68.4,2047.0,4632.0 -0,Natchitoches Parish,22069.0,LA,45.71,53.05,7801.0,9054.0 -0,Barbour County,1005.0,AL,49.0,50.4,5697.0,5866.0 -0,Cherokee County,48073.0,TX,28.08,71.24,4610.0,11695.0 -0,Wilcox County,13315.0,GA,30.9,68.3,978.0,2159.0 -0,Liberty County,13179.0,GA,64.0,35.6,10474.0,5828.0 -0,Sterling County,48431.0,TX,15.67,84.01,97.0,520.0 -0,Glasscock County,48173.0,TX,9.34,90.13,52.0,502.0 -0,Midland County,48329.0,TX,20.97,78.23,9691.0,36155.0 -0,Ector County,48135.0,TX,25.62,73.58,9123.0,26199.0 -0,Winkler County,48495.0,TX,23.47,75.25,477.0,1529.0 -0,Coke County,48081.0,TX,19.06,79.8,299.0,1252.0 -0,Anderson County,48001.0,TX,27.8,71.35,4630.0,11884.0 -0,Coleman County,48083.0,TX,17.37,81.33,643.0,3011.0 -0,Runnels County,48399.0,TX,18.62,80.63,720.0,3118.0 -0,Brown County,48049.0,TX,18.79,80.27,2822.0,12052.0 -0,Pike County,1109.0,AL,42.1,57.4,5879.0,8004.0 -0,Crenshaw County,1041.0,AL,30.8,68.7,1938.0,4319.0 -0,Copiah County,28029.0,MS,53.17,46.21,7710.0,6701.0 -0,Simpson County,28127.0,MS,38.2,60.59,4817.0,7641.0 -0,Crisp County,13081.0,GA,40.9,58.6,3085.0,4424.0 -0,Hamilton County,48193.0,TX,22.84,76.12,863.0,2876.0 -0,Long County,13183.0,GA,37.3,61.4,1288.0,2119.0 -0,Freestone County,48161.0,TX,27.91,71.42,2034.0,5205.0 -0,Culberson County,48109.0,TX,64.82,33.86,492.0,257.0 -0,Hudspeth County,48229.0,TX,47.88,51.0,430.0,458.0 -0,El Paso County,48141.0,TX,65.87,33.35,122021.0,61783.0 -0,Loving County,48301.0,TX,15.19,84.81,12.0,67.0 -0,Reeves County,48389.0,TX,52.19,46.96,1606.0,1445.0 -0,Quitman County,13239.0,GA,53.6,45.7,597.0,509.0 -0,Clarke County,1025.0,AL,44.0,55.6,5914.0,7466.0 -0,Shelby County,48419.0,TX,27.64,71.91,2548.0,6630.0 -0,Catahoula Parish,22025.0,LA,31.75,66.72,1659.0,3486.0 -0,Jeff Davis County,13161.0,GA,25.7,73.3,1356.0,3867.0 -0,Terrell County,13273.0,GA,56.6,42.8,2501.0,1890.0 -0,Appling County,13001.0,GA,26.4,72.7,1846.0,5085.0 -0,Butler County,1013.0,AL,43.1,56.5,4188.0,5485.0 -0,Randolph County,13243.0,GA,57.0,42.6,1833.0,1370.0 -0,La Salle Parish,22059.0,LA,13.12,85.49,860.0,5602.0 -0,Lee County,13177.0,GA,23.7,75.8,3100.0,9925.0 -0,Wayne County,28153.0,MS,38.81,60.57,3890.0,6070.0 -0,Jefferson County,28063.0,MS,86.71,12.3,3883.0,551.0 -0,Chatham County,13051.0,GA,56.9,42.5,62755.0,46829.0 -0,McLennan County,48309.0,TX,37.65,61.56,29998.0,49044.0 -0,Turner County,13287.0,GA,40.2,59.0,1427.0,2096.0 -0,Chatham County,13051.0,GA,56.9,42.5,62755.0,46829.0 -0,Ben Hill County,13017.0,GA,42.9,56.6,2590.0,3417.0 -0,Worth County,13321.0,GA,30.4,69.1,2542.0,5780.0 -0,Nacogdoches County,48347.0,TX,35.88,63.39,8393.0,14828.0 -0,Sabine Parish,22085.0,LA,23.26,74.87,2245.0,7226.0 -0,Wayne County,13305.0,GA,27.1,72.0,2858.0,7601.0 -0,Monroe County,1099.0,AL,44.7,54.9,5025.0,6175.0 -0,Jones County,28067.0,MS,30.22,68.86,8846.0,20157.0 -0,Limestone County,48293.0,TX,32.88,66.37,2516.0,5079.0 -0,Coffee County,13069.0,GA,35.0,64.5,4811.0,8872.0 -0,Grant Parish,22043.0,LA,17.22,80.71,1474.0,6907.0 -0,Covington County,28031.0,MS,40.71,58.38,3852.0,5523.0 -0,Clay County,13061.0,GA,61.0,38.8,879.0,558.0 -0,Henry County,1067.0,AL,34.9,64.6,3018.0,5585.0 -0,Jefferson Davis County,28065.0,MS,60.43,38.96,4454.0,2871.0 -0,Irwin County,13155.0,GA,31.3,68.1,1197.0,2605.0 -0,Concordia Parish,22029.0,LA,39.53,59.49,3766.0,5668.0 -0,Lawrence County,28077.0,MS,36.91,62.33,2587.0,4369.0 -0,Conecuh County,1035.0,AL,49.4,50.0,3429.0,3470.0 -0,Adams County,28001.0,MS,57.47,41.83,9021.0,6566.0 -0,Santa Cruz County,4023.0,AZ,65.3,34.0,8683.0,4518.0 -0,Mills County,48333.0,TX,18.28,80.52,398.0,1753.0 -0,Lincoln County,28085.0,MS,33.56,65.73,5505.0,10781.0 -0,Bacon County,13005.0,GA,20.8,78.4,817.0,3089.0 -0,Coryell County,48099.0,TX,36.11,63.0,6619.0,11550.0 -0,Tom Green County,48451.0,TX,28.71,70.41,11158.0,27362.0 -0,Washington County,1129.0,AL,35.0,64.4,3067.0,5654.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,Liberty County,13179.0,GA,64.0,35.6,10474.0,5828.0 -0,Leon County,48289.0,TX,20.14,79.05,1418.0,5566.0 -0,Upton County,48461.0,TX,24.06,75.02,288.0,898.0 -0,Crane County,48103.0,TX,21.94,76.96,319.0,1119.0 -0,San Augustine County,48405.0,TX,35.75,63.04,1328.0,2342.0 -0,Reagan County,48383.0,TX,19.82,79.98,197.0,795.0 -0,Ward County,48475.0,TX,24.96,74.04,899.0,2667.0 -0,Dougherty County,13095.0,GA,67.3,32.3,26135.0,12547.0 -0,Calhoun County,13037.0,GA,60.7,39.0,1342.0,862.0 -0,Dale County,1045.0,AL,27.3,71.9,5270.0,13886.0 -0,Coffee County,1031.0,AL,25.2,74.1,5079.0,14919.0 -0,Franklin County,28037.0,MS,36.99,62.09,1733.0,2909.0 -0,Sabine County,48403.0,TX,22.1,76.92,1077.0,3749.0 -0,Tift County,13277.0,GA,33.3,66.2,4749.0,9431.0 -0,Houston County,48225.0,TX,30.8,68.09,2656.0,5872.0 -0,Concho County,48095.0,TX,23.86,74.93,257.0,807.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,Pierce County,13229.0,GA,18.5,81.0,1253.0,5500.0 -0,Covington County,1039.0,AL,20.5,78.8,3240.0,12444.0 -0,Irion County,48235.0,TX,20.07,78.82,164.0,644.0 -0,Angelina County,48005.0,TX,32.17,67.13,9379.0,19569.0 -0,Early County,13099.0,GA,48.8,50.8,2603.0,2711.0 -0,Falls County,48145.0,TX,39.74,59.44,2225.0,3328.0 -0,Rapides Parish,22079.0,LA,34.99,63.65,20127.0,36611.0 -0,McCulloch County,48307.0,TX,24.19,75.18,728.0,2263.0 -0,San Saba County,48411.0,TX,19.82,79.0,487.0,1941.0 -0,Berrien County,13019.0,GA,22.8,76.0,1471.0,4901.0 -0,Ware County,13299.0,GA,32.5,66.9,4034.0,8311.0 -0,Lampasas County,48281.0,TX,24.93,74.02,1903.0,5651.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Baker County,13007.0,GA,50.2,49.1,846.0,828.0 -0,Mitchell County,13205.0,GA,47.7,51.7,3872.0,4201.0 -0,Greene County,28041.0,MS,23.6,75.33,1366.0,4361.0 -0,Forrest County,28035.0,MS,42.75,56.27,11622.0,15296.0 -0,Lamar County,28073.0,MS,21.58,77.36,5159.0,18497.0 -0,Perry County,28111.0,MS,27.07,71.8,1533.0,4067.0 -0,Marion County,28091.0,MS,33.99,65.43,4422.0,8513.0 -0,Atkinson County,13003.0,GA,32.3,66.8,938.0,1941.0 -0,Trinity County,48455.0,TX,31.68,67.39,1925.0,4095.0 -0,Pecos County,48371.0,TX,36.81,61.85,1476.0,2480.0 -0,Brantley County,13025.0,GA,17.8,80.9,1119.0,5080.0 -0,Wilkinson County,28157.0,MS,68.77,30.36,3534.0,1560.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,Vernon Parish,22115.0,LA,22.41,75.76,3534.0,11946.0 -0,Robertson County,48395.0,TX,39.87,59.31,2675.0,3980.0 -0,Cook County,13075.0,GA,35.2,64.1,2075.0,3782.0 -0,Amite County,28005.0,MS,43.76,55.49,3348.0,4245.0 -0,Pike County,28113.0,MS,51.38,47.91,9276.0,8651.0 -0,Walthall County,28147.0,MS,44.42,54.67,3456.0,4253.0 -0,Avoyelles Parish,22009.0,LA,37.35,60.43,6327.0,10236.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,Colquitt County,13071.0,GA,30.8,68.4,4139.0,9185.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,Bell County,48027.0,TX,44.74,54.51,40413.0,49242.0 -0,Baldwin County,1003.0,AL,23.8,75.3,19386.0,61271.0 -0,Houston County,1069.0,AL,29.3,70.1,12225.0,29254.0 -0,McIntosh County,13191.0,GA,46.6,52.7,2905.0,3282.0 -0,Escambia County,1053.0,AL,35.4,63.9,5188.0,9375.0 -0,Miller County,13201.0,GA,29.9,69.4,818.0,1899.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Geneva County,1061.0,AL,18.3,80.8,2134.0,9417.0 -0,Newton County,48351.0,TX,33.29,65.51,1751.0,3446.0 -0,Clinch County,13065.0,GA,36.7,62.2,989.0,1678.0 -0,Lanier County,13173.0,GA,37.0,62.2,1062.0,1787.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Jasper County,48241.0,TX,28.63,70.62,3658.0,9022.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Polk County,48373.0,TX,30.92,68.15,6230.0,13731.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Glynn County,13127.0,GA,38.0,61.4,12676.0,20479.0 -0,Milam County,48331.0,TX,36.42,62.43,3044.0,5217.0 -0,Jeff Davis County,48243.0,TX,37.86,60.6,468.0,749.0 -0,Madison County,48313.0,TX,28.13,70.96,1146.0,2891.0 -0,Menard County,48327.0,TX,28.98,69.94,295.0,712.0 -0,Schleicher County,48413.0,TX,24.85,74.39,324.0,970.0 -0,Crockett County,48105.0,TX,33.14,66.41,512.0,1026.0 -0,Decatur County,13087.0,GA,42.7,56.8,4424.0,5890.0 -0,Grady County,13131.0,GA,37.8,61.7,3539.0,5775.0 -0,Brooks County,13027.0,GA,43.0,56.6,2669.0,3507.0 -0,Thomas County,13275.0,GA,41.8,57.7,7720.0,10642.0 -0,Seminole County,13253.0,GA,41.5,57.9,1660.0,2315.0 -0,Charlton County,13049.0,GA,32.5,66.9,1197.0,2466.0 -0,Tyler County,48457.0,TX,27.38,71.35,2166.0,5644.0 -0,Walker County,48471.0,TX,38.31,60.71,7334.0,11623.0 -0,West Feliciana Parish,22125.0,LA,42.97,56.05,2415.0,3150.0 -0,Burnet County,48053.0,TX,27.28,71.38,4608.0,12059.0 -0,Lowndes County,13185.0,GA,45.0,54.4,17597.0,21269.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Pointe Coupee Parish,22077.0,LA,44.36,53.9,5516.0,6702.0 -0,Pearl River County,28109.0,MS,19.25,79.67,4320.0,17881.0 -0,Washington Parish,22117.0,LA,32.87,65.59,6122.0,12215.0 -0,Evangeline Parish,22039.0,LA,36.64,61.3,5853.0,9793.0 -0,Jackson County,12063.0,FL,35.57,63.61,7671.0,13717.0 -0,Tangipahoa Parish,22105.0,LA,33.82,64.68,16438.0,31434.0 -0,Escambia County,12033.0,FL,39.87,59.19,61572.0,91411.0 -0,Santa Rosa County,12113.0,FL,25.56,73.47,19470.0,55972.0 -0,George County,28039.0,MS,16.41,82.49,1532.0,7700.0 -0,West Feliciana Parish,22125.0,LA,42.97,56.05,2415.0,3150.0 -0,Saint Helena Parish,22091.0,LA,57.68,40.78,3567.0,2522.0 -0,Okaloosa County,12091.0,FL,27.08,72.01,25872.0,68789.0 -0,East Feliciana Parish,22037.0,LA,44.06,54.61,4383.0,5432.0 -0,Holmes County,12059.0,FL,16.84,81.88,1446.0,7033.0 -0,Walton County,12131.0,FL,26.53,72.32,7174.0,19561.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Brazos County,48041.0,TX,34.94,63.85,20502.0,37465.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Mason County,48319.0,TX,25.74,72.8,546.0,1544.0 -0,Llano County,48299.0,TX,23.37,75.62,2250.0,7281.0 -0,Stone County,28131.0,MS,27.55,71.06,1996.0,5149.0 -0,Williamson County,48491.0,TX,42.73,55.76,67691.0,88323.0 -0,San Jacinto County,48407.0,TX,30.38,68.66,2721.0,6151.0 -0,Allen Parish,22003.0,LA,30.54,66.9,2891.0,6333.0 -0,Beauregard Parish,22011.0,LA,21.82,76.15,3071.0,10718.0 -0,Echols County,13101.0,GA,16.9,82.7,201.0,981.0 -0,Grimes County,48185.0,TX,32.49,66.83,2704.0,5562.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Saint Landry Parish,22097.0,LA,47.7,50.95,20268.0,21650.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Washington County,12133.0,FL,25.72,73.47,2863.0,8178.0 -0,Nassau County,12089.0,FL,27.72,71.54,10618.0,27403.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Camden County,13039.0,GA,37.9,61.5,6482.0,10502.0 -0,Jackson County,28059.0,MS,32.75,66.29,17781.0,35993.0 -0,Burleson County,48051.0,TX,30.8,68.22,2053.0,4547.0 -0,Nassau County,12089.0,FL,27.72,71.54,10618.0,27403.0 -0,East Baton Rouge Parish,22033.0,LA,50.5,48.34,99652.0,95390.0 -0,Nassau County,12089.0,FL,27.72,71.54,10618.0,27403.0 -0,Saint Tammany Parish,22103.0,LA,22.45,75.84,24596.0,83078.0 -0,Gadsden County,12039.0,FL,69.22,30.26,15582.0,6811.0 -0,Kimble County,48267.0,TX,18.56,80.68,342.0,1487.0 -0,Nassau County,12089.0,FL,27.72,71.54,10618.0,27403.0 -0,Sutton County,48435.0,TX,24.14,75.35,381.0,1189.0 -0,Leon County,12073.0,FL,61.74,37.48,91747.0,55705.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Harrison County,28047.0,MS,36.59,62.55,22673.0,38757.0 -0,Jefferson County,12065.0,FL,51.38,47.72,4088.0,3797.0 -0,Brewster County,48043.0,TX,50.51,47.56,1970.0,1855.0 -0,West Baton Rouge Parish,22121.0,LA,42.5,56.08,5043.0,6654.0 -0,Terrell County,48443.0,TX,35.84,62.24,186.0,323.0 -0,Livingston Parish,22063.0,LA,13.13,85.02,6681.0,43269.0 -0,Madison County,12079.0,FL,47.94,51.02,4270.0,4544.0 -0,Hancock County,28045.0,MS,22.09,76.34,3768.0,13020.0 -0,Hamilton County,12047.0,FL,42.31,56.9,2364.0,3179.0 -0,Presidio County,48377.0,TX,71.26,27.83,1252.0,489.0 -0,Montgomery County,48339.0,TX,23.25,75.95,36703.0,119884.0 -0,Travis County,48453.0,TX,63.87,34.44,254017.0,136981.0 -0,Calhoun County,12013.0,FL,29.16,69.59,1821.0,4345.0 -0,Liberty County,12077.0,FL,27.3,71.35,895.0,2339.0 -0,Columbia County,12023.0,FL,32.6,66.38,9171.0,18670.0 -0,Nassau County,12089.0,FL,27.72,71.54,10618.0,27403.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Baker County,12003.0,FL,21.04,78.42,2327.0,8672.0 -0,Bay County,12005.0,FL,29.16,69.87,23653.0,56683.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Lee County,48287.0,TX,31.36,67.62,2000.0,4312.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Hardin County,48199.0,TX,19.03,80.2,3939.0,16603.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Gillespie County,48171.0,TX,20.88,77.51,2576.0,9563.0 -0,Blanco County,48031.0,TX,29.7,69.2,1467.0,3418.0 -0,Saint Martin Parish,22099.0,LA,38.84,59.55,9419.0,14443.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Iberville Parish,22047.0,LA,54.95,43.75,9023.0,7185.0 -0,Liberty County,48291.0,TX,27.7,71.43,5991.0,15448.0 -0,Calcasieu Parish,22019.0,LA,36.82,61.43,30244.0,50449.0 -0,Jefferson Davis Parish,22053.0,LA,29.06,68.72,3923.0,9278.0 -0,Acadia Parish,22001.0,LA,26.31,71.99,7028.0,19229.0 -0,Suwannee County,12121.0,FL,27.83,70.97,4916.0,12534.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Bastrop County,48021.0,TX,45.09,53.31,11687.0,13817.0 -0,Okaloosa County,12091.0,FL,27.08,72.01,25872.0,68789.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Okaloosa County,12091.0,FL,27.08,72.01,25872.0,68789.0 -0,Duval County,12031.0,FL,48.73,50.64,202618.0,210537.0 -0,Washington County,48477.0,TX,28.06,70.78,4034.0,10176.0 -0,Santa Rosa County,12113.0,FL,25.56,73.47,19470.0,55972.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Escambia County,12033.0,FL,39.87,59.19,61572.0,91411.0 -0,Harrison County,28047.0,MS,36.59,62.55,22673.0,38757.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Lafayette Parish,22055.0,LA,33.61,64.88,32145.0,62055.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Harrison County,28047.0,MS,36.59,62.55,22673.0,38757.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Hays County,48209.0,TX,48.15,50.19,28431.0,29638.0 -0,Ascension Parish,22005.0,LA,31.4,67.08,14625.0,31239.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Jackson County,28059.0,MS,32.75,66.29,17781.0,35993.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Jackson County,28059.0,MS,32.75,66.29,17781.0,35993.0 -0,Taylor County,12123.0,FL,29.93,68.94,2803.0,6457.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Baldwin County,1003.0,AL,23.8,75.3,19386.0,61271.0 -0,Saint John the Baptist Parish,22095.0,LA,57.37,41.15,12424.0,8912.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Val Verde County,48465.0,TX,54.46,44.87,6982.0,5752.0 -0,Edwards County,48137.0,TX,33.43,65.02,346.0,673.0 -0,Kerr County,48265.0,TX,24.69,74.27,5570.0,16752.0 -0,Baldwin County,1003.0,AL,23.8,75.3,19386.0,61271.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Lafayette County,12067.0,FL,19.11,79.76,642.0,2679.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Jackson County,28059.0,MS,32.75,66.29,17781.0,35993.0 -0,Saint Johns County,12109.0,FL,33.81,65.4,35791.0,69222.0 -0,Harrison County,28047.0,MS,36.59,62.55,22673.0,38757.0 -0,Harrison County,28047.0,MS,36.59,62.55,22673.0,38757.0 -0,Orange County,48361.0,TX,26.0,73.14,7646.0,21509.0 -0,Waller County,48473.0,TX,46.12,53.3,7153.0,8265.0 -0,Saint Charles Parish,22089.0,LA,33.56,64.8,8522.0,16457.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Harrison County,28047.0,MS,36.59,62.55,22673.0,38757.0 -0,Jackson County,28059.0,MS,32.75,66.29,17781.0,35993.0 -0,Gulf County,12045.0,FL,29.83,69.12,2149.0,4980.0 -0,Mobile County,1097.0,AL,45.3,54.0,82181.0,98049.0 -0,Orleans Parish,22071.0,LA,79.42,19.08,117102.0,28130.0 -0,Clay County,12019.0,FL,28.23,71.06,26697.0,67203.0 -0,Jefferson County,48245.0,TX,50.84,48.59,44888.0,42905.0 -0,Harris County,48201.0,TX,50.45,48.82,590982.0,571883.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint James Parish,22093.0,LA,55.67,43.23,6994.0,5432.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Fayette County,48149.0,TX,28.13,70.77,3014.0,7582.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Vermilion Parish,22113.0,LA,25.23,72.76,6266.0,18069.0 -0,Bay County,12005.0,FL,29.16,69.87,23653.0,56683.0 -0,Bradford County,12007.0,FL,29.38,69.68,3430.0,8136.0 -0,Union County,12125.0,FL,24.56,74.44,1300.0,3940.0 -0,Kendall County,48259.0,TX,21.49,77.46,3599.0,12971.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Bay County,12005.0,FL,29.16,69.87,23653.0,56683.0 -0,Iberia Parish,22045.0,LA,37.66,60.68,12492.0,20127.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Austin County,48015.0,TX,24.07,74.96,2821.0,8786.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Assumption Parish,22007.0,LA,43.39,54.57,4756.0,5981.0 -0,Real County,48385.0,TX,23.03,76.04,375.0,1238.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Caldwell County,48055.0,TX,46.39,52.43,5403.0,6107.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Cameron Parish,22023.0,LA,16.16,81.44,613.0,3089.0 -0,Bay County,12005.0,FL,29.16,69.87,23653.0,56683.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Wakulla County,12129.0,FL,36.94,61.75,5311.0,8877.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Comal County,48091.0,TX,25.72,73.16,12384.0,35233.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Taylor County,12123.0,FL,29.93,68.94,2803.0,6457.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Taylor County,12123.0,FL,29.93,68.94,2803.0,6457.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Martin Parish,22099.0,LA,38.84,59.55,9419.0,14443.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Colorado County,48089.0,TX,30.03,69.38,2508.0,5795.0 -0,Saint Mary Parish,22101.0,LA,40.8,57.56,9345.0,13183.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Alachua County,12001.0,FL,60.2,38.65,75565.0,48513.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Gilchrist County,12041.0,FL,25.53,72.34,1996.0,5656.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Bandera County,48019.0,TX,24.2,74.59,2250.0,6935.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Chambers County,48071.0,TX,23.98,75.14,3188.0,9988.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Guadalupe County,48187.0,TX,34.04,65.04,16156.0,30869.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Putnam County,12107.0,FL,39.9,59.2,13236.0,19637.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Fort Bend County,48157.0,TX,48.5,50.89,98368.0,103206.0 -0,Gonzales County,48177.0,TX,34.47,64.83,2167.0,4076.0 -0,Taylor County,12123.0,FL,29.93,68.94,2803.0,6457.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Putnam County,12107.0,FL,39.9,59.2,13236.0,19637.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Bexar County,48029.0,TX,52.41,46.85,275527.0,246275.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Medina County,48325.0,TX,32.71,66.59,5147.0,10480.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Franklin County,12037.0,FL,35.4,63.33,2134.0,3818.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Chambers County,48071.0,TX,23.98,75.14,3188.0,9988.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Flagler County,12035.0,FL,50.43,48.85,24726.0,23951.0 -0,Taylor County,12123.0,FL,29.93,68.94,2803.0,6457.0 -0,Taylor County,12123.0,FL,29.93,68.94,2803.0,6457.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Saint Bernard Parish,22087.0,LA,25.78,71.21,3491.0,9643.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Iberia Parish,22045.0,LA,37.66,60.68,12492.0,20127.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Wharton County,48481.0,TX,34.24,65.41,4937.0,9431.0 -0,Lavaca County,48285.0,TX,22.73,76.53,1869.0,6293.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Uvalde County,48463.0,TX,47.07,52.36,4126.0,4590.0 -0,Kinney County,48271.0,TX,40.81,58.48,633.0,907.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Brazoria County,48039.0,TX,34.76,64.34,36480.0,67515.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Marion County,12083.0,FL,43.72,55.32,70839.0,89628.0 -0,Chambers County,48071.0,TX,23.98,75.14,3188.0,9988.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Saint Mary Parish,22101.0,LA,40.8,57.56,9345.0,13183.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Wilson County,48493.0,TX,32.76,66.63,5362.0,10904.0 -0,Iberia Parish,22045.0,LA,37.66,60.68,12492.0,20127.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Volusia County,12127.0,FL,52.41,46.73,127795.0,113938.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Iberia Parish,22045.0,LA,37.66,60.68,12492.0,20127.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Putnam County,12107.0,FL,39.9,59.2,13236.0,19637.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,DeWitt County,48123.0,TX,25.9,73.77,1716.0,4888.0 -0,Putnam County,12107.0,FL,39.9,59.2,13236.0,19637.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Dixie County,12029.0,FL,26.5,71.5,1925.0,5194.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Lake County,12069.0,FL,42.84,56.36,62948.0,82802.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Jackson County,48239.0,TX,25.73,73.62,1301.0,3723.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Atascosa County,48013.0,TX,44.43,54.96,4415.0,5462.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Matagorda County,48321.0,TX,35.88,63.32,4440.0,7835.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Karnes County,48255.0,TX,38.88,60.44,1760.0,2736.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Jefferson Parish,22051.0,LA,35.94,62.5,65096.0,113191.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Victoria County,48469.0,TX,32.85,66.41,9832.0,19878.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Plaquemines Parish,22075.0,LA,32.35,65.98,3380.0,6894.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Galveston County,48167.0,TX,39.81,59.29,41805.0,62258.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Frio County,48163.0,TX,59.21,40.47,2405.0,1644.0 -0,Zavala County,48507.0,TX,84.18,15.38,3263.0,596.0 -0,Maverick County,48323.0,TX,78.2,21.17,8554.0,2316.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Brazoria County,48039.0,TX,34.76,64.34,36480.0,67515.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Lafourche Parish,22057.0,LA,25.5,71.49,9662.0,27089.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Terrebonne Parish,22109.0,LA,28.46,69.32,11581.0,28210.0 -0,Levy County,12075.0,FL,35.84,62.77,6711.0,11754.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Sumter County,12119.0,FL,36.13,63.16,17655.0,30866.0 -0,Goliad County,48175.0,TX,36.36,62.87,1329.0,2298.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Seminole County,12117.0,FL,48.25,51.03,99335.0,105070.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Brevard County,12009.0,FL,44.33,54.75,127620.0,157589.0 -0,Brevard County,12009.0,FL,44.33,54.75,127620.0,157589.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Live Oak County,48297.0,TX,25.1,74.11,1048.0,3095.0 -0,Orange County,12095.0,FL,59.0,40.38,273009.0,186832.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Bee County,48025.0,TX,44.69,54.81,3645.0,4471.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Citrus County,12017.0,FL,41.31,57.39,31460.0,43706.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,La Salle County,48283.0,TX,59.23,40.2,1052.0,714.0 -0,McMullen County,48311.0,TX,24.58,74.49,132.0,400.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Dimmit County,48127.0,TX,75.05,24.37,2692.0,874.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Hernando County,12053.0,FL,47.65,51.22,41886.0,45021.0 -0,Brevard County,12009.0,FL,44.33,54.75,127620.0,157589.0 -0,Refugio County,48391.0,TX,42.38,56.88,1382.0,1855.0 -0,Pasco County,12101.0,FL,47.67,51.24,102417.0,110104.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Matagorda County,48321.0,TX,35.88,63.32,4440.0,7835.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Polk County,12105.0,FL,46.51,52.64,113865.0,128878.0 -0,Osceola County,12097.0,FL,59.56,39.82,59962.0,40086.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Aransas County,48007.0,TX,30.74,68.45,3006.0,6693.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Calhoun County,48057.0,TX,39.67,59.69,2729.0,4106.0 -0,Webb County,48479.0,TX,71.45,28.02,33452.0,13119.0 -0,Pasco County,12101.0,FL,47.67,51.24,102417.0,110104.0 -0,San Patricio County,48409.0,TX,41.38,57.97,8854.0,12404.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Aransas County,48007.0,TX,30.74,68.45,3006.0,6693.0 -0,Aransas County,48007.0,TX,30.74,68.45,3006.0,6693.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Duval County,48131.0,TX,74.8,24.4,3298.0,1076.0 -0,Jim Wells County,48249.0,TX,57.75,41.69,6706.0,4841.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Aransas County,48007.0,TX,30.74,68.45,3006.0,6693.0 -0,Aransas County,48007.0,TX,30.74,68.45,3006.0,6693.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Indian River County,12061.0,FL,42.09,56.91,29710.0,40176.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Indian River County,12061.0,FL,42.09,56.91,29710.0,40176.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Nueces County,48355.0,TX,47.33,51.75,47912.0,52391.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Pinellas County,12103.0,FL,53.6,45.34,248299.0,210066.0 -0,Highlands County,12055.0,FL,40.5,58.55,18135.0,26221.0 -0,Hardee County,12049.0,FL,34.65,64.26,2568.0,4763.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Okeechobee County,12093.0,FL,39.95,59.13,5108.0,7561.0 -0,Kleberg County,48273.0,TX,53.22,45.97,5256.0,4540.0 -0,Hillsborough County,12057.0,FL,53.18,46.05,272963.0,236355.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Kleberg County,48273.0,TX,53.22,45.97,5256.0,4540.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Saint Lucie County,12111.0,FL,55.67,43.55,67125.0,52512.0 -0,Saint Lucie County,12111.0,FL,55.67,43.55,67125.0,52512.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Saint Lucie County,12111.0,FL,55.67,43.55,67125.0,52512.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Manatee County,12081.0,FL,46.08,53.11,70034.0,80721.0 -0,Sarasota County,12115.0,FL,49.52,49.62,102686.0,102897.0 -0,Sarasota County,12115.0,FL,49.52,49.62,102686.0,102897.0 -0,Jim Hogg County,48247.0,TX,73.61,26.01,1336.0,472.0 -0,DeSoto County,12027.0,FL,43.26,55.59,4383.0,5632.0 -0,Sarasota County,12115.0,FL,49.52,49.62,102686.0,102897.0 -0,Sarasota County,12115.0,FL,49.52,49.62,102686.0,102897.0 -0,Sarasota County,12115.0,FL,49.52,49.62,102686.0,102897.0 -0,Zapata County,48505.0,TX,67.66,32.07,1939.0,919.0 -0,Kleberg County,48273.0,TX,53.22,45.97,5256.0,4540.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Brooks County,48047.0,TX,75.66,24.08,1747.0,556.0 -0,Martin County,12085.0,FL,42.8,56.38,33508.0,44143.0 -0,Martin County,12085.0,FL,42.8,56.38,33508.0,44143.0 -0,Martin County,12085.0,FL,42.8,56.38,33508.0,44143.0 -0,Glades County,12043.0,FL,41.13,57.71,1381.0,1938.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Palm Beach County,12099.0,FL,61.18,38.28,361271.0,226037.0 -0,Palm Beach County,12099.0,FL,61.18,38.28,361271.0,226037.0 -0,Hendry County,12051.0,FL,45.94,53.13,4998.0,5780.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Starr County,48427.0,TX,84.5,15.24,8274.0,1492.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Charlotte County,12015.0,FL,45.83,53.08,39031.0,45205.0 -0,Hidalgo County,48215.0,TX,69.02,30.33,90261.0,39668.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Palm Beach County,12099.0,FL,61.18,38.28,361271.0,226037.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Kenedy County,48261.0,TX,53.47,46.53,108.0,94.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Willacy County,48489.0,TX,69.53,29.7,3409.0,1456.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Lee County,12071.0,FL,44.45,54.82,119701.0,147608.0 -0,Broward County,12011.0,FL,67.13,32.39,492640.0,237729.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Cameron County,48061.0,TX,64.08,35.25,48480.0,26671.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Collier County,12021.0,FL,38.35,60.84,54450.0,86379.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Miami-Dade County,12086.0,FL,57.89,41.76,499831.0,360551.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Monroe County,12087.0,FL,51.91,47.01,20907.0,18933.0 -0,Kauai County,15007.0,HI,74.99,22.94,20416.0,6245.0 -0,Kauai County,15007.0,HI,74.99,22.94,20416.0,6245.0 -0,Kauai County,15007.0,HI,74.99,22.94,20416.0,6245.0 -0,Honolulu County,15003.0,HI,69.83,28.74,214239.0,88164.0 -0,Honolulu County,15003.0,HI,69.83,28.74,214239.0,88164.0 -0,Honolulu County,15003.0,HI,69.83,28.74,214239.0,88164.0 -0,Maui County,15009.0,HI,76.71,21.54,39727.0,11154.0 -0,Kalawao County,15005.0,HI,-9999.0,-9999.0,-9999.0,-9999.0 -0,Maui County,15009.0,HI,76.71,21.54,39727.0,11154.0 -0,Maui County,15009.0,HI,76.71,21.54,39727.0,11154.0 -0,Maui County,15009.0,HI,76.71,21.54,39727.0,11154.0 -0,Hawaii County,15001.0,HI,75.94,22.22,50819.0,14866.0 -0,Ottawa County,39123.0,OH,52.2,46.0,12049.0,10618.0 -0,Ottawa County,39123.0,OH,52.2,46.0,12049.0,10618.0 -0,Ottawa County,39123.0,OH,52.2,46.0,12049.0,10618.0 -0,Sandusky County,39143.0,OH,51.4,46.7,15601.0,14190.0 -0,Summit County,39153.0,OH,57.6,41.1,155105.0,110499.0 -0,Athens County,39009.0,OH,66.63,31.33,20722.0,9742.0 -0,Butler County,39017.0,OH,38.0,60.62,66030.0,105341.0 -0,Clinton County,39027.0,OH,33.97,64.28,6558.0,12409.0 -0,Cuyahoga County,39035.0,OH,68.9,30.04,458422.0,199880.0 -0,Franklin County,39049.0,OH,59.73,38.99,334709.0,218486.0 -0,Hamilton County,39061.0,OH,52.98,46.0,225213.0,195530.0 -0,Highland County,39071.0,OH,35.73,62.06,6856.0,11907.0 -0,Hocking County,39073.0,OH,48.29,49.1,6259.0,6364.0 -0,Licking County,39089.0,OH,41.2,56.97,33932.0,46918.0 -0,Madison County,39097.0,OH,37.42,60.77,6532.0,10606.0 -0,Ottawa County,39123.0,OH,52.2,46.0,12064.0,10618.0 diff --git a/js/.eslintrc.js b/js/.eslintrc.js index 935f82a35..f708c11bd 100644 --- a/js/.eslintrc.js +++ b/js/.eslintrc.js @@ -7,7 +7,7 @@ module.exports = { ], parser: '@typescript-eslint/parser', parserOptions: { - project: 'tsconfig.eslint.json', + project: './src/tsconfig.eslint.json', sourceType: 'module', ecmaVersion: 5, }, diff --git a/js/.yarnrc.yml b/js/.yarnrc.yml new file mode 100644 index 000000000..35f85e38b --- /dev/null +++ b/js/.yarnrc.yml @@ -0,0 +1,2 @@ +nodeLinker: node-modules +enableImmutableInstalls: false diff --git a/js/less/bqplot.less b/js/less/bqplot.less index 9f4b4f7d7..74b953460 100644 --- a/js/less/bqplot.less +++ b/js/less/bqplot.less @@ -50,6 +50,8 @@ --bq-selector-fill: var(--jp-border-color1); + --bq-network-node-label-text-fill: #000; + --bq-mark-tooltip-border: 2px solid var(--jp-border-color0); --bq-mark-tooltip-box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12); @@ -111,10 +113,14 @@ --bq-plotarea-background-fill: var(--jp-layout-color1); } -[data-jp-theme-light='false'] .linkarrow { +[data-jp-theme-light='false'] .bqplot .linkarrow { fill: var(--bq-linkarrow-fill-light); } +[data-jp-theme-light='false'] .bqplot .network .node .label { + --bq-network-node-label-text-fill: #727272; +} + .classic { --bq-plotarea-background-fill: var(--jp-layout-color0); --bq-axis-tick-text-fill: var(--jp-content-font-color2); @@ -142,6 +148,7 @@ width: auto; height: 480px; } + .bqplot > .svg-background { position: absolute; width: 100%; @@ -325,10 +332,17 @@ image-rendering: -moz-crisp-edges; /* this is guaranteed to work for firefox */ } } -.tooltip_div { + +.bqplot .toolbar_div { + position: absolute; + transition: visibility 0.5s linear, opacity 0.5s linear; +} + +.bqplot_tooltip_div { z-index: 1001; } -.mark_tooltip { + +.bqplot_mark_tooltip { pointer-events: none; z-index: 1001; color: var(--bq-content-font-color); @@ -339,26 +353,30 @@ -webkit-user-select: var(--bq-mark-tooltip--webkit-user-select); -moz-user-select: var(--bq-mark-tooltip--moz-user-select); } -.mark_tooltip > .bqplot.figure { + +.bqplot_mark_tooltip > .bqplot.figure { width: 427px; height: 320px; } -.mark_tooltip .tooltiptext { + +.bqplot_mark_tooltip .tooltiptext { text-align: center; padding: 0.5em; } -.world_map path { + +.bqplot .world_map path { stroke: var(--bq-world-map-path-stroke); stroke-width: var(--bq-world-map-path-stroke-width); fill: var(--bq-world-map-path-fill); } -.world_map .hovered { + +.bqplot .world_map .hovered { fill: Orange; stroke: Orange; stroke-width: 2.5px; } -.world_map #container { +.bqplot .world_map #container { margin: 10px 10%; border: 2px solid #000; border-radius: 5px; @@ -367,50 +385,52 @@ background: #f0f8ff; } -.world_map .graticule { +.bqplot .world_map .graticule { fill: none; stroke: #bbb; stroke-width: 0.5px; stroke-opacity: 0.5; } -.g_legend { +.bqplot .g_legend { fill: none; } -.pie polyline { +.bqplot .pie polyline { opacity: var(--bq-pie-polyline-opacity); stroke: var(--bq-pie-polyline-stroke); stroke-width: var(--bq-pie-polyline-stroke-width); fill: var(--bq-pie-polyline-fill); } -.pie_label { +.bqplot .pie_label { fill: var(--bq-content-font-color); } -.bar_label { +.bqplot .bar_label, +.bqplot .curve_label { fill: var(--bq-content-font-color); } -.network .node .element { +.bqplot .network .node .element { fill: var(--bq-network-node-element-fill); stroke: var(--bq-network-node-element-stroke); stroke-width: var(--bq-network-node-element-stroke-width); } -.network .link { +.bqplot .network .link { fill: var(--bq-network-link-fill); stroke: var(--bq-network-link-stroke); stroke-width: var(--bq-network-link-stroke-width); } -.network .node .label { +.bqplot .network .node .label { font: var(--bq-network-node-label-font); pointer-events: var(--bq-network-node-label-pointer-events); text-shadow: var(--bq-network-node-label-text-shadow); + fill: var(--bq-network-node-label-text-fill); } -.linkarrow { +.bqplot .linkarrow { fill: var(--bq-linkarrow-fill-dark); } diff --git a/js/package.json b/js/package.json index 5823656ce..336cd4be1 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "bqplot", - "version": "0.5.31", + "version": "0.6.0-rc.0", "description": "bqplot", "keywords": [ "jupyter", @@ -14,6 +14,7 @@ }, "license": "Apache-2.0", "main": "lib/index.js", + "browser": "dist/index.js", "repository": { "type": "git", "url": "https://github.com/bloomberg/bqplot.git" @@ -21,35 +22,39 @@ "scripts": { "build": "jlpm run build:css && jlpm run build:js && jlpm run build:labextension && webpack --mode=production", "build:css": "lessc less/bqplot.less css/bqplot.css", - "build:js": "tsc", + "build:js": "tsc --build src", "build:labextension": "jupyter labextension build .", "watch": "npm-run-all -p watch:*", - "watch:js": "tsc --watch", + "watch:js": "tsc --build src --watch", "watch:nbextension": "webpack --watch --mode=development", "watch:labextension": "jupyter labextension watch .", "prepare": "jlpm run build", "test": "karma start --single-run", - "prettify": "yarn prettier --write .", + "prettify": "jlpm prettier --write .", "lint": "eslint . --ext .ts --fix" }, "devDependencies": { - "@jupyter-widgets/controls": "^1.5.0 || ^2 || ^3", - "@jupyterlab/builder": "^3.0.0", + "@jupyter-widgets/base-manager": "^1.0.12", + "@jupyter-widgets/controls": "^5", + "@jupyterlab/builder": "^4.5", "@types/chai": "^4.1.7", "@types/d3": "^5.7.2", "@types/expect.js": "^0.3.29", "@types/mocha": "^7.0.2", "@types/node": "^13.13.2", "@types/sinon": "^9.0.0", + "@typescript-eslint/eslint-plugin": "^4.19.0", + "@typescript-eslint/parser": "^4.19.0", "chai": "^4.1.2", "css-loader": "^5.0.0", "eslint": "^7.22.0", "eslint-config-prettier": "^8.1.0", + "eslint-config-standard": "^16.0.2", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.3.1", - "file-loader": "^6.0.0", - "imports-loader": "^0.8.0", - "json-loader": "^0.5.7", - "karma": "^5.0.2", + "eslint-plugin-promise": "^4.2.1", + "karma": "^6.3.14", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^3.1.0", "karma-mocha": "^2.0.0", @@ -64,40 +69,59 @@ "mocha": "^7.1.1", "npm-run-all": "^4.1.3", "prettier": "^2.2.1", - "raw-loader": "~4.0.1", "rimraf": "^3.0.2", "sinon": "^9.0.2", "sinon-chai": "^3.3.0", "style-loader": "^1.2.0", - "typescript": "^3.5.2", + "typescript": "~5", "webpack": "^5", "webpack-cli": "^3.3.12" }, "dependencies": { - "@jupyter-widgets/base": "^2 || ^3 || ^4.0.0", - "@lumino/messaging": "^1", - "@lumino/widgets": "^1", - "@typescript-eslint/eslint-plugin": "^4.19.0", - "@typescript-eslint/parser": "^4.19.0", + "@jupyter-widgets/base": "^2 || ^3 || ^4 || ^5 || ^6", + "@lumino/messaging": "^1 || ^2", + "@lumino/widgets": "^1 || ^2", + "bqscales": "^0.3.2", "d3": "^5.7.0", "d3-selection": "^1", - "eslint-config-standard": "^16.0.2", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", "is-typedarray": "^1.0.0", + "kiwi.js": "^1.1.2", "popper.js": "^1.0.0", - "three": "^0.91.0", "topojson": "^1.6.24", "underscore": "^1.8.3" }, "jupyterlab": { "extension": "lib/jupyterlab-plugin", + "webpackConfig": "webpack.lab.config.js", "outputDir": "../share/jupyter/labextensions/bqplot", "sharedPackages": { "@jupyter-widgets/base": { "bundled": false, "singleton": true + }, + "bqscales": { + "bundled": false, + "singleton": true + }, + "d3": { + "bundled": true, + "singleton": false + }, + "d3-selection": { + "bundled": true, + "singleton": true + }, + "popper.js": { + "bundled": true, + "singleton": false + }, + "topojson": { + "bundled": true, + "singleton": false + }, + "underscore": { + "bundled": true, + "singleton": false } } }, diff --git a/js/shaders/scales.glsl b/js/shaders/scales.glsl deleted file mode 100644 index 829422c1e..000000000 --- a/js/shaders/scales.glsl +++ /dev/null @@ -1,23 +0,0 @@ -float scale_transform_linear(float domain_value, vec2 range, vec2 domain) { - float normalized = (domain_value - domain[0]) / (domain[1] - domain[0]); - float range_value = normalized * (range[1] - range[0]) + range[0]; - return range_value; -} - -float scale_transform_linear_inverse(float range_value, vec2 range, vec2 domain) { - float normalized = (range_value - range[0]) / (range[1] - range[0]); - float domain_value = normalized * (domain[1] - domain[0]) + domain[0]; - return domain_value; -} - -float scale_transform_log(float domain_value, vec2 range, vec2 domain) { - float normalized = (log(domain_value) - log(domain[0])) / (log(domain[1]) - log(domain[0])); - float range_value = normalized * (range[1] - range[0]) + range[0]; - return range_value; -} - -float scale_transform_log_inverse(float range_value, vec2 range, vec2 domain) { - float normalized = (range_value - range[0]) / (range[1] - range[0]); - float domain_value = exp(normalized * (log(domain[1]) - log(domain[0])) + log(domain[0])); - return domain_value; -} \ No newline at end of file diff --git a/js/shaders/scatter-fragment.glsl b/js/shaders/scatter-fragment.glsl deleted file mode 100644 index 0b95e0b9e..000000000 --- a/js/shaders/scatter-fragment.glsl +++ /dev/null @@ -1,183 +0,0 @@ -precision highp float; -precision highp int; - -#define FAST_CIRCLE 1 -#define FAST_SQUARE 2 -#define FAST_ARROW 3 -#define FAST_CROSS 4 -#define FAST_TRIANGLE_UP 5 -#define FAST_TRIANGLE_DOWN 6 - -// This parameter is used for reducing aliasing -#define SMOOTH_PIXELS 1.0 - -// ANGLE_X = X * PI / 180. -#define ANGLE_20 0.3490658503988659 -#define ANGLE_60 1.0471975511965976 - -varying vec4 v_fill_color; -varying vec4 v_stroke_color; -varying float v_inner_size; -varying float v_outer_size; -varying vec2 v_pixel; - -uniform float stroke_width; - - -/* - * Rotate a point in the 2-D plane, given an angle in radians - */ -vec2 rotate_xy(vec2 x, float angle) { - float sina = sin(angle); - float cosa = cos(angle); - mat2 m = mat2(cosa, -sina, sina, cosa); - return m * x.xy; -} - -/* - * Returns 1.0 if pixel inside of a circle (0.0 otherwise) given the circle radius and the - * pixel position. - */ -float smooth_circle(in float radius, in vec2 pixel_position) { - // This function does not use the ellipse function for optimization purpose - // Circle equation: x^2 + y^2 = radius^2 - float d = dot(pixel_position, pixel_position); - float r1 = pow(radius - SMOOTH_PIXELS, 2.0); - float r2 = pow(radius + SMOOTH_PIXELS, 2.0); - return 1.0 - smoothstep(r1, r2, d); -} - -/* - * Returns 1.0 if pixel inside of an ellipse (0.0 otherwise) given the ellipse radius and the - * pixel position. - */ -float smooth_ellipse(in float a, in float b, in vec2 pixel_position) { - // Ellipse equation: b^2 * x^2 + a^2 * y^2 = a^2 * b^2 - float r_x = pow(a, 2.0); - float r_y = pow(b, 2.0); - float d = r_y * pow(pixel_position.x, 2.0) + r_x * pow(pixel_position.y, 2.0); - float r1 = pow(a - SMOOTH_PIXELS, 2.0) * pow(b - SMOOTH_PIXELS, 2.0); - float r2 = pow(a + SMOOTH_PIXELS, 2.0) * pow(b + SMOOTH_PIXELS, 2.0); - return 1.0 - smoothstep(r1, r2, d); -} - -/* - * Returns 1.0 if pixel inside of a rectangle (0.0 otherwise) given the rectangle half-size - * on the x and y axes and the pixel position. - */ -float smooth_rectangle(in vec2 size, in vec2 pixel_position) { - vec2 rec = smoothstep(vec2(-SMOOTH_PIXELS), vec2(SMOOTH_PIXELS), size - abs(pixel_position)); - return rec.x * rec.y; -} - -/* - * Returns 1.0 if pixel inside of a rectangle (0.0 otherwise) given the rectangle half-size - * on the x and y axes and the pixel position. - */ -float rectangle(in vec2 size, in vec2 pixel_position) { - vec2 rec = step(0.0, size - abs(pixel_position)); - return rec.x * rec.y; -} - -/* - * Returns 1.0 if pixel inside of a square (0.0 otherwise) given the square half-size - * and the pixel position. - */ -float smooth_square(in float size, in vec2 pixel_position) { - return smooth_rectangle(vec2(size), pixel_position); -} - -float smooth_isosceles_triangle(in float angle, in float height, in vec2 pixel_position) { - float half_angle = angle / 2.0; - - // The triangle center is on vec2(0.0, -height/3.0) - vec2 translated_pixel = vec2(pixel_position.x, pixel_position.y - height / 3.0); - - vec2 pixel_left = rotate_xy(translated_pixel, -half_angle); - vec2 pixel_right = rotate_xy(translated_pixel, half_angle); - - float half_height = height * 0.5; - - float half_bottom = half_height * tan(half_angle); - - return smoothstep(-SMOOTH_PIXELS, SMOOTH_PIXELS, half_bottom + pixel_left.x) * - smoothstep(-SMOOTH_PIXELS, SMOOTH_PIXELS, half_bottom - pixel_right.x) * - smoothstep(-SMOOTH_PIXELS, SMOOTH_PIXELS, translated_pixel.y + half_height); -} - - -/* - * Returns 1.0 if pixel inside of a cross shape (0.0 otherwise) given the cross half-size - * on the x and y axes and the pixel position. - */ -float cross(in vec2 size, in vec2 pixel_position) { - float cross_shape = rectangle(size.xy, pixel_position) + - rectangle(size.yx, pixel_position); - return clamp(cross_shape, 0.0, 1.0); -} - - -void main(void) { - // fill_weight and stroke_weight are color factors - // e.g. if fill_weight == 1.0 then the pixel color will be v_fill_color - // e.g. if stroke_weight == 1.0 then the pixel color will be v_stroke_color - float fill_weight = 0.0; - float stroke_weight = 0.0; - - // Note for the reader: In the following code, - // - `1.0` -> True - // - `0.0` -> False - // - `1.0 - A` -> NOT A - // - `A + B` -> A OR B - // - `A * B` -> A AND B - - float inner_shape = 0.0; - float outer_shape = 0.0; - -#if FAST_DRAW == FAST_CIRCLE - - inner_shape = smooth_circle(v_inner_size, v_pixel); - outer_shape = smooth_circle(v_outer_size, v_pixel); - -#elif FAST_DRAW == FAST_SQUARE - - inner_shape = smooth_square(v_inner_size, v_pixel); - outer_shape = 1.0; // Always in the outer_shape - -#elif FAST_DRAW == FAST_CROSS - - float r = v_outer_size / 3.0; - - inner_shape = cross(vec2(v_inner_size, r - 2.0 * stroke_width), v_pixel); - outer_shape = cross(vec2(r, v_outer_size), v_pixel); - -#elif FAST_DRAW == FAST_ARROW - - inner_shape = smooth_isosceles_triangle(ANGLE_20, v_inner_size, v_pixel); - outer_shape = smooth_isosceles_triangle(ANGLE_20, v_outer_size, v_pixel); - -#elif FAST_DRAW == FAST_TRIANGLE_UP - - inner_shape = smooth_isosceles_triangle(ANGLE_60, v_inner_size, v_pixel); - outer_shape = smooth_isosceles_triangle(ANGLE_60, v_outer_size, v_pixel); - -#elif FAST_DRAW == FAST_TRIANGLE_DOWN - - vec2 reversed_pixel = vec2(v_pixel.x, -v_pixel.y); - - inner_shape = smooth_isosceles_triangle(ANGLE_60, v_inner_size, reversed_pixel); - outer_shape = smooth_isosceles_triangle(ANGLE_60, v_outer_size, reversed_pixel); - -#endif - - // `inner_shape` is the shape without the stroke, `outer_shape` is the shape with the stroke - // note that the stroke is always drawn, only that it has the `v_fill_color` if stroke is None - fill_weight = inner_shape; - stroke_weight = (1.0 - inner_shape) * outer_shape; - -#if !FILL - fill_weight = 0.0; -#endif - - gl_FragColor = v_fill_color * fill_weight + v_stroke_color * stroke_weight; -} diff --git a/js/shaders/scatter-vertex.glsl b/js/shaders/scatter-vertex.glsl deleted file mode 100644 index 8cfd0d34d..000000000 --- a/js/shaders/scatter-vertex.glsl +++ /dev/null @@ -1,187 +0,0 @@ -#include - -uniform mat4 projectionMatrix; -uniform mat4 modelViewMatrix; - - // for animation, all between 0 and 1 -uniform float animation_time_x; -uniform float animation_time_y; -uniform float animation_time_z; -uniform float animation_time_size; -uniform float animation_time_rotation; -uniform float animation_time_opacity; - -#ifdef HAS_DEFAULT_STROKE_COLOR -uniform vec4 default_stroke_color; -#endif - -uniform bool has_selection; -uniform bool has_hover; - -// maybe faster to use #IFDEFS -uniform bool has_selected_fill; -uniform vec4 selected_fill; -uniform bool has_selected_stroke; -uniform vec4 selected_stroke; -uniform bool has_selected_opacity; -uniform float selected_opacity; - -uniform bool has_unselected_fill; -uniform vec4 unselected_fill; -uniform bool has_unselected_stroke; -uniform vec4 unselected_stroke; -uniform bool has_unselected_opacity; -uniform float unselected_opacity; - - -uniform bool has_hovered_fill; -uniform vec4 hovered_fill; -uniform bool has_hovered_stroke; -uniform vec4 hovered_stroke; -uniform bool has_hovered_opacity; -uniform float hovered_opacity; - -uniform bool has_unhovered_fill; -uniform vec4 unhovered_fill; -uniform bool has_unhovered_stroke; -uniform vec4 unhovered_stroke; -uniform bool has_unhovered_opacity; -uniform float unhovered_opacity; - -uniform vec2 domain_x; -uniform vec2 domain_y; -uniform vec2 domain_z; -uniform vec2 domain_size; -uniform vec2 domain_rotation; -uniform vec2 domain_opacity; - -uniform vec2 range_x; -uniform vec2 range_y; -uniform vec2 range_z; -uniform vec2 range_size; -uniform vec2 range_rotation; -uniform vec2 range_opacity; - -uniform bool fill; -uniform float stroke_width; -uniform float marker_scale; - -varying vec4 v_fill_color; -varying vec4 v_stroke_color; -varying float v_inner_size; -varying float v_outer_size; -varying vec2 v_pixel; - -attribute vec3 position; -attribute vec2 uv; - -attribute float x; -attribute float x_previous; -attribute float y; -attribute float y_previous; - -attribute float size; -attribute float size_previous; - -attribute float rotation; -attribute float rotation_previous; - -attribute float opacity; -attribute float opacity_previous; - -// Boolean or int not supported for attributes, using a float instead -attribute float selected; - -uniform sampler2D colormap; -uniform vec2 domain_color; - -#ifdef USE_COLORMAP -attribute float color; -#else -attribute vec3 color; -#endif - -#define SCALE_X(x) scale_transform_linear(x, range_x, domain_x) -#define SCALE_Y(x) scale_transform_linear(x, range_y, domain_y) -#define SCALE_SIZE(x) scale_transform_linear(x, range_size, domain_size) -#define SCALE_ROTATION(x) scale_transform_linear(x, range_rotation, domain_rotation) -#define SCALE_OPACITY(x) scale_transform_linear(x, range_opacity, domain_opacity) - -vec3 rotate_xy(vec3 x, float angle) { - float sina = sin(angle); - float cosa = cos(angle); - mat2 m = mat2(cosa, -sina, sina, cosa); - return vec3(m * x.xy, x.z); -} - -void main(void) { - - vec3 animation_time = vec3(animation_time_x, animation_time_y, animation_time_z); - - vec3 center = mix(vec3(x_previous, y_previous, 0), vec3(x, y, 0), animation_time); - - // times 2 because the normalized coordinates go from [-1, 1] - vec3 center_pixels = vec3(SCALE_X(center.x), SCALE_Y(center.y), 0) * 2.; - - // times 4 because of the normalized coordinates, and radius vs diameter use - float marker_size = sqrt(mix(SCALE_SIZE(size_previous), SCALE_SIZE(size), animation_time_size)) * marker_scale * 4.; - // we draw larger than the size for the stroke_width (on both side) - - // `v_inner_size` is the marker "radius" without the stroke, `v_outer_size` is the marker "radius" with the stroke - v_inner_size = marker_size * 0.5 - stroke_width; - v_outer_size = marker_size * 0.5 + stroke_width; - - // `full_size` is the marker "diameter" with the stroke - float full_size = marker_size + 2.0 * stroke_width; - - // `v_pixel` is the pixel position relatively to the marker, - // e.g. vec2(0.) would be the center of the square marker - // e.g. vec2(0.5 * full_size) would be the top-right pixel of the square marker - v_pixel = (uv - 0.5) * (full_size); - - float angle = SCALE_ROTATION(mix(rotation_previous, rotation, animation_time_rotation)); - vec3 model_pos = rotate_xy(position, 1.) * full_size + center_pixels; - -#ifdef USE_COLORMAP - float color_index = (color - domain_color.x) / (domain_color.y - domain_color.x); - vec4 color_rgba = texture2D(colormap, vec2(color_index, 0)); -#else - vec4 color_rgba = vec4(color, 1.0); -#endif - - v_fill_color = color_rgba; - v_stroke_color = color_rgba; - -#ifdef HAS_DEFAULT_STROKE_COLOR - v_stroke_color = default_stroke_color; -#endif - - float opacity_value = SCALE_OPACITY(mix(opacity_previous, opacity, animation_time_opacity)); - v_fill_color.a *= opacity_value; - v_stroke_color.a *= opacity_value; - - if(has_selection) { - if(has_selected_fill && selected > 0.5 ) - v_fill_color = selected_fill; - if(has_unselected_fill && selected < 0.5 ) - v_fill_color = unselected_fill; - if(has_selected_stroke && selected > 0.5 ) - v_stroke_color = selected_stroke; - if(has_unselected_stroke && selected < 0.5 ) - v_stroke_color = unselected_stroke; - if(has_selected_opacity && selected > 0.5 ) { - v_stroke_color.a *= selected_opacity; - v_fill_color.a *= selected_opacity; - } - if(has_unselected_opacity && selected < 0.5 ) { - v_stroke_color.a *= unselected_opacity; - v_fill_color.a *= unselected_opacity; - } - } - - v_fill_color.rgb *= v_fill_color.a; - v_stroke_color.rgb *= v_stroke_color.a; - - gl_Position = projectionMatrix * vec4(rotate_xy(position, angle) * full_size, 1.0) + - projectionMatrix * modelViewMatrix * vec4(center_pixels, 1.0); -} diff --git a/js/src/Axis.ts b/js/src/Axis.ts index ac68e91df..e837d4343 100644 --- a/js/src/Axis.ts +++ b/js/src/Axis.ts @@ -14,19 +14,22 @@ */ import { WidgetView } from '@jupyter-widgets/base'; +import { + Scale, + ScaleModel, + isOrdinalScale, + isDateScale, + isLogScale, + isLinearScale, + isDateColorScale, + isColorScale, +} from 'bqscales'; import * as d3 from 'd3'; // const d3 =Object.assign({}, require("d3-axis"), require("d3-format"), require("d3-selection"), require("d3-selection-multi"), require("d3-time"), require("d3-time-format")); import * as utils from './utils'; import * as _ from 'underscore'; import { applyAttrs, applyStyles } from './utils'; import { Figure } from './Figure'; -import { Scale } from './Scale'; -import { isOrdinalScale } from './OrdinalScale'; -import { isDateScale } from './DateScale'; -import { isLogScale } from './LogScale'; -import { isLinearScale } from './LinearScale'; -import { isDateColorScale } from './DateColorScale'; -import { isColorScale } from './ColorScale'; // Polyfill for Math.log10 in IE11 Math.log10 = @@ -47,21 +50,23 @@ export class Axis extends WidgetView { super.initialize.apply(this, arguments); } - render() { + async render() { this.d3el.style('display', this.model.get('visible') ? 'inline' : 'none'); this.parent = this.options.parent; const scale_promise = this.set_scale_promise(this.model.get('scale')); const offset_promise = this.get_offset_promise(); - Promise.all([scale_promise, offset_promise]).then(() => { + return await Promise.all([scale_promise, offset_promise]).then(() => { this.create_listeners(); - this.tick_format = this.generate_tick_formatter(); + this.create_axis(); this.set_scales_range(); + this.update_scales(); + this.set_tick_values(); + this.tickformat_changed(); this.append_axis(); }); } - create_listeners() { // Creates all event listeners @@ -75,6 +80,7 @@ export class Axis extends WidgetView { // Tick attributes this.listenTo(this.model, 'change:tick_values', this.set_tick_values); this.listenTo(this.model, 'change:tick_format', this.tickformat_changed); + this.listenTo(this.model, 'change:tick_labels', this.tick_labels_changed); this.listenTo(this.model, 'change:num_ticks', this.set_tick_values); this.listenTo(this.model, 'change:tick_rotate', this.apply_tick_styling); this.listenTo(this.model, 'change:tick_style', this.apply_tick_styling); @@ -100,11 +106,7 @@ export class Axis extends WidgetView { ); this.listenTo(this.model, 'change:label_offset', this.update_label_offset); this.listenTo(this.model, 'change:visible', this.update_visibility); - this.model.on_some_change( - ['side', 'orientation'], - this.update_display, - this - ); + this.listenTo(this.model, 'change:side', this.update_display); this.listenTo(this.model, 'change:offset', this.update_offset); this.listenTo(this.parent, 'margin_updated', this.parent_margin_updated); } @@ -121,7 +123,10 @@ export class Axis extends WidgetView { update_display() { this.g_axisline.remove(); + this.create_axis(); + this.set_tick_values(); this.set_scales_range(); + this.tickformat_changed(); this.append_axis(); } @@ -190,16 +195,6 @@ export class Axis extends WidgetView { this.axis.tickValues(this.axis_scale.scale.ticks()); } } - if ( - this.model.get('tick_format') === null || - this.model.get('tick_format') === undefined - ) { - if (!isOrdinalScale(this.axis_scale)) { - this.tick_format = this.guess_tick_format(this.axis.tickValues()); - } - } - this.axis.tickFormat(this.tick_format); - if (this.g_axisline) { this.g_axisline .transition('set_tick_values') @@ -221,11 +216,17 @@ export class Axis extends WidgetView { this.apply_tick_styling(); } + tick_labels_changed() { + this.tickformat_changed(); + } + apply_tick_styling() { // Applies current tick styling to all displayed ticks - const tickText = this.g_axisline.selectAll('.tick text'); - applyStyles(tickText, this.model.get('tick_style')); - tickText.attr('transform', this.get_tick_transforms()); + if (this.g_axisline) { + const tickText = this.g_axisline.selectAll('.tick text'); + applyStyles(tickText, this.model.get('tick_style')); + tickText.attr('transform', this.get_tick_transforms()); + } } get_tick_transforms() { @@ -247,7 +248,7 @@ export class Axis extends WidgetView { update_scale_domain() { // Sets the scale domain (Range of input values) - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); const initial_range = is_vertical ? this.parent.padded_range('y', this.axis_scale.model) @@ -257,14 +258,14 @@ export class Axis extends WidgetView { ? this.parent.range('y') : this.parent.range('x'); - this.axis_scale.expand_domain(initial_range, target_range); + this.axis_scale.expandDomain(initial_range, target_range); this.axis.scale(this.axis_scale.scale as d3.AxisScale); } update_offset_scale_domain() { // Sets the domain (range of input values) of the offset scale - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); if (this.offset_scale) { const initial_range = !is_vertical @@ -275,11 +276,29 @@ export class Axis extends WidgetView { ? this.parent.range('y') : this.parent.range('x'); - this.offset_scale.expand_domain(initial_range, target_range); + this.offset_scale.expandDomain(initial_range, target_range); } } generate_tick_formatter() { + const default_formatter = this.generate_default_tick_formatter(); + const tickLabels = this.model.get('tick_labels'); + if (tickLabels && Object.keys(tickLabels).length > 0) { + const formatter = (data) => { + let value = tickLabels[data]; + if (value === undefined) { + return default_formatter(data); + } else { + return value; + } + }; + return formatter; + } else { + return default_formatter; + } + } + + generate_default_tick_formatter() { if (isDateScale(this.axis_scale) || isDateColorScale(this.axis_scale)) { if (this.model.get('tick_format')) { return d3.utcFormat(this.model.get('tick_format')); @@ -311,11 +330,11 @@ export class Axis extends WidgetView { } set_scales_range() { - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); - this.axis_scale.set_range(is_vertical ? [this.height, 0] : [0, this.width]); + this.axis_scale.setRange(is_vertical ? [this.height, 0] : [0, this.width]); if (this.offset_scale) { - this.offset_scale.set_range( + this.offset_scale.setRange( is_vertical ? [0, this.width] : [this.height, 0] ); } @@ -324,7 +343,7 @@ export class Axis extends WidgetView { create_axis() { // Creates the initial D3 axis and sets it on this.axis - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); const side = this.model.get('side'); if (is_vertical) { @@ -341,7 +360,6 @@ export class Axis extends WidgetView { } append_axis() { - this.create_axis(); this.update_scales(); // Create initial SVG element @@ -360,7 +378,6 @@ export class Axis extends WidgetView { applyAttrs(lineText, this.get_label_attributes()); // Apply custom settings - this.set_tick_values(); this.update_grid_lines(); this.update_color(); this.apply_tick_styling(); @@ -374,7 +391,7 @@ export class Axis extends WidgetView { */ let return_promise = Promise.resolve(); const offset = this.model.get('offset'); - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); if (offset.value !== undefined && offset.value !== null) { //If scale is undefined but, the value is defined, then we have @@ -418,18 +435,18 @@ export class Axis extends WidgetView { } get_basic_transform() { - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); const side = this.model.get('side'); if (is_vertical) { - return side === 'right' ? this.width : 0; + return side === 'right' ? this.width + this.autoOffset : -this.autoOffset; } else { - return side === 'top' ? 0 : this.height; + return side === 'top' ? -this.autoOffset : this.height + this.autoOffset; } } get_axis_transform() { - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); if (is_vertical) { return 'translate(' + this.process_offset() + ', 0)'; } else { @@ -456,7 +473,7 @@ export class Axis extends WidgetView { let label_x = 0; const label_location = this.model.get('label_location'); const label_offset = this.calculate_label_offset(); - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); const side = this.model.get('side'); if (is_vertical) { @@ -545,7 +562,7 @@ export class Axis extends WidgetView { applyAttrs(axisLabel, this.get_label_attributes()); } - update_label_offset(model, offset) { + update_label_offset() { this.label_offset = this.calculate_label_offset(); this.g_axisline.select('text.axislabel').attr('y', this.label_offset); } @@ -555,7 +572,7 @@ export class Axis extends WidgetView { // of the axis, an offset is set. let label_offset = this.model.get('label_offset'); - const is_vertical = this.model.get('orientation') === 'vertical'; + const is_vertical = ['left', 'right'].includes(this.model.get('side')); const side = this.model.get('side'); if (!label_offset) { @@ -588,12 +605,11 @@ export class Axis extends WidgetView { update_grid_lines(animate?: boolean) { const grid_type = this.model.get('grid_lines'); const side = this.model.get('side'); - const orientation = this.model.get('orientation'); - const is_x = orientation !== 'vertical'; + const is_vertical = ['left', 'right'].includes(side); const animation_duration = animate === true ? this.parent.model.get('animation_duration') : 0; - let tickSize = orientation === 'vertical' ? -this.width : -this.height; + let tickSize = is_vertical ? -this.width : -this.height; let tickOffset = 0; //apply offsets if applicable @@ -602,7 +618,7 @@ export class Axis extends WidgetView { if (side === 'bottom' || side == 'right') { tickSize = -offset; - tickOffset = is_x ? this.height - offset : this.width - offset; + tickOffset = !is_vertical ? this.height - offset : this.width - offset; } else { tickSize += offset; tickOffset = -offset; @@ -623,7 +639,7 @@ export class Axis extends WidgetView { .call(this.axis) .selectAll('.tick line') .attr( - is_x ? 'y1' : 'x1', + !is_vertical ? 'y1' : 'x1', this.offset_scale && grid_type !== 'none' ? tickOffset : null ) .style('stroke-dasharray', grid_type === 'dashed' ? '5, 5' : null); @@ -656,6 +672,7 @@ export class Axis extends WidgetView { //animate axis and grid lines on domain changes const animate = true; this.set_tick_values(animate); + this.tickformat_changed(); this.update_grid_lines(animate); } @@ -687,7 +704,7 @@ export class Axis extends WidgetView { const target_range = this.vertical ? this.parent.range('y') : this.parent.range('x'); - this.axis_scale.expand_domain(initial_range, target_range); + this.axis_scale.expandDomain(initial_range, target_range); this.axis.scale(this.axis_scale.scale as d3.AxisScale); } @@ -752,17 +769,18 @@ export class Axis extends WidgetView { } } - set_scale_promise(model) { + set_scale_promise(model: ScaleModel) { // Sets the child scale if (this.axis_scale) { this.axis_scale.remove(); } - return this.create_child_view(model).then((view) => { + // @ts-ignore + return this.create_child_view(model).then((view: Scale) => { // Trigger the displayed event of the child view. this.displayed.then(() => { view.trigger('displayed'); }); - this.axis_scale = view as WidgetView as Scale; + this.axis_scale = view; this.axis_scale.on('domain_changed', this.redraw_axisline, this); this.axis_scale.on('highlight_axis', this.highlight, this); this.axis_scale.on('unhighlight_axis', this.unhighlight, this); @@ -833,14 +851,11 @@ export class Axis extends WidgetView { }; } - _linear_scale_precision(ticks?: any[]): number { + _linear_scale_precision(): number { if (!(isLinearScale(this.axis_scale) || isColorScale(this.axis_scale))) { return -1; } - ticks = - ticks === undefined || ticks === null - ? this.axis_scale.scale.ticks() - : ticks; + let ticks: any[] = this.axis.tickValues(); // Case where all data is concentrated into one point. if (ticks.length === 1) { return 1; @@ -871,19 +886,16 @@ export class Axis extends WidgetView { } } - linear_sc_format(ticks?: any[]) { - return this.get_format_func(this._linear_scale_precision(ticks)); + linear_sc_format() { + return this.get_format_func(this._linear_scale_precision()); } - date_sc_format(ticks?: any[]) { + date_sc_format() { // assumes that scale is a linear date scale if (!isDateScale(this.axis_scale)) { return; } - ticks = - ticks === undefined || ticks === null - ? this.axis_scale.scale.ticks() - : ticks; + let ticks: any[] = this.axis.tickValues(); // diff is the difference between ticks in milliseconds const diff = Math.abs(ticks[1] - ticks[0]); @@ -954,18 +966,15 @@ export class Axis extends WidgetView { }; } - log_sc_format(ticks?: any[]) { - return this.get_format_func(this._log_sc_precision(ticks)); + log_sc_format() { + return this.get_format_func(this._log_sc_precision()); } - _log_sc_precision(ticks?: any[]): number { + _log_sc_precision(): number { if (!isLogScale(this.axis_scale)) { return -1; } - ticks = - ticks === undefined || ticks === null - ? this.axis_scale.scale.ticks() - : ticks; + let ticks: any[] = this.axis.tickValues(); const ratio = Math.abs(Math.log10(ticks[1] / ticks[0])); if (ratio >= 0.301) { @@ -977,35 +986,76 @@ export class Axis extends WidgetView { } } - guess_tick_format(ticks?: any[]) { + guess_tick_format() { if (isDateScale(this.axis_scale) || isDateColorScale(this.axis_scale)) { - return this.date_sc_format(ticks); + return this.date_sc_format(); } else if ( isLinearScale(this.axis_scale) || isColorScale(this.axis_scale) ) { - return this.linear_sc_format(ticks); + return this.linear_sc_format(); } else if (isLogScale(this.axis_scale)) { - return this.log_sc_format(ticks); + return this.log_sc_format(); } } get width(): number { - return ( - this.parent.width - this.parent.margin.right - this.parent.margin.left - ); + return this.parent.plotareaWidth; } get height(): number { - return ( - this.parent.height - this.parent.margin.top - this.parent.margin.bottom - ); + return this.parent.plotareaHeight; } get margin() { return this.parent.margin; } + calculateAutoSize() { + // if offset is used, we don't take up any auto layout space + if (this.offset_value !== undefined) { + return 0; + } else { + const box = this.getBBox(); + const side = this.model.get('side'); + if (side == 'left' || side == 'right') { + return box.width; + } + if (side == 'bottom' || side == 'top') { + return box.height; + } + } + } + + getBBox(): DOMRect { + // To get the bounding box, we don't want to include the gridlines, so we disable them + this.axis.tickSize(6); // Default value is 6 + this.g_axisline.call(this.axis); + // we also don't use the label if the label_offset is negative + const negativeLabelOffset = + this.model.get('label_offset') && this.model.get('label_offset').length + ? this.model.get('label_offset')[0] == '-' + : false; + if (negativeLabelOffset) { + this.g_axisline.select('text.axislabel').style('display', 'none'); + } + // note that we use getBoundingClientRect to take into account transformations (such as rotations) + const box = this.d3el.node().getBoundingClientRect(); + // and restore the gridlines + this.update_grid_lines(); + this.g_axisline.call(this.axis); + // and restore label + if (negativeLabelOffset) { + this.g_axisline.select('text.axislabel').style('display', ''); + } + return box; + } + + setAutoOffset(autoOffset) { + this.autoOffset = autoOffset; + } + + autoOffset: number = 0; axis_scale: Scale; axis: d3.Axis; d3el: d3.Selection; diff --git a/js/src/AxisModel.ts b/js/src/AxisModel.ts index a36b7a805..4dae8fd64 100644 --- a/js/src/AxisModel.ts +++ b/js/src/AxisModel.ts @@ -28,11 +28,11 @@ export class AxisModel extends widgets.WidgetModel { _model_module_version: semver_range, _view_module_version: semver_range, - orientation: 'horizontal', - side: null, + side: 'bottom', label: '', grid_lines: 'solid', tick_format: null, + tick_labels: null, scale: undefined, num_ticks: null, tick_values: [], @@ -50,37 +50,6 @@ export class AxisModel extends widgets.WidgetModel { initialize(attributes, options) { super.initialize(attributes, options); - this.on('change:side', this.validate_orientation, this); - this.on('change:orientation', this.validate_side, this); - this.validate_orientation(); - this.validate_side(); - } - - validate_side() { - const orientation = this.get('orientation'); - const side = this.get('side'); - if (orientation === 'vertical') { - if (side !== 'left' && side !== 'right') { - this.set('side', 'left'); - } - } else { - if (side !== 'bottom' && side !== 'top') { - this.set('side', 'bottom'); - } - } - this.save_changes(); - } - - validate_orientation() { - const side = this.get('side'); - if (side) { - if (side === 'left' || side === 'right') { - this.set('orientation', 'vertical'); - } else { - this.set('orientation', 'horizontal'); - } - this.save_changes(); - } } static serializers = { diff --git a/js/src/Bars.ts b/js/src/Bars.ts index b3e4adbbd..bc212ca87 100644 --- a/js/src/Bars.ts +++ b/js/src/Bars.ts @@ -13,15 +13,14 @@ * limitations under the License. */ +import * as _ from 'underscore'; import * as d3 from 'd3'; +import { LinearScale, OrdinalScale, isOrdinalScale } from 'bqscales'; + import { d3GetEvent } from './utils'; -import * as _ from 'underscore'; import { Mark } from './Mark'; import { BarData, BarGroupValue, BarsModel } from './BarsModel'; import { applyStyles } from './utils'; -import { LinearScale } from './LinearScale'; -import { LogScale } from './LogScale'; -import { isOrdinalScale } from './OrdinalScale'; export class Bars extends Mark { async render() { @@ -64,16 +63,16 @@ export class Bars extends Mark { const dom = orient === 'vertical' ? 'x' : 'y'; const rang = orient === 'vertical' ? 'y' : 'x'; if (!isOrdinalScale(this.domScale)) { - this.domScale.set_range( + this.domScale.setRange( this.parent.padded_range(dom, this.domScale.model) ); } else { - this.domScale.set_range( + this.domScale.setRange( this.parent.padded_range(dom, this.domScale.model), this.model.get('padding') ); } - this.rangeScale.set_range( + this.rangeScale.setRange( this.parent.padded_range(rang, this.rangeScale.model) ); // x_offset is set later by the adjustOffset method @@ -193,7 +192,7 @@ export class Bars extends Mark { this.d3el .select('.zeroLine') .attr('x1', 0) - .attr('x2', this.parent.plotarea_width) + .attr('x2', this.parent.plotareaWidth) .attr('y1', rangeScale(this.model.baseValue)) .attr('y2', rangeScale(this.model.baseValue)); } else { @@ -202,7 +201,7 @@ export class Bars extends Mark { .attr('x1', rangeScale(this.model.baseValue)) .attr('x2', rangeScale(this.model.baseValue)) .attr('y1', 0) - .attr('y2', this.parent.plotarea_height); + .attr('y2', this.parent.plotareaHeight); } } @@ -421,7 +420,7 @@ export class Bars extends Mark { rang === 'y' ? rangeScale(d.y1) : rangeScale(d.y0) ) .attr(rangeControl, (d: BarGroupValue) => - Math.abs(rangeScale(d.y1 + d.yRef) - rangeScale(d.y1)) + Math.abs(rangeScale(d.y0) - rangeScale(d.y1)) ); } else { bandWidth = Math.max(1.0, this.groupedScale.bandwidth()); @@ -461,8 +460,8 @@ export class Bars extends Mark { : d3.min([rangeScale(d.y), rangeScale(this.model.baseValue)]); rectCoords[domControl] = bandWidth; rectCoords[rangeControl] = isStacked - ? Math.abs(rangeScale(d.y1 + d.yRef) - rangeScale(d.y1)) - : Math.abs(rangeScale(this.model.baseValue) - rangeScale(d.yRef)); + ? Math.abs(rangeScale(d.y0) - rangeScale(d.y1)) + : Math.abs(rangeScale(this.model.baseValue) - rangeScale(d.y)); return [ [rectCoords.x, rectCoords.x + rectCoords.width], [rectCoords.y, rectCoords.y + rectCoords.height], @@ -962,8 +961,8 @@ export class Bars extends Mark { let xPadding = 0; const avail_space = orient === 'vertical' - ? this.parent.plotarea_width - : this.parent.plotarea_height; + ? this.parent.plotareaWidth + : this.parent.plotareaHeight; if (domScale) { if ( this.stackedScale !== null && @@ -1002,10 +1001,10 @@ export class Bars extends Mark { } private domOffset: number; - private domScale: LinearScale | LogScale; + private domScale: LinearScale | OrdinalScale; private legendEl: d3.Selection; private pixelCoords: [[number, number], [number, number]][][]; - private rangeScale: LinearScale | LogScale; + private rangeScale: LinearScale | OrdinalScale; private stackedScale: d3.ScaleBand; private groupedScale: d3.ScaleBand; private xPixels: number[]; diff --git a/js/src/BarsModel.ts b/js/src/BarsModel.ts index 0d6004786..b5fdf27e8 100644 --- a/js/src/BarsModel.ts +++ b/js/src/BarsModel.ts @@ -23,7 +23,6 @@ export interface BarGroupValue { subIndex: number; y0: number; y1: number; - yRef: number; x: number; y: number; colorIndex: number; @@ -113,55 +112,56 @@ export class BarsModel extends MarkModel { // since x_data may be a TypedArray, explicitly use Array.map this.mark_data = Array.prototype.map.call(x_data, (x_elem, index) => { const data: any = {}; - let y0 = this.baseValue; - let y0_neg = this.baseValue; - let y0_left = this.baseValue; data.key = x_elem; + // split bins into positive ( value > baseValue) and negative, and stack those separately + // accumulates size/height of histogram values for stacked histograms + let cumulativePos = this.baseValue; + let cumulativeNeg = this.baseValue; + // since y_data may be a TypedArray, explicitly use Array.map data.values = Array.prototype.map.call(y_data, (y_elem, y_index) => { - let value = y_elem[index] - this.baseValue; - if (isNaN(value)) { - value = 0; + // y0, y1 are the upper and lower bound of the bars and + // only relevant for a stacked bar chart. grouped + // bars only deal with baseValue and y. + + let y0, y1; + const value = isNaN(y_elem[index]) + ? 0 + : y_elem[index] - this.baseValue; + + if (value >= 0) { + y0 = cumulativePos; + if (!isNaN(y_elem[index])) { + cumulativePos += value; + } + y1 = cumulativePos; + } else { + // reverse y1 and y0 to not have negative heights + y1 = cumulativeNeg; + if (!isNaN(y_elem[index])) { + cumulativeNeg += value; + } + y0 = cumulativeNeg; } - const positive = value >= 0; + return { index: index, subIndex: y_index, x: x_elem, - // In the following code, the values y0, y1 are - // only relevant for a stacked bar chart. grouped - // bars only deal with baseValue and y. - - // y0 is the value on the y scale for the upper end - // of the bar. - y0: positive - ? y0 - : (function () { - y0_left += value; - return y0_left; - })(), - // y1 is the value on the y scale for the lower end - // of the bar. - y1: positive - ? (y0 += value) - : (function () { - y0_neg += value; - return y0_neg - value; - })(), - // yRef is the value on the y scale which represents - // the height of the bar - yRef: value, + y0, + y1, y: y_elem[index], }; }); + let extremes = [this.baseValue, cumulativeNeg, cumulativePos]; // posMax is the maximum positive value for a group of // bars. - data.posMax = y0; + data.posMax = d3.max(extremes); // negMax is the minimum negative value for a group of // bars. - data.negMax = y0_neg; + data.negMax = d3.min(extremes); return data; }); this.yIs2d = this.mark_data[0].values.length > 1; @@ -184,7 +184,7 @@ export class BarsModel extends MarkModel { return; } const color = this.get('color') || []; - const color_scale = this.get('scales').color; + const color_scale = this.getScales().color; const color_mode = this.get('color_mode'); const apply_color_to_groups = color_mode === 'group' || (color_mode === 'auto' && !this.yIs2d); @@ -218,9 +218,9 @@ export class BarsModel extends MarkModel { if (color_scale && color.length > 0) { if (!this.get('preserve_domain').color) { - color_scale.compute_and_set_domain(color, this.model_id + '_color'); + color_scale.computeAndSetDomain(color, this.model_id + '_color'); } else { - color_scale.del_domain([], this.model_id + '_color'); + color_scale.delDomain([], this.model_id + '_color'); } } } @@ -229,24 +229,24 @@ export class BarsModel extends MarkModel { if (!this.mark_data) { return; } - const scales = this.get('scales'); + const scales = this.getScales(); const dom_scale = scales.x; const range_scale = scales.y; if (!this.get('preserve_domain').x) { - dom_scale.compute_and_set_domain( + dom_scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem.key; }), this.model_id + '_x' ); } else { - dom_scale.del_domain([], this.model_id + '_x'); + dom_scale.delDomain([], this.model_id + '_x'); } if (!this.get('preserve_domain').y) { if (this.get('type') === 'stacked') { - range_scale.compute_and_set_domain( + range_scale.computeAndSetDomain( [ d3.min(this.mark_data, (c: any) => { return c.negMax; @@ -269,13 +269,13 @@ export class BarsModel extends MarkModel { return val.yRef; }); }); - range_scale.compute_and_set_domain( + range_scale.computeAndSetDomain( [min, max, this.baseValue], this.model_id + '_y' ); } } else { - range_scale.del_domain([], this.model_id + '_y'); + range_scale.delDomain([], this.model_id + '_y'); } } diff --git a/js/src/Boxplot.ts b/js/src/Boxplot.ts index b08ebb66c..5900a9865 100644 --- a/js/src/Boxplot.ts +++ b/js/src/Boxplot.ts @@ -19,6 +19,7 @@ import * as _ from 'underscore'; import { Mark } from './Mark'; import { BoxplotModel } from './BoxplotModel'; import { applyStyles } from './utils'; +import { isOrdinalScale } from 'bqscales'; interface BoxPlotData { whiskerMax: number; @@ -65,12 +66,12 @@ export class Boxplot extends Mark { set_ranges() { const xScale = this.scales.x; if (xScale) { - xScale.set_range(this.parent.padded_range('x', xScale.model)); + xScale.setRange(this.parent.padded_range('x', xScale.model)); } const yScale = this.scales.y; if (yScale) { - yScale.set_range(this.parent.padded_range('y', yScale.model)); + yScale.setRange(this.parent.padded_range('y', yScale.model)); } } @@ -154,7 +155,7 @@ export class Boxplot extends Mark { // null box_width means auto calculated box width if (!width) { - const plotWidth = this.parent.plotarea_width; + const plotWidth = this.parent.plotareaWidth; const maxWidth = plotWidth / 10.0; width = plotWidth / (this.model.mark_data.length + 1) / 1.5; width = Math.min(width, maxWidth); @@ -499,8 +500,7 @@ export class Boxplot extends Mark { newBoxplots.append('g').attr('class', 'outliers'); const scaleX = this.scales.x; - const xOffset = - scaleX.model.type === 'ordinal' ? scaleX.scale.bandwidth() / 2 : 0; + const xOffset = isOrdinalScale(scaleX) ? scaleX.scale.bandwidth() / 2 : 0; selector .selectAll('.boxplot') diff --git a/js/src/BoxplotModel.ts b/js/src/BoxplotModel.ts index de18ad038..24667f992 100644 --- a/js/src/BoxplotModel.ts +++ b/js/src/BoxplotModel.ts @@ -77,17 +77,17 @@ export class BoxplotModel extends MarkModel { update_domains() { // color scale needs an issue in DateScaleModel to be fixed. It // should be moved here as soon as that is fixed. - const scales = this.get('scales'); + const scales = this.getScales(); if (!this.get('preserve_domain').x && this.mark_data) { - scales.x.compute_and_set_domain( + scales.x.computeAndSetDomain( this.mark_data.map((elem) => { return elem[0]; }), this.model_id + '_x' ); } else { - scales.x.del_domain([], this.model_id + '_x'); + scales.x.delDomain([], this.model_id + '_x'); } if (!this.get('preserve_domain').y && this.mark_data) { @@ -105,9 +105,9 @@ export class BoxplotModel extends MarkModel { }) ); - scales.y.set_domain([min, max], this.model_id + '_y'); + scales.y.setDomain([min, max], this.model_id + '_y'); } else { - scales.y.del_domain([], this.model_id + '_y'); + scales.y.delDomain([], this.model_id + '_y'); } } diff --git a/js/src/BrushSelector.ts b/js/src/BrushSelector.ts index 29b6edc70..1fbf55f17 100644 --- a/js/src/BrushSelector.ts +++ b/js/src/BrushSelector.ts @@ -284,11 +284,11 @@ export class BrushSelector extends BrushMixinXYSelector { this.update_mark_selected(pixel_extent_x, pixel_extent_y); this.set_selected( 'selected_x', - this.x_scale.model.typedRange(extent_x as ArrayLike) + this.x_scale.model.typedRange(extent_x as number[]) ); this.set_selected( 'selected_y', - this.y_scale.model.typedRange(extent_y as ArrayLike) + this.y_scale.model.typedRange(extent_y as number[]) ); this.touch(); } diff --git a/js/src/ColorAxis.ts b/js/src/ColorAxis.ts index d8688c10c..2682ef3d5 100644 --- a/js/src/ColorAxis.ts +++ b/js/src/ColorAxis.ts @@ -15,15 +15,15 @@ import { WidgetView } from '@jupyter-widgets/base'; import * as d3 from 'd3'; +import { ColorScale, ColorScaleModel } from 'bqscales'; // var d3 =Object.assign({}, require("d3-axis"), require("d3-scale"), require("d3-selection"), require("d3-selection-multi")); import { Axis } from './Axis'; import { applyAttrs } from './utils'; -import { ColorScale } from './ColorScale'; class ColorBar extends Axis { - render() { + async render() { this.parent = this.options.parent; - this.vertical = this.model.get('orientation') === 'vertical'; + this.vertical = ['left', 'right'].includes(this.model.get('side')); const scale_promise = this.set_scale(this.model.get('scale')); this.side = this.model.get('side'); @@ -37,13 +37,15 @@ class ColorBar extends Axis { this.ordinal = false; this.num_ticks = this.model.get('num_ticks'); - const that = this; - return scale_promise.then(() => { - that.create_listeners(); - that.tick_format = that.generate_tick_formatter(); - that.set_scales_range(); - that.append_axis(); - }); + + await scale_promise; + + this.create_listeners(); + this.create_axis(); + this.set_tick_values(); + this.tick_format = this.generate_tick_formatter(); + this.set_scales_range(); + this.append_axis(); } create_listeners() { @@ -63,28 +65,48 @@ class ColorBar extends Axis { this.listenTo(this.parent, 'margin_updated', this.parent_margin_updated); this.listenTo(this.model, 'change:visible', this.update_visibility); this.listenTo(this.model, 'change:label', this.update_label); - this.model.on_some_change( - ['side', 'orientation'], - this.update_display, - this - ); + this.listenTo(this.model, 'change:side', this.update_display); } - update_display() { + create_axis(): void { this.side = this.model.get('side'); - this.vertical = this.model.get('orientation') === 'vertical'; + this.vertical = ['left', 'right'].includes(this.model.get('side')); if (this.vertical) { this.axis = this.side === 'right' - ? d3.axisRight(this.axis_scale.scale as d3.AxisScale) - : d3.axisLeft(this.axis_scale.scale as d3.AxisScale); + ? d3.axisRight( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ) + : d3.axisLeft( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ); } else { this.axis = this.side === 'top' - ? d3.axisTop(this.axis_scale.scale as d3.AxisScale) - : d3.axisBottom(this.axis_scale.scale as d3.AxisScale); + ? d3.axisTop( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ) + : d3.axisBottom( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ); } + } + + update_display() { this.g_axisline.remove(); + this.create_axis(); this.g_axisline = this.d3el .select('#colorBarG' + this.cid) .append('g') @@ -100,7 +122,7 @@ class ColorBar extends Axis { this.redraw_axisline(); } - set_scale(model) { + set_scale(model: ColorScaleModel) { // Sets the child scale const that = this; if (this.axis_scale) { @@ -153,13 +175,33 @@ class ColorBar extends Axis { if (this.vertical) { this.axis = this.side === 'right' - ? d3.axisRight(this.axis_scale.scale as d3.AxisScale) - : d3.axisLeft(this.axis_scale.scale as d3.AxisScale); + ? d3.axisRight( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ) + : d3.axisLeft( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ); } else { this.axis = this.side === 'top' - ? d3.axisTop(this.axis_scale.scale as d3.AxisScale) - : d3.axisBottom(this.axis_scale.scale as d3.AxisScale); + ? d3.axisTop( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ) + : d3.axisBottom( + this.axis_scale.scale as d3.ScaleLinear< + any, + any + > as d3.AxisScale + ); } this.axis = this.axis.tickFormat(this.tick_format); this.redraw_axisline(); @@ -249,6 +291,28 @@ class ColorBar extends Axis { } get_topg_transform() { + if (this.parent.autoLayout) { + if (this.vertical) { + if (this.side === 'right') { + return ( + 'translate(' + String(this.parent.width + this.autoOffset) + ', 0)' + ); + } + return ( + 'translate(' + String(-this.bar_height - this.autoOffset) + ', 0)' + ); + } else { + if (this.side === 'top') { + return ( + 'translate(0, ' + String(-this.bar_height - this.autoOffset) + ')' + ); + } + return ( + 'translate(0, ' + String(this.parent.height + this.autoOffset) + ')' + ); + } + } + const em = 12; if (this.vertical) { if (this.side === 'right') { @@ -293,6 +357,19 @@ class ColorBar extends Axis { } } + calculateAutoSize() { + const box = this.g_axisline.node().getBoundingClientRect(); + const side = this.model.get('side'); + if (side == 'left' || side == 'right') { + return box.width + this.bar_height; + } + if (side == 'bottom' || side == 'top') { + return box.height + this.bar_height; + } + const axisWidth = this.g_axisline.node().getBoundingClientRect().width; + return this.bar_height + axisWidth; + } + get_label_transform() { if (this.vertical) { return ( @@ -339,14 +416,16 @@ class ColorBar extends Axis { set_scales_range() { //Setting the range of the color scale - this.axis_scale.set_range(); + this.axis_scale.setRange(); this.set_axisline_scale_range(); } get_color_bar_width() { - return this.vertical + const width = this.vertical ? this.height - 2 * this.x_offset : this.width - 2 * this.x_offset; + + return width >= 0 ? width : 0; } update_label() { @@ -393,7 +472,7 @@ class ColorBar extends Axis { .select('#text_elem') .style('text-anchor', this.vertical ? 'middle' : 'end'); } - this.g_axisline.call(this.axis); + this.redraw_axisline(); } redraw_axisline() { @@ -415,7 +494,9 @@ class ColorBar extends Axis { transform = 'translate(0, ' + (this.side === 'top' ? 0 : this.bar_height) + ')'; } - this.g_axisline.attr('transform', transform).call(this.axis); + if (this.g_axisline) { + this.g_axisline.attr('transform', transform).call(this.axis); + } } } diff --git a/js/src/ColorScale.ts b/js/src/ColorScale.ts deleted file mode 100644 index cc41e321b..000000000 --- a/js/src/ColorScale.ts +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-scale")); -import { Scale } from './Scale'; -import { ColorScaleModel } from './ColorScaleModel'; - -export class ColorScale extends Scale { - render() { - this.create_d3_scale(); - this.update_extrapolation(); - if (this.model.domain.length > 0) { - this.scale.domain(this.model.domain); - } - this.offset = 0; - this.create_event_listeners(); - this.set_range(); - } - - create_d3_scale() { - this.scale = d3.scaleLinear() as d3.ScaleLinear; - } - - create_event_listeners() { - super.create_event_listeners(); - this.listenTo(this.model, 'colors_changed', this.set_range); - this.model.on( - 'change:extrapolation', - function () { - this.update_extrapolation(); - this.trigger('color_scale_range_changed'); - }, - this - ); - } - - update_extrapolation() { - this.scale.clamp(this.model.get('extrapolation') === 'constant'); - } - - set_range() { - this.scale.range(this.model.color_range); - this.trigger('color_scale_range_changed'); - } - - scale: d3.ScaleLinear | d3.ScaleTime; - // Overriding super class - model: ColorScaleModel; -} - -export function isColorScale(scale: Scale): scale is ColorScale { - return scale.model.type === 'color_linear'; -} diff --git a/js/src/ColorScaleModel.ts b/js/src/ColorScaleModel.ts deleted file mode 100644 index ba8e9e67c..000000000 --- a/js/src/ColorScaleModel.ts +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as _ from 'underscore'; -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-array"), require("d3-scale")); -import { LinearScaleModel } from './LinearScaleModel'; -import * as colorutils from './ColorUtils'; - -export class ColorScaleModel extends LinearScaleModel { - defaults() { - return { - ...LinearScaleModel.prototype.defaults(), - _model_name: 'ColorScaleModel', - _view_name: 'ColorScale', - mid: null, - scheme: 'RdYlGn', - extrapolation: 'constant', - colors: null, - }; - } - - set_init_state() { - this.type = 'color_linear'; - this.color_range = []; - this.mid = null; - } - - set_listeners() { - super.set_listeners(); - this.on_some_change(['colors', 'scheme'], this.colors_changed, this); - this.on('change:mid', this.update_domain, this); - this.colors_changed(); - } - - update_domain() { - // Compute domain min and max - const that = this; - const min = !this.min_from_data - ? this.min - : d3.min( - _.map(this.domains, (d: any[]) => { - return d.length > 0 ? d[0] : that.global_max; - }) - ); - const max = !this.max_from_data - ? this.max - : d3.max( - _.map(this.domains, (d: any[]) => { - return d.length > 0 ? d[d.length - 1] : that.global_min; - }) - ); - const prev_mid = this.mid; - this.mid = this.get('mid'); - - // If the min/mid/max has changed, or the number of colors has changed, - // update the domain - const prev_domain = this.domain; - const prev_length = prev_domain.length; - const n_colors = this.color_range.length; - - if ( - min != prev_domain[0] || - max != prev_domain[prev_length - 1] || - n_colors != prev_length || - this.mid != prev_mid - ) { - this.domain = this.create_domain(min, this.mid, max, n_colors); - this.trigger('domain_changed', this.domain); - } - } - - create_domain(min, mid, max, n_colors) { - // Domain ranges from min to max, with the same number of - // elements as the color range - const scale = d3.scaleLinear(); - - if (mid === undefined || mid === null) { - scale.domain([0, n_colors - 1]).range([min, max]); - } else { - const mid_index = (n_colors - 1) / 2; - scale.domain([0, mid_index, n_colors - 1]).range([min, mid, max]); - } - - const domain = []; - for (let i = 0; i < n_colors; i++) { - const j = this.reverse ? n_colors - 1 - i : i; - domain.push(this.toDomainType(scale(j))); - } - return domain; - } - - colors_changed() { - const colors = this.get('colors'); - this.color_range = - colors.length > 0 - ? colors - : colorutils.get_linear_scale_range(this.get('scheme')); - // If the number of colors has changed, the domain must be updated - this.update_domain(); - // Update the range of the views. For a color scale the range doesn't depend - // on the view, so ideally we could get rid of this - this.trigger('colors_changed'); - } - - protected toDomainType(value: number): any { - return value; - } - - color_range: number[]; - mid: number; - reverse: boolean; -} diff --git a/js/src/DateColorScale.ts b/js/src/DateColorScale.ts deleted file mode 100644 index b4f2c9c9d..000000000 --- a/js/src/DateColorScale.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-scale")); -import { ColorScale } from './ColorScale'; -import { Scale } from './Scale'; - -export class DateColorScale extends ColorScale { - create_d3_scale() { - this.scale = d3.scaleUtc(); - } - - scale: d3.ScaleTime; -} - -export function isDateColorScale(scale: Scale): scale is DateColorScale { - return scale.model.type === 'date_color_linear'; -} diff --git a/js/src/DateColorScaleModel.ts b/js/src/DateColorScaleModel.ts deleted file mode 100644 index 6d886b9a4..000000000 --- a/js/src/DateColorScaleModel.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ColorScaleModel } from './ColorScaleModel'; -import { getDate } from './utils'; - -export class DateColorScaleModel extends ColorScaleModel { - defaults() { - return { - ...ColorScaleModel.prototype.defaults(), - _model_name: 'DateColorScaleModel', - _view_name: 'DateColorScale', - min: null, - max: null, - mid: null, - }; - } - - set_init_state() { - this.type = 'date_color_linear'; - this.color_range = []; - this.mid = null; - this.global_min = new Date().setTime(0); - this.global_max = new Date(); - } - - min_max_changed() { - this.min = getDate(this.get('min')); - this.max = getDate(this.get('max')); - this.min_from_data = this.min === null; - this.max_from_data = this.max === null; - this.update_domain(); - } - - protected toDomainType(value: number): Date { - return new Date(value); - } -} diff --git a/js/src/DateScale.ts b/js/src/DateScale.ts deleted file mode 100644 index 420cbb499..000000000 --- a/js/src/DateScale.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-scale")); -import { LinearScale } from './LinearScale'; -import { Scale } from './Scale'; - -export class DateScale extends LinearScale { - render() { - this.scale = d3.scaleUtc(); - if (this.model.domain.length > 0) { - this.scale.domain(this.model.domain); - } - this.offset = 0; - this.create_event_listeners(); - } - - scale: d3.ScaleTime; -} - -export function isDateScale(scale: Scale): scale is DateScale { - return scale.model.type === 'date'; -} diff --git a/js/src/DateScaleModel.ts b/js/src/DateScaleModel.ts deleted file mode 100644 index f25dbbff4..000000000 --- a/js/src/DateScaleModel.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as _ from 'underscore'; - -import { LinearScaleModel } from './LinearScaleModel'; -import { getDate } from './utils'; - -export class DateScaleModel extends LinearScaleModel { - defaults() { - return { - ...LinearScaleModel.prototype.defaults(), - _model_name: 'DateScaleModel', - _view_name: 'DateScale', - min: null, - max: null, - }; - } - - typedRange(values) { - const ar: any = new Float64Array(values.map(Number)); - ar.type = 'date'; - return ar; - } - - set_init_state() { - this.type = 'date'; - this.global_min = new Date().setTime(0); - this.global_max = new Date(); - } - - min_max_changed() { - this.min = getDate(this.get('min')); - this.max = getDate(this.get('max')); - this.min_from_data = this.min === null; - this.max_from_data = this.max === null; - this.update_domain(); - } -} diff --git a/js/src/FastIntervalSelector.ts b/js/src/FastIntervalSelector.ts index 66f3173e0..66c105197 100644 --- a/js/src/FastIntervalSelector.ts +++ b/js/src/FastIntervalSelector.ts @@ -15,6 +15,7 @@ import * as _ from 'underscore'; import * as d3 from 'd3'; +import { LinearScale, OrdinalScale } from 'bqscales'; // var d3 =Object.assign({}, require("d3-selection"), require("d3-selection-multi")); import { BaseXSelector } from './Selector'; import * as sel_utils from './selector_utils'; @@ -29,11 +30,6 @@ export class FastIntervalSelector extends BaseXSelector { this.dirty = false; this.size = this.model.get('size'); - this.width = - this.parent.width - this.parent.margin.left - this.parent.margin.right; - this.height = - this.parent.height - this.parent.margin.top - this.parent.margin.bottom; - const that = this; const scale_creation_promise = this.create_scales(); Promise.all([this.mark_views_promise, scale_creation_promise]).then(() => { @@ -117,8 +113,8 @@ export class FastIntervalSelector extends BaseXSelector { //update the interval location and size this.rect.attr('x', start); this.rect.attr('width', interval_size); - const pixel_extent = [start, start + interval_size]; - this.set_selected('selected', this.scale.invert_range(pixel_extent)); + const pixel_extent: [number, number] = [start, start + interval_size]; + this.set_selected('selected', this.scale.invertRange(pixel_extent)); this.update_mark_selected(pixel_extent, undefined); this.touch(); this.dirty = false; @@ -227,4 +223,5 @@ export class FastIntervalSelector extends BaseXSelector { size: number; background: d3.Selection; rect: d3.Selection; + scale: LinearScale | OrdinalScale; } diff --git a/js/src/Figure.ts b/js/src/Figure.ts index be0c10206..ff80ea0e3 100644 --- a/js/src/Figure.ts +++ b/js/src/Figure.ts @@ -13,35 +13,45 @@ * limitations under the License. */ -import * as widgets from '@jupyter-widgets/base'; -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-selection"), require("d3-selection-multi")); import * as _ from 'underscore'; +// var d3 =Object.assign({}, require("d3-selection"), require("d3-selection-multi")); +import * as d3 from 'd3'; +import { + uuid, + Dict, + WidgetModel, + WidgetView, + DOMWidgetView, + ViewList, +} from '@jupyter-widgets/base'; +import * as kiwi from 'kiwi.js'; +import { Scale, ScaleModel } from 'bqscales'; + import * as popperreference from './PopperReference'; import popper from 'popper.js'; -import * as THREE from 'three'; -import { Dict, WidgetModel, WidgetView } from '@jupyter-widgets/base'; -import { applyAttrs, applyStyles } from './utils'; -import { Scale } from './Scale'; -import { ScaleModel } from './ScaleModel'; +import { applyAttrs, applyStyles, getEffectiveBackgroundColor } from './utils'; import { AxisModel } from './AxisModel'; import { Mark } from './Mark'; import { MarkModel } from './MarkModel'; import { Interaction } from './Interaction'; - -THREE.ShaderChunk['scales'] = - require('raw-loader!../shaders/scales.glsl').default; +import { FigureModel } from './FigureModel'; +import { Axis } from './Axis'; interface IFigureSize { width: number; height: number; + x: number; + y: number; } -export class Figure extends widgets.DOMWidgetView { +export class Figure extends DOMWidgetView { initialize() { this.debouncedRelayout = _.debounce(() => { this.relayout(); }, 300); + this.debouncedUpdateDecorators = _.debounce(() => { + this.updateDecorators(); + }, 100); // Internet Explorer does not support classList for svg elements this.el.classList.add('bqplot'); this.el.classList.add('figure'); @@ -65,31 +75,177 @@ export class Figure extends widgets.DOMWidgetView { this.el.appendChild(svg_background); this.el.appendChild(svg); - // For testing we need to know when the mark_views is created, the tests - // can wait for this promise. - this._initial_marks_created = new Promise((resolve) => { - this._initial_marks_created_resolve = resolve; - }); + this.intersectObserver = new IntersectionObserver( + (entries: IntersectionObserverEntry[]) => { + if (entries[entries.length - 1].isIntersecting) { + this.visible = true; + this.debouncedRelayout(); + } else if (entries[entries.length - 1].rootBounds != null) { + /* When 'rootBounds' is null, 'isIntersecting' is 'false', but the plot is visible, so only change 'visible' + * if rootBonds is set. I can't find any info on this behaviour. */ + this.visible = false; + } + }, + { threshold: 0 } + ); + this.intersectObserver.observe(this.el); + + this.resizeObserver = new ResizeObserver( + (entries: ResizeObserverEntry[]) => { + this.debouncedRelayout(); + } + ); + + this.resizeObserver.observe(this.el); super.initialize.apply(this, arguments); } protected getFigureSize(): IFigureSize { - const figureSize: IFigureSize = this.el.getBoundingClientRect(); - const clientRectRatio = figureSize.width / figureSize.height; - - const minRatio: number = this.model.get('min_aspect_ratio'); - const maxRatio: number = this.model.get('max_aspect_ratio'); - - if (clientRectRatio < minRatio) { - // Too much vertical space: Keep horizontal space but compute height from min aspect ratio - figureSize.height = figureSize.width / minRatio; - } else if (clientRectRatio > maxRatio) { - // Too much horizontal space: Keep vertical space but compute width from max aspect ratio - figureSize.width = figureSize.height * maxRatio; + const domSize: IFigureSize = this.el.getBoundingClientRect(); + + if (!this.autoLayout) { + const clientRectRatio = domSize.width / domSize.height; + + const minRatio: number = this.model.get('min_aspect_ratio'); + const maxRatio: number = this.model.get('max_aspect_ratio'); + + if (clientRectRatio < minRatio) { + // Too much vertical space: Keep horizontal space but compute height from min aspect ratio + domSize.height = domSize.width / minRatio; + } else if (clientRectRatio > maxRatio) { + // Too much horizontal space: Keep vertical space but compute width from max aspect ratio + domSize.width = domSize.height * maxRatio; + } + + return domSize; } - return figureSize; + let solver = new kiwi.Solver(); + var width = new kiwi.Variable(); + var height = new kiwi.Variable(); + + // calculate padding by summing up all auto sizes + fig_margins + var padding = { top: 0, bottom: 0, left: 0, right: 0 }; + const fig_margin = this.model.get('fig_margin'); + ['top', 'bottom', 'left', 'right'].forEach((side) => { + padding[side] = this.decorators[side].reduce((total, decorator) => { + decorator.setAutoOffset(total); + return total + decorator.calculateAutoSize(); + }, 0); + padding[side] += fig_margin[side]; + }); + + solver.addEditVariable(width, kiwi.Strength.strong); + solver.addEditVariable(height, kiwi.Strength.strong); + solver.suggestValue(width, domSize.width); + solver.suggestValue(height, domSize.height); + + /* + We want the figure size to always be inside the dom element: + width + padding.left + padding.right <= domSize.width + width + padding.left + padding.right - domSize.width < 0 + If we don't add these constraints, the width and height might actually grow + */ + solver.addConstraint( + new kiwi.Constraint( + new kiwi.Expression(width, padding.left, padding.right, -domSize.width), + kiwi.Operator.Le + ) + ); + // and similarly for the height + solver.addConstraint( + new kiwi.Constraint( + new kiwi.Expression( + height, + padding.top, + padding.bottom, + -domSize.height + ), + kiwi.Operator.Le + ) + ); + + /* + The y coordinate is the top padding plus half of the leftover space, such that we distribute the + leftover space equally above and below: + y = padding.top + (leftover_vertical)/2 + y = padding.top + (domSize.height - height - padding.bottom - padding.top)/2 + y - padding.top - domSize.height/2 + height/2 + padding.bottom/2 + padding.top/2 = 0 + y - padding.top/2 - domSize.height/2 + height/2 + padding.bottom/2 = 0 + */ + var x = new kiwi.Variable(); + var y = new kiwi.Variable(); + solver.addConstraint( + new kiwi.Constraint( + new kiwi.Expression( + y, + -padding.top / 2, + -domSize.height / 2, + [0.5, height], + padding.bottom / 2 + ), + kiwi.Operator.Le + ) + ); + // and analogous for x + solver.addConstraint( + new kiwi.Constraint( + new kiwi.Expression( + x, + -padding.left / 2, + -domSize.width / 2, + [0.5, width], + padding.right / 2 + ), + kiwi.Operator.Le + ) + ); + + /* + Definition of aspect ratio: aspect_ratio == width/height + min_aspect_ratio leads to the constrain: + width/height >= min_aspect_ratio + width >= min_aspect_ratio*height + width - min_aspect_ratio*height >= 0 + -width + min_aspect_ratio*height <= 0 + max_aspect_ratio leads to the constrain: + width/height <= max_aspect_ratio + width <= max_aspect_ratio*height + width - max_aspect_ratio*height <= 0 + -width + max_aspect_ratio*height >= 0 + Useful resources + https://github.com/IjzerenHein/kiwi.js/blob/master/docs/Kiwi.md + https://github.com/IjzerenHein/kiwi.js/blob/master/docs/Kiwi.md#module_kiwi..Expression + */ + solver.addConstraint( + new kiwi.Constraint( + new kiwi.Expression( + [-1, width], + [this.model.get('min_aspect_ratio'), height] + ), + kiwi.Operator.Le + ) + ); + solver.addConstraint( + new kiwi.Constraint( + new kiwi.Expression( + [-1, width], + [this.model.get('max_aspect_ratio'), height] + ), + kiwi.Operator.Ge + ) + ); + + // Solve the constraints + solver.updateVariables(); + + return { + width: width.value(), + height: height.value(), + x: x.value(), + y: y.value(), + }; } render() { @@ -101,11 +257,7 @@ export class Figure extends widgets.DOMWidgetView { } protected async renderImpl() { - const figureSize = this.getFigureSize(); - this.width = figureSize.width; - this.height = figureSize.height; - - this.id = widgets.uuid(); + this.id = uuid(); // Dictionary which contains the mapping for each of the marks id // to it's padding. Dictionary is required to not recompute @@ -122,32 +274,14 @@ export class Figure extends widgets.DOMWidgetView { this.figure_padding_x = this.model.get('padding_x'); this.figure_padding_y = this.model.get('padding_y'); this.clip_id = 'clip_path_' + this.id; - this.margin = this.model.get('fig_margin'); - this.update_plotarea_dimensions(); - // we hide it when the plot area is too small - if (this.plotarea_width < 1 || this.plotarea_height < 1) { - this.el.style.visibility = 'hidden'; - } else { - this.el.style.visibility = ''; - } // this.fig is the top element to be impacted by a rescaling / change of margins + this.fig = this.svg.append('g'); + this.fig_background = this.svg_background.append('g'); - this.fig = this.svg - .append('g') - .attr( - 'transform', - 'translate(' + this.margin.left + ',' + this.margin.top + ')' - ); - this.fig_background = this.svg_background - .append('g') - .attr( - 'transform', - 'translate(' + this.margin.left + ',' + this.margin.top + ')' - ); this.tooltip_div = d3 .select(document.createElement('div')) - .attr('class', 'tooltip_div'); + .attr('class', 'bqplot_tooltip_div'); this.popper_reference = new popperreference.PositionReference({ x: 0, y: 0, @@ -163,8 +297,6 @@ export class Figure extends widgets.DOMWidgetView { .attr('class', 'plotarea_background') .attr('x', 0) .attr('y', 0) - .attr('width', this.plotarea_width) - .attr('height', this.plotarea_height) .style('pointer-events', 'inherit'); applyStyles(this.bg, this.model.get('background_style')); @@ -173,50 +305,51 @@ export class Figure extends widgets.DOMWidgetView { .attr('class', 'plotarea_events') .attr('x', 0) .attr('y', 0) - .attr('width', this.plotarea_width) - .attr('height', this.plotarea_height) .style('pointer-events', 'inherit'); this.bg_events.on('click', () => { this.trigger('bg_clicked'); }); this.fig_axes = this.fig_background.append('g'); + const fig_axes_node = this.fig_axes.node(); + fig_axes_node.style.display = 'none'; + this.fig_marks = this.fig.append('g'); this.interaction = this.fig.append('g'); /* - * The following was the structure of the DOM element constructed - * -
- - - - - - - -
- - To allow the main/interaction layer on top, and also allowing us to draw - on top of the canvas (e.g. selectors), we create a new DOM structure. - When creating a screenshot/image, we collapse all this into one svg. - -
- - - - - - - - - - - - - -
- */ + * The following was the structure of the DOM element constructed + * +
+ + + + + + + +
+ + To allow the main/interaction layer on top, and also allowing us to draw + on top of the canvas (e.g. selectors), we create a new DOM structure. + When creating a screenshot/image, we collapse all this into one svg. + +
+ + + + + + + + + + + + + +
+ */ this.clip_path = this.svg .append('svg:defs') @@ -224,54 +357,123 @@ export class Figure extends widgets.DOMWidgetView { .attr('id', this.clip_id) .append('rect') .attr('x', 0) - .attr('y', 0) - .attr('width', this.plotarea_width) - .attr('height', this.plotarea_height); - - this.title = this.fig - .append('text') - .attr('class', 'mainheading') - .attr('x', 0.5 * this.plotarea_width) - .attr('y', -(this.margin.top / 2.0)) - .attr('dy', '1em'); + .attr('y', 0); + + this.title = this.fig.append('text').attr('class', 'mainheading'); + applyStyles(this.title, this.model.get('title_style')); this.title.text(this.model.get('title')); - // TODO: remove the save png event mechanism. - this.model.on('save_png', this.save_png, this); - this.model.on('save_svg', this.save_svg, this); + await this.create_figure_scales(); - const figure_scale_promise = this.create_figure_scales(); + this.axis_views = new ViewList(this.add_axis, this.remove_axis, this); + await this.axis_views.update(this.model.get('axes')); - await figure_scale_promise; + // Update decorators before computing the figure size + await this.updateDecorators(true); - this.mark_views = new widgets.ViewList( - this.add_mark, - this.remove_mark, - this - ); + // Create WebGL context for marks + this.webGLCanvas = document.createElement('canvas'); + this.el.insertBefore(this.webGLCanvas, this.svg.node()); - const mark_views_updated = this.mark_views - .update(this.model.get('marks')) - .then((views) => { - this.replace_dummy_nodes(views); - this.update_marks(views); - this.update_legend(); - // Update Interaction layer - // This has to be done after the marks are created - this.set_interaction(this.model.get('interaction')); - this._initial_marks_created_resolve(); - this.update_gl(); + // Compute figure size + const figureSize = this.getFigureSize(); + + this.width = figureSize.width; + this.height = figureSize.height; + this.offsetX = figureSize.x; + this.offsetY = figureSize.y; + + // We hide it when the plot area is too small + if (this.plotareaWidth < 1 || this.plotareaHeight < 1) { + this.el.style.visibility = 'hidden'; + } else { + this.el.style.visibility = ''; + } + + if (this.scale_x !== undefined && this.scale_x !== null) { + this.scale_x.setRange([0, this.plotareaWidth]); + } + + if (this.scale_y !== undefined && this.scale_y !== null) { + this.scale_y.setRange([this.plotareaHeight, 0]); + } + + this.bg + .attr('width', this.plotareaWidth) + .attr('height', this.plotareaHeight); + this.bg_events + .attr('width', this.plotareaWidth) + .attr('height', this.plotareaHeight); + this.clip_path + .attr('width', this.plotareaWidth) + .attr('height', this.plotareaHeight); + + // transform figure + if (this.autoLayout) { + this.fig.attr('transform', `translate(${figureSize.x}, ${figureSize.y})`); + this.fig_background.attr( + 'transform', + `translate(${figureSize.x}, ${figureSize.y})` + ); + + this.webGLCanvas.style.left = `${figureSize.x}px`; + this.webGLCanvas.style.top = `${figureSize.y}px`; + + applyAttrs(this.title, { + x: 0.5 * this.width, + y: 0, + dy: '0em', }); + } else { + this.fig.attr( + 'transform', + `translate(${this.margin.left}, ${this.margin.top})` + ); + this.fig_background.attr( + 'transform', + `translate(${this.margin.left}, ${this.margin.top})` + ); - this.axis_views = new widgets.ViewList(this.add_axis, null, this); - const axis_views_updated = this.axis_views.update(this.model.get('axes')); + this.webGLCanvas.style.left = `${this.margin.left}px`; + this.webGLCanvas.style.top = `${this.margin.top}px`; + + applyAttrs(this.title, { + x: 0.5 * this.plotareaWidth, + y: -this.margin.top / 2.0, + dy: '1em', + }); + } + + // TODO: remove the save png event mechanism. + this.model.on('save_png', this.save_png, this); + this.model.on('save_svg', this.save_svg, this); + this.model.on('upload_png', this.upload_png, this); + this.model.on('upload_svg', this.upload_svg, this); + + this.webGLCanvas.width = this.plotareaWidth; + this.webGLCanvas.height = this.plotareaHeight; + + this.mark_views = new ViewList(this.add_mark, this.remove_mark, this); + + await this.mark_views.update(this.model.get('marks')).then((views) => { + this.replace_dummy_nodes(views); + this.update_marks(views); + this.update_legend(); + // Update Interaction layer + // This has to be done after the marks are created + this.set_interaction(this.model.get('interaction')); + }); + fig_axes_node.style.display = ''; // TODO: move to the model this.model.on_some_change( ['fig_margin', 'min_aspect_ratio', 'max_aspect_ratio'], - this.debouncedRelayout, + () => { + this.should_relayout = true; + this.debouncedRelayout(); + }, this ); this.model.on_some_change( @@ -287,6 +489,7 @@ export class Figure extends widgets.DOMWidgetView { 'change:axes', (model, value, options) => { this.axis_views.update(value); + this.trigger('margin_updated'); }, this ); @@ -297,7 +500,6 @@ export class Figure extends widgets.DOMWidgetView { this.replace_dummy_nodes(views); this.update_marks(views); this.update_legend(); - this.update_gl(); }); }, this @@ -320,36 +522,37 @@ export class Figure extends widgets.DOMWidgetView { document.body.appendChild(this.tooltip_div.node()); this.create_listeners(); - // In the classic notebook, we should relayout the figure on - // resize of the main window. - window.addEventListener('resize', this.debouncedRelayout); - this.once('remove', () => { - window.removeEventListener('resize', this.debouncedRelayout); + this.toolbar_div = this.create_toolbar(); + if (this.model.get('display_toolbar')) { + this.toolbar_div.node().style.display = 'unset'; + if (this.autoLayout) { + this.toolbar_div.node().style.top = `${this.offsetY / 2.0}px`; + this.toolbar_div.node().style.right = `${this.offsetX}px`; + } + } + + this.model.on('change:display_toolbar', (_, display_toolbar) => { + const toolbar = this.toolbar_div.node(); + if (display_toolbar) { + toolbar.style.display = 'unset'; + } else { + toolbar.style.display = 'none'; + } }); - return Promise.all([mark_views_updated, axis_views_updated]); + this.rendered = true; } - createWebGLRenderer() { - // a shared webgl context for all marks - if (!this.renderer) { - this.renderer = new THREE.WebGLRenderer({ - antialias: true, - alpha: true, - premultipliedAlpha: true, - }); + set needsWebGLContext(value: boolean) { + this._needsWebGLContext = value; - this.renderer.setSize(100, 100); - this.renderer.setClearAlpha(0); - this.renderer.setPixelRatio( - this.model.get('pixel_ratio') || window.devicePixelRatio - ); + if (this._needsWebGLContext) { + this.webGLContext = this.webGLCanvas.getContext('webgl'); } + } - if (this.renderer && !this.el.contains(this.renderer.domElement)) { - this.el.insertBefore(this.renderer.domElement, this.el.childNodes[1]); - } - this.layout_webgl_canvas(); + get needsWebGLContext(): boolean { + return this._needsWebGLContext; } replace_dummy_nodes(views: Mark[]) { @@ -378,14 +581,6 @@ export class Figure extends widgets.DOMWidgetView { this.listenTo(this.model, 'change:layout', this.change_layout); this.listenTo(this.model, 'change:legend_style', this.legend_style_updated); this.listenTo(this.model, 'change:legend_text', this.legend_text_updated); - this.listenTo(this.model, 'change:pixel_ratio', () => { - if (this.renderer) { - this.renderer.setPixelRatio( - this.model.get('pixel_ratio') || window.devicePixelRatio - ); - this.update_gl(); - } - }); this.listenTo(this.model, 'change:theme', this.change_theme); } @@ -414,39 +609,36 @@ export class Figure extends widgets.DOMWidgetView { ); } - create_figure_scales() { + async create_figure_scales() { // Creates the absolute scales for the figure: default domain is [0,1], range is [0,width] and [0,height]. // See the scale_x and scale_y attributes of the python Figure - const that = this; - const x_scale_promise = this.create_child_view( - this.model.get('scale_x') - ).then((view) => { - that.scale_x = view as WidgetView as Scale; + await this.create_child_view(this.model.get('scale_x')).then((view) => { + this.scale_x = view as WidgetView as Scale; ( - that.scale_x.scale as + this.scale_x.scale as | d3.ScaleLinear | d3.ScaleTime | d3.ScaleLogarithmic ).clamp(true); - that.scale_x.set_range([0, that.plotarea_width]); + this.scale_x.setRange([0, this.plotareaWidth]); }); - const y_scale_promise = this.create_child_view( - this.model.get('scale_y') - ).then((view) => { - that.scale_y = view as WidgetView as Scale; + await this.create_child_view(this.model.get('scale_y')).then((view) => { + this.scale_y = view as WidgetView as Scale; ( - that.scale_y.scale as + this.scale_y.scale as | d3.ScaleLinear | d3.ScaleTime | d3.ScaleLogarithmic ).clamp(true); - that.scale_y.set_range([that.plotarea_height, 0]); + this.scale_y.setRange([this.plotareaHeight, 0]); }); - return Promise.all([x_scale_promise, y_scale_promise]); } - padded_range(direction: 'x' | 'y', scale_model: ScaleModel) { + padded_range( + direction: 'x' | 'y', + scale_model: ScaleModel + ): [number, number] { // Functions to be called by mark which respects padding. // Typically all marks do this. Axis do not do this. // Also, if a mark does not set the domain, it can potentially call @@ -461,59 +653,49 @@ export class Figure extends widgets.DOMWidgetView { this.xPaddingArr[scale_id] !== undefined ? this.xPaddingArr[scale_id] : 0; - const fig_padding = this.plotarea_width * this.figure_padding_x; + const fig_padding = this.plotareaWidth * this.figure_padding_x; return [ fig_padding + scale_padding, - this.plotarea_width - fig_padding - scale_padding, + this.plotareaWidth - fig_padding - scale_padding, ]; } else if (direction === 'y') { const scale_padding = this.yPaddingArr[scale_id] !== undefined ? this.yPaddingArr[scale_id] : 0; - const fig_padding = this.plotarea_height * this.figure_padding_y; + const fig_padding = this.plotareaHeight * this.figure_padding_y; return [ - this.plotarea_height - scale_padding - fig_padding, + this.plotareaHeight - scale_padding - fig_padding, scale_padding + fig_padding, ]; } } - range(direction: 'x' | 'y') { + range(direction: 'x' | 'y'): [number, number] { if (direction === 'x') { - return [0, this.plotarea_width]; + return [0, this.plotareaWidth]; } else if (direction === 'y') { - return [this.plotarea_height, 0]; - } - } - - get_mark_plotarea_height(scaleModel: ScaleModel) { - if (!scaleModel.get('allow_padding')) { - return this.plotarea_height; + return [this.plotareaHeight, 0]; } - const scale_id = scaleModel.model_id; - const scale_padding = - this.yPaddingArr[scale_id] !== undefined ? this.yPaddingArr[scale_id] : 0; - return ( - this.plotarea_height * (1 - this.figure_padding_y) - - scale_padding - - scale_padding - ); } - get_mark_plotarea_width(scaleModel: ScaleModel) { - if (!scaleModel.get('allow_padding')) { - return this.plotarea_width; + async updateDecorators(print = false) { + if (this.autoLayout) { + const axisViews = await Promise.all(this.axis_views.views); + ['top', 'bottom', 'left', 'right'].forEach((side) => { + this.decorators[side] = []; + }); + axisViews.forEach((view) => { + this.decorators[((view)).model.get('side')].push(view); + }); + // for the title we use a proxy with the same interface + this.decorators.top.push({ + calculateAutoSize: () => + this.title ? this.title.node().getBBox().height : 0, + setAutoOffset: (padding) => this.title.attr('y', padding), + }); + this.debouncedRelayout(); } - - const scale_id = scaleModel.model_id; - const scale_padding = - this.xPaddingArr[scale_id] !== undefined ? this.xPaddingArr[scale_id] : 0; - return ( - this.plotarea_width * (1 - this.figure_padding_x) - - scale_padding - - scale_padding - ); } async add_axis(model: AxisModel) { @@ -525,9 +707,31 @@ export class Figure extends widgets.DOMWidgetView { view.trigger('displayed'); }); + // the offset can cause the decorator to not be part of the auto layout + view.listenTo( + model, + 'change:orientation change:side change:offset change:label_offset', + () => this.debouncedUpdateDecorators() + ); + view.listenTo(model, 'change:label change:tick_rotate', () => { + this.debouncedRelayout(); + }); + this.debouncedUpdateDecorators(); + return view; } + remove_axis(view) { + if (this.el.parentNode) { + // if the view is removed, we have a size of 0x0, and don't want to trigger + // a relayout + this.debouncedUpdateDecorators(); + } + if (view.el.parentNode && view.el.parentNode === this.fig_axes.node()) { + this.fig_axes.node().removeChild(view.el); + } + } + remove_from_padding_dict(dict, mark_view: Mark, scale_model: ScaleModel) { if (scale_model === undefined || scale_model === null) { return; @@ -563,7 +767,7 @@ export class Figure extends widgets.DOMWidgetView { prev_scale_models[model.get_key_for_orientation('vertical')] ); - const scale_models = model.get('scales'); + const scale_models = model.getScales(); this.update_padding_dict( this.x_pad_dict, view, @@ -582,7 +786,7 @@ export class Figure extends widgets.DOMWidgetView { mark_padding_updated(view: Mark) { const model = view.model; - const scale_models = model.get('scales'); + const scale_models = model.getScales(); this.update_padding_dict( this.x_pad_dict, @@ -612,7 +816,7 @@ export class Figure extends widgets.DOMWidgetView { model.off('scales_updated', null, this); model.off('mark_padding_updated', null, this); - const scale_models = model.get('scales'); + const scale_models = model.getScales(); this.remove_from_padding_dict( this.x_pad_dict, view, @@ -658,9 +862,9 @@ export class Figure extends widgets.DOMWidgetView { ); let child_x_scale = - view.model.get('scales')[view.model.get_key_for_dimension('x')]; + view.model.getScales()[view.model.get_key_for_dimension('x')]; let child_y_scale = - view.model.get('scales')[view.model.get_key_for_dimension('y')]; + view.model.getScales()[view.model.get_key_for_dimension('y')]; if (child_x_scale === undefined) { child_x_scale = this.scale_x.model; } @@ -680,10 +884,6 @@ export class Figure extends widgets.DOMWidgetView { view.yPadding ); - // If the mark needs a WebGL renderer, we create it - if (view['render_gl']) { - this.createWebGLRenderer(); - } // If the marks list changes before replace_dummy_nodes is called, we are not DOM // attached, and view.remove() in Figure.remove_mark will not remove this view from the DOM // but a later call to Figure.replace_dummy_nodes will attach it to the DOM again, leading @@ -725,105 +925,111 @@ export class Figure extends widgets.DOMWidgetView { this.trigger('margin_updated'); } - update_plotarea_dimensions() { - this.plotarea_width = this.width - this.margin.left - this.margin.right; - this.plotarea_height = this.height - this.margin.top - this.margin.bottom; + relayout() { + if (this.rendered && !this.relayoutRequested) { + this.relayoutRequested = true; // avoid scheduling a relayout twice + requestAnimationFrame(this.relayoutImpl.bind(this)); + } } - processPhosphorMessage(msg) { - super.processPhosphorMessage.apply(this, arguments); - - switch (msg.type) { - case 'resize': - case 'after-show': - case 'after-attach': - if (this.pWidget.isVisible) { - const figureSize = this.getFigureSize(); - if ( - this.width !== figureSize.width || - this.height !== figureSize.height - ) { - this.debouncedRelayout(); - } - } - break; + relayoutImpl() { + this.relayoutRequested = false; // reset relayout request + const figureSize = this.getFigureSize(); + + if ( + (this.width == figureSize.width && + this.height == figureSize.height && + !this.should_relayout) || + !this.visible + ) { + // Bypass relayout + return; } - } + this.should_relayout = false; - relayout() { - const relayoutImpl = () => { - this.relayoutRequested = false; // reset relayout request - const figureSize = this.getFigureSize(); - this.width = figureSize.width; - this.height = figureSize.height; - // update ranges - this.margin = this.model.get('fig_margin'); - this.update_plotarea_dimensions(); - // we hide it when the plot area is too small - if (this.plotarea_width < 1 || this.plotarea_width < 1) { - this.el.style.visibility = 'hidden'; - return; // no need to continue setting properties, which can only produce errors in the js console - } else { - this.el.style.visibility = ''; - } + this.width = figureSize.width; + this.height = figureSize.height; + this.offsetX = figureSize.x; + this.offsetY = figureSize.y; - if (this.scale_x !== undefined && this.scale_x !== null) { - this.scale_x.set_range([0, this.plotarea_width]); - } + // we hide it when the plot area is too small + if (this.plotareaWidth < 1 || this.plotareaHeight < 1) { + this.el.style.visibility = 'hidden'; + return; // no need to continue setting properties, which can only produce errors in the js console + } else { + this.el.style.visibility = ''; + } - if (this.scale_y !== undefined && this.scale_y !== null) { - this.scale_y.set_range([this.plotarea_height, 0]); - } + if (this.scale_x !== undefined && this.scale_x !== null) { + this.scale_x.setRange([0, this.plotareaWidth]); + } + + if (this.scale_y !== undefined && this.scale_y !== null) { + this.scale_y.setRange([this.plotareaHeight, 0]); + } - // transform figure + // transform figure + if (this.autoLayout) { + this.fig.attr('transform', `translate(${figureSize.x}, ${figureSize.y})`); + this.fig_background.attr( + 'transform', + `translate(${figureSize.x}, ${figureSize.y})` + ); + + this.webGLCanvas.style.left = `${figureSize.x}px`; + this.webGLCanvas.style.top = `${figureSize.y}px`; + + applyAttrs(this.title, { + x: 0.5 * this.width, + y: 0, + dy: '0em', + }); + + this.toolbar_div.node().style.top = `${this.offsetY / 2.0}px`; + this.toolbar_div.node().style.right = `${this.offsetX}px`; + } else { this.fig.attr( 'transform', - 'translate(' + this.margin.left + ',' + this.margin.top + ')' + `translate(${this.margin.left}, ${this.margin.top})` ); this.fig_background.attr( 'transform', - 'translate(' + this.margin.left + ',' + this.margin.top + ')' + `translate(${this.margin.left}, ${this.margin.top})` ); + + this.webGLCanvas.style.left = `${this.margin.left}px`; + this.webGLCanvas.style.top = `${this.margin.top}px`; + applyAttrs(this.title, { - x: 0.5 * this.plotarea_width, + x: 0.5 * this.plotareaWidth, y: -(this.margin.top / 2.0), dy: '1em', }); - this.bg - .attr('width', this.plotarea_width) - .attr('height', this.plotarea_height); - this.bg_events - .attr('width', this.plotarea_width) - .attr('height', this.plotarea_height); + this.toolbar_div.node().style.top = `${this.margin.top / 2.0}px`; + this.toolbar_div.node().style.right = `${this.margin.right}px`; + } - this.clip_path - .attr('width', this.plotarea_width) - .attr('height', this.plotarea_height); + this.bg + .attr('width', this.plotareaWidth) + .attr('height', this.plotareaHeight); + this.bg_events + .attr('width', this.plotareaWidth) + .attr('height', this.plotareaHeight); - this.trigger('margin_updated'); - this.update_legend(); - this.layout_webgl_canvas(); - }; + this.clip_path + .attr('width', this.plotareaWidth) + .attr('height', this.plotareaHeight); - if (!this.relayoutRequested) { - this.relayoutRequested = true; // avoid scheduling a relayout twice - requestAnimationFrame(relayoutImpl.bind(this)); - } - } + this.webGLCanvas.width = this.plotareaWidth; + this.webGLCanvas.height = this.plotareaHeight; - layout_webgl_canvas() { - if (this.renderer) { - this.renderer.domElement.style = - 'left: ' + - this.margin.left + - 'px; ' + - 'top: ' + - this.margin.top + - 'px;'; - this.renderer.setSize(this.plotarea_width, this.plotarea_height); - this.update_gl(); + for (const hook in this.relayoutHooks) { + this.relayoutHooks[hook](); } + + this.trigger('margin_updated'); + this.update_legend(); } update_legend() { @@ -916,8 +1122,8 @@ export class Figure extends widgets.DOMWidgetView { ) { let x_start = 0; let y_start = 0; - const fig_width = this.plotarea_width; - const fig_height = this.plotarea_height; + const fig_width = this.plotareaWidth; + const fig_height = this.plotareaHeight; switch (legend_location) { case 'top': @@ -976,6 +1182,7 @@ export class Figure extends widgets.DOMWidgetView { } else { if (this.interaction_view) { this.interaction_view.remove(); + this.interaction_view = null; } return Promise.resolve(null); } @@ -983,6 +1190,7 @@ export class Figure extends widgets.DOMWidgetView { update_title(model, title) { this.title.text(this.model.get('title')); + this.relayout(); } remove() { @@ -995,12 +1203,13 @@ export class Figure extends widgets.DOMWidgetView { if (this.tooltip_div !== undefined) { this.tooltip_div.remove(); } + this.intersectObserver.disconnect(); + this.resizeObserver.disconnect(); return super.remove.apply(this, arguments); } - get_svg() { + async get_svg() { // Returns the outer html of the figure svg - const replaceAll = (find, replace, str) => { return str.replace(new RegExp(find, 'g'), replace); }; @@ -1058,98 +1267,90 @@ export class Figure extends widgets.DOMWidgetView { return css; }; - // Even though the canvas may display the rendering already, it is not guaranteed it can be read of the canvas - // or we have to set preserveDrawingBuffer to true, which may impact performance. - // Instead, we render again, and directly afterwards we do get the pixel data using canvas.toDataURL - return this.render_gl().then(async () => { - // Create standalone SVG string - const node_background: any = this.svg_background.node(); - const node_foreground: any = this.svg.node(); - const width = this.plotarea_width; - const height = this.plotarea_height; - - // Creates a standalone SVG string from an inline SVG element - // containing all the computed style attributes. - const svg = node_foreground.cloneNode(true); - // images can contain blob urls, we transform those to data urls - const blobToDataUrl = async (el) => { - const blob = await (await fetch(el.getAttribute('href'))).blob(); - const reader = new FileReader(); - const readerPromise = new Promise((resolve, reject) => { - reader.onloadend = resolve; - reader.onerror = reject; - reader.abort = reject; - }); - reader.readAsDataURL(blob); - await readerPromise; - el.setAttribute('href', reader.result); - }; - const images = [...svg.querySelectorAll('image')]; - await Promise.all(images.map(blobToDataUrl)); - svg.setAttribute('version', '1.1'); - svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); - svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); - svg.setAttribute('width', this.width); - svg.setAttribute('height', this.height); - svg.style.background = window.getComputedStyle(document.body).background; - - const computedStyle = window.getComputedStyle(this.el); - const cssCode = - get_css(this.el, [ - '.theme-dark', - '.theme-light', - '.bqplot > ', - ':root', - ]) + '\n'; - // extract all CSS variables, and generate a piece of css to define the variables - const cssVariables = cssCode.match(/(--\w[\w-]*)/g) || []; - const cssVariableCode = - cssVariables.reduce((cssCode, variable) => { - const value = computedStyle.getPropertyValue(variable); - return `${cssCode}\n\t${variable}: ${value};`; - }, ':root {') + '\n}\n'; - - // and put the CSS in a style element - const styleElement = document.createElement('style'); - styleElement.setAttribute('type', 'text/css'); - styleElement.innerHTML = - ''; - - const defs = document.createElement('defs'); - defs.appendChild(styleElement); - // we put the svg background part before the marks - const g_root = svg.children[0]; - const svg_background = node_background.cloneNode(true); - // first the axes - g_root.insertBefore( - svg_background.children[0].children[1], - g_root.children[0] - ); - // and the background as first element - g_root.insertBefore( - svg_background.children[0].children[0], - g_root.children[0] - ); + // Create standalone SVG string + const node_background: any = this.svg_background.node(); + const node_foreground: any = this.svg.node(); + // const width = this.plotareaWidth; + // const height = this.plotareaHeight; + + // Creates a standalone SVG string from an inline SVG element + // containing all the computed style attributes. + const svg = node_foreground.cloneNode(true); + // images can contain blob urls, we transform those to data urls + const blobToDataUrl = async (el) => { + const blob = await (await fetch(el.getAttribute('href'))).blob(); + const reader = new FileReader(); + const readerPromise = new Promise((resolve, reject) => { + reader.onloadend = resolve; + reader.onerror = reject; + reader.abort = reject; + }); + reader.readAsDataURL(blob); + await readerPromise; + el.setAttribute('href', reader.result); + }; + const images = [...svg.querySelectorAll('image')]; + await Promise.all(images.map(blobToDataUrl)); + svg.setAttribute('version', '1.1'); + svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); + svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); + svg.setAttribute('width', this.width); + svg.setAttribute('height', this.height); + svg.style.background = getEffectiveBackgroundColor(this.el); + + const computedStyle = window.getComputedStyle(this.el); + const cssCode = + get_css(this.el, ['.theme-dark', '.theme-light', '.bqplot > ', ':root']) + + '\n'; + // extract all CSS variables, and generate a piece of css to define the variables + const cssVariables: string[] = cssCode.match(/(--\w[\w-]*)/g) || []; + const cssVariableCode = + cssVariables.reduce((cssCode, variable) => { + const value = computedStyle.getPropertyValue(variable); + return `${cssCode}\n\t${variable}: ${value};`; + }, ':root {') + '\n}\n'; + + // and put the CSS in a style element + const styleElement = document.createElement('style'); + styleElement.setAttribute('type', 'text/css'); + styleElement.innerHTML = ''; + + const defs = document.createElement('defs'); + defs.appendChild(styleElement); + // we put the svg background part before the marks + const g_root = svg.children[0]; + const svg_background = node_background.cloneNode(true); + // first the axes + g_root.insertBefore( + svg_background.children[0].children[1], + g_root.children[0] + ); + // and the background as first element + g_root.insertBefore( + svg_background.children[0].children[0], + g_root.children[0] + ); - // and add the webgl canvas as an image - if (this.renderer) { - const data_url = this.renderer.domElement.toDataURL('image/png'); - const marks = d3.select(g_root.children[3]); - marks - .insert('image', ':first-child') - .attr('x', 0) - .attr('y', 0) - .attr('width', 1) - .attr('height', 1) - .attr('preserveAspectRatio', 'none') - .attr('transform', 'scale(' + width + ', ' + height + ')') - .attr('href', data_url); - } + // and add the webgl canvas as an image + for (const hook in this.renderHooks) { + this.renderHooks[hook](); + } - svg.insertBefore(defs, svg.firstChild); - // Getting the outer HTML - return svg.outerHTML; - }); + const data_url = this.webGLCanvas.toDataURL('image/png'); + const marks = d3.select(g_root.children[3]); + marks + .insert('image', ':first-child') + .attr('x', 0) + .attr('y', 0) + .attr('width', 1) + .attr('height', 1) + .attr('preserveAspectRatio', 'none') + .attr('transform', 'scale(' + this.width + ', ' + this.height + ')') + .attr('href', data_url); + + svg.insertBefore(defs, svg.firstChild); + // Getting the outer HTML. .outerHTML replaces '\xa0' with ' ', which is invalid in SVG + return svg.outerHTML.replace(/ /g, '\xa0'); } async get_rendered_canvas(scale): Promise { @@ -1178,6 +1379,35 @@ export class Figure extends widgets.DOMWidgetView { }); } + async upload_png(model, scale) { + const canvas = await this.get_rendered_canvas(scale); + canvas.toBlob(async (blob) => { + const buff = await blob.arrayBuffer(); + model.send( + { + event: 'upload_png', + }, + null, + [buff] + ); + }); + } + + async upload_svg(model) { + const svg_string = await this.get_svg(); + const svg_blob = new Blob([svg_string], { + type: 'image/svg+xml;charset=utf-8', + }); + const svg_buffer = await svg_blob.arrayBuffer(); + model.send( + { + event: 'upload_svg', + }, + null, + [svg_buffer] + ); + } + save_png(filename, scale) { // Render a SVG data into a canvas and download as PNG. @@ -1213,83 +1443,170 @@ export class Figure extends widgets.DOMWidgetView { return pixel.data; } - update_gl() { - if (!this._update_requested) { - this._update_requested = true; - requestAnimationFrame(this._update_gl.bind(this)); - } + change_theme() { + this.el.classList.remove(this.model.previous('theme')); + this.el.classList.add(this.model.get('theme')); } - _update_gl() { - this.render_gl(); - this._update_requested = false; - } + /** + * Generate an integrated toolbar which is shown on mouse over + * for this figure. + * + */ + create_toolbar(): d3.Selection { + const toolbar = d3 + .select(document.createElement('div')) + .attr('class', 'toolbar_div'); + + const panzoom = document.createElement('button'); + panzoom.classList.add('jupyter-widgets'); // @jupyter-widgets/controls css + panzoom.classList.add('jupyter-button'); // @jupyter-widgets/controls css + panzoom.setAttribute('data-toggle', 'tooltip'); + panzoom.setAttribute('title', 'PanZoom'); + const panzoomicon = document.createElement('i'); + panzoomicon.style.marginRight = '0px'; + panzoomicon.className = 'fa fa-arrows'; + panzoom.appendChild(panzoomicon); + panzoom.onclick = (e) => { + e.preventDefault(); + (this.model as FigureModel).panzoom(); + }; - async render_gl(): Promise { - // Nothing to render using a WebGL context - if (!this.renderer) { - return Promise.resolve(); - } + const reset = document.createElement('button'); + reset.classList.add('jupyter-widgets'); // @jupyter-widgets/controls css + reset.classList.add('jupyter-button'); // @jupyter-widgets/controls css + reset.setAttribute('data-toggle', 'tooltip'); + reset.setAttribute('title', 'Reset'); + const refreshicon = document.createElement('i'); + refreshicon.style.marginRight = '0px'; + refreshicon.className = 'fa fa-refresh'; + reset.appendChild(refreshicon); + reset.onclick = (e) => { + e.preventDefault(); + (this.model as FigureModel).reset(); + }; - const views = await Promise.all(this.mark_views.views); + const save = document.createElement('button'); + save.classList.add('jupyter-widgets'); // @jupyter-widgets/controls css + save.classList.add('jupyter-button'); // @jupyter-widgets/controls css + save.setAttribute('data-toggle', 'tooltip'); + save.setAttribute('title', 'Save'); + const saveicon = document.createElement('i'); + saveicon.style.marginRight = '0px'; + saveicon.className = 'fa fa-save'; + save.appendChild(saveicon); + save.onclick = (e) => { + e.preventDefault(); + this.save_png(undefined, undefined); + }; - // render all marks that have a render_gl method - this.renderer.autoClear = false; - this.renderer.autoClearColor = new (THREE.Color as (x) => void)(0x000000); - this.renderer.clear(); - const marks_gl = _.filter(views, (view: Mark) => view['render_gl']); + toolbar.node().appendChild(panzoom); + toolbar.node().appendChild(reset); + toolbar.node().appendChild(save); - for (const mark of marks_gl) { - mark['render_gl'](); + this.el.appendChild(toolbar.node()); + if (this.autoLayout) { + toolbar.node().style.top = `${this.offsetY / 2.0}px`; + toolbar.node().style.right = `${this.offsetX}px`; + } else { + toolbar.node().style.top = `${this.margin.top / 2.0}px`; + toolbar.node().style.right = `${this.margin.right}px`; } + toolbar.node().style.visibility = 'hidden'; + toolbar.node().style.opacity = '0'; + this.el.addEventListener('mouseenter', () => { + toolbar.node().style.visibility = 'visible'; + toolbar.node().style.opacity = '1'; + }); + this.el.addEventListener('mouseleave', () => { + toolbar.node().style.visibility = 'hidden'; + toolbar.node().style.opacity = '0'; + }); + toolbar.node().style.display = 'none'; + return toolbar; } - change_theme() { - this.el.classList.remove(this.model.previous('theme')); - this.el.classList.add(this.model.get('theme')); + /** + * @deprecated since 0.13.0 use extras.webGLRequestRender + */ + update_gl() { + this.extras.webGLRequestRender(); } - axis_views: widgets.ViewList; + get autoLayout(): boolean { + return this.model.get('auto_layout'); + } + + get margin(): { top: number; bottom: number; left: number; right: number } { + return this.model.get('fig_margin'); + } + + get plotareaWidth(): number { + return this.autoLayout + ? this.width + : this.width - this.margin.left - this.margin.right; + } + + get plotareaHeight(): number { + return this.autoLayout + ? this.height + : this.height - this.margin.top - this.margin.bottom; + } + + axis_views: ViewList; bg: d3.Selection; bg_events: d3.Selection; change_layout: () => void; clip_id: string; clip_path: d3.Selection; debouncedRelayout: () => void; + debouncedUpdateDecorators: () => void; fig_axes: d3.Selection; fig_marks: d3.Selection; fig_background: d3.Selection; fig: d3.Selection; - figure_padding_x: number; - figure_padding_y: number; - height: number; + figure_padding_x: number = 0; + figure_padding_y: number = 0; + width: number = 0; + height: number = 0; + offsetX: number = 0; + offsetY: number = 0; interaction_view: Interaction; interaction: d3.Selection; - margin: { top: number; bottom: number; left: number; right: number }; - mark_views: widgets.ViewList; - plotarea_height: number; - plotarea_width: number; + mark_views: ViewList; popper_reference: popper.ReferenceObject; popper: popper; - renderer: THREE.WebGLRenderer | null; scale_x: Scale; scale_y: Scale; svg: d3.Selection; svg_background: d3.Selection; title: d3.Selection; tooltip_div: d3.Selection; - width: number; + toolbar_div: d3.Selection; x_pad_dict: { [id: string]: number }; xPaddingArr: { [id: string]: number }; y_pad_dict: { [id: string]: number }; yPaddingArr: { [id: string]: number }; + intersectObserver: IntersectionObserver; + resizeObserver: ResizeObserver; + visible: boolean; + decorators = { top: [], bottom: [], left: [], right: [] }; + + private rendered = false; + + public webGLCanvas: HTMLCanvasElement; + public webGLContext: WebGLRenderingContext | null; + private _needsWebGLContext = false; + + // Extra Figure namespace available for marks + public extras: any = {}; + + public relayoutHooks: Dict<() => void> = {}; + public renderHooks: Dict<() => void> = {}; private dummyNodes: Dict = {}; - private _update_requested: boolean; - private relayoutRequested: boolean = false; + private relayoutRequested = false; - // this is public for the test framework, but considered a private API - public _initial_marks_created: Promise; - private _initial_marks_created_resolve: Function; + private should_relayout = false; } diff --git a/js/src/FigureModel.ts b/js/src/FigureModel.ts index a76e89f0d..d87a43f30 100644 --- a/js/src/FigureModel.ts +++ b/js/src/FigureModel.ts @@ -15,7 +15,9 @@ import * as widgets from '@jupyter-widgets/base'; import { semver_range } from './version'; - +import { Interaction } from './Interaction'; +import { PanZoomModel } from './PanZoomModel'; +import * as _ from 'underscore'; export class FigureModel extends widgets.DOMWidgetModel { defaults() { return { @@ -54,6 +56,7 @@ export class FigureModel extends widgets.DOMWidgetModel { padding_y: 0.025, legend_location: 'top-right', animation_duration: 0, + display_toolbar: true, }; } @@ -67,6 +70,10 @@ export class FigureModel extends widgets.DOMWidgetModel { this.trigger('save_png', msg.filename, msg.scale); } else if (msg.type === 'save_svg') { this.trigger('save_svg', msg.filename); + } else if (msg.type === 'upload_png') { + this.trigger('upload_png', this, msg.scale); + } else if (msg.type === 'upload_svg') { + this.trigger('upload_svg', this, msg.scale); } } @@ -76,6 +83,88 @@ export class FigureModel extends widgets.DOMWidgetModel { this.trigger('save_png'); } + /** + * Start or stop pan zoom mode + * + */ + panzoom(): void { + if (this.panzoomData.panning) { + this.set('interaction', this.panzoomData.cached_interaction); + this.panzoomData.panning = false; + this.save_changes(); + } else { + this.panzoomData.cached_interaction = this.get('interaction'); + const panzoom = this.panzoomData.panzoom; + if (panzoom) { + this.set('interaction', panzoom); + this.save_changes(); + } else { + this.create_panzoom_model().then((model) => { + this.set('interaction', model); + this.panzoomData.panzoom = model; + this.save_changes(); + }); + } + this.panzoomData.panning = true; + } + } + + /** + * Creates a panzoom interaction widget for the this model. + * + * It will discover the relevant scales of this model. + */ + private create_panzoom_model(): Promise { + return this.widget_manager + .new_widget({ + model_name: 'PanZoomModel', + model_module: 'bqplot', + model_module_version: this.get('_model_module_version'), + view_name: 'PanZoom', + view_module: 'bqplot', + view_module_version: this.get('_view_module_version'), + }) + .then((model: PanZoomModel) => { + return Promise.all(this.get('marks')).then((marks: any[]) => { + const x_scales = [], + y_scales = []; + for (let i = 0; i < marks.length; ++i) { + const preserve_domain = marks[i].get('preserve_domain'); + const scales = marks[i].getScales(); + _.each(scales, (v, k) => { + const dimension = marks[i].get('scales_metadata')[k]['dimension']; + if (dimension === 'x' && !preserve_domain[k]) { + x_scales.push(scales[k]); + } + if (dimension === 'y' && !preserve_domain[k]) { + y_scales.push(scales[k]); + } + }); + } + model.set('scales', { + x: x_scales, + y: y_scales, + }); + model.save_changes(); + return model; + }); + }); + } + + /** + * Reset the scales, delete the PanZoom widget, set the figure + * interaction back to its previous value. + */ + reset(): void { + this.set('interaction', this.panzoomData.cached_interaction); + const panzoom = this.panzoomData.panzoom; + panzoom.reset_scales(); + panzoom.close(); + this.panzoomData.panzoom = null; + this.panzoomData.panning = false; + this.save_changes(); + } + static serializers = { ...widgets.DOMWidgetModel.serializers, marks: { deserialize: widgets.unpack_models }, @@ -85,4 +174,10 @@ export class FigureModel extends widgets.DOMWidgetModel { scale_y: { deserialize: widgets.unpack_models }, layout: { deserialize: widgets.unpack_models }, }; + + private panzoomData: { + panning: boolean; + cached_interaction: Interaction; + panzoom: PanZoomModel | undefined; + } = { panning: false, cached_interaction: null, panzoom: undefined }; } diff --git a/js/src/FlexLine.ts b/js/src/FlexLine.ts index d60fa0413..5a0c9575f 100644 --- a/js/src/FlexLine.ts +++ b/js/src/FlexLine.ts @@ -32,7 +32,7 @@ export class FlexLine extends Lines { super.set_ranges(); const width_scale = this.scales.width; if (width_scale) { - width_scale.set_range([0.5, this.model.get('stroke_width')]); + width_scale.setRange([0.5, this.model.get('stroke_width')]); } } diff --git a/js/src/GeoScale.ts b/js/src/GeoScale.ts deleted file mode 100644 index 09ffb3820..000000000 --- a/js/src/GeoScale.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-geo")); -import * as widgets from '@jupyter-widgets/base'; -import { GeoScaleModel } from './GeoScaleModel'; - -export class GeoScale extends widgets.WidgetView { - render() { - this.set_projection(); - this.listenTo(this.model, 'attribute_changed', this.reset_scale); - } - - set_projection() { - this.path = d3.geoPath().projection(this.model.projection); - this.scale = this.model.projection; - } - - reset_scale() { - this.set_projection(); - this.trigger('domain_changed', null); - } - - path: d3.GeoPath; - scale: d3.GeoProjection; - - model: GeoScaleModel; -} - -export class Mercator extends GeoScale {} - -export class Albers extends GeoScale {} - -export class AlbersUSA extends GeoScale {} - -export class EquiRectangular extends GeoScale {} - -export class Orthographic extends GeoScale {} - -export class Gnomonic extends GeoScale {} - -export class Stereographic extends GeoScale {} diff --git a/js/src/GeoScaleModel.ts b/js/src/GeoScaleModel.ts deleted file mode 100644 index 486dc7615..000000000 --- a/js/src/GeoScaleModel.ts +++ /dev/null @@ -1,294 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-geo")); -import { ScaleModel } from './ScaleModel'; - -export class GeoScaleModel extends ScaleModel { - defaults() { - return { - ...ScaleModel.prototype.defaults(), - _model_name: 'GeoScaleModel', - _view_name: 'GeoScale', - }; - } - - compute_and_set_domain(data_array, id) {} - - update_domain() {} - - projection: d3.GeoProjection; -} - -export class MercatorModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'MercatorModel', - _view_name: 'Mercator', - scale_factor: 190.0, - center: [0, 60], - rotate: [0, 0], - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['scale_factor', 'center', 'rotate'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoMercator() - .center(this.get('center')) - .scale(this.get('scale_factor')) - .rotate(this.get('rotate')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} - -export class AlbersModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'AlbersModel', - _view_name: 'Albers', - scale_factor: 250.0, - /*rotate: [96, 0],*/ - center: [0, 60], - parallels: [29.5, 45.5], - precision: 0.1, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['rotate', 'center', 'parallels', 'scale_factor', 'precision'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoAlbers() - .rotate(this.get('rotate')) - .center(this.get('center')) - .parallels(this.get('parallels')) - .scale(this.get('scale_factor')) - .precision(this.get('precision')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} - -export class AlbersUSAModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'AlbersUSAModel', - _view_name: 'AlbersUSA', - scale_factor: 1200, - translate: [600, 490], // center of the SVG viewbox (see Map.js) - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['scale_factor', 'translate'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoAlbersUsa() - .scale(this.get('scale_factor')) - .translate(this.get('translate')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} - -export class EquiRectangularModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'EquiRectangularModel', - _view_name: 'EquiRectangular', - scale_factor: 145.0, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['scale_factor', 'center'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoEquirectangular() - .center(this.get('center')) - .scale(this.get('scale_factor')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} - -export class OrthographicModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'OrthographicModel', - _view_name: 'Orthographic', - scale_factor: 145.0, - center: [0, 60], - rotate: [0, 0], - clip_angle: 90.0, - precision: 0.1, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['scale_factor', 'center', 'clip_angle', 'rotate', 'precision'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoOrthographic() - .center(this.get('center')) - .scale(this.get('scale_factor')) - .clipAngle(this.get('clip_angle')) - .rotate(this.get('rotate')) - .precision(this.get('precision')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} - -export class GnomonicModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'GnomonicModel', - _view_name: 'Gnomonic', - scale_factor: 145.0, - center: [0, 60], - precision: 0.1, - clip_angle: 89.999, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['scale_factor', 'precision', 'clip_angle'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoGnomonic() - .clipAngle(this.get('clip_angle')) - .scale(this.get('scale_factor')) - .precision(this.get('precision')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} - -export class StereographicModel extends GeoScaleModel { - defaults() { - return { - ...GeoScaleModel.prototype.defaults(), - _model_name: 'StereographicModel', - _view_name: 'StereographicModel', - scale_factor: 245, - center: [0, 60], - precision: 0.1, - rotate: [96, 0], - clip_angle: 179.9999, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.on_some_change( - ['scale_factor', 'center', 'clip_angle', 'rotate', 'precision'], - this.create_projection, - this - ); - this.create_projection(); - } - - create_projection() { - this.projection = d3 - .geoStereographic() - .scale(this.get('scale_factor')) - .rotate(this.get('rotate')) - .clipAngle(this.get('clip_angle')) - .center(this.get('center')) - .precision(this.get('precision')); - this.attribute_changed(); - } - - attribute_changed() { - this.trigger('attribute_changed'); - } -} diff --git a/js/src/Graph.ts b/js/src/Graph.ts index 74f930fae..0464263b5 100644 --- a/js/src/Graph.ts +++ b/js/src/Graph.ts @@ -96,12 +96,12 @@ export class Graph extends Mark { set_ranges() { if (this.scales.x) { - this.scales.x.set_range( + this.scales.x.setRange( this.parent.padded_range('x', this.scales.x.model) ); } if (this.scales.y) { - this.scales.y.set_range( + this.scales.y.setRange( this.parent.padded_range('y', this.scales.y.model) ); } @@ -370,7 +370,9 @@ export class Graph extends Mark { } private dragstarted(d: NodeData) { - if (this.model.static) return; + if (this.model.static) { + return; + } if (!d3GetEvent().active) { this.force_layout.alphaTarget(0.4).restart(); } @@ -379,13 +381,17 @@ export class Graph extends Mark { } private dragged(d: NodeData) { - if (this.model.static) return; + if (this.model.static) { + return; + } d.fx = d3GetEvent().x; d.fy = d3GetEvent().y; } private dragended(d: NodeData) { - if (this.model.static) return; + if (this.model.static) { + return; + } if (!d3GetEvent().active) { this.force_layout.alphaTarget(0.4); } @@ -573,7 +579,7 @@ export class Graph extends Mark { compute_view_padding() { const xPadding = d3.max( - this.model.mark_data.map(function (d) { + this.model.mark_data.map((d) => { return ( (d.shape_attrs.r || d.shape_attrs.width / 2 || d.shape_attrs.rx) + 1.0 ); diff --git a/js/src/GraphModel.ts b/js/src/GraphModel.ts index 9c340827f..1d2f238c2 100644 --- a/js/src/GraphModel.ts +++ b/js/src/GraphModel.ts @@ -152,7 +152,7 @@ export class GraphModel extends MarkModel { } private updateLinkData() { - const link_color_scale = this.get('scales').link_color; + const link_color_scale = this.getScales().link_color; this.link_data = this.get('link_data') || []; let link_matrix = this.get('link_matrix'); const link_color = this.get('link_color'); @@ -187,57 +187,57 @@ export class GraphModel extends MarkModel { } update_domains() { - const scales = this.get('scales'); + const scales = this.getScales(); if (scales.x) { if (!this.get('preserve_domain').x && this.mark_data) { - scales.x.compute_and_set_domain( + scales.x.computeAndSetDomain( this.mark_data.map((elem) => { return elem.xval; }), this.model_id + '_x' ); } else { - scales.x.del_domain([], this.model_id + '_x'); + scales.x.delDomain([], this.model_id + '_x'); } } if (scales.y) { if (!this.get('preserve_domain').y && this.mark_data) { - scales.y.compute_and_set_domain( + scales.y.computeAndSetDomain( this.mark_data.map((elem) => { return elem.yval; }), this.model_id + '_y' ); } else { - scales.y.del_domain([], this.model_id + '_y'); + scales.y.delDomain([], this.model_id + '_y'); } } if (scales.color) { if (!this.get('preserve_domain').color && this.mark_data) { - scales.color.compute_and_set_domain( + scales.color.computeAndSetDomain( this.mark_data.map((elem) => { return elem.color; }), this.model_id + '_color' ); } else { - scales.color.del_domain([], this.model_id + '_color'); + scales.color.delDomain([], this.model_id + '_color'); } } if (scales.link_color) { if (!this.get('preserve_domain').link_color && this.link_data) { - scales.link_color.compute_and_set_domain( + scales.link_color.computeAndSetDomain( this.link_data.map((elem) => { return elem.value; }), this.model_id + '_link_color' ); } else { - scales.link_color.del_domain([], this.model_id + '_link_color'); + scales.link_color.delDomain([], this.model_id + '_link_color'); } } } diff --git a/js/src/GridHeatMap.ts b/js/src/GridHeatMap.ts index 6e1ea0056..2bd1cf448 100644 --- a/js/src/GridHeatMap.ts +++ b/js/src/GridHeatMap.ts @@ -65,13 +65,13 @@ export class GridHeatMap extends Mark { set_ranges() { if (this.scales.row) { - this.scales.row.set_range( + this.scales.row.setRange( this.parent.padded_range('y', this.scales.row.model) ); } if (this.scales.column) { - this.scales.column.set_range( + this.scales.column.setRange( this.parent.padded_range('x', this.scales.column.model) ); } @@ -317,7 +317,7 @@ export class GridHeatMap extends Mark { } const clearing_style = {}; - for (let key in style_dict) { + for (const key in style_dict) { clearing_style[key] = null; } applyStyles(elements, clearing_style); @@ -483,10 +483,7 @@ export class GridHeatMap extends Mark { d3.max(new_domain) > d3.max(rowScale.model.domain) ) { // Update domain if domain has changed - rowScale.model.compute_and_set_domain( - new_domain, - rowScale.model.model_id - ); + rowScale.model.computeAndSetDomain(new_domain, rowScale.model.model_id); } } @@ -505,7 +502,7 @@ export class GridHeatMap extends Mark { d3.max(new_domain) > d3.max(columnScale.model.domain) ) { // Update domain if domain has changed - columnScale.model.compute_and_set_domain( + columnScale.model.computeAndSetDomain( new_domain, columnScale.model.model_id ); diff --git a/js/src/GridHeatMapModel.ts b/js/src/GridHeatMapModel.ts index 47f4b90cc..da88d454c 100644 --- a/js/src/GridHeatMapModel.ts +++ b/js/src/GridHeatMapModel.ts @@ -99,30 +99,30 @@ export class GridHeatMapModel extends MarkModel { if (!this.mark_data) { return; } - const scales = this.get('scales'); + const scales = this.getScales(); const y_scale = scales.row, x_scale = scales.column; const color_scale = scales.color; if (!this.get('preserve_domain').row) { - y_scale.compute_and_set_domain(this.rows, this.model_id + '_row'); + y_scale.computeAndSetDomain(this.rows, this.model_id + '_row'); } else { - y_scale.del_domain([], this.model_id + '_row'); + y_scale.delDomain([], this.model_id + '_row'); } if (!this.get('preserve_domain').column) { - x_scale.compute_and_set_domain(this.columns, this.model_id + '_column'); + x_scale.computeAndSetDomain(this.columns, this.model_id + '_column'); } else { - x_scale.del_domain([], this.model_id + '_column'); + x_scale.delDomain([], this.model_id + '_column'); } if (color_scale !== null && color_scale !== undefined) { if (!this.get('preserve_domain').color) { - color_scale.compute_and_set_domain( + color_scale.computeAndSetDomain( this.mark_data.map((elem) => elem.color), this.model_id + '_color' ); } else { - color_scale.del_domain([], this.model_id + '_color'); + color_scale.delDomain([], this.model_id + '_color'); } } } @@ -158,7 +158,7 @@ export class GridHeatMapModel extends MarkModel { private identifyModes() { //based on the data, identify the mode in which the heatmap should //be plotted. - const scales = this.get('scales'); + const scales = this.getScales(); const rowScale = scales.row; const columnScale = scales.column; const nRows = this.colors.length; diff --git a/js/src/HandDraw.ts b/js/src/HandDraw.ts index f09dc8e5b..6947371a5 100644 --- a/js/src/HandDraw.ts +++ b/js/src/HandDraw.ts @@ -18,6 +18,7 @@ import * as utils from './utils'; import { Interaction } from './Interaction'; import { Lines } from './Lines'; import { LinesModel } from './LinesModel'; +import { LinearScale } from 'bqscales'; export class HandDraw extends Interaction { render() { @@ -87,12 +88,12 @@ export class HandDraw extends Interaction { if (!memory || !('previousPos' in this)) { this.previousPos = mousePos; } - const scaleX = this.linesView.scales.x.scale; - const scaleY = this.linesView.scales.y.scale; + const scaleX = this.linesView.scales.x.scale as unknown as LinearScale; + const scaleY = this.linesView.scales.y.scale as unknown as LinearScale; - const newx = scaleX.invert(mousePos[0]); + const newx = scaleX.invert(mousePos[0]) as number; const newy = scaleY.invert(mousePos[1]); - const oldx = scaleX.invert(this.previousPos[0]); + const oldx = scaleX.invert(this.previousPos[0]) as number; scaleY.invert(this.previousPos[1]); const old_index = this.nearestNeighbourSearch( this.lines.x_data[xindex], diff --git a/js/src/HeatMap.ts b/js/src/HeatMap.ts index e12c60261..1abc7d25b 100644 --- a/js/src/HeatMap.ts +++ b/js/src/HeatMap.ts @@ -48,11 +48,11 @@ export class HeatMap extends Mark { set_ranges() { if (this.scales.x) { const xRange = this.parent.padded_range('x', this.scales.x.model); - this.scales.x.set_range(xRange); + this.scales.x.setRange(xRange); } if (this.scales.y) { - this.scales.y.set_range( + this.scales.y.setRange( this.parent.padded_range('y', this.scales.y.model) ); } @@ -60,10 +60,14 @@ export class HeatMap extends Mark { set_positional_scales() { this.listenTo(this.scales.x, 'domain_changed', () => { - if (!this.model.dirty) this.draw(); + if (!this.model.dirty) { + this.draw(); + } }); this.listenTo(this.scales.y, 'domain_changed', () => { - if (!this.model.dirty) this.draw(); + if (!this.model.dirty) { + this.draw(); + } }); } diff --git a/js/src/HeatMapModel.ts b/js/src/HeatMapModel.ts index dea10736f..98b166f39 100644 --- a/js/src/HeatMapModel.ts +++ b/js/src/HeatMapModel.ts @@ -63,33 +63,32 @@ export class HeatMapModel extends MarkModel { } update_domains() { - if (!this.mark_data) return; + if (!this.mark_data) { + return; + } - const scales = this.get('scales'); + const scales = this.getScales(); const flat_colors = [].concat.apply( [], this.mark_data.color.map((x) => Array.prototype.slice.call(x, 0)) ); if (!this.get('preserve_domain').x) { - scales.x.compute_and_set_domain(this.mark_data.x, this.model_id + '_x'); + scales.x.computeAndSetDomain(this.mark_data.x, this.model_id + '_x'); } else { - scales.x.del_domain([], this.model_id + '_x'); + scales.x.delDomain([], this.model_id + '_x'); } if (!this.get('preserve_domain').y) { - scales.y.compute_and_set_domain(this.mark_data.y, this.model_id + '_y'); + scales.y.computeAndSetDomain(this.mark_data.y, this.model_id + '_y'); } else { - scales.y.del_domain([], this.model_id + '_y'); + scales.y.delDomain([], this.model_id + '_y'); } if (scales.color !== null && scales.color !== undefined) { if (!this.get('preserve_domain').color) { - scales.color.compute_and_set_domain( - flat_colors, - this.model_id + '_color' - ); + scales.color.computeAndSetDomain(flat_colors, this.model_id + '_color'); } else { - scales.color.del_domain([], this.model_id + '_color'); + scales.color.delDomain([], this.model_id + '_color'); } } } diff --git a/js/src/Hist.ts b/js/src/Hist.ts index c75eba646..207a3d657 100644 --- a/js/src/Hist.ts +++ b/js/src/Hist.ts @@ -50,11 +50,11 @@ export class Hist extends Mark { set_ranges() { const x_scale = this.scales.sample; if (x_scale) { - x_scale.set_range(this.parent.padded_range('x', x_scale.model)); + x_scale.setRange(this.parent.padded_range('x', x_scale.model)); } const y_scale = this.scales.count; if (y_scale) { - y_scale.set_range(this.parent.padded_range('y', y_scale.model)); + y_scale.setRange(this.parent.padded_range('y', y_scale.model)); } } diff --git a/js/src/HistModel.ts b/js/src/HistModel.ts index 92835080c..c259251d1 100644 --- a/js/src/HistModel.ts +++ b/js/src/HistModel.ts @@ -64,7 +64,7 @@ export class HistModel extends MarkModel { } update_data() { - const xScale = this.get('scales').sample; + const xScale = this.getScales().sample; // TODO: This potentially triggers domain_changed and therefore a // Draw, while update_data is generally followed by a Draw. @@ -75,9 +75,9 @@ export class HistModel extends MarkModel { this.xBins = []; } else { if (!this.get('preserve_domain').sample) { - xScale.compute_and_set_domain(this.sample, this.model_id + '_sample'); + xScale.computeAndSetDomain(this.sample, this.model_id + '_sample'); } else { - xScale.del_domain([], this.model_id + '_sample'); + xScale.delDomain([], this.model_id + '_sample'); } this.minX = xScale.domain[0]; @@ -162,15 +162,17 @@ export class HistModel extends MarkModel { } update_domains() { - if (!this.mark_data) return; + if (!this.mark_data) { + return; + } // For histogram, changing the x-scale domain changes a lot of // things including the data which is to be plotted. So the x-domain // change is handled by the update_data function and only the // y-domain change is handled by this function. - const y_scale = this.get('scales').count; + const y_scale = this.getScales().count; if (!this.get('preserve_domain').count) { - y_scale.set_domain( + y_scale.setDomain( [0, d3.max(this.count) * 1.05], this.model_id + '_count' ); diff --git a/js/src/Image.ts b/js/src/Image.ts index f2e1ba041..1b79b2c84 100644 --- a/js/src/Image.ts +++ b/js/src/Image.ts @@ -84,10 +84,10 @@ export class Image extends Mark { const x_scale = this.scales.x, y_scale = this.scales.y; if (x_scale) { - x_scale.set_range(this.parent.padded_range('x', x_scale.model)); + x_scale.setRange(this.parent.padded_range('x', x_scale.model)); } if (y_scale) { - y_scale.set_range(this.parent.padded_range('y', y_scale.model)); + y_scale.setRange(this.parent.padded_range('y', y_scale.model)); } } diff --git a/js/src/ImageModel.ts b/js/src/ImageModel.ts index c24c2510f..0cea8e405 100644 --- a/js/src/ImageModel.ts +++ b/js/src/ImageModel.ts @@ -53,28 +53,22 @@ export class ImageModel extends MarkModel { if (!this.mark_data) { return; } - const scales = this.get('scales'); + const scales = this.getScales(); const x_scale = scales.x; const y_scale = scales.y; if (x_scale) { if (!this.get('preserve_domain').x) { - x_scale.compute_and_set_domain( - this.mark_data['x'], - this.model_id + '_x' - ); + x_scale.computeAndSetDomain(this.mark_data['x'], this.model_id + '_x'); } else { - x_scale.del_domain([], this.model_id + '_x'); + x_scale.delDomain([], this.model_id + '_x'); } } if (y_scale) { if (!this.get('preserve_domain').y) { - y_scale.compute_and_set_domain( - this.mark_data['y'], - this.model_id + '_y' - ); + y_scale.computeAndSetDomain(this.mark_data['y'], this.model_id + '_y'); } else { - y_scale.del_domain([], this.model_id + '_y'); + y_scale.delDomain([], this.model_id + '_y'); } } } diff --git a/js/src/IndexSelector.ts b/js/src/IndexSelector.ts index 6e00ae226..5336deccc 100644 --- a/js/src/IndexSelector.ts +++ b/js/src/IndexSelector.ts @@ -16,6 +16,7 @@ import * as d3 from 'd3'; // var d3 =Object.assign({}, require("d3-selection")); import * as _ from 'underscore'; +import { LinearScale, OrdinalScale } from 'bqscales'; import { BaseXSelector } from './Selector'; export class IndexSelector extends BaseXSelector { @@ -80,7 +81,7 @@ export class IndexSelector extends BaseXSelector { } mousemove() { - if (!this.active) { + if (!this.active || this.dirty) { return; } this.dirty = true; @@ -142,7 +143,10 @@ export class IndexSelector extends BaseXSelector { } else { const pixel = this.scale.scale(selected[0]); if (this.line !== undefined && this.line !== null) { - this.line.attr('x1', 0).attr('x2', 0).attr('visibility', 'visible'); + this.line + .attr('x1', pixel) + .attr('x2', pixel) + .attr('visibility', 'visible'); } //the selected may be called before the index selector is //active for the first time. @@ -160,9 +164,9 @@ export class IndexSelector extends BaseXSelector { this.set_range([this.scale]); } - set_range(array) { + set_range(array: (LinearScale | OrdinalScale)[]) { for (let iter = 0; iter < array.length; iter++) { - array[iter].set_range([0, this.width]); + array[iter].setRange([0, this.width]); } } @@ -170,4 +174,5 @@ export class IndexSelector extends BaseXSelector { dirty: boolean; line: d3.Selection; background: d3.Selection; + scale: LinearScale | OrdinalScale; } diff --git a/js/src/Interaction.ts b/js/src/Interaction.ts index 76f0788f7..30bcc6c08 100644 --- a/js/src/Interaction.ts +++ b/js/src/Interaction.ts @@ -36,14 +36,8 @@ export class Interaction extends widgets.WidgetView { this.d3el .attr('x', 0) .attr('y', 0) - .attr( - 'width', - this.parent.width - this.parent.margin.left - this.parent.margin.right - ) - .attr( - 'height', - this.parent.height - this.parent.margin.top - this.parent.margin.bottom - ) + .attr('width', this.parent.plotareaWidth) + .attr('height', this.parent.plotareaHeight) .attr('pointer-events', 'all') .attr('visibility', 'hidden'); this.listenTo(this.parent, 'margin_updated', this.relayout); @@ -52,14 +46,8 @@ export class Interaction extends widgets.WidgetView { relayout() { // Called when the figure margins are updated. this.d3el - .attr( - 'width', - this.parent.width - this.parent.margin.left - this.parent.margin.right - ) - .attr( - 'height', - this.parent.height - this.parent.margin.top - this.parent.margin.bottom - ); + .attr('width', this.parent.plotareaWidth) + .attr('height', this.parent.plotareaHeight); } remove() { diff --git a/js/src/LinearScale.ts b/js/src/LinearScale.ts deleted file mode 100644 index 9fe553c13..000000000 --- a/js/src/LinearScale.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3Scale from 'd3-scale'; -import { Scale } from './Scale'; -import { LinearScaleModel } from './LinearScaleModel'; - -export class LinearScale extends Scale { - render() { - this.scale = d3Scale.scaleLinear() as d3.ScaleLinear; - if (this.model.domain.length > 0) { - this.scale.domain(this.model.domain); - } - this.offset = 0; - this.create_event_listeners(); - } - - expand_domain(old_range, new_range) { - // If you have a current range and then a new range and want to - // expand the domain to expand to the new range but keep it - // consistent with the previous one, this is the function you use. - - // The following code is required to make a copy of the actual - // state of the scale. Referring to the model domain and then - // setting the range to be the old range in case it is not. - const unpadded_scale = this.scale.copy(); - - // To handle the case for a clamped scale for which we have to - // expand the domain, the copy should be unclamped. - unpadded_scale.clamp(false); - if (this.model.domain.length) { - unpadded_scale.domain(this.model.domain); - } else { - // if the domain is empty, it will lead to NaN/NaN - console.error( - 'No domain exists for scale, is that any data associated with this scale?' - ); - } - unpadded_scale.range(old_range); - this.scale.domain( - new_range.map((limit) => { - return unpadded_scale.invert(limit); - }) - ); - } - - invert(pixel): number | Date { - return this.scale.invert(pixel); - } - - invert_range(pixels) { - //Pixels is a non-decreasing array of pixel values - return pixels.map((pix) => this.invert(pix)); - } - - scale: - | d3.ScaleLinear - | d3.ScaleTime - | d3.ScaleLogarithmic; - - model: LinearScaleModel; -} - -export function isLinearScale(scale: Scale): scale is LinearScale { - return scale.model.type === 'linear'; -} diff --git a/js/src/LinearScaleModel.ts b/js/src/LinearScaleModel.ts deleted file mode 100644 index e1d50cb07..000000000 --- a/js/src/LinearScaleModel.ts +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as _ from 'underscore'; -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-array")); -import { ScaleModel } from './ScaleModel'; - -export class LinearScaleModel extends ScaleModel { - defaults() { - return { - ...ScaleModel.prototype.defaults(), - _model_name: 'LinearScaleModel', - _view_name: 'LinearScale', - min: null, - max: null, - min_range: 0.6, - mid_range: 0.8, - }; - } - - typedRange(values) { - return new Float64Array(values.map(Number)); - } - - set_init_state() { - this.type = 'linear'; - this.global_min = Number.NEGATIVE_INFINITY; - this.global_max = Number.POSITIVE_INFINITY; - } - - set_listeners() { - this.on('change:reverse', this.reverse_changed, this); - this.reverse_changed(undefined, undefined, undefined); - this.on_some_change(['min', 'max'], this.min_max_changed, this); - this.min_max_changed(); - this.on_some_change( - ['min_range', 'mid_range', 'stabilized'], - this.update_domain, - this - ); - } - - min_max_changed() { - this.min = this.get('min'); - this.max = this.get('max'); - this.min_from_data = this.min === null; - this.max_from_data = this.max === null; - this.update_domain(); - } - - reverse_changed(model, value, options) { - const prev_reverse = - model === undefined ? false : model.previous('reverse'); - this.reverse = this.get('reverse'); - - // the domain should be reversed only if the previous value of reverse - // is different from the current value. During init, domain should be - // reversed only if reverse is set to True. - const reverse_domain = (prev_reverse + this.reverse) % 2; - if (this.domain.length > 0 && reverse_domain === 1) { - this.domain.reverse(); - this.trigger('domain_changed', this.domain); - } - } - - update_domain() { - const that = this; - const min = !this.min_from_data - ? this.min - : d3.min( - _.map(this.domains, (d: any[]) => { - return d.length > 0 ? d[0] : that.global_max; - }) - ); - const max = !this.max_from_data - ? this.max - : d3.max( - _.map(this.domains, (d: any[]) => { - return d.length > 1 ? d[1] : that.global_min; - }) - ); - const mid = (min + max) * 0.5; - const new_width = ((max - min) * 0.5) / this.get('mid_range'); - const prev_domain = this.domain; - const min_index = this.reverse ? 1 : 0; - const prev_min = prev_domain[min_index]; - const prev_max = prev_domain[1 - min_index]; - const prev_mid = (prev_max + prev_min) * 0.5; - const min_width = (prev_max - prev_min) * 0.5 * this.get('min_range'); - - const stabilized = this.get('stabilized'); - - // If the scale is stabilized, only update if the new min/max is without - // a certain range, else update as soon as the new min/max is different. - const update_domain = stabilized - ? !(min >= prev_min) || - !(min <= prev_mid - min_width) || - !(max <= prev_max) || - !(max >= prev_mid + min_width) - : min !== prev_min || max !== prev_max; - - if (update_domain) { - const new_min = stabilized ? mid - new_width : min; - const new_max = stabilized ? mid + new_width : max; - this.domain = this.reverse ? [new_max, new_min] : [new_min, new_max]; - this.trigger('domain_changed', this.domain); - } - } - - compute_and_set_domain(data_array, id) { - // Takes an array and calculates the domain for the particular - // view. If you have the domain already calculated on your side, - // call set_domain function. - if (!data_array || data_array.length === 0) { - this.set_domain([], id); - return; - } - const data = data_array[0] instanceof Array ? data_array : [data_array]; - const min = d3.min( - data.map((d) => { - return d3.min(d); - }) - ); - const max = d3.max( - data.map((d) => { - return d3.max(d); - }) - ); - this.set_domain([min, max], id); - } - - type: string; - min: number | Date; - max: number | Date; - min_from_data: boolean; - max_from_data: boolean; - global_min: number | Date; - global_max: number | Date; -} diff --git a/js/src/Lines.ts b/js/src/Lines.ts index edf466add..83368a297 100644 --- a/js/src/Lines.ts +++ b/js/src/Lines.ts @@ -56,11 +56,11 @@ export class Lines extends Mark { set_ranges(): void { const xScale = this.scales.x; if (xScale) { - xScale.set_range(this.parent.padded_range('x', xScale.model)); + xScale.setRange(this.parent.padded_range('x', xScale.model)); } const yScale = this.scales.y; if (yScale) { - yScale.set_range(this.parent.padded_range('y', yScale.model)); + yScale.setRange(this.parent.padded_range('y', yScale.model)); } } @@ -506,7 +506,7 @@ export class Lines extends Mark { }); if (fill == 'bottom') { - this.area.y0(this.parent.plotarea_height); + this.area.y0(this.parent.plotareaHeight); } else if (fill == 'top') { this.area.y0(0); } else if (fill == 'between') { @@ -565,7 +565,7 @@ export class Lines extends Mark { }); if (fill == 'bottom') { - this.area.y0(this.parent.plotarea_height); + this.area.y0(this.parent.plotareaHeight); } else if (fill == 'top') { this.area.y0(0); } else if (fill == 'between') { @@ -631,16 +631,19 @@ export class Lines extends Mark { : []; } - get_interpolation(): - | d3Shape.CurveFactory - | d3Shape.CurveFactory - | d3Shape.CurveFactory - | d3Shape.CurveFactory { + get_interpolation(): d3Shape.CurveFactory { const curveTypes = { linear: d3.curveLinear, basis: d3.curveBasis, + 'basis-open': d3.curveBasisOpen, + 'basis-closed': d3.curveBasisClosed, + bundle: d3.curveBundle, cardinal: d3.curveCardinal, + 'cardinal-open': d3.curveCardinalOpen, + 'cardinal-closed': d3.curveCardinalClosed, monotone: d3.curveMonotoneY, + 'step-before': d3.curveStepBefore, + 'step-after': d3.curveStepAfter, }; return curveTypes[this.model.get('interpolation')]; diff --git a/js/src/LinesModel.ts b/js/src/LinesModel.ts index aab737ce9..982be37d1 100644 --- a/js/src/LinesModel.ts +++ b/js/src/LinesModel.ts @@ -159,13 +159,13 @@ export class LinesModel extends MarkModel { if (!this.mark_data) { return; } - const scales = this.get('scales'); + const scales = this.getScales(); const x_scale = scales.x, y_scale = scales.y; const color_scale = scales.color; if (!this.get('preserve_domain').x) { - x_scale.compute_and_set_domain( + x_scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem.values.map((d) => { return d.x; @@ -174,11 +174,11 @@ export class LinesModel extends MarkModel { this.model_id + '_x' ); } else { - x_scale.del_domain([], this.model_id + '_x'); + x_scale.delDomain([], this.model_id + '_x'); } if (!this.get('preserve_domain').y) { - y_scale.compute_and_set_domain( + y_scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem.values.map((d) => { return d.y; @@ -187,18 +187,18 @@ export class LinesModel extends MarkModel { this.model_id + '_y' ); } else { - y_scale.del_domain([], this.model_id + '_y'); + y_scale.delDomain([], this.model_id + '_y'); } if (color_scale !== null && color_scale !== undefined) { if (!this.get('preserve_domain').color) { - color_scale.compute_and_set_domain( + color_scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem.color; }), this.model_id + '_color' ); } else { - color_scale.del_domain([], this.model_id + '_color'); + color_scale.delDomain([], this.model_id + '_color'); } } } @@ -295,33 +295,33 @@ export class FlexLineModel extends LinesModel { if (!this.mark_data) { return; } - const scales = this.get('scales'); + const scales = this.getScales(); const x_scale = scales.x, y_scale = scales.y; const color_scale = scales.color; const width_scale = scales.width; if (!this.get('preserve_domain').x) { - x_scale.compute_and_set_domain( + x_scale.computeAndSetDomain( this.x_data[0].slice(0, this.data_len), this.model_id + '_x' ); } else { - x_scale.del_domain([], this.model_id + '_x'); + x_scale.delDomain([], this.model_id + '_x'); } if (!this.get('preserve_domain').y) { - y_scale.compute_and_set_domain( + y_scale.computeAndSetDomain( this.y_data[0].slice(0, this.data_len), this.model_id + '_y' ); } else { - y_scale.del_domain([], this.model_id + '_y'); + y_scale.delDomain([], this.model_id + '_y'); } if (color_scale !== null && color_scale !== undefined) { if (!this.get('preserve_domain').color) { - color_scale.compute_and_set_domain( + color_scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem.values.map((d) => { return d.color; @@ -330,12 +330,12 @@ export class FlexLineModel extends LinesModel { this.model_id + '_color' ); } else { - color_scale.del_domain([], this.model_id + '_color'); + color_scale.delDomain([], this.model_id + '_color'); } } if (width_scale !== null && width_scale !== undefined) { if (!this.get('preserve_domain').width) { - width_scale.compute_and_set_domain( + width_scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem.values.map((d) => { return d.size; @@ -344,7 +344,7 @@ export class FlexLineModel extends LinesModel { this.model_id + '_width' ); } else { - width_scale.del_domain([], this.model_id + '_width'); + width_scale.delDomain([], this.model_id + '_width'); } } } diff --git a/js/src/LogScale.ts b/js/src/LogScale.ts deleted file mode 100644 index a01dce8e2..000000000 --- a/js/src/LogScale.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-scale")); -import { LinearScale } from './LinearScale'; -import { Scale } from './Scale'; - -export class LogScale extends LinearScale { - render() { - this.scale = d3.scaleLog(); - if (this.model.domain.length > 0) { - this.scale.domain(this.model.domain); - } - this.offset = 0; - this.create_event_listeners(); - } - - scale: d3.ScaleLogarithmic; -} - -export function isLogScale(scale: Scale): scale is LogScale { - return scale.model.type === 'log'; -} diff --git a/js/src/LogScaleModel.ts b/js/src/LogScaleModel.ts deleted file mode 100644 index 48b006dc7..000000000 --- a/js/src/LogScaleModel.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { LinearScaleModel } from './LinearScaleModel'; - -export class LogScaleModel extends LinearScaleModel { - defaults() { - return { - ...LinearScaleModel.prototype.defaults(), - _model_name: 'LogScaleModel', - _view_name: 'LogScale', - domain: [], - }; - } - - set_init_state() { - this.type = 'log'; - this.global_min = Number.MIN_VALUE; - this.global_max = Number.POSITIVE_INFINITY; - } -} diff --git a/js/src/Map.ts b/js/src/Map.ts index d0b109461..f85340270 100644 --- a/js/src/Map.ts +++ b/js/src/Map.ts @@ -25,8 +25,8 @@ export class Map extends Mark { const base_render_promise = super.render(); this.map = this.d3el.append('svg').attr('viewBox', '0 0 1200 980'); - this.width = this.parent.plotarea_width; - this.height = this.parent.plotarea_height; + this.width = this.parent.plotareaWidth; + this.height = this.parent.plotareaHeight; this.map_id = widgets.uuid(); this.enable_hover = this.model.get('enable_hover'); this.display_el_classes = ['event_layer']; @@ -381,10 +381,10 @@ export class Map extends Mark { this.model.set('selected', []); this.touch(); this.highlight_g.selectAll('.selected').remove(); - d3.select(this.d3el.node().parentNode) + d3.select(this.d3el.node().parentNode as Element) .selectAll('path') .classed('selected', false); - d3.select(this.d3el.node().parentNode) + d3.select(this.d3el.node().parentNode as Element) .selectAll('path') .classed('hovered', false); @@ -454,7 +454,6 @@ export class Map extends Mark { } else if ( color_data[d.id] === undefined || color_data[d.id] === null || - color_data[d.id] === 'nan' || color_scale === undefined ) { return colors.default_color; diff --git a/js/src/MapModel.ts b/js/src/MapModel.ts index 7e0f09fb9..b8de6c2c3 100644 --- a/js/src/MapModel.ts +++ b/js/src/MapModel.ts @@ -83,19 +83,19 @@ export class MapModel extends MarkModel { } update_domains() { - const scales = this.get('scales'); + const scales = this.getScales(); const color_scale = scales.color; this.color_data = this.get('color'); if (color_scale !== null && color_scale !== undefined) { if (!this.get('preserve_domain').color) { - color_scale.compute_and_set_domain( + color_scale.computeAndSetDomain( Object.keys(this.color_data).map((d) => { return this.color_data[d]; }), this.model_id + '_color' ); } else { - color_scale.del_domain([], this.model_id + '_color'); + color_scale.delDomain([], this.model_id + '_color'); } } } diff --git a/js/src/Mark.ts b/js/src/Mark.ts index 2443fe6a5..9efc27937 100644 --- a/js/src/Mark.ts +++ b/js/src/Mark.ts @@ -16,11 +16,13 @@ import * as widgets from '@jupyter-widgets/base'; import * as d3 from 'd3'; +import { ColorScale, GeoScale, LinearScale, OrdinalScale } from 'bqscales'; + import { MessageLoop } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; -import { d3GetEvent } from './utils'; +import { d3GetEvent, getLuminoWidget } from './utils'; import * as _ from 'underscore'; import { MarkModel } from './MarkModel'; import { Figure } from './Figure'; @@ -31,6 +33,23 @@ function is_defined(value) { return value !== null && value !== undefined; } +interface MarkScales { + x: LinearScale | OrdinalScale; + y: LinearScale | OrdinalScale; + width: LinearScale | OrdinalScale; + color: ColorScale; + link_color: ColorScale; + row: LinearScale | OrdinalScale; + column: LinearScale | OrdinalScale; + size: LinearScale | OrdinalScale; + opacity: LinearScale | OrdinalScale; + rotation: LinearScale | OrdinalScale; + skew: LinearScale | OrdinalScale; + sample: LinearScale | OrdinalScale; + count: LinearScale | OrdinalScale; + projection: GeoScale; +} + export abstract class Mark extends widgets.WidgetView { initialize() { this.display_el_classes = ['mark']; //classes on the element which @@ -42,7 +61,7 @@ export abstract class Mark extends widgets.WidgetView { super.initialize.apply(this, arguments); } - render() { + render(): PromiseLike { this.xPadding = 0; this.yPadding = 0; this.parent = this.options.parent; @@ -57,7 +76,7 @@ export abstract class Mark extends widgets.WidgetView { } this.tooltip_div = d3 .select(document.createElement('div')) - .attr('class', 'mark_tooltip') + .attr('class', 'bqplot_mark_tooltip') .attr('id', 'tooltip_' + this.uuid) .style('display', 'none') .style('opacity', 0); @@ -97,6 +116,7 @@ export abstract class Mark extends widgets.WidgetView { abstract draw(animate?); abstract set_ranges(); + set_scale_views() { // first, if this.scales was already defined, unregister from the // old ones. @@ -104,19 +124,25 @@ export abstract class Mark extends widgets.WidgetView { this.stopListening(this.scales[key]); } - const scale_models = this.model.get('scales'); + const scale_models = this.model.getScales(); const that = this; const scale_promises = {}; _.each(scale_models, (model: widgets.WidgetModel, key) => { scale_promises[key] = that.create_child_view(model); }); - return widgets.resolvePromisesDict(scale_promises).then((scales) => { - that.scales = scales; - that.set_positional_scales(); - that.initialize_additional_scales(); - that.set_ranges(); - that.trigger('mark_scales_updated'); - }); + + return ( + widgets + .resolvePromisesDict(scale_promises) + // @ts-ignore: TODO Should find a proper type for scale_promises + .then((scales: MarkScales) => { + that.scales = scales; + that.set_positional_scales(); + that.initialize_additional_scales(); + that.set_ranges(); + that.trigger('mark_scales_updated'); + }) + ); } set_positional_scales() { @@ -181,13 +207,13 @@ export abstract class Mark extends widgets.WidgetView { } highlight_axes() { - _.each(this.model.get('scales'), (model: any) => { + _.each(this.model.getScales(), (model: any) => { model.trigger('highlight_axis'); }); } unhighlight_axes() { - _.each(this.model.get('scales'), (model: any) => { + _.each(this.model.getScales(), (model: any) => { model.trigger('unhighlight_axis'); }); } @@ -315,7 +341,10 @@ export abstract class Mark extends widgets.WidgetView { 'display', null ); - MessageLoop.sendMessage(this.tooltip_view.pWidget, Widget.Msg.AfterShow); + MessageLoop.sendMessage( + getLuminoWidget(this.tooltip_view), + Widget.Msg.AfterShow + ); this.parent.popper.enableEventListeners(); this.move_tooltip(); } @@ -363,9 +392,9 @@ export abstract class Mark extends widgets.WidgetView { this.create_child_view(tooltip_model).then((view) => { this.tooltip_view = view; - MessageLoop.sendMessage(view.pWidget, Widget.Msg.BeforeAttach); + MessageLoop.sendMessage(getLuminoWidget(view), Widget.Msg.BeforeAttach); this.tooltip_div.node().appendChild(view.el); - MessageLoop.sendMessage(view.pWidget, Widget.Msg.AfterAttach); + MessageLoop.sendMessage(getLuminoWidget(view), Widget.Msg.AfterAttach); }); } } @@ -573,22 +602,7 @@ export abstract class Mark extends widgets.WidgetView { }; event_metadata: { [key: string]: { [key: string]: any } }; parent: Figure; - scales: { - rotation?; - skew?; - opacity?; - size?; - x?; - y?; - color?; - projection?; - count?; - sample?; - column?; - row?; - link_color?; - width?; - }; + scales: MarkScales; selected_indices: (number | [number, number])[]; selected_style: { [key: string]: string }; tooltip_div: d3.Selection; diff --git a/js/src/MarkModel.ts b/js/src/MarkModel.ts index d03389227..8c4fdfd00 100644 --- a/js/src/MarkModel.ts +++ b/js/src/MarkModel.ts @@ -13,14 +13,17 @@ * limitations under the License. */ -import * as widgets from '@jupyter-widgets/base'; +import { Dict, WidgetModel, unpack_models } from '@jupyter-widgets/base'; + +import { ScaleModel } from 'bqscales'; + import { semver_range } from './version'; import * as serialize from './serialize'; -export class MarkModel extends widgets.WidgetModel { +export class MarkModel extends WidgetModel { defaults() { return { - ...widgets.WidgetModel.prototype.defaults(), + ...WidgetModel.prototype.defaults(), _model_name: 'MarkModel', _model_module: 'bqplot', _view_module: 'bqplot', @@ -81,14 +84,14 @@ export class MarkModel extends widgets.WidgetModel { // disassociates the mark with the scale this.dirty = true; for (const key in scales) { - scales[key].del_domain([], this.model_id + '_' + key); + scales[key].delDomain([], this.model_id + '_' + key); } this.dirty = false; //TODO: Check if the views are being removed } handle_destroy() { - this.unregister_all_scales(this.get('scales')); + this.unregister_all_scales(this.getScales()); } get_key_for_dimension(dimension) { @@ -116,10 +119,14 @@ export class MarkModel extends widgets.WidgetModel { return data; } + getScales(): Dict { + return this.get('scales'); + } + static serializers = { - ...widgets.WidgetModel.serializers, - scales: { deserialize: widgets.unpack_models }, - tooltip: { deserialize: widgets.unpack_models }, + ...WidgetModel.serializers, + scales: { deserialize: unpack_models }, + tooltip: { deserialize: unpack_models }, selected: serialize.array_or_json_serializer, }; diff --git a/js/src/Markers.ts b/js/src/Markers.ts index eeb14e638..6f101918a 100644 --- a/js/src/Markers.ts +++ b/js/src/Markers.ts @@ -166,6 +166,72 @@ const bqSymbolTypes = d3.map({ 'Z' ); }, + plus: function (size, skew) { + // Use the same radius as square so that this mark is the same size as + // the square. + const r = Math.sqrt(size) / 2; + return ( + 'M0,' + + -r + + 'L' + + '0' + + ',' + + r + + 'M' + + -r + + ',' + + '0' + + 'L' + + r + + ',' + + '0' + ); + }, + crosshair: function (size, skew) { + // Use a radius so that this mark is the same size as + // the square in the sense that it fits just inside a square + // of the same size + const r = Math.sqrt(size) / 2; + return ( + 'M' + + -r + + ',' + + -r + + 'L' + + r + + ',' + + r + + 'M' + + -r + + ',' + + r + + 'L' + + r + + ',' + + -r + ); + }, + point: function (size) { + const pointFactor = 10; + const r = Math.sqrt(size / pi / pointFactor); + return ( + 'M0,' + + r + + 'A' + + r + + ',' + + r + + ' 0 1,1 0,' + + -r + + 'A' + + r + + ',' + + r + + ' 0 1,1 0,' + + r + + 'Z' + ); + }, }); function symbolSize() { diff --git a/js/src/MarketMap.ts b/js/src/MarketMap.ts index 724c3380d..d54f19905 100644 --- a/js/src/MarketMap.ts +++ b/js/src/MarketMap.ts @@ -13,35 +13,41 @@ * limitations under the License. */ -import * as widgets from '@jupyter-widgets/base'; +import { + uuid, + resolvePromisesDict, + Dict, + ViewList, + WidgetModel, +} from '@jupyter-widgets/base'; import * as _ from 'underscore'; import { MessageLoop } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; +import { Scale } from 'bqscales'; + import * as d3 from 'd3'; // var d3 =Object.assign({}, require("d3-array"), require("d3-format"), require("d3-selection"), require("d3-selection-multi"), require("d3-shape")); import { Figure } from './Figure'; +import { MarketMapModel } from './MarketMapModel'; import { Tooltip } from './Tooltip'; -import { Scale } from './Scale'; -import { ColorScale } from './ColorScale'; import * as popperreference from './PopperReference'; import popper from 'popper.js'; -import { applyAttrs, applyStyles } from './utils'; +import { applyAttrs, applyStyles, getLuminoWidget } from './utils'; export class MarketMap extends Figure { - protected renderImpl() { + protected async renderImpl() { const figureSize = this.getFigureSize(); this.width = figureSize.width; this.height = figureSize.height; - this.id = widgets.uuid(); + this.id = uuid(); this.scales = {}; this.set_top_el_style(); - this.margin = this.model.get('map_margin'); this.num_rows = this.model.get('rows'); this.num_cols = this.model.get('cols'); this.row_groups = this.model.get('row_groups'); @@ -78,7 +84,7 @@ export class MarketMap extends Figure { // code for tool tip to be displayed this.tooltip_div = d3 .select(document.createElement('div')) - .attr('class', 'mark_tooltip'); + .attr('class', 'bqplot_mark_tooltip'); applyStyles(this.tooltip_div, { opacity: 0, 'pointer-events': 'none' }); const freeze_tooltip_loc = this.model.get('freeze_tooltip_location'); @@ -110,16 +116,16 @@ export class MarketMap extends Figure { .attr('class', 'mainheading') .text(this.model.get('title')); applyAttrs(this.title, { - x: 0.5 * this.plotarea_width, + x: 0.5 * this.width, y: -(this.margin.top / 2.0), dy: '1em', }); applyStyles(this.title, this.model.get('title_style')); - return this.create_scale_views().then(() => { + await this.create_scale_views().then(async () => { this.create_listeners(); - this.axis_views = new widgets.ViewList(this.add_axis, null, this); + this.axis_views = new ViewList(this.add_axis, null, this); const axis_views_updated = this.axis_views.update(this.model.get('axes')); this.model.on('change:axes', (model, value, options) => { this.axis_views.update(value); @@ -136,7 +142,7 @@ export class MarketMap extends Figure { window.removeEventListener('resize', this.debouncedRelayout); }); - return Promise.all([Promise.resolve(), axis_views_updated]); + await Promise.all([Promise.resolve(), axis_views_updated]); }); } @@ -149,14 +155,10 @@ export class MarketMap extends Figure { } update_plotarea_dimensions() { - this.plotarea_width = this.width - this.margin.left - this.margin.right; - this.plotarea_height = this.height - this.margin.top - this.margin.bottom; - this.column_width = parseFloat( - (this.plotarea_width / this.num_cols).toFixed(2) - ); - this.row_height = parseFloat( - (this.plotarea_height / this.num_rows).toFixed(2) - ); + this.width = this.width - this.margin.left - this.margin.right; + this.height = this.height - this.margin.top - this.margin.bottom; + this.column_width = parseFloat((this.width / this.num_cols).toFixed(2)); + this.row_height = parseFloat((this.height / this.num_rows).toFixed(2)); } reset_drawing_controls() { @@ -244,7 +246,6 @@ export class MarketMap extends Figure { window.requestAnimationFrame(() => { // update ranges - that.margin = that.model.get('map_margin'); that.update_plotarea_dimensions(); // transform figure @@ -253,7 +254,7 @@ export class MarketMap extends Figure { 'translate(' + that.margin.left + ',' + that.margin.top + ')' ); applyAttrs(that.title, { - x: 0.5 * that.plotarea_width, + x: 0.5 * that.width, y: -(that.margin.top / 2.0), dy: '1em', }); @@ -321,10 +322,10 @@ export class MarketMap extends Figure { } update_domains() { - const color_scale_model = this.model.get('scales').color; + const color_scale_model = this.model.getScales().color; const color_data = this.model.get('color'); if (color_scale_model && color_data.length > 0) { - color_scale_model.compute_and_set_domain(color_data, this.model.model_id); + color_scale_model.computeAndSetDomain(color_data, this.model.model_id); } } @@ -416,25 +417,22 @@ export class MarketMap extends Figure { for (const key in this.scales) { this.stopListening(this.scales[key]); } - const scale_models = this.model.get('scales'); - const that = this; + const scale_models = this.model.getScales(); const scale_promises = {}; - _.each(scale_models, (model: widgets.WidgetModel, key) => { - scale_promises[key] = that.create_child_view(model); + _.each(scale_models, (model: WidgetModel, key) => { + scale_promises[key] = this.create_child_view(model); + }); + + return resolvePromisesDict(scale_promises).then((d: Dict) => { + this.scales = d; + this.set_scales(); }); - return widgets - .resolvePromisesDict(scale_promises) - .then((d: { [key: string]: Scale }) => { - that.scales = d; - that.set_scales(); - }); } set_scales() { const that = this; - const color_scale = this.scales.color as ColorScale; + const color_scale = this.scales.color; if (color_scale) { - color_scale.set_range(); color_scale.on('color_scale_range_changed', that.update_map_colors, that); this.update_domains(); this.listenTo(color_scale, 'domain_changed', () => { @@ -791,9 +789,15 @@ export class MarketMap extends Figure { .append('td') .attr('class', 'tooltiptext') .text((datum, index) => { - return ref_data === null || ref_data === undefined - ? null - : that.tooltip_formats[index](ref_data[datum]); + if (ref_data === null || ref_data === undefined) { + return null; + } + + if (ref_data[datum] === null || ref_data[datum] === undefined) { + return 'N/A'; + } + + return that.tooltip_formats[index](ref_data[datum]); }); } this.popper.enableEventListeners(); @@ -831,9 +835,9 @@ export class MarketMap extends Figure { tooltip_widget_creation_promise.then((view) => { that.tooltip_view = view as Tooltip; - MessageLoop.sendMessage(view.pWidget, Widget.Msg.BeforeAttach); + MessageLoop.sendMessage(getLuminoWidget(view), Widget.Msg.BeforeAttach); that.tooltip_div.node().appendChild(view.el); - MessageLoop.sendMessage(view.pWidget, Widget.Msg.AfterAttach); + MessageLoop.sendMessage(getLuminoWidget(view), Widget.Msg.AfterAttach); }); } } @@ -1002,12 +1006,6 @@ export class MarketMap extends Figure { end_points.push(e); }); - /* - console.log("new set"); - end_points.forEach(function(point) { console.log(point); }); - console.log("end set"); - */ - return end_points; } elem_remaining = elem_remaining - elem_filled; @@ -1076,12 +1074,6 @@ export class MarketMap extends Figure { } ); - /* - console.log("new set"); - end_points.forEach(function(point) { console.log(point); }); - console.log("end set"); - */ - return end_points; } if (cols_remaining !== 0 && elem_remaining > num_rows) { @@ -1222,12 +1214,6 @@ export class MarketMap extends Figure { }); } - /* - console.log("new set"); - end_points.forEach(function(point) { console.log(point); }); - console.log("end set"); - */ - return end_points; } @@ -1357,7 +1343,7 @@ export class MarketMap extends Figure { return [{ x: curr_x * this.column_width, y: curr_y * this.row_height }]; } - scales: { [key: string]: Scale }; + scales: Dict; num_rows: number; num_cols: number; row_groups: number; @@ -1389,4 +1375,5 @@ export class MarketMap extends Figure { end_points: number[]; tooltip_view: Tooltip; row_limits: number[]; + model: MarketMapModel; } diff --git a/js/src/MarketMapModel.ts b/js/src/MarketMapModel.ts index f5f85ab9d..44a8352d8 100644 --- a/js/src/MarketMapModel.ts +++ b/js/src/MarketMapModel.ts @@ -13,15 +13,18 @@ * limitations under the License. */ -import * as widgets from '@jupyter-widgets/base'; +import { WidgetModel, unpack_models } from '@jupyter-widgets/base'; +import { Dict } from '@jupyter-widgets/base'; + +import { ScaleModel } from 'bqscales'; import * as d3 from 'd3'; import * as serialize from './serialize'; import { semver_range } from './version'; -export class MarketMapModel extends widgets.WidgetModel { +export class MarketMapModel extends WidgetModel { defaults() { return { - ...widgets.WidgetModel.prototype.defaults(), + ...WidgetModel.prototype.defaults(), _model_name: 'MarketMapModel', _view_name: 'MarketMap', _model_module: 'bqplot', @@ -70,13 +73,18 @@ export class MarketMapModel extends widgets.WidgetModel { tooltip_widget: null, }; } + + getScales(): Dict { + return this.get('scales'); + } + static serializers = { - ...widgets.WidgetModel.serializers, - scales: { deserialize: widgets.unpack_models }, - axes: { deserialize: widgets.unpack_models }, - tooltip_widget: { deserialize: widgets.unpack_models }, - style: { deserialize: widgets.unpack_models }, - layout: { deserialize: widgets.unpack_models }, + ...WidgetModel.serializers, + scales: { deserialize: unpack_models }, + axes: { deserialize: unpack_models }, + tooltip_widget: { deserialize: unpack_models }, + style: { deserialize: unpack_models }, + layout: { deserialize: unpack_models }, names: serialize.array_or_json_serializer, groups: serialize.array_or_json_serializer, display_text: serialize.array_or_json_serializer, diff --git a/js/src/OHLC.ts b/js/src/OHLC.ts index cb38f73cd..dd2b24d07 100644 --- a/js/src/OHLC.ts +++ b/js/src/OHLC.ts @@ -14,6 +14,7 @@ */ import * as d3 from 'd3'; +import { isOrdinalScale } from 'bqscales'; import * as _ from 'underscore'; import { Mark } from './Mark'; import { OHLCModel } from './OHLCModel'; @@ -43,12 +44,12 @@ export class OHLC extends Mark { set_ranges() { if (this.scales.x) { - this.scales.x.set_range( + this.scales.x.setRange( this.parent.padded_range('x', this.scales.x.model) ); } if (this.scales.y) { - this.scales.y.set_range( + this.scales.y.setRange( this.parent.padded_range('y', this.scales.y.model) ); } @@ -376,7 +377,7 @@ export class OHLC extends Mark { return d.y[px.o] > d.y[px.c] ? down_color : up_color; }) .attr('stroke-width', this.model.get('stroke_width')); - if (x_scale.model.type === 'ordinal') { + if (isOrdinalScale(x_scale)) { // If we are out of range, we just set the mark in the final // bucket's range band. FIXME? const x_max = d3.max(this.parent.range('x')); @@ -498,7 +499,7 @@ export class OHLC extends Mark { } offset_in_x_units = data_point + min_x_difference; - if (x_scale.model.type === 'ordinal') { + if (isOrdinalScale(x_scale)) { scaled_mark_widths[i] = x_scale.scale.bandwidth() * 0.75; } else { scaled_mark_widths[i] = @@ -627,7 +628,7 @@ export class OHLC extends Mark { * distance between consecutive points. */ let min_distance: any = Number.POSITIVE_INFINITY; - const scales = this.model.get('scales'); + const scales = this.model.getScales(); for (let i = 1; i < this.model.mark_data.length; i++) { const dist = this.model.mark_data[i][0] - this.model.mark_data[i - 1][0]; diff --git a/js/src/OHLCModel.ts b/js/src/OHLCModel.ts index ecddb88cf..42e6dc9e9 100644 --- a/js/src/OHLCModel.ts +++ b/js/src/OHLCModel.ts @@ -135,7 +135,7 @@ export class OHLCModel extends MarkModel { if (!this.mark_data) { return; } - const scales = this.get('scales'); + const scales = this.getScales(); const xScale = scales.x, yScale = scales.y; let min_x_dist = Number.POSITIVE_INFINITY; @@ -170,10 +170,11 @@ export class OHLCModel extends MarkModel { // X Scale if (!this.get('preserve_domain').x && this.mark_data.length !== 0) { if (xScale.type === 'ordinal') { - xScale.compute_and_set_domain( + xScale.computeAndSetDomain( this.mark_data.map((d) => { return d[0]; - }) + }), + this.model_id ); } else { min = d3.min( @@ -189,19 +190,19 @@ export class OHLCModel extends MarkModel { if (max instanceof Date) { max = max.getTime(); } - xScale.set_domain( + xScale.setDomain( [min - min_x_dist / 2, max + min_x_dist / 2], this.model_id + '_x' ); } } else { - xScale.del_domain([], this.model_id + '_x'); + xScale.delDomain([], this.model_id + '_x'); } // Y Scale if (!this.get('preserve_domain').y && this.mark_data.length !== 0) { // Remember that elem contains OHLC data here so we cannot use - // compute_and_set_domain + // computeAndSetDomain let top = this.px.h; let bottom = this.px.l; if (top === -1 || bottom === -1) { @@ -221,12 +222,12 @@ export class OHLCModel extends MarkModel { if (max instanceof Date) { max = max.getTime(); } - yScale.set_domain( + yScale.setDomain( [min - max_y_height, max + max_y_height], this.model_id + '_y' ); } else { - yScale.del_domain([], this.model_id + '_y'); + yScale.delDomain([], this.model_id + '_y'); } } diff --git a/js/src/OrdinalColorScale.ts b/js/src/OrdinalColorScale.ts deleted file mode 100644 index 0a32796a8..000000000 --- a/js/src/OrdinalColorScale.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-scale")); -import { Scale } from './Scale'; -import * as colurutils from './ColorUtils'; - -export class OrdinalColorScale extends Scale { - render() { - this.scale = d3.scaleOrdinal(); - this.scale.domain(this.model.domain); - this.create_event_listeners(); - this.listenTo(this.model, 'domain_changed', this.model_domain_changed); - this.model.on_some_change(['colors', 'scheme'], this.colors_changed, this); - this.set_range(); - } - - set_range() { - if (this.model.get('colors').length > 0) { - this.scale.range( - colurutils.cycle_colors( - this.model.get('colors'), - this.scale.domain().length - ) - ); - } else { - this.scale.range( - colurutils.get_ordinal_scale_range( - this.model.get('scheme'), - this.scale.domain().length - ) - ); - } - this.trigger('color_scale_range_changed'); - } - - model_domain_changed() { - super.model_domain_changed(); - this.set_range(); - } - - colors_changed() { - this.set_range(); - } - - scale: d3.ScaleOrdinal; -} diff --git a/js/src/OrdinalColorScaleModel.ts b/js/src/OrdinalColorScaleModel.ts deleted file mode 100644 index 82420030d..000000000 --- a/js/src/OrdinalColorScaleModel.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { OrdinalScaleModel } from './OrdinalScaleModel'; - -export class OrdinalColorScaleModel extends OrdinalScaleModel { - defaults() { - return { - ...OrdinalScaleModel.prototype.defaults(), - _model_name: 'OrdinalColorScaleModel', - _view_name: 'OrdinalColorScale', - domain: [], - }; - } -} diff --git a/js/src/OrdinalScale.ts b/js/src/OrdinalScale.ts deleted file mode 100644 index 70dbb462e..000000000 --- a/js/src/OrdinalScale.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as d3 from 'd3'; -// var d3 =Object.assign({}, require("d3-scale")); -import { Scale } from './Scale'; -import * as _ from 'underscore'; - -export class OrdinalScale extends Scale { - render() { - this.scale = d3.scaleBand(); - this.scale.domain(this.model.domain); - this.offset = 0; - this.create_event_listeners(); - } - - set_range(range, padding) { - padding = padding === undefined ? 0 : padding; - this.scale.range(range); - this.scale.paddingInner(padding); - this.scale.paddingOuter(padding / 2.0); - this.offset = - this.scale.domain().length === 0 ? 0 : this.scale.bandwidth() / 2.0; - } - - expand_domain(old_range, new_range) { - // If you have a current range and then a new range and want to - // expand the domain to expand to the new range but keep it - // consistent with the previous one, this is the function you use. - - // I am trying to expand the ordinal scale by setting an - // appropriate value for the outer padding of the ordinal scale so - // that the starting point of each of the bins match. once that - // happens, the labels are placed at the center of the bins - - const unpadded_scale = this.scale.copy(); - unpadded_scale.range(old_range).paddingInner(0).paddingOuter(0); - const outer_padding = - unpadded_scale.range().length > 0 - ? Math.abs((new_range[1] - old_range[1]) / unpadded_scale.bandwidth()) - : 0; - this.scale.range(new_range); - this.scale.paddingInner(0.0); - this.scale.paddingOuter(outer_padding); - } - - invert(pixel) { - // returns the element in the domain which is closest to pixel - // value passed. If the pixel is outside the range of the scale, - const that = this; - const domain = this.scale.domain(); - const pixel_vals = domain.map((d) => { - return that.scale(d) + that.scale.bandwidth() / 2; - }); - const abs_diff = pixel_vals.map((d) => { - return Math.abs(pixel - d); - }); - return domain[abs_diff.indexOf(d3.min(abs_diff))]; - } - - invert_range(pixels) { - //return all the indices between a range - //pixels should be a non-decreasing two element array - const that = this; - const domain = this.scale.domain(); - const pixel_vals = domain.map((d) => { - return that.scale(d) + that.scale.bandwidth() / 2; - }); - const indices = _.range(pixel_vals.length); - const filtered_ind = indices.filter((ind) => { - return pixel_vals[ind] >= pixels[0] && pixel_vals[ind] <= pixels[1]; - }); - return filtered_ind.map((ind) => { - return domain[ind]; - }); - } - - scale: d3.ScaleBand; -} - -export function isOrdinalScale(scale: Scale): scale is OrdinalScale { - return scale.model.type === 'ordinal'; -} diff --git a/js/src/OrdinalScaleModel.ts b/js/src/OrdinalScaleModel.ts deleted file mode 100644 index 057729d37..000000000 --- a/js/src/OrdinalScaleModel.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ScaleModel } from './ScaleModel'; -import * as _ from 'underscore'; - -export class OrdinalScaleModel extends ScaleModel { - defaults() { - return { - ...ScaleModel.prototype.defaults(), - _model_name: 'OrdinalScaleModel', - _view_name: 'OrdinalScale', - domain: [], - }; - } - - typedRange(values) { - return values; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - } - - set_init_state() { - this.type = 'ordinal'; - this.min_from_data = true; - this.max_from_data = true; - } - - set_listeners() { - this.on('change:domain', this.domain_changed, this); - this.domain_changed(); - this.on('change:reverse', this.reverse_changed, this); - this.reverse_changed(); - } - - domain_changed() { - this.ord_domain = this.get('domain'); - if (this.ord_domain !== null && this.ord_domain.length !== 0) { - this.max_from_data = false; - this.min_from_data = false; - this.domain = this.ord_domain.map((d) => { - return d; - }); - this.trigger('domain_changed'); - } else { - this.max_from_data = true; - this.min_from_data = true; - this.domain = []; - this.update_domain(); - } - } - - reverse_changed(model?) { - const prev_reverse = - model === undefined ? false : model.previous('reverse'); - this.reverse = this.get('reverse'); - - // the domain should be reversed only if the previous value of reverse - // is different from the current value. During init, domain should be - // reversed only if reverse is set to True. - const reverse_domain = (prev_reverse + this.reverse) % 2; - if (this.domain.length > 0 && reverse_domain === 1) { - this.domain.reverse(); - this.trigger('domain_changed', this.domain); - } - } - - update_domain() { - let domain = []; - // TODO: check for hasOwnProperty - for (const id in this.domains) { - domain = _.union(domain, this.domains[id]); - } - if ( - this.domain.length !== domain.length || - _.intersection(this.domain, domain).length !== domain.length - ) { - this.domain = domain; - this.trigger('domain_changed', domain); - } - } - - compute_and_set_domain(data_array, id) { - // Takes an array and calculates the domain for the particular - // view. If you have the domain already calculated on your side, - // call set_domain function. - if (!this.min_from_data && !this.max_from_data) { - return; - } - if (data_array.length === 0) { - this.set_domain([], id); - return; - } - const domain = _.flatten(data_array); - if (this.get('reverse')) { - domain.reverse(); - } - this.set_domain(domain, id); - } - - min_from_data: boolean; - max_from_data: boolean; - ord_domain: any; -} diff --git a/js/src/PanZoom.ts b/js/src/PanZoom.ts index 205ab5f6a..ff892187b 100644 --- a/js/src/PanZoom.ts +++ b/js/src/PanZoom.ts @@ -19,15 +19,23 @@ import { d3GetEvent } from './utils'; import * as interaction from './Interaction'; import * as _ from 'underscore'; +import { Dict } from '@jupyter-widgets/base'; + +import { Scale, ScaleModel } from 'bqscales'; + +import { PanZoomModel } from './PanZoomModel'; + const nop = () => {}; +const IS_CHROMIUM = navigator.userAgent.includes(' Chrome/'); + export class PanZoom extends interaction.Interaction { render() { super.render(); const that = this; // chrome bug that requires a listener on the parent svg node // https://github.com/d3/d3-zoom/issues/231#issuecomment-802713799 - this.parent.svg.node().addEventListener(`wheel`, nop, { passive: false }); + this.parent.svg.node().addEventListener('wheel', nop, { passive: false }); this.d3el .style('cursor', 'move') .call( @@ -56,55 +64,87 @@ export class PanZoom extends interaction.Interaction { } remove() { - this.parent.svg.node().removeEventListener(`wheel`, nop); + this.parent.svg.node().removeEventListener('wheel', nop); super.remove(); } update_scales() { - const scales = this.model.get('scales'); - const that = this; + const scales = this.model.getScales(); this.scale_promises = widgets.resolvePromisesDict({ x: Promise.all( - (scales.x || []).map((model: widgets.WidgetModel) => { - return that.create_child_view(model); + (scales.x || []).map((model: ScaleModel) => { + return this.create_child_view(model) as unknown as Promise; }) ), y: Promise.all( - (scales.y || []).map((model: widgets.WidgetModel) => { - return that.create_child_view(model); + (scales.y || []).map((model: ScaleModel) => { + return this.create_child_view(model) as unknown as Promise; }) ), }); - widgets - .resolvePromisesDict(this.scale_promises) - .then(_.bind(this.set_ranges, this)); + + this.scale_promises.then(_.bind(this.set_ranges, this)); } set_ranges() { - const that = this; let i; this.scale_promises.then((scale_views) => { const xscale_views = scale_views.x; for (i = 0; i < xscale_views.length; i++) { - xscale_views[i].set_range( - that.parent.padded_range('x', xscale_views[i].model) + xscale_views[i].setRange( + this.parent.padded_range('x', xscale_views[i].model) ); } const yscale_views = scale_views.y; for (i = 0; i < yscale_views.length; i++) { - yscale_views[i].set_range( - that.parent.padded_range('y', yscale_views[i].model) + yscale_views[i].setRange( + this.parent.padded_range('y', yscale_views[i].model) ); } }); } + hasRotatedParent(element) { + const parent = element.parentNode; + /* Base case: the element has no parent or the parent is the element */ + if (!parent || parent.tagName === 'HTML') { + return false; + } + + /* Check if the parent is rotated */ + const computedStyle = window.getComputedStyle(parent); + const transform = computedStyle.getPropertyValue('transform'); + + if (transform !== 'none' && !transform.startsWith('matrix(1, 0, 0, 1')) { + return true; + } + + /* Recursively check the parent's parent */ + return this.hasRotatedParent(parent); + } + + mousePos() { + if (this.use_css_rotation_workaround) { + const mouseEvent = window.event as MouseEvent; + + /* the mouse position is only correct within this.el */ + if (mouseEvent.target === this.el) { + this.last_mouse_pos = [mouseEvent.offsetX, mouseEvent.offsetY]; + } + return this.last_mouse_pos; + } else { + return d3.mouse(this.el); + } + } + mousedown() { - this._mousedown(d3.mouse(this.el)); + this.use_css_rotation_workaround = + !IS_CHROMIUM && this.hasRotatedParent(this.el); + this._mousedown(this.mousePos()); } _mousedown(mouse_pos) { - const scales = this.model.get('scales'); + const scales = this.model.getScales(); this.active = true; this.d3el.style('cursor', 'move'); this.previous_pos = mouse_pos.slice(); @@ -112,10 +152,10 @@ export class PanZoom extends interaction.Interaction { // drift when Paning. this.domains_in_order = { x: (scales.x || []).map((s) => { - return s.get_domain_slice_in_order(); + return s.getDomainSliceInOrder(); }), y: (scales.y || []).map((s) => { - return s.get_domain_slice_in_order(); + return s.getDomainSliceInOrder(); }), }; } @@ -125,7 +165,7 @@ export class PanZoom extends interaction.Interaction { } mousemove() { - this._mousemove(d3.mouse(this.el)); + this._mousemove(this.mousePos()); } _mousemove(mouse_pos) { @@ -142,7 +182,7 @@ export class PanZoom extends interaction.Interaction { }; return this.scale_promises.then((scale_views) => { ['x', 'y'].forEach((dimension) => { - scale_views[dimension].forEach((view, index) => { + scale_views[dimension].forEach((view: any, index) => { if (view.scale.invert) { // Categorical scales don't have an inversion. const scale = view.scale @@ -177,7 +217,7 @@ export class PanZoom extends interaction.Interaction { const event = d3GetEvent(); event.preventDefault(); const delta = event.deltaY * -1; - const mouse_pos = d3.mouse(this.el); + const mouse_pos = this.mousePos(); this._zoom(mouse_pos, delta); } } @@ -193,13 +233,12 @@ export class PanZoom extends interaction.Interaction { const factor = Math.exp(-delta * 0.001); return this.scale_promises.then((scale_views) => { ['x', 'y'].forEach((dimension) => { - scale_views[dimension].forEach((view, index) => { + scale_views[dimension].forEach((view: any, index) => { if (view.scale.invert) { // Categorical scales don't have an inversion. const scale = view.scale; //.copy().domain(this.domains_in_order[dimension][index]); // convert the initial domain to pixel coordinates - let [domain_min, domain_max] = - view.model.get_domain_slice_in_order(); + let [domain_min, domain_max] = view.model.getDomainSliceInOrder(); const pixel_min = scale(domain_min); const pixel_max = scale(domain_max); // take a weighted average between the mouse pos and the original pixel coordinate @@ -221,7 +260,10 @@ export class PanZoom extends interaction.Interaction { } active: boolean; - scale_promises: any; + scale_promises: Promise>; previous_pos: [number, number]; domains_in_order: { x: any[]; y: any[] }; + model: PanZoomModel; + last_mouse_pos = null; + use_css_rotation_workaround: boolean; } diff --git a/js/src/PanZoomModel.ts b/js/src/PanZoomModel.ts index 65f5df21a..f1a291cba 100644 --- a/js/src/PanZoomModel.ts +++ b/js/src/PanZoomModel.ts @@ -13,14 +13,15 @@ * limitations under the License. */ -import * as widgets from '@jupyter-widgets/base'; +import { ScaleModel } from 'bqscales'; +import { WidgetModel, unpack_models, Dict } from '@jupyter-widgets/base'; import { semver_range } from './version'; import * as _ from 'underscore'; -export class PanZoomModel extends widgets.WidgetModel { +export class PanZoomModel extends WidgetModel { defaults() { return { - ...widgets.WidgetModel.prototype.defaults(), + ...WidgetModel.prototype.defaults(), _model_name: 'PanZoomModel', _view_name: 'PanZoom', _model_module: 'bqplot', @@ -40,38 +41,42 @@ export class PanZoomModel extends widgets.WidgetModel { } reset_scales() { - widgets.resolvePromisesDict(this.get('scales')).then((scales: any) => { - _.each( - Object.keys(scales), - (k) => { - _.each( - scales[k], - (s: any, i) => { - s.set_state(this.scales_states[k][i]); - }, - this - ); - }, - this - ); - }); + const scales = this.getScales(); + + _.each( + Object.keys(scales), + (k) => { + _.each( + scales[k], + (s: any, i) => { + s.set_state(this.scales_states[k][i]); + }, + this + ); + }, + this + ); } snapshot_scales() { // Save the state of the scales. - widgets.resolvePromisesDict(this.get('scales')).then((scales: any) => { - this.scales_states = Object.keys(scales).reduce((obj, key) => { - obj[key] = scales[key].map((s) => { - return s.get_state(); - }); - return obj; - }, {}); - }); + const scales = this.getScales(); + + this.scales_states = Object.keys(scales).reduce((obj, key) => { + obj[key] = scales[key].map((s) => { + return s.get_state(false); + }); + return obj; + }, {}); + } + + getScales(): Dict { + return this.get('scales'); } static serializers = { - ...widgets.WidgetModel.serializers, - scales: { deserialize: widgets.unpack_models }, + ...WidgetModel.serializers, + scales: { deserialize: unpack_models }, }; scales_states: { [key: string]: any[] }; diff --git a/js/src/Pie.ts b/js/src/Pie.ts index 91a63d615..5ab5a8812 100644 --- a/js/src/Pie.ts +++ b/js/src/Pie.ts @@ -69,13 +69,13 @@ export class Pie extends Mark { set_ranges() { if (this.scales.x) { - this.scales.x.set_range( + this.scales.x.setRange( this.parent.padded_range('x', this.scales.x.model) ); } if (this.scales.y) { - this.scales.y.set_range( + this.scales.y.setRange( this.parent.padded_range('y', this.scales.y.model) ); } @@ -600,7 +600,7 @@ export class Pie extends Mark { } compute_view_padding() { - const scales = this.model.get('scales'); + const scales = this.model.getScales(); const r = d3.max([ this.model.get('radius'), this.model.get('inner_radius'), diff --git a/js/src/PieModel.ts b/js/src/PieModel.ts index 3eb567bcb..c98d4f98e 100644 --- a/js/src/PieModel.ts +++ b/js/src/PieModel.ts @@ -115,13 +115,13 @@ export class PieModel extends MarkModel { } const color = this.get('color'); - const color_scale = this.get('scales').color; + const color_scale = this.getScales().color; if (color_scale) { if (!this.get('preserve_domain').color) { - color_scale.compute_and_set_domain(color, this.model_id + '_color'); + color_scale.computeAndSetDomain(color, this.model_id + '_color'); } else { - color_scale.del_domain([], this.model_id + '_color'); + color_scale.delDomain([], this.model_id + '_color'); } } } @@ -131,22 +131,22 @@ export class PieModel extends MarkModel { return; } - const scales = this.get('scales'); + const scales = this.getScales(); if (scales.x) { const x = scales.x.type === 'date' ? getDate(this.get('x')) : this.get('x'); if (!this.get('preserve_domain').x) { - scales.x.compute_and_set_domain([x], this.model_id + '_x'); + scales.x.computeAndSetDomain([x], this.model_id + '_x'); } else { - scales.x.del_domain([], this.model_id + '_x'); + scales.x.delDomain([], this.model_id + '_x'); } } if (scales.y) { if (!this.get('preserve_domain').y) { - scales.y.compute_and_set_domain([this.get('y')], this.model_id + '_y'); + scales.y.computeAndSetDomain([this.get('y')], this.model_id + '_y'); } else { - scales.y.del_domain([], this.model_id + '_y'); + scales.y.delDomain([], this.model_id + '_y'); } } } diff --git a/js/src/Scale.ts b/js/src/Scale.ts deleted file mode 100644 index 1f8fd360a..000000000 --- a/js/src/Scale.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as widgets from '@jupyter-widgets/base'; -import { ScaleModel } from './ScaleModel'; - -export class Scale extends widgets.WidgetView { - render() { - this.offset = 0; - } - - create_event_listeners() { - this.listenTo(this.model, 'domain_changed', this.model_domain_changed); - this.listenTo(this.model, 'highlight_axis', this.highlight_axis); - this.listenTo(this.model, 'unhighlight_axis', this.unhighlight_axis); - } - - set_range(range, padding?) { - this.scale.range(range); - } - - compute_and_set_domain(array, id) { - this.model.compute_and_set_domain(array, id); - } - - set_domain(array, id) { - this.model.set_domain(array, id); - } - - model_domain_changed() { - this.scale.domain(this.model.domain); - this.trigger('domain_changed'); - } - - highlight_axis() { - this.trigger('highlight_axis'); - } - - unhighlight_axis() { - this.trigger('unhighlight_axis'); - } - - expand_domain(old_range, new_range) { - // Base class function. No implementation. - // Implementation is particular to the child class - // if you have a current range and then a new range and want to - // expand the domain to expand to the new range but keep it - // consistent with the previous one, this is the function you use. - } - - offset: number; - scale: - | d3.ScaleTime - | d3.ScaleOrdinal - | d3.ScaleBand - | d3.ScaleLinear - | d3.ScaleLogarithmic; - - // Overriding super class - model: widgets.WidgetModel & ScaleModel; -} diff --git a/js/src/ScaleModel.ts b/js/src/ScaleModel.ts deleted file mode 100644 index 92c3f27fd..000000000 --- a/js/src/ScaleModel.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { WidgetModel } from '@jupyter-widgets/base'; -import { semver_range } from './version'; - -export abstract class ScaleModel extends WidgetModel { - defaults() { - return { - ...WidgetModel.prototype.defaults(), - _model_name: 'ScaleModel', - _view_name: 'Scale', - _model_module: 'bqplot', - _view_module: 'bqplot', - _model_module_version: semver_range, - _view_module_version: semver_range, - reverse: false, - allow_padding: true, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.domains = {}; - this.domain = []; - this.set_init_state(); - this.set_listeners(); - } - - set_init_state() { - this.type = 'base'; - } - - set_listeners() { - // Function to be implemented by inherited classes. - } - - set_domain(domain, id) { - // Call function only if you have computed the domain yourself. If - // you want the scale to compute the domain based on the data for - // your scale view, then call compute_and_set_domain - this.domains[id] = domain; - this.update_domain(); - } - - del_domain(domain, id) { - if (this.domains[id] !== undefined) { - delete this.domains[id]; - this.update_domain(); - } - } - - get_domain_slice_in_order() { - if (this.reverse) { - return this.domain.slice().reverse(); - } else { - return this.domain.slice(); - } - } - - abstract compute_and_set_domain(data_array, id); - abstract update_domain(); - - domains: any; - domain: any[]; - reverse: boolean; - type: string; -} diff --git a/js/src/ScatterBase.ts b/js/src/ScatterBase.ts index f28df0633..98e0b2250 100644 --- a/js/src/ScatterBase.ts +++ b/js/src/ScatterBase.ts @@ -13,14 +13,14 @@ * limitations under the License. */ -import * as d3 from 'd3'; +import * as _ from 'underscore'; // const d3 =Object.assign({}, require("d3-array"), require("d3-drag"), require("d3-selection"), require("d3-selection-multi")); +import * as d3 from 'd3'; +import { Scale } from 'bqscales'; const d3GetEvent = function () { return require('d3-selection').event; }.bind(this); import { Mark } from './Mark'; -import { Scale } from './Scale'; -import * as _ from 'underscore'; import { applyStyles } from './utils'; export abstract class ScatterBase extends Mark { @@ -97,22 +97,22 @@ export abstract class ScatterBase extends Mark { skew_scale = this.scales.skew, rotation_scale = this.scales.rotation; if (x_scale) { - x_scale.set_range(this.parent.padded_range('x', x_scale.model)); + x_scale.setRange(this.parent.padded_range('x', x_scale.model)); } if (y_scale) { - y_scale.set_range(this.parent.padded_range('y', y_scale.model)); + y_scale.setRange(this.parent.padded_range('y', y_scale.model)); } if (size_scale) { - size_scale.set_range([0, this.model.get('default_size')]); + size_scale.setRange([0, this.model.get('default_size')]); } if (opacity_scale) { - opacity_scale.set_range([0.2, 1]); + opacity_scale.setRange([0.2, 1]); } if (skew_scale) { - skew_scale.set_range([0, 1]); + skew_scale.setRange([0, 1]); } if (rotation_scale) { - rotation_scale.set_range([0, 180]); + rotation_scale.setRange([0, 180]); } } diff --git a/js/src/ScatterBaseModel.ts b/js/src/ScatterBaseModel.ts index c7e4c2d0b..d6090447c 100644 --- a/js/src/ScatterBaseModel.ts +++ b/js/src/ScatterBaseModel.ts @@ -122,19 +122,19 @@ export class ScatterBaseModel extends MarkModel { // color scale needs an issue in DateScaleModel to be fixed. It // should be moved here as soon as that is fixed. - const scales = this.get('scales'); + const scales = this.getScales(); for (const key in scales) { if (scales.hasOwnProperty(key)) { const scale = scales[key]; if (!this.get('preserve_domain')[key]) { - scale.compute_and_set_domain( + scale.computeAndSetDomain( this.mark_data.map((elem) => { return elem[key]; }), this.model_id + key ); } else { - scale.del_domain([], this.model_id + key); + scale.delDomain([], this.model_id + key); } } } diff --git a/js/src/ScatterGL.ts b/js/src/ScatterGL.ts deleted file mode 100644 index 44f56abba..000000000 --- a/js/src/ScatterGL.ts +++ /dev/null @@ -1,1320 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Mark } from './Mark'; -import * as d3 from 'd3'; -import * as markers from './Markers'; -import * as _ from 'underscore'; -import { deepCopy } from './utils'; -import { ScatterGLModel } from './ScatterGLModel'; -import { Scale } from './Scale'; -import * as THREE from 'three'; - -type TypedArray = - | Int8Array - | Uint8Array - | Int16Array - | Uint16Array - | Int32Array - | Uint32Array - | Uint8ClampedArray - | Float32Array - | Float64Array; - -const bqSymbol = markers.symbol; - -const to_float_array = function (value: any) { - if (value instanceof Float32Array) { - return value; - } - if (typeof value[Symbol.iterator] === 'function') { - const N = value.length; - const array32 = new Float32Array(N); - for (let i = 0; i < N; i++) { - array32[i] = value[i]; - } - return array32; - } - return new Float32Array(value); -}; - -const color_to_array_rgba = function (color, default_color?) { - const color_name = color || default_color || [0, 0, 0, 0]; - if (color_name == 'none') { - return [0, 0, 0, 0]; - } else { - const color = new THREE.Color(color_name); - return [color.r, color.g, color.b, 1.0]; - } -}; - -const create_colormap = function (scale) { - // convert the d3 color scale to a texture - const colors = scale ? scale.model.color_range : ['#ff0000', '#ff0000']; - const color_scale = d3 - .scaleLinear() - .range(colors) - .domain(_.range(colors.length).map((i) => i / (colors.length - 1))); - const colormap_array = []; - const N = 256; - _.map(_.range(N), (i) => { - const index = i / (N - 1); - const rgb = d3.color(String(color_scale(index))).hex(); - const rgb_str = String(rgb); - const rgb_arr = [ - parseInt('0x' + rgb_str.substring(1, 3)), - parseInt('0x' + rgb_str.substring(3, 5)), - parseInt('0x' + rgb_str.substring(5, 7)), - ]; - colormap_array.push(rgb_arr[0], rgb_arr[1], rgb_arr[2]); - }); - const colormap_arr = new Uint8Array(colormap_array); - const colormap_texture = new THREE.DataTexture( - colormap_arr, - N, - 1, - THREE.RGBFormat, - THREE.UnsignedByteType - ); - colormap_texture.needsUpdate = true; - - return colormap_texture; -}; - -class AttributeParameters { - constructor( - array: TypedArray, - item_size = 1, - mesh_per_attribute = 1, - normalized = false - ) { - this.array = array; - this.item_size = item_size; - this.mesh_per_attribute = mesh_per_attribute; - this.normalized = normalized; - } - - array: TypedArray; - item_size: number; - mesh_per_attribute: number; - normalized: boolean; -} - -class ColorAttributeParameters extends AttributeParameters { - constructor( - array: TypedArray, - item_size: number = 1, - mesh_per_attribute: number = 1, - normalized: boolean = false, - use_colormap: boolean = true - ) { - super(array, item_size, mesh_per_attribute, normalized); - this.use_colormap = use_colormap; - } - - use_colormap: boolean; -} - -class SelectionAttributeParameters extends AttributeParameters { - constructor( - array: TypedArray, - item_size: number = 1, - mesh_per_attribute: number = 1, - normalized: boolean = false, - use_selection: boolean = true - ) { - super(array, item_size, mesh_per_attribute, normalized); - this.use_selection = use_selection; - } - - use_selection: boolean; -} - -export class ScatterGL extends Mark { - async render() { - const base_render_promise = super.render(); - - this.transitions = []; - this.invalidated_pixel_position = true; - - // only used for the legend - this.dot = bqSymbol().type(this.model.get('marker')); - - // Create square geometry (two triangles) for markers - this.instanced_geometry = new THREE.InstancedBufferGeometry(); - - const vertices = new Float32Array([ - -0.5, 0.5, 0, 0.5, 0.5, 0, -0.5, -0.5, 0, 0.5, -0.5, 0, - ]); - this.instanced_geometry.addAttribute( - 'position', - new THREE.Float32BufferAttribute(vertices, 3) - ); - - const uv = new Float32Array([0, 1, 1, 1, 0, 0, 1, 0]); - this.instanced_geometry.addAttribute( - 'uv', - new THREE.Float32BufferAttribute(uv, 2) - ); - - const indices = new Uint16Array([0, 2, 1, 2, 3, 1]); - this.instanced_geometry.index = new THREE.Uint16BufferAttribute(indices, 1); - - // Create material for markers - this.scatter_material = new THREE.RawShaderMaterial({ - uniforms: { - domain_x: { type: '2f', value: [0, 10] }, - domain_y: { type: '2f', value: [-12, 12] }, - domain_z: { type: '2f', value: [0, 1] }, - domain_size: { type: '2f', value: [0, 1] }, - domain_color: { type: '2f', value: [0, 1] }, - domain_rotation: { type: '2f', value: [0, 180] }, - domain_opacity: { type: '2f', value: [0, 1] }, - range_x: { type: '2f', value: [0, 1] }, - range_y: { type: '2f', value: [0, 1] }, - range_z: { type: '2f', value: [0, 1] }, - range_size: { type: '2f', value: [0, 1] }, - range_rotation: { type: '2f', value: [0, Math.PI] }, - range_opacity: { type: '2f', value: [0, 1] }, - animation_time_x: { type: 'f', value: 1 }, - animation_time_y: { type: 'f', value: 1 }, - animation_time_z: { type: 'f', value: 1 }, - animation_time_size: { type: 'f', value: 1 }, - animation_time_color: { type: 'f', value: 1 }, - animation_time_rotation: { type: 'f', value: 1 }, - animation_time_opacity: { type: 'f', value: 1 }, - - has_selection: { type: 'b', value: false }, - has_hover: { type: 'b', value: false }, - - has_selected_fill: { type: 'b', value: false }, - has_selected_stroke: { type: 'b', value: false }, - has_selected_opacity: { type: 'b', value: false }, - has_unselected_fill: { type: 'b', value: false }, - has_unselected_stroke: { type: 'b', value: false }, - has_unselected_opacity: { type: 'b', value: false }, - - has_hovered_fill: { type: 'b', value: false }, - has_hovered_stroke: { type: 'b', value: false }, - has_hovered_opacity: { type: 'b', value: false }, - has_unhovered_fill: { type: 'b', value: false }, - has_unhovered_stroke: { type: 'b', value: false }, - has_unhovered_opacity: { type: 'b', value: false }, - - selected_fill: { type: '4f', value: [1, 0, 0, 1.0] }, - selected_stroke: { type: '4f', value: [1, 0, 0, 1.0] }, - selected_opacity: { value: 1.0 }, - unselected_fill: { type: '4f', value: [1, 0, 0, 1.0] }, - unselected_stroke: { type: '4f', value: [1, 0, 0, 1.0] }, - unselected_opacity: { value: 1.0 }, - hovered_fill: { type: '4f', value: [0, 1, 0, 1.0] }, - hovered_opacity: { value: 1.0 }, - hovered_stroke: { type: '4f', value: [0, 1, 0, 1.0] }, - unhovered_fill: { type: '4f', value: [0, 1, 0, 1.0] }, - unhovered_stroke: { type: '4f', value: [0, 1, 0, 1.0] }, - unhovered_opacity: { value: 1.0 }, - - default_stroke_color: { type: '4f', value: [0, 0, 0, 0] }, - - colormap: { type: 't', value: null }, - fill: { type: 'b', value: true }, - stroke_width: { type: 'f', value: 1.5 }, - marker_scale: { type: 'f', value: 1.0 }, - }, - vertexShader: require('raw-loader!../shaders/scatter-vertex.glsl') - .default, - fragmentShader: require('raw-loader!../shaders/scatter-fragment.glsl') - .default, - transparent: true, - depthTest: false, - depthWrite: false, - // background reading for blending: - // https://limnu.com/webgl-blending-youre-probably-wrong/ - blending: THREE.CustomBlending, - - blendEquation: THREE.AddEquation, - blendSrc: THREE.OneFactor, - blendDst: THREE.OneMinusSrcAlphaFactor, - - blendEquationAlpha: THREE.AddEquation, - blendSrcAlpha: THREE.OneFactor, - blendDstAlpha: THREE.OneMinusSrcAlphaFactor, - }); - - // Create mesh - this.mesh = new THREE.Mesh(this.instanced_geometry, this.scatter_material); - - await base_render_promise; - - this.camera = new THREE.OrthographicCamera( - -1 / 2, - 1 / 2, - 1 / 2, - -1 / 2, - -10000, - 10000 - ); - this.camera.position.z = 10; - this.scene = new THREE.Scene(); - - const x_parameters = new AttributeParameters( - to_float_array(this.model.get('x')) - ); - this.x = this.initialize_attribute('x', x_parameters); - this.x_previous = this.initialize_attribute('x_previous', x_parameters); - - const y_parameters = new AttributeParameters( - to_float_array(this.model.get('y')) - ); - this.y = this.initialize_attribute('y', y_parameters); - this.y_previous = this.initialize_attribute('y_previous', y_parameters); - - this.markers_number = Math.min(this.x.array.length, this.y.array.length); - this.instanced_geometry.maxInstancedCount = this.markers_number; - - const color_parameters = this.get_color_attribute_parameters(); - this.color = this.initialize_attribute('color', color_parameters); - this.scatter_material.defines['USE_COLORMAP'] = - color_parameters.use_colormap; - - const opacity_parameters = this.get_opacity_attribute_parameters(); - this.opacity = this.initialize_attribute('opacity', opacity_parameters); - this.opacity_previous = this.initialize_attribute( - 'opacity_previous', - opacity_parameters - ); - - const size_parameters = this.get_size_attribute_parameters(); - this.size = this.initialize_attribute('size', size_parameters); - this.size_previous = this.initialize_attribute( - 'size_previous', - size_parameters - ); - - const rotation_parameters = this.get_rotation_attribute_parameters(); - this.rotation = this.initialize_attribute('rotation', rotation_parameters); - this.rotation_previous = this.initialize_attribute( - 'rotation_previous', - rotation_parameters - ); - - const selected_parameters = this.get_selected_attribute_parameters(); - this.selected = this.initialize_attribute('selected', selected_parameters); - this.scatter_material.uniforms['has_selection'].value = - selected_parameters.use_selection; - - this.scatter_material.needsUpdate = true; - - this.scene.add(this.mesh); - - this.create_listeners(); - this.compute_view_padding(); - this.update_scene(); - this.listenTo(this.parent, 'margin_updated', () => { - this.update_scene(); - }); - } - - initialize_attribute(name: string, parameters: AttributeParameters) { - const attribute = new THREE.InstancedBufferAttribute( - parameters.array, - parameters.item_size, - parameters.mesh_per_attribute - ); - attribute.normalized = parameters.normalized; - attribute.dynamic = true; - this.instanced_geometry.addAttribute(name, attribute); - - return attribute; - } - - get_color_attribute_parameters() { - if (this.model.get('color')) { - const color = this.model.get('color'); - - // TODO Use `default_color`? - let array: Float32Array; - if (color.length < this.markers_number) { - array = to_float_array(this.markers_number); - array.set(color); - } else { - array = to_float_array(color); - } - - return new ColorAttributeParameters(array, 1, 1, true, true); - } else { - let colors = this.model.get('colors'); - - if (!colors) { - const color = - (this.model.get('unselected_style') || {})['fill'] || 'orange'; - colors = [color]; - } - - let array: Float32Array; - let mesh_per_attribute: number; - if (colors.length == 1) { - const color = new THREE.Color(colors[0]); - - array = to_float_array([color.r, color.g, color.b]); - mesh_per_attribute = this.markers_number; - } else { - array = to_float_array(this.markers_number * 3); - _.each(_.range(this.markers_number), (i) => { - const color = new THREE.Color(colors[i % colors.length]); - array[i * 3 + 0] = color.r; - array[i * 3 + 1] = color.g; - array[i * 3 + 2] = color.b; - }); - mesh_per_attribute = 1; - } - - return new ColorAttributeParameters( - array, - 3, - mesh_per_attribute, - false, - false - ); - } - } - - get_opacity_attribute_parameters() { - let opacities = this.model.get('opacities') || [1]; - - if (opacities.length == 0) { - opacities = [1]; - } - - if (this.model.get('opacity')) { - const opacity = this.model.get('opacity'); - - let array: Float32Array; - if (opacity.length < this.markers_number) { - array = to_float_array(this.markers_number); - array.set(opacity); - - _.each(_.range(this.markers_number - opacity.length), (i) => { - i = i + opacity.length; - array[i] = opacities[i % opacities.length]; - }); - } else { - array = to_float_array(opacity); - } - - return new AttributeParameters(array, 1, 1); - } else { - let array: Float32Array; - let mesh_per_attribute: number; - if (opacities.length == 1) { - array = to_float_array(opacities); - mesh_per_attribute = this.markers_number; - } else { - array = to_float_array(this.markers_number); - mesh_per_attribute = 1; - _.each(_.range(this.markers_number), (i) => { - array[i] = opacities[i % opacities.length]; - }); - } - - return new AttributeParameters(array, 1, mesh_per_attribute); - } - } - - get_size_attribute_parameters() { - if (this.model.get('size')) { - // One size per marker - const size = this.model.get('size'); - - let array: Float32Array; - if (size.length < this.markers_number) { - array = to_float_array(this.markers_number); - array.fill(this.model.get('default_size')); - array.set(size); - } else { - array = to_float_array(size); - } - - return new AttributeParameters(array, 1, 1); - } else { - // Same size for all the markers - return new AttributeParameters( - to_float_array([this.model.get('default_size')]), - 1, - this.markers_number - ); - } - } - - get_rotation_attribute_parameters() { - if (this.model.get('rotation')) { - const rotation = this.model.get('rotation'); - - let array: Float32Array; - if (rotation.length < this.markers_number) { - array = to_float_array(this.markers_number); - array.set(rotation); - } else { - array = to_float_array(rotation); - } - - return new AttributeParameters(array, 1, 1); - } else { - return new AttributeParameters(to_float_array(1), 1, this.markers_number); - } - } - - get_selected_attribute_parameters() { - if (this.model.get('selected')) { - const selected = this.model.get('selected'); - const array = to_float_array(this.markers_number); - - for (let i = 0; i < selected.length; i++) { - if (selected[i] < array.length) { - array[selected[i]] = 1; - } - } - - return new SelectionAttributeParameters(array, 1, 1, false, true); - } else { - return new SelectionAttributeParameters( - to_float_array(1), - 1, - this.markers_number, - false, - false - ); - } - } - - update_scene() { - this.parent.update_gl(); - } - - render_gl() { - this.set_ranges(); - const fig = this.parent; - const x_scale = this.scales.x ? this.scales.x : this.parent.scale_x; - const y_scale = this.scales.y ? this.scales.y : this.parent.scale_y; - - const range_x = this.parent.padded_range('x', x_scale.model); - const range_y = this.parent.padded_range('y', y_scale.model); - - _.each(['selected', 'hovered'], (style_type) => { - _.each(['stroke', 'fill', 'opacity'], (style_property) => { - this.scatter_material.uniforms[ - `has_${style_type}_${style_property}` - ].value = Boolean( - this.model.get(`${style_type}_style`)[style_property] - ); - this.scatter_material.uniforms[ - `has_un${style_type}_${style_property}` - ].value = Boolean( - this.model.get(`un${style_type}_style`)[style_property] - ); - if (_.contains(['opacity'], style_property)) { - this.scatter_material.uniforms[ - `${style_type}_${style_property}` - ].value = this.model.get(`${style_type}_style`)[style_property]; - this.scatter_material.uniforms[ - `un${style_type}_${style_property}` - ].value = this.model.get(`un${style_type}_style`)[style_property]; - } else { - this.scatter_material.uniforms[ - `${style_type}_${style_property}` - ].value = color_to_array_rgba( - this.model.get(`${style_type}_style`)[style_property], - 'green' - ); - this.scatter_material.uniforms[ - `un${style_type}_${style_property}` - ].value = color_to_array_rgba( - this.model.get(`un${style_type}_style`)[style_property], - 'green' - ); - } - }); - }); - - this.camera.left = 0; - this.camera.right = fig.plotarea_width; - this.camera.bottom = 0; - this.camera.top = fig.plotarea_height; - this.camera.updateProjectionMatrix(); - - this.scatter_material.uniforms['range_x'].value = range_x; - this.scatter_material.uniforms['range_y'].value = [range_y[1], range_y[0]]; // flipped coordinates in WebGL - this.scatter_material.uniforms['domain_x'].value = x_scale.scale.domain(); - this.scatter_material.uniforms['domain_y'].value = y_scale.scale.domain(); - - if (this.scales.size) { - this.scatter_material.uniforms['range_size'].value = - this.scales.size.scale.range(); - this.scatter_material.uniforms['domain_size'].value = - this.scales.size.scale.domain(); - } else { - const size = this.model.get('default_size'); - this.scatter_material.uniforms['range_size'].value = [0, size]; - this.scatter_material.uniforms['domain_size'].value = [0, size]; - } - - if (this.scales.rotation) { - this.scatter_material.uniforms['range_rotation'].value = - this.scales.rotation.scale.range(); - this.scatter_material.uniforms['domain_rotation'].value = - this.scales.rotation.scale.domain(); - } - - if (this.scales.opacity) { - this.scatter_material.uniforms['range_opacity'].value = - this.scales.opacity.scale.range(); - this.scatter_material.uniforms['domain_opacity'].value = - this.scales.opacity.scale.domain(); - } - - const renderer = fig.renderer; - renderer.render(this.scene, this.camera); - - const transitions_todo = []; - for (let i = 0; i < this.transitions.length; i++) { - const t = this.transitions[i]; - if (!t.is_done()) { - transitions_todo.push(t); - } - t.update(); - } - this.transitions = transitions_todo; - if (this.transitions.length > 0) { - this.update_scene(); - } - } - - create_listeners() { - super.create_listeners(); - - this.listenTo(this.model, 'change:x', this.update_x); - this.listenTo(this.model, 'change:y', this.update_y); - - this.listenTo( - this.model, - 'change:color change:colors change:unselected_style', - this.update_color - ); - this.listenTo( - this.model, - 'change:opacity change:opacities', - this.update_opacity - ); - this.listenTo( - this.model, - 'change:size change:default_size', - this.update_size - ); - this.listenTo(this.model, 'change:rotation', this.update_rotation); - this.listenTo(this.model, 'change:selected', this.update_selected); - - this.listenTo(this.model, 'change:marker', this.update_marker); - this.update_marker(); - - this.listenTo(this.model, 'change:stroke', this.update_stroke); - this.update_stroke(); - - this.listenTo(this.model, 'change:stroke_width', this.update_stroke_width); - this.update_stroke_width(); - - const sync_visible = () => { - this.mesh.visible = this.model.get('visible'); - this.update_scene(); - }; - this.listenTo(this.model, 'change:visible', sync_visible); - sync_visible(); - - const sync_fill = () => { - this.scatter_material.defines['FILL'] = this.model.get('fill') ? 1 : 0; - this.scatter_material.needsUpdate = true; - this.update_scene(); - }; - this.listenTo(this.model, 'change:fill', sync_fill); - sync_fill(); - - this.listenTo(this.model, 'change', this.update_legend); - } - - update_attribute( - name: string, - value: THREE.InstancedBufferAttribute, - new_parameters: AttributeParameters - ) { - // Workaround, updating `meshPerAttribute` does not work in ThreeJS and can result in a buffer overflow - // so we need to re-initialize the attribute. Same for an array size increase. - if (value.meshPerAttribute != new_parameters.mesh_per_attribute) { - value = this.initialize_attribute(name, new_parameters); - } else if (value.array.length < new_parameters.array.length) { - value = this.initialize_attribute(name, new_parameters); - } else { - value.itemSize = new_parameters.item_size; - value.setArray(new_parameters.array); - } - - value.needsUpdate = true; - - return value; - } - - update_attributes( - name: string, - value: THREE.InstancedBufferAttribute, - value_previous: THREE.InstancedBufferAttribute, - new_parameters: AttributeParameters, - animate: boolean = true, - after_animation: Function = () => {} - ) { - if (animate) { - // `value_previous.array` must have at least the same length as `value.array` in order for animation to work - if ( - value.array.length < new_parameters.array.length && - value.meshPerAttribute == new_parameters.mesh_per_attribute - ) { - const array = deepCopy(new_parameters.array); - // array.fill(default_value); - array.set(value.array); - value_previous = this.update_attribute( - name + '_previous', - value_previous, - new AttributeParameters( - array, - value.itemSize, - value.meshPerAttribute, - value.normalized - ) - ); - } - // meshPerAttribute changed but not the array size, it is very likely that the number of markers has changed, value_previous must - // have the right meshPerAttribute - else if ( - value.array.length == new_parameters.array.length && - value.meshPerAttribute != new_parameters.mesh_per_attribute - ) { - value_previous = this.update_attribute( - name + '_previous', - value_previous, - new AttributeParameters( - value.array, - value.itemSize, - new_parameters.mesh_per_attribute, - value.normalized - ) - ); - } else { - value_previous = this.update_attribute( - name + '_previous', - value_previous, - new AttributeParameters( - value.array, - value.itemSize, - value.meshPerAttribute, - value.normalized - ) - ); - } - - value = this.update_attribute(name, value, new_parameters); - - this.animate_attribute(name, after_animation); - } else { - value_previous = this.update_attribute( - name + '_previous', - value_previous, - new_parameters - ); - value = this.update_attribute(name, value, new_parameters); - } - - return [value, value_previous]; - } - - animate_attribute(name: string, after_animation: Function = () => {}) { - this.scatter_material.uniforms['animation_time_' + name]['value'] = 0; - const set = (value) => { - this.scatter_material.uniforms['animation_time_' + name]['value'] = value; - }; - this.transition(set, after_animation, this); - } - - update_x(rerender: boolean = true) { - const x_array = to_float_array(this.model.get('x')); - - const new_markers_number = Math.min(x_array.length, this.y.array.length); - - // If the `markers_number` changes - if (this.markers_number != new_markers_number) { - this.update_markers_number(new_markers_number); - } - - [this.x, this.x_previous] = this.update_attributes( - 'x', - this.x, - this.x_previous, - new AttributeParameters(x_array, 1, 1) - ); - - if (rerender) { - this.update_scene(); - } - } - - update_y(rerender: boolean = true) { - const y_array = to_float_array(this.model.get('y')); - - const new_markers_number = Math.min(this.x.array.length, y_array.length); - - // If the `markers_number` changes - if (this.markers_number != new_markers_number) { - this.update_markers_number(new_markers_number); - } - - [this.y, this.y_previous] = this.update_attributes( - 'y', - this.y, - this.y_previous, - new AttributeParameters(y_array, 1, 1) - ); - - if (rerender) { - this.update_scene(); - } - } - - update_markers_number(n: number) { - const old_markers_number = this.markers_number; - - this.markers_number = n; - this.instanced_geometry.maxInstancedCount = n; - - // Increasing the number of markers, we need to update buffer sizes in - // order to prevent buffer overflows. We assume here that - // `update_markers_number` is called from `update_x` or `update_y` hence they - // are already correctly sized - // If the number of markers has decreased, no need to change the buffer sizes - if (this.markers_number > old_markers_number) { - this.update_color(false); - this.update_opacity(false); - this.update_size(false); - this.update_rotation(false); - this.update_selected(false); - } - } - - update_color(rerender: boolean = true) { - const color_parameters = this.get_color_attribute_parameters(); - this.color = this.update_attribute('color', this.color, color_parameters); - this.color.normalized = color_parameters.normalized; - this.scatter_material.defines['USE_COLORMAP'] = - color_parameters.use_colormap; - - this.scatter_material.needsUpdate = true; - - if (rerender) { - this.update_scene(); - } - } - - update_opacity(rerender: boolean = true) { - const opacity_parameters = this.get_opacity_attribute_parameters(); - [this.opacity, this.opacity_previous] = this.update_attributes( - 'opacity', - this.opacity, - this.opacity_previous, - opacity_parameters - ); - - if (rerender) { - this.update_scene(); - } - } - - update_size(rerender: boolean = true) { - const size_parameters = this.get_size_attribute_parameters(); - [this.size, this.size_previous] = this.update_attributes( - 'size', - this.size, - this.size_previous, - size_parameters - ); - - if (rerender) { - this.update_scene(); - } - } - - update_rotation(rerender: boolean = true) { - const rotation_parameters = this.get_rotation_attribute_parameters(); - [this.rotation, this.rotation_previous] = this.update_attributes( - 'rotation', - this.rotation, - this.rotation_previous, - rotation_parameters - ); - - if (rerender) { - this.update_scene(); - } - } - - update_selected(rerender: boolean = true) { - const selected_parameters = this.get_selected_attribute_parameters(); - this.selected = this.update_attribute( - 'selected', - this.selected, - selected_parameters - ); - this.scatter_material.uniforms['has_selection'].value = - selected_parameters.use_selection; - - if (rerender) { - this.update_scene(); - } - } - - update_marker() { - const FAST_CIRCLE = 1; - const FAST_SQUARE = 2; - const FAST_ARROW = 3; - const FAST_CROSS = 4; - const FAST_TRIANGLE_UP = 5; - const FAST_TRIANGLE_DOWN = 6; - - const marker = this.model.get('marker'); - this.dot.type(marker); - - if (marker === 'circle') { - // same as in ./Markers.js - this.scatter_material.uniforms.marker_scale.value = - 1 / Math.sqrt(Math.PI); - this.scatter_material.defines['FAST_DRAW'] = FAST_CIRCLE; - } - if (marker === 'square') { - this.scatter_material.uniforms.marker_scale.value = 1 / 2; - this.scatter_material.defines['FAST_DRAW'] = FAST_SQUARE; - } - if (marker === 'arrow') { - this.scatter_material.uniforms.marker_scale.value = 2; - this.scatter_material.defines['FAST_DRAW'] = FAST_ARROW; - } - if (marker === 'cross') { - this.scatter_material.uniforms.marker_scale.value = - 3 / (2 * Math.sqrt(5)); - this.scatter_material.defines['FAST_DRAW'] = FAST_CROSS; - } - if (marker === 'triangle-up') { - this.scatter_material.uniforms.marker_scale.value = 2; - this.scatter_material.defines['FAST_DRAW'] = FAST_TRIANGLE_UP; - } - if (marker === 'triangle-down') { - this.scatter_material.uniforms.marker_scale.value = 2; - this.scatter_material.defines['FAST_DRAW'] = FAST_TRIANGLE_DOWN; - } - - this.scatter_material.needsUpdate = true; - this.update_scene(); - } - - update_stroke() { - const stroke = this.model.get('stroke'); - - if (stroke) { - this.scatter_material.uniforms.default_stroke_color.value = - color_to_array_rgba(stroke); - this.scatter_material.defines['HAS_DEFAULT_STROKE_COLOR'] = true; - } else { - this.scatter_material.defines['HAS_DEFAULT_STROKE_COLOR'] = false; - } - - this.scatter_material.needsUpdate = true; - this.update_scene(); - } - - update_stroke_width() { - this.scatter_material.uniforms.stroke_width.value = - this.model.get('stroke_width'); - this.update_scene(); - } - - update_color_map() { - this.scatter_material.uniforms['colormap'].value = create_colormap( - this.scales.color - ); - - if (this.scales.color) { - const color = this.model.get('color'); - if (color) { - let min; - let max; - if (this.scales.color.model.min !== null) { - min = this.scales.color.model.min; - } else { - min = Math.min(...color); - } - if (this.scales.color.model.max !== null) { - max = this.scales.color.model.max; - } else { - max = Math.max(...color); - } - this.scatter_material.uniforms['domain_color'].value = [min, max]; - } else { - if ( - this.scales.color.model.min !== null && - this.scales.color.model.max !== null - ) { - this.scatter_material.uniforms['domain_color'].value = [ - this.scales.color.model.min, - this.scales.color.model.max, - ]; - } else { - console.warn( - 'no color set, and color scale does not have a min or max' - ); - } - } - } - - this.update_scene(); - } - - update_position(animate?) { - this.update_scene(); - this.invalidate_pixel_position(); - } - - // we want to compute the pixels coordinates 'lazily', since it's quite expensive for 10^6 points - invalidate_pixel_position() { - this.invalidated_pixel_position = true; - } - - ensure_pixel_position() { - if (this.invalidated_pixel_position) { - this.update_pixel_position(); - } - } - - update_pixel_position(animate?) { - const x_scale = this.scales.x, - y_scale = this.scales.y; - - const x_data = this.model.get('x'); - const y_data = this.model.get('y'); - const N = Math.min(x_data.length, y_data.length); - // this.pixel_coords = _.map(_.range(N), (i) => { - // return [x_scale.scale(x_data[i]) + x_scale.offset, - // y_scale.scale(y_data[i]) + y_scale.offset]; - // }); - this.pixel_x = new Float64Array(N); - this.pixel_y = new Float64Array(N); - for (let i = 0; i < N; i++) { - this.pixel_x[i] = x_scale.scale(x_data[i]) + x_scale.offset; - this.pixel_y[i] = y_scale.scale(y_data[i]) + y_scale.offset; - } - this.invalidated_pixel_position = false; - } - - selector_changed(point_selector, rect_selector) { - if (!this.trottled_selector_changed) { - this.trottled_selector_changed = _.throttle( - this._real_selector_changed, - 50, - { leading: false } - ); - } - this.trottled_selector_changed(point_selector, rect_selector); - } - - _real_selector_changed(point_selector, rect_selector) { - // not sure why selection isn't working yet - this.ensure_pixel_position(); - if (point_selector === undefined) { - this.model.set('selected', null); - this.touch(); - return []; - } - const selection_mask = point_selector(this.pixel_x, this.pixel_y); - let selected = new Uint32Array(selection_mask.length); - let count = 0; - const N = selection_mask.length; - for (let i = 0; i < N; i++) { - if (selection_mask[i]) { - selected[count++] = i; - } - } - selected = selected.slice(0, count); - this.model.set('selected', selected); - this.touch(); - } - - set_positional_scales() { - this.x_scale = this.scales.x; - this.y_scale = this.scales.y; - // If no scale for "x" or "y" is specified, figure scales are used. - if (!this.x_scale) { - this.x_scale = this.parent.scale_x; - } - if (!this.y_scale) { - this.y_scale = this.parent.scale_y; - } - this.listenTo(this.x_scale, 'domain_changed', function () { - if (!this.model.dirty) { - const animate = true; - this.update_position(animate); - } - }); - this.listenTo(this.y_scale, 'domain_changed', function () { - if (!this.model.dirty) { - const animate = true; - this.update_position(animate); - } - }); - } - - initialize_additional_scales() { - const color_scale = this.scales.color; - const size_scale = this.scales.size; - const opacity_scale = this.scales.opacity; - const rotation_scale = this.scales.rotation; - // the following handlers are for changes in data that does not - // impact the position of the elements - if (color_scale) { - this.listenTo(color_scale, 'all', this.update_color_map); - this.listenTo(this.model, 'change:color', this.update_color_map); - this.update_color_map(); - } - if (size_scale) { - this.listenTo(size_scale, 'domain_changed', () => { - this.update_scene(); - }); - } - if (opacity_scale) { - this.listenTo(opacity_scale, 'domain_changed', () => { - this.update_scene(); - }); - } - if (rotation_scale) { - this.listenTo(rotation_scale, 'domain_changed', () => { - this.update_scene(); - }); - } - } - - set_ranges() { - const x_scale = this.scales.x, - y_scale = this.scales.y, - size_scale = this.scales.size, - opacity_scale = this.scales.opacity, - skew_scale = this.scales.skew, - rotation_scale = this.scales.rotation; - if (x_scale) { - x_scale.set_range(this.parent.padded_range('x', x_scale.model)); - } - if (y_scale) { - y_scale.set_range(this.parent.padded_range('y', y_scale.model)); - } - if (size_scale) { - size_scale.set_range([0, this.model.get('default_size')]); - } - if (opacity_scale) { - opacity_scale.set_range([0.2, 1]); - } - if (skew_scale) { - skew_scale.set_range([0, 1]); - } - if (rotation_scale) { - rotation_scale.set_range([0, Math.PI]); // TODO: this mirrors the 180 from the normal scatter, but why not 360? - } - } - - transition(f, on_done, context) { - // this is a copy from ipyvolume, maybe better to use tween, and do the rerendering - // at the figure level (say if multiple scatter's want to rerender) - const that = this; - const Transition = function () { - //this.objects = [] - this.time_start = new Date().getTime(); - this.duration = that.parent.model.get('animation_duration'); - this.cancelled = false; - this.called_on_done = false; - this.set = function (obj) { - this.objects.push(obj); - }; - this.is_done = function () { - const dt = new Date().getTime() - this.time_start; - return dt >= this.duration || this.cancelled; - }; - (this.cancel = function () { - this.cancelled = true; - }), - (this.update = function () { - if (this.cancelled) { - return; - } - const dt = (new Date().getTime() - this.time_start) / this.duration; - - const u = Math.min(1, dt); - f.apply(context, [u]); - if (dt >= 1 && !this.called_on_done) { - this.called_on_done = true; - on_done.apply(context); - } - that.update_scene(); - }); - if (!this.duration) { - f.apply(context, [1]); - on_done.apply(context); - that.update_scene(); - } else { - that.transitions.push(this); - } - }; - return new Transition(); - } - - draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) { - this.legend_el = elem.selectAll('.legend' + this.uuid).data([{}]); - const colors = this.model.get('colors'), - len = colors.length; - - const that = this; - const rect_dim = inter_y_disp * 0.8; - const el_added = this.legend_el - .enter() - .append('g') - .attr('class', 'legend' + this.uuid) - .attr('transform', (d, i) => { - return 'translate(0, ' + (i * inter_y_disp + y_disp) + ')'; - }); - - this.draw_legend_elements(el_added, rect_dim); - - this.legend_el - .append('text') - .attr('class', 'legendtext') - .attr('x', rect_dim * 1.2) - .attr('y', rect_dim / 2) - .attr('dy', '0.35em') - .text((d, i) => { - return that.model.get('labels')[i]; - }) - .style('fill', (d, i) => { - return colors[i % len]; - }); - - const max_length = d3.max(this.model.get('labels'), (d: any[]) => { - return d.length; - }); - - this.legend_el.exit().remove(); - return [1, max_length]; - } - - draw_legend_elements(elements_added, rect_dim) { - const colors = this.model.get('colors'), - stroke = this.model.get('stroke'), - fill = this.model.get('fill'); - - elements_added - .append('path') - .attr('transform', (d, i) => { - return 'translate( ' + rect_dim / 2 + ', ' + rect_dim / 2 + ')'; - }) - .attr('d', this.dot.size(64)) - .style('fill', fill ? colors[0] : 'none') - .style('stroke', stroke ? stroke : colors[0]); - } - - update_legend() { - if (this.legend_el) { - const colors = this.model.get('colors'), - stroke = this.model.get('stroke'), - fill = this.model.get('fill'); - this.legend_el - .select('path') - .style('fill', fill ? colors[0] : 'none') - .style('stroke', stroke ? stroke : colors[0]); - this.legend_el.select('text').style('fill', fill ? colors[0] : 'none'); - if (this.legend_el) { - this.legend_el - .select('path') - .attr('d', this.dot.type(this.model.get('marker'))); - } - } - } - - relayout() { - this.set_ranges(); - this.update_position(); - } - - compute_view_padding() { - //This function computes the padding along the x and y directions. - //The value is in pixels. - const xPadding = Math.sqrt(this.model.get('default_size')) / 2 + 1.0; - - if (xPadding !== this.xPadding || xPadding !== this.yPadding) { - this.xPadding = xPadding; - this.yPadding = xPadding; - this.trigger('mark_padding_updated'); - } - } - - draw(animate?) {} - clear_style(style_dict, indices?, elements?) {} - set_default_style(indices, elements?) {} - set_style_on_elements(style, indices, elements?) {} - - transitions: any[]; - x_scale: Scale; - y_scale: Scale; - pixel_x: Float64Array; - pixel_y: Float64Array; - trottled_selector_changed: any; - invalidated_pixel_position: boolean; - camera: THREE.OrthographicCamera; - scene: THREE.Scene; - instanced_geometry: THREE.InstancedBufferGeometry; - scatter_material: THREE.RawShaderMaterial; - mesh: THREE.Mesh; - - markers_number: number; - - x: THREE.InstancedBufferAttribute; - x_previous: THREE.InstancedBufferAttribute; - - y: THREE.InstancedBufferAttribute; - y_previous: THREE.InstancedBufferAttribute; - - color: THREE.InstancedBufferAttribute; - - size: THREE.InstancedBufferAttribute; - size_previous: THREE.InstancedBufferAttribute; - - opacity: THREE.InstancedBufferAttribute; - opacity_previous: THREE.InstancedBufferAttribute; - - rotation: THREE.InstancedBufferAttribute; - rotation_previous: THREE.InstancedBufferAttribute; - - selected: THREE.InstancedBufferAttribute; - - legend_el: d3.Selection; - dot: any; - - model: ScatterGLModel; -} diff --git a/js/src/ScatterGLModel.ts b/js/src/ScatterGLModel.ts deleted file mode 100644 index 65097ab11..000000000 --- a/js/src/ScatterGLModel.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright 2015 Bloomberg Finance L.P. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { MarkModel } from './MarkModel'; -import * as serialize from './serialize'; - -export class ScatterGLModel extends MarkModel { - defaults() { - return { - ...MarkModel.prototype.defaults(), - _model_name: 'ScatterGLModel', - _view_name: 'ScatterGL', - x: [], - y: [], - color: null, - skew: null, - marker: 'circle', - stroke: null, - stroke_width: 1.5, - default_skew: 0.5, - default_size: 64, - names: [], - display_names: true, - fill: true, - drag_color: null, - drag_size: 5.0, - names_unique: true, - }; - } - - initialize(attributes, options) { - super.initialize(attributes, options); - this.update_domains(); - } - - update_domains() { - // color scale needs an issue in DateScaleModel to be fixed. It - // should be moved here as soon as that is fixed. - const scales = this.get('scales'); - for (const key in scales) { - if (scales.hasOwnProperty(key) && key != 'color') { - const scale = scales[key]; - if (!this.get('preserve_domain')[key]) { - scale.compute_and_set_domain(this.get(key), this.model_id + key); - } else { - scale.del_domain([], this.model_id + key); - } - } - } - } - - static serializers = { - ...MarkModel.serializers, - x: serialize.array_or_json_serializer, - y: serialize.array_or_json_serializer, - color: serialize.array_or_json_serializer, - size: serialize.array_or_json_serializer, - rotation: serialize.array_or_json_serializer, - opacity: serialize.array_or_json_serializer, - opacities: serialize.array_or_json_serializer, - }; -} diff --git a/js/src/Selector.ts b/js/src/Selector.ts index c26ca363b..bee05bfb8 100644 --- a/js/src/Selector.ts +++ b/js/src/Selector.ts @@ -14,10 +14,10 @@ */ import * as d3 from 'd3'; +import { LinearScale, OrdinalScale } from 'bqscales'; // const d3 =Object.assign({}, require("d3-selection")); import { Interaction } from './Interaction'; -import { LinearScale } from './LinearScale'; -const convert_dates = require('./utils').convert_dates; +import { convert_dates } from './utils'; import { WidgetView } from '@jupyter-widgets/base'; export abstract class BaseSelector extends Interaction { @@ -36,10 +36,8 @@ export abstract class BaseSelector extends Interaction { render() { this.parent = this.options.parent; - this.width = - this.parent.width - this.parent.margin.left - this.parent.margin.right; - this.height = - this.parent.height - this.parent.margin.top - this.parent.margin.bottom; + this.width = this.parent.plotareaWidth; + this.height = this.parent.plotareaHeight; this.mark_views_promise = this.populate_mark_views(); } @@ -51,10 +49,8 @@ export abstract class BaseSelector extends Interaction { } relayout() { - this.height = - this.parent.height - this.parent.margin.top - this.parent.margin.bottom; - this.width = - this.parent.width - this.parent.margin.left - this.parent.margin.right; + this.width = this.parent.plotareaWidth; + this.height = this.parent.plotareaHeight; } async populate_mark_views() { @@ -117,17 +113,17 @@ export abstract class BaseXSelector extends BaseSelector { const xy = this.model.get('orientation') == 'vertical' ? 'y' : 'x'; const initial_range = this.parent.padded_range(xy, this.scale.model); const target_range = this.parent.range(xy); - this.scale.expand_domain(initial_range, target_range); + this.scale.expandDomain(initial_range, target_range); } set_range(array) { const xy = this.model.get('orientation') == 'vertical' ? 'y' : 'x'; for (let iter = 0; iter < array.length; iter++) { - array[iter].set_range(this.parent.range(xy)); + array[iter].setRange(this.parent.range(xy)); } } - scale: LinearScale; + scale: LinearScale | OrdinalScale; } export abstract class BaseXYSelector extends BaseSelector { @@ -142,24 +138,30 @@ export abstract class BaseXYSelector extends BaseSelector { const scale_promises = []; if (this.model.get('x_scale')) { scale_promises.push( - this.create_child_view(this.model.get('x_scale')).then((view) => { - that.x_scale = view as WidgetView as LinearScale; - that.update_xscale_domain(); - that.set_x_range([that.x_scale]); - that.x_scale.on('domain_changed', that.update_xscale_domain, that); - return view; - }) + this.create_child_view(this.model.get('x_scale')).then( + // @ts-ignore + (view: LinearScale | OrdinalScale) => { + that.x_scale = view; + that.update_xscale_domain(); + that.set_x_range([that.x_scale]); + that.x_scale.on('domain_changed', that.update_xscale_domain, that); + return view; + } + ) ); } if (this.model.get('y_scale')) { scale_promises.push( - this.create_child_view(this.model.get('y_scale')).then((view) => { - that.y_scale = view as WidgetView as LinearScale; - that.update_yscale_domain(); - that.set_y_range([that.y_scale]); - that.y_scale.on('domain_changed', that.update_yscale_domain, that); - return view; - }) + this.create_child_view(this.model.get('y_scale')).then( + // @ts-ignore + (view: LinearScale | OrdinalScale) => { + that.y_scale = view; + that.update_yscale_domain(); + that.set_y_range([that.y_scale]); + that.y_scale.on('domain_changed', that.update_yscale_domain, that); + return view; + } + ) ); } @@ -168,13 +170,13 @@ export abstract class BaseXYSelector extends BaseSelector { set_x_range(array) { for (let iter = 0; iter < array.length; iter++) { - array[iter].set_range(this.parent.range('x')); + array[iter].setRange(this.parent.range('x')); } } set_y_range(array) { for (let iter = 0; iter < array.length; iter++) { - array[iter].set_range(this.parent.range('y')); + array[iter].setRange(this.parent.range('y')); } } @@ -183,7 +185,7 @@ export abstract class BaseXYSelector extends BaseSelector { // for the selector must be expanded to account for the padding. const initial_range = this.parent.padded_range('x', this.x_scale.model); const target_range = this.parent.range('x'); - this.x_scale.expand_domain(initial_range, target_range); + this.x_scale.expandDomain(initial_range, target_range); } update_yscale_domain() { @@ -191,9 +193,9 @@ export abstract class BaseXYSelector extends BaseSelector { // for the selector must be expanded to account for the padding. const initial_range = this.parent.padded_range('y', this.y_scale.model); const target_range = this.parent.range('y'); - this.y_scale.expand_domain(initial_range, target_range); + this.y_scale.expandDomain(initial_range, target_range); } - x_scale: LinearScale; - y_scale: LinearScale; + x_scale: LinearScale | OrdinalScale; + y_scale: LinearScale | OrdinalScale; } diff --git a/js/src/Toolbar.ts b/js/src/Toolbar.ts index 11e9de286..02ab15034 100644 --- a/js/src/Toolbar.ts +++ b/js/src/Toolbar.ts @@ -127,7 +127,7 @@ export class ToolbarModel extends widgets.DOMWidgetModel { y_scales = []; for (let i = 0; i < marks.length; ++i) { const preserve_domain = marks[i].get('preserve_domain'); - const scales = marks[i].get('scales'); + const scales = marks[i].getScales(); _.each(scales, (v, k) => { const dimension = marks[i].get('scales_metadata')[k]['dimension']; if (dimension === 'x' && !preserve_domain[k]) { diff --git a/js/src/index.ts b/js/src/index.ts index ea3aa0350..f4ed4fbae 100644 --- a/js/src/index.ts +++ b/js/src/index.ts @@ -29,14 +29,10 @@ export * from './HistModel'; export * from './SelectorModel'; export * from './Boxplot'; export * from './IndexSelector'; -export * from './OrdinalColorScale'; export * from './BoxplotModel'; export * from './Interaction'; -export * from './OrdinalScale'; export * from './Label'; export * from './LabelModel'; -export * from './OrdinalScaleModel'; -export * from './OrdinalColorScaleModel'; export * from './BrushSelector'; export * from './LassoSelector'; export * from './PanZoom'; @@ -44,39 +40,25 @@ export * from './ColorAxis'; export * from './lasso_test'; export * from './PanZoomModel'; export * from './colorbrewer'; -export * from './ColorScale'; export * from './Pie'; export * from './ColorUtils'; -export * from './ColorScaleModel'; export * from './PieModel'; -export * from './DateColorScale'; -export * from './LinearScale'; -export * from './Scale'; -export * from './DateColorScaleModel'; -export * from './LinearScaleModel'; -export * from './ScaleModel'; -export * from './DateScale'; export * from './Lines'; export * from './Scatter'; -export * from './DateScaleModel'; export * from './LinesModel'; export * from './ScatterModel'; export * from './FastIntervalSelector'; -export * from './LogScale'; export * from './Selector'; export * from './Figure'; -export * from './LogScaleModel'; export * from './FigureModel'; export * from './Map'; export * from './Tooltip'; export * from './TooltipModel'; export * from './FlexLine'; export * from './MapModel'; -export * from './GeoScale'; export * from './Markers'; export * from './utils'; export * from './serialize'; -export * from './GeoScaleModel'; export * from './MarketMap'; export * from './GridHeatMap'; export * from './MarketMapModel'; @@ -87,7 +69,12 @@ export * from './GraphModel'; export * from './Graph'; export * from './Image'; export * from './ImageModel'; -export * from './ScatterGL'; -export * from './ScatterGLModel'; -export const version = require('../package.json').version; +// Temporary for backward compatibility +export * from 'bqscales'; + +import packageJson from '../package.json'; + +const { version } = packageJson; + +export { version }; diff --git a/js/src/jupyterlab-plugin.ts b/js/src/jupyterlab-plugin.ts index e62216e31..caaf41776 100644 --- a/js/src/jupyterlab-plugin.ts +++ b/js/src/jupyterlab-plugin.ts @@ -13,23 +13,30 @@ * limitations under the License. */ -import * as bqplot from './index'; -require('../css/bqplot.css'); +import '../css/bqplot.css'; -import * as base from '@jupyter-widgets/base'; +import { IJupyterWidgetRegistry } from '@jupyter-widgets/base'; + +import packageJson from '../package.json'; + +const { name, version } = packageJson; + +const EXTENSION_ID = `@bqplot/bqplot:${version}`; /** * The widget manager provider. */ -module.exports = { - id: 'bqplot', - requires: [base.IJupyterWidgetRegistry], +const plugin = { + id: EXTENSION_ID, + requires: [IJupyterWidgetRegistry], activate: function (app, widgets) { widgets.registerWidget({ - name: 'bqplot', - version: bqplot.version, - exports: bqplot, + name, + version, + exports: async () => import('./index'), }); }, autoStart: true, }; + +export default plugin; diff --git a/js/src/test/axis.ts b/js/src/test/axis.ts new file mode 100644 index 000000000..2469b3a04 --- /dev/null +++ b/js/src/test/axis.ts @@ -0,0 +1,196 @@ +import { expect } from 'chai'; +import { DummyManager } from './dummy-manager'; +import * as bqplot from '..'; +import { create_figure_scatter, create_model_bqplot } from './widget-utils'; +// import * as d3Timer from 'd3-timer'; + +// text pixel coordinate +// const test_x = 200; +// const test_y = 200; +// const pixel_red = [255, 0, 0, 255]; + +describe('axis >', () => { + beforeEach(async function () { + this.manager = new DummyManager({ bqplot: bqplot }); + }); + + it('axis add/remove', async function () { + const x = { + dtype: 'float32', + value: new DataView(new Float32Array([0.5, 0.5]).buffer), + }; + const y = { + dtype: 'float32', + value: new DataView(new Float32Array([2.0, 2.5]).buffer), + }; + const { figure, scatter } = await create_figure_scatter( + this.manager, + x, + y, + false, + true + ); + const scale_x = scatter.model.get('scales').x; + const x_axis = await create_model_bqplot( + this.manager, + 'Axis', + 'axis_model_x', + { side: 'left', scale: scale_x.toJSON() } + ); + const x_axis_2 = await create_model_bqplot( + this.manager, + 'Axis', + 'axis_model_x', + { side: 'right', scale: scale_x.toJSON() } + ); + + let width0, width1, width2, width3, width1b, width0b; + let x0, x1, x2, x3, x1b, x0b; + ({ x: x0, width: width0 } = figure.getFigureSize()); + + // adding an axis should decrease the width, and move it to the right + figure.model.set('axes', [x_axis]); + await figure.updateDecorators(); + ({ x: x1, width: width1 } = figure.getFigureSize()); + expect(width1).to.be.lessThan(width0); + expect(x1).to.be.greaterThan(x0); + + // adding a second axis should decrease the width even more, but keep it at the same x + figure.model.set('axes', [x_axis, x_axis_2]); + await figure.updateDecorators(); + ({ x: x2, width: width2 } = figure.getFigureSize()); + expect(width2).to.be.lessThan(width0); + expect(width2).to.be.lessThan(width1); + expect(x2).to.be.equal(x1); + + // if we move the second axis to the left, it should keep the same width (approx), but larger x offset + x_axis_2.set('side', 'left'); + await figure.updateDecorators(); + ({ x: x3, width: width3 } = figure.getFigureSize()); + // so the width is not exactly the same + // expect(width3).to.be.equal(width2); + // but again, it should be less than with 1 axis + expect(width3).to.be.lessThan(width1); + expect(x3).to.be.greaterThan(x2); + + // all axis being equal, this should reduce to case1 + figure.model.set('axes', [x_axis_2]); + await figure.updateDecorators(); + ({ x: x1b, width: width1b } = figure.getFigureSize()); + expect(width1b).to.be.equal(width1); + expect(x1b).to.be.equal(x1); + + // and no axis + figure.model.set('axes', []); + await figure.updateDecorators(); + ({ x: x0b, width: width0b } = figure.getFigureSize()); + expect(width0b).to.be.equal(width0); + expect(x0b).to.be.equal(x0); + }); + + it('axis offset', async function () { + const x = { + dtype: 'float32', + value: new DataView(new Float32Array([0.5, 0.5]).buffer), + }; + const y = { + dtype: 'float32', + value: new DataView(new Float32Array([2.0, 2.5]).buffer), + }; + const { figure, scatter } = await create_figure_scatter( + this.manager, + x, + y, + false, + true + ); + const scale_x = scatter.model.get('scales').x; + const x_axis = await create_model_bqplot( + this.manager, + 'Axis', + 'axis_model_x', + { side: 'left', scale: scale_x.toJSON() } + ); + + let width0, width1, width2, width1b; + let x0, x1, x2, x1b; + ({ x: x0, width: width0 } = figure.getFigureSize()); + + // adding an axis should decrease the width, and move it to the right + figure.model.set('axes', [x_axis]); + await figure.updateDecorators(); + ({ x: x1, width: width1 } = figure.getFigureSize()); + expect(width1).to.be.lessThan(width0); + expect(x1).to.be.greaterThan(x0); + + // setting the offset, should make it not part of the the auto layout + x_axis.set('offset', { value: 0.5 }); + await figure.updateDecorators(); + ({ x: x2, width: width2 } = figure.getFigureSize()); + expect(width2).to.be.equal(width0); + expect(x2).to.be.equal(x0); + + x_axis.set('offset', {}); + await figure.updateDecorators(); + ({ x: x1b, width: width1b } = figure.getFigureSize()); + expect(width1b).to.be.equal(width1); + expect(x1b).to.be.equal(x1); + }); + + it('label and label offset', async function () { + const x = { + dtype: 'float32', + value: new DataView(new Float32Array([0.5, 0.5]).buffer), + }; + const y = { + dtype: 'float32', + value: new DataView(new Float32Array([2.0, 2.5]).buffer), + }; + const { figure, scatter } = await create_figure_scatter( + this.manager, + x, + y, + false, + true + ); + const scale_x = scatter.model.get('scales').x; + const x_axis = await create_model_bqplot( + this.manager, + 'Axis', + 'axis_model_x', + { side: 'left', scale: scale_x.toJSON() } + ); + + let width0, width1, width2, width3, width4; + let x0, x1, x2, x3, x4; + ({ x: x0, width: width0 } = figure.getFigureSize()); + + // adding an axis should decrease the width, and move it to the right + figure.model.set('axes', [x_axis]); + await figure.updateDecorators(); + ({ x: x1, width: width1 } = figure.getFigureSize()); + expect(width1).to.be.lessThan(width0); + expect(x1).to.be.greaterThan(x0); + + // setting a label, should grow the size the axis takes up, and shrink the width + x_axis.set('label', 'x'); + await figure.updateDecorators(); + ({ x: x2, width: width2 } = figure.getFigureSize()); + expect(width2).to.be.lessThan(width1); + expect(x2).to.be.greaterThan(x1); + + // the default offset is > 1px, so this should shrink it compared to case 2 + x_axis.set('label_offset', '1px'); + await figure.updateDecorators(); + ({ x: x3, width: width3 } = figure.getFigureSize()); + expect(width3).to.be.greaterThan(width2); + expect(x3).to.be.lessThan(x2); + + // a negative offset will put it inside of the figure, so we should treat it as case 1 (no label) + x_axis.set('label_offset', '-100px'); + await figure.updateDecorators(); + ({ x: x4, width: width4 } = figure.getFigureSize()); + expect(width4).to.be.equal(width1); + expect(x4).to.be.equal(x1); + }); +}); diff --git a/js/src/test/bars.ts b/js/src/test/bars.ts index 1c50829fe..fc8c0fb91 100644 --- a/js/src/test/bars.ts +++ b/js/src/test/bars.ts @@ -40,7 +40,7 @@ describe('bars >', () => { .selectAll('.bargroup rect.bar') .nodes() .map((el) => Number(el.getAttribute('height'))); - const height = objects.figure.plotarea_height; + const height = objects.figure.height; expect(heights).to.deep.equal([(height * 2) / 3, height]); }); @@ -77,7 +77,7 @@ describe('bars >', () => { .selectAll('.bargroup rect.bar') .nodes() .map((el) => Math.round(Number(el.getAttribute('height')))); - const height = objects.figure.plotarea_height; + const height = objects.figure.height; const h0 = Math.round((height * 2) / 3); const h2 = Math.round(height); const h3 = Math.round((height * 2.5) / 3); @@ -123,7 +123,7 @@ describe('bars >', () => { .selectAll('.bargroup rect.bar') .nodes() .map((el) => Math.round(Number(el.getAttribute('height')))); - const height = objects.figure.plotarea_height; + const height = objects.figure.height; const h0 = Math.round((height * 2) / 3); const h2 = Math.round(height); const h3 = Math.round((height * 2.5) / 3); diff --git a/js/src/test/coloraxis.ts b/js/src/test/coloraxis.ts new file mode 100644 index 000000000..addea2e16 --- /dev/null +++ b/js/src/test/coloraxis.ts @@ -0,0 +1,139 @@ +import { expect } from 'chai'; +import { DummyManager } from './dummy-manager'; +import * as bqplot from '..'; +import { create_figure_scatter, create_model_bqplot } from './widget-utils'; + +describe('coloraxis >', () => { + beforeEach(async function () { + this.manager = new DummyManager({ bqplot: bqplot }); + }); + + it('axis add/remove', async function () { + const x = { + dtype: 'float32', + value: new DataView(new Float32Array([0.5, 0.5]).buffer), + }; + const y = { + dtype: 'float32', + value: new DataView(new Float32Array([2.0, 2.5]).buffer), + }; + const { figure, scatter } = await create_figure_scatter( + this.manager, + x, + y, + false, + true + ); + const scale_x = scatter.model.get('scales').x; + const scale_color = await create_model_bqplot( + this.manager, + 'ColorScale', + 'color_scale_1', + { colors: ['#f00', '#f00'], min: 0, max: 1 } + ); + const x_axis = await create_model_bqplot( + this.manager, + 'Axis', + 'axis_model_x', + { side: 'left', scale: scale_x.toJSON() } + ); + const color_axis = await create_model_bqplot( + this.manager, + 'ColorAxis', + 'coloraxis_model_x', + { side: 'right', scale: scale_color.toJSON() } + ); + + let width0, width1, width2, width3, width3b, width0b; + let x0, x1, x2, x3, x3b, x0b; + ({ x: x0, width: width0 } = figure.getFigureSize()); + + // adding an axis should decrease the width, and move it to the right + figure.model.set('axes', [x_axis]); + await figure.updateDecorators(); + ({ x: x1, width: width1 } = figure.getFigureSize()); + expect(width1).to.be.lessThan(width0); + expect(x1).to.be.greaterThan(x0); + + // adding the color axis should decrease the width even more, but keep it at the same x + figure.model.set('axes', [x_axis, color_axis]); + await figure.updateDecorators(); + ({ x: x2, width: width2 } = figure.getFigureSize()); + expect(width2).to.be.lessThan(width0); + expect(width2).to.be.lessThan(width1); + expect(x2).to.be.equal(x1); + + // if we move the color axis to the left, it should keep the same width (approx), but larger x offset + color_axis.set('side', 'left'); + await figure.updateDecorators(); + ({ x: x3, width: width3 } = figure.getFigureSize()); + // so the width is not exactly the same + // expect(width3).to.be.equal(width2); + // but again, it should be less than with 1 axis + expect(width3).to.be.lessThan(width1); + expect(x3).to.be.greaterThan(x2); + + // if we flip the order, it should be the same + figure.model.set('axes', [color_axis, x_axis]); + await figure.updateDecorators(); + ({ x: x3b, width: width3b } = figure.getFigureSize()); + expect(width3b).to.be.equal(width3); + expect(x3b).to.be.equal(x3); + + // and no axis + figure.model.set('axes', []); + await figure.updateDecorators(); + ({ x: x0b, width: width0b } = figure.getFigureSize()); + expect(width0b).to.be.equal(width0); + expect(x0b).to.be.equal(x0); + }); + + it('axis offset', async function () { + const x = { + dtype: 'float32', + value: new DataView(new Float32Array([0.5, 0.5]).buffer), + }; + const y = { + dtype: 'float32', + value: new DataView(new Float32Array([2.0, 2.5]).buffer), + }; + const { figure, scatter } = await create_figure_scatter( + this.manager, + x, + y, + false, + true + ); + const scale_x = scatter.model.get('scales').x; + const x_axis = await create_model_bqplot( + this.manager, + 'Axis', + 'axis_model_x', + { side: 'left', scale: scale_x.toJSON() } + ); + + let width0, width1, width2, width1b; + let x0, x1, x2, x1b; + ({ x: x0, width: width0 } = figure.getFigureSize()); + + // adding an axis should decrease the width, and move it to the right + figure.model.set('axes', [x_axis]); + await figure.updateDecorators(); + ({ x: x1, width: width1 } = figure.getFigureSize()); + expect(width1).to.be.lessThan(width0); + expect(x1).to.be.greaterThan(x0); + + // setting the offset, should make it not part of the the auto layout + x_axis.set('offset', { value: 0.5 }); + await figure.updateDecorators(); + ({ x: x2, width: width2 } = figure.getFigureSize()); + expect(width2).to.be.equal(width0); + expect(x2).to.be.equal(x0); + + x_axis.set('offset', {}); + await figure.updateDecorators(); + ({ x: x1b, width: width1b } = figure.getFigureSize()); + expect(width1b).to.be.equal(width1); + expect(x1b).to.be.equal(x1); + }); +}); diff --git a/js/src/test/dummy-manager.ts b/js/src/test/dummy-manager.ts index 35ed35c28..7819b9641 100644 --- a/js/src/test/dummy-manager.ts +++ b/js/src/test/dummy-manager.ts @@ -1,11 +1,12 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. -//import * as widgets from '../../lib'; import * as services from '@jupyterlab/services'; import * as Backbone from 'backbone'; import * as widgets from '@jupyter-widgets/controls'; import * as base from '@jupyter-widgets/base'; +import * as baseManager from '@jupyter-widgets/base-manager'; +import * as bqscales from 'bqscales'; let numComms = 0; @@ -52,7 +53,7 @@ export class MockComm { _on_close: Function = null; } -export class DummyManager extends base.ManagerBase { +export class DummyManager extends baseManager.ManagerBase { constructor(library: any) { super(); this.el = window.document.createElement('div'); @@ -61,16 +62,20 @@ export class DummyManager extends base.ManagerBase { } // @ts-ignore - display_view( + async display_view( msg: services.KernelMessage.IMessage, view: Backbone.View, options: any ) { - return Promise.resolve(view).then((view) => { + await Promise.resolve(view).then(async (view) => { this.el.appendChild(view.el); view.on('remove', () => console.log('view removed', view)); (window).last_view = view; view.trigger('displayed'); + if (view['renderImpl']) { + view['attached'] = true; + await view['renderImpl'](); + } return view.el; }); } @@ -92,6 +97,12 @@ export class DummyManager extends base.ManagerBase { } else { return Promise.reject(`Cannot find class ${className}`); } + } else if (moduleName === 'bqscales') { + if (bqscales[className]) { + return Promise.resolve(bqscales[className]); + } else { + return Promise.reject(`Cannot find class ${className}`); + } } else if (moduleName in this.library) { return Promise.resolve(this.library[moduleName][className]); } else { diff --git a/js/src/test/figure.ts b/js/src/test/figure.ts index 7376dcb95..17a829897 100644 --- a/js/src/test/figure.ts +++ b/js/src/test/figure.ts @@ -1,23 +1,14 @@ import { expect } from 'chai'; import { DummyManager } from './dummy-manager'; -import bqplot = require('..'); -// import {Figure} from '../src/Figure.js'; -// import {FigureModel} from '../src/FigureModel.js'; -import { create_figure_scatter, create_model_bqplot } from './widget-utils'; -import * as d3Timer from 'd3-timer'; - -// text pixel coordinate -const test_x = 200; -const test_y = 200; -const pixel_red = [255, 0, 0, 255]; -const pixel_blue = [0, 0, 255, 255]; +import * as bqplot from '..'; +import { create_figure_scatter } from './widget-utils'; describe('figure >', () => { beforeEach(async function () { this.manager = new DummyManager({ bqplot: bqplot }); }); - it('should not create a WebGL renderer if not needed', async function () { + it('marks removed before created', async function () { const x = { dtype: 'float32', value: new DataView(new Float32Array([0.5, 0.5]).buffer), @@ -26,143 +17,192 @@ describe('figure >', () => { dtype: 'float32', value: new DataView(new Float32Array([2.0, 2.5]).buffer), }; - const { figure } = await create_figure_scatter(this.manager, x, y); + const { scatter, figure } = await create_figure_scatter(this.manager, x, y); - expect(figure.renderer).to.be.undefined; + // we start with the scatter and legend + expect(figure.fig_marks.node().children).lengthOf(3); + // we remove the scatter + figure.model.set('marks', []); + await Promise.all(figure.mark_views.views); + expect(figure.fig_marks.node().children).lengthOf(2); + // we set the marks twice without waiting, so we should never see the second scatter in the DOM + figure.model.set('marks', [scatter.model, scatter.model]); + const previousViewsPromise = Promise.all(figure.mark_views.views); + figure.model.set('marks', [scatter.model]); + await Promise.all(figure.mark_views.views); + await previousViewsPromise; // we also want to wait for these promises to be resolved so the dummy + // DOM node van be removed in the remove event handler in Figure.add_mark + expect(figure.fig_marks.node().children).lengthOf(3); }); - it('should create a WebGL renderer when needed', async function () { - const x = { + it('min aspect check', async function () { + const data_x = { dtype: 'float32', value: new DataView(new Float32Array([0.5, 0.5]).buffer), }; - const y = { + const data_y = { dtype: 'float32', value: new DataView(new Float32Array([2.0, 2.5]).buffer), }; - const { figure } = await create_figure_scatter(this.manager, x, y, true); + const { figure } = await create_figure_scatter( + this.manager, + data_x, + data_y, + false, + true + ); - expect(figure.renderer).to.not.be.undefined; - }); + // the dom is 400x500 + expect(figure.width).to.be.equals(400); + expect(figure.height).to.be.equals(500); - it('canvas/png render check', async function () { - const x = { - dtype: 'float32', - value: new DataView(new Float32Array([0.5, 0.5]).buffer), - }; - const y = { - dtype: 'float32', - value: new DataView(new Float32Array([2.0, 2.5]).buffer), - }; - const { scatter, figure } = await create_figure_scatter(this.manager, x, y); - // we render a huge red scatter point, and check if the path of svg->canvas (and thus - // png) results in a red pixels at the test coordinates. - scatter.model.set('default_size', 1e6); - scatter.model.set('colors', ['red']); - scatter.d3el.selectAll('.object_grp').data(); - - d3Timer.timerFlush(); // this makes sure the animations are all executed - const canvas = await figure.get_rendered_canvas(); - const context = canvas.getContext('2d'); - const pixel = context.getImageData(test_x, test_y, 1, 1); - expect(Array.prototype.slice.call(pixel.data)).to.deep.equals(pixel_red); + let width; + let height; + let x; + let y; + // current aspect is 400/500 ~= 0.8 < 2, so we expect the height to decrease + figure.model.set('min_aspect_ratio', 2); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(400); + expect(height).to.be.equals(200); + expect(x).to.be.equals(0); + expect(y).to.be.equals(150); + + // relaxing it, we expect it to grow again + figure.model.set('min_aspect_ratio', 1.0); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(400); + expect(height).to.be.equals(400); + expect(x).to.be.equals(0); + expect(y).to.be.equals(50); + + // and back to its original size + figure.model.set('min_aspect_ratio', 0.1); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(400); + expect(height).to.be.equals(500); + expect(x).to.be.equals(0); + expect(y).to.be.equals(0); }); - it('canvas/png render gl check', async function () { - const x = { + it('title respect', async function () { + const data_x = { dtype: 'float32', value: new DataView(new Float32Array([0.5, 0.5]).buffer), }; - const y = { + const data_y = { dtype: 'float32', value: new DataView(new Float32Array([2.0, 2.5]).buffer), }; - const { scatter: scatterGlView, figure } = await create_figure_scatter( + const { figure } = await create_figure_scatter( this.manager, - x, - y, + data_x, + data_y, + false, true ); - // we render a huge red scatter point, and check if the path of svg->canvas (and thus - // png) results in a red pixels at the test coordinates. - scatterGlView.model.set('default_size', 1e6); - scatterGlView.model.set('colors', ['red']); - // scatterGlView.d3el.selectAll(".object_grp").data(); - - d3Timer.timerFlush(); // this makes sure the animations are all executed - let canvas = await figure.get_rendered_canvas(); - let context = canvas.getContext('2d'); - let pixel = context.getImageData(test_x, test_y, 1, 1); - expect(Array.prototype.slice.call(pixel.data)).to.deep.equals(pixel_red); - // add a normal (blue) scatter, which should be overlaid on top - const scales = { - x: scatterGlView.model.get('scales').x.toJSON(), - y: scatterGlView.model.get('scales').y.toJSON(), - }; - const color = null; - const size = null; - const opacity = null; - const rotation = null; - const skew = null; - const scatter = await create_model_bqplot( - this.manager, - 'Scatter', - 'scatter1', - { - scales: scales, - x: x, - y: y, - color: color, - size: size, - opacity: opacity, - rotation: rotation, - skew: skew, - colors: ['blue'], - visible: true, - default_size: 1e6, - selected_style: {}, - unselected_style: {}, - hovered_style: {}, - unhovered_style: {}, - preserve_domain: {}, - _view_module_version: '*', - _view_module: 'bqplot', - } - ); - figure.model.set('marks', [scatter, scatterGlView.model]); - await Promise.all(figure.mark_views.views); - d3Timer.timerFlush(); // this makes sure the animations are all executed - canvas = await figure.get_rendered_canvas(); - context = canvas.getContext('2d'); - pixel = context.getImageData(test_x, test_y, 1, 1); - expect(Array.prototype.slice.call(pixel.data)).to.deep.equals(pixel_blue); + // the dom is 400x500 + expect(figure.width).to.be.equals(400); + expect(figure.height).to.be.equals(500); + + let width; + let height; + let x; + let y; + figure.model.set('max_aspect_ratio', 0.5); + figure.model.set('min_aspect_ratio', 0.5); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(250); + expect(height).to.be.equals(500); + expect(x).to.be.equal((400 - 250) / 2); + expect(y).to.be.equal(0); + + figure.model.set('title', 'I take up vertical space'); + ({ width, height, x, y } = figure.getFigureSize()); + // expect(x).to.be.greaterThan((400-250)/2); + const fontHeight = figure.title.node().getBBox().height; + expect(y).to.be.equal(fontHeight); + expect(height).to.be.equal(500 - fontHeight); + // expect(width).to.be.equals(250); + // expect(x).to.be.greaterThan(0); + // expect(y).to.be.greaterThan(0); + + figure.decorators.bottom.push({ + calculateAutoSize: () => 11, + setAutoOffset: (x) => null, + }); + ({ width, height, x, y } = figure.getFigureSize()); + // expect(x).to.be.greaterThan((400-250)/2); + expect(y).to.be.equal(fontHeight); + expect(height).to.be.equal(500 - fontHeight - 11); + + figure.model.set('title', ''); + ({ width, height, x, y } = figure.getFigureSize()); + expect(y).to.be.equal(0); + expect(height).to.be.equal(500 - 11); + + // make the bottom decorators take the same space as the title + figure.decorators.bottom.push({ + calculateAutoSize: () => fontHeight - 11, + setAutoOffset: (x) => null, + }); + figure.model.set('title', 'i should fit above'); + figure.model.set('max_aspect_ratio', 2); + figure.model.set('min_aspect_ratio', 2); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(400); + expect(height).to.be.equals(200); + expect(y).to.be.equals((500 - 200) / 2); }); - it('marks removed before created', async function () { - const x = { + it('max aspect check', async function () { + const data_x = { dtype: 'float32', value: new DataView(new Float32Array([0.5, 0.5]).buffer), }; - const y = { + const data_y = { dtype: 'float32', value: new DataView(new Float32Array([2.0, 2.5]).buffer), }; - const { scatter, figure } = await create_figure_scatter(this.manager, x, y); + const { figure } = await create_figure_scatter( + this.manager, + data_x, + data_y, + false, + true + ); - // we start with the scatter and legend - expect(figure.fig_marks.node().children).lengthOf(2); - // we remove the scatter - figure.model.set('marks', []); - await Promise.all(figure.mark_views.views); - expect(figure.fig_marks.node().children).lengthOf(1); - // we set the marks twice without waiting, so we should never see the second scatter in the DOM - figure.model.set('marks', [scatter.model, scatter.model]); - const previousViewsPromise = Promise.all(figure.mark_views.views); - figure.model.set('marks', [scatter.model]); - await Promise.all(figure.mark_views.views); - await previousViewsPromise; // we also want to wait for these promises to be resolved so the dummy - // DOM node van be removed in the remove event handler in Figure.add_mark - expect(figure.fig_marks.node().children).lengthOf(2); + // the dom is 400x500 + expect(figure.width).to.be.equals(400); + expect(figure.height).to.be.equals(500); + + let width; + let height; + let x; + let y; + // current aspect is 400/500 ~= 0.8 > 2, so we expect the width to decrease + figure.model.set('max_aspect_ratio', 0.5); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(250); + expect(height).to.be.equals(500); + expect(x).to.be.equals(75); + expect(y).to.be.equals(0); + + // relaxing it, we expect it to grow again + figure.model.set('max_aspect_ratio', 0.6); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(300); + expect(height).to.be.equals(500); + expect(x).to.be.equals(50); + expect(y).to.be.equals(0); + + // and back to its original size + figure.model.set('max_aspect_ratio', 1); + ({ width, height, x, y } = figure.getFigureSize()); + expect(width).to.be.equals(400); + expect(height).to.be.equals(500); + expect(x).to.be.equals(0); + expect(y).to.be.equals(0); }); }); diff --git a/js/src/test/index.ts b/js/src/test/index.ts index 2a3695bba..1cc1fab71 100644 --- a/js/src/test/index.ts +++ b/js/src/test/index.ts @@ -2,7 +2,6 @@ import './binary_serialization'; import './scales'; import './scatter'; -import './scatter-mega'; import './pie'; import './lines'; import './gridheatmap'; @@ -12,6 +11,8 @@ import './utils'; import './figure'; import './interacts'; import './image'; +import './axis'; +import './coloraxis'; require('@jupyter-widgets/controls/css/widgets.css'); require('../../css/bqplot.css'); diff --git a/js/src/test/interacts.ts b/js/src/test/interacts.ts index df7826a87..316f75ae8 100644 --- a/js/src/test/interacts.ts +++ b/js/src/test/interacts.ts @@ -1,7 +1,7 @@ import * as widgets from '@jupyter-widgets/base'; import { expect } from 'chai'; import { DummyManager } from './dummy-manager'; -import bqplot = require('..'); +import * as bqplot from '..'; import { create_model_bqplot, create_figure_scatter, @@ -275,7 +275,6 @@ describe('interacts >', () => { this.manager, x, y, - false, true ); // scatter.model.set("default_size", 100*100); diff --git a/js/src/test/lines.ts b/js/src/test/lines.ts index f2310beed..6e171ec97 100644 --- a/js/src/test/lines.ts +++ b/js/src/test/lines.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import { DummyManager } from './dummy-manager'; -import bqplot = require('..'); +import * as bqplot from '..'; import { create_model_bqplot, create_figure_lines } from './widget-utils'; import * as d3Timer from 'd3-timer'; @@ -56,8 +56,8 @@ describe('lines >', () => { .selectAll('.curve path.line') .nodes() .map((el) => el.getAttribute('d')); - const width = objects.figure.plotarea_width; - const height = objects.figure.plotarea_height; + const width = objects.figure.width; + const height = objects.figure.height; expect(paths).to.deep.equal([ `M${(width * 1) / 4},${height}L${(width * 3) / 4},0`, ]); @@ -86,8 +86,8 @@ describe('lines >', () => { .selectAll('.curve path.line') .nodes() .map((el) => el.getAttribute('d')); - const width = objects.figure.plotarea_width; - const height = objects.figure.plotarea_height; + const width = objects.figure.width; + const height = objects.figure.height; expect(paths).to.deep.equal([`M0,${height}L${width},0`]); }); @@ -125,8 +125,8 @@ describe('lines >', () => { .selectAll('.curve path.line') .nodes() .map((el) => el.getAttribute('d')); - const width = objects.figure.plotarea_width; - const height = objects.figure.plotarea_height; + const width = objects.figure.width; + const height = objects.figure.height; expect(paths).to.deep.equal([ `M0,${height}L${width / 2},${height}L${width},0`, `M${width / 2},${height}L${width / 2},${height / 2}L${width},0`, @@ -173,8 +173,8 @@ describe('lines >', () => { .selectAll('.curve path.line') .nodes() .map((el) => el.getAttribute('d')); - const width = objects.figure.plotarea_width; - const height = objects.figure.plotarea_height; + const width = objects.figure.width; + const height = objects.figure.height; expect(paths).to.deep.equal([ `M0,${height}L${width / 2},${height}L${width},0`, `M${width / 2},${height}L${width / 2},${height / 2}L${width},0`, @@ -219,8 +219,8 @@ describe('lines >', () => { .selectAll('.curve path.line') .nodes() .map((el) => el.getAttribute('d')); - const width = objects.figure.plotarea_width; - const height = objects.figure.plotarea_height; + const width = objects.figure.width; + const height = objects.figure.height; expect(paths).to.deep.equal([ `M0,${height}L${width / 2},${height}L${width},0`, diff --git a/js/src/test/scales.ts b/js/src/test/scales.ts index af4d79846..39fa91794 100644 --- a/js/src/test/scales.ts +++ b/js/src/test/scales.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import { DummyManager } from './dummy-manager'; -import bqplot = require('..'); +import * as bqplot from '..'; import { create_model_bqplot } from './widget-utils'; describe('scales >', () => { diff --git a/js/src/test/scatter-mega.ts b/js/src/test/scatter-mega.ts deleted file mode 100644 index 5bafae44f..000000000 --- a/js/src/test/scatter-mega.ts +++ /dev/null @@ -1,435 +0,0 @@ -import { expect } from 'chai'; -import { DummyManager } from './dummy-manager'; -import * as bqplot from '../index'; -import { create_figure_scatter } from './widget-utils'; - -describe('scatter mega >', () => { - beforeEach(async function () { - this.manager = new DummyManager({ bqplot: bqplot }); - }); - - it('basics', async function () { - const x_array = new Float32Array([0, 1]); - const y_array = new Float32Array([2, 3]); - const x = { dtype: 'float32', value: new DataView(x_array.buffer) }; - const y = { dtype: 'float32', value: new DataView(y_array.buffer) }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - expect(scatter.x.array).to.deep.equal(x_array); - expect(scatter.x.itemSize).to.equal(1); - expect(scatter.x.meshPerAttribute).to.equal(1); - - expect(scatter.x_previous.array).to.deep.equal(x_array); - expect(scatter.x_previous.itemSize).to.equal(1); - expect(scatter.x_previous.meshPerAttribute).to.equal(1); - - expect(scatter.y.array).to.deep.equal(y_array); - expect(scatter.y.itemSize).to.equal(1); - expect(scatter.y.meshPerAttribute).to.equal(1); - - expect(scatter.y_previous.array).to.deep.equal(y_array); - expect(scatter.y_previous.itemSize).to.equal(1); - expect(scatter.y_previous.meshPerAttribute).to.equal(1); - - const new_x = new Float32Array([1, 2]); - scatter.model.set('x', new_x); - expect(scatter.x.array).to.deep.equal(new_x); - expect(scatter.x_previous.array).to.deep.equal(x_array); - - const new_y = new Float32Array([34, 1]); - scatter.model.set('y', new_y); - expect(scatter.y.array).to.deep.equal(new_y); - expect(scatter.y_previous.array).to.deep.equal(y_array); - }); - - it('size', async function () { - const x = { - dtype: 'float32', - value: new DataView(new Float32Array([0, 1]).buffer), - }; - const y = { - dtype: 'float32', - value: new DataView(new Float32Array([2, 3]).buffer), - }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - const default_size = scatter.model.get('default_size'); - - expect(scatter.size.array).to.deep.equal(new Float32Array([default_size])); - expect(scatter.size.meshPerAttribute).to.equal(2); // Same size fore the two markers - expect(scatter.size_previous.array).to.deep.equal(scatter.size.array); - expect(scatter.size_previous.meshPerAttribute).to.equal(2); - - scatter.model.set('default_size', default_size * 2); - expect(scatter.size.array).to.deep.equal( - new Float32Array([default_size * 2]) - ); - expect(scatter.size.meshPerAttribute).to.equal(2); - expect(scatter.size_previous.array).to.deep.equal( - new Float32Array([default_size]) - ); - expect(scatter.size_previous.meshPerAttribute).to.equal(2); - - // We push an array, the previous should be a scalar - const new_size = new Float32Array([0, 0.5]); - scatter.model.set('size', new_size); - expect(scatter.size.array).to.deep.equal(new_size); - expect(scatter.size.meshPerAttribute).to.equal(1); // Each marker has its own size - expect(scatter.size_previous.array).to.deep.equal( - new Float32Array([default_size * 2]) - ); - expect(scatter.size_previous.meshPerAttribute).to.equal(2); - - // We push an array that is too short, default_size should be used - const new_size2 = new Float32Array([0]); - scatter.model.set('size', new_size2); - expect(scatter.size.array).to.deep.equal( - new Float32Array([0, default_size * 2]) - ); - expect(scatter.size.meshPerAttribute).to.equal(1); - expect(scatter.size_previous.array).to.deep.equal(new_size); - expect(scatter.size_previous.meshPerAttribute).to.equal(1); - }); - - it('opacity', async function () { - const x = { - dtype: 'float32', - value: new DataView(new Float32Array([0, 1, 2]).buffer), - }; - const y = { - dtype: 'float32', - value: new DataView(new Float32Array([2, 3, 3]).buffer), - }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - const opacities = new Float32Array([1]); - expect(scatter.opacity.array).to.deep.equal(opacities); - expect(scatter.opacity.meshPerAttribute).to.equal(3); - expect(scatter.opacity_previous.array).to.deep.equal(opacities); - expect(scatter.opacity_previous.meshPerAttribute).to.equal(3); - - const opacities2 = new Float32Array([0.5]); - scatter.model.set('opacities', opacities2); - expect(scatter.opacity.meshPerAttribute).to.equal(3); - expect(scatter.opacity.array).to.deep.equal(opacities2); - expect(scatter.opacity_previous.array).to.deep.equal(opacities); - expect(scatter.opacity.meshPerAttribute).to.equal(3); - - // We push an array of size 2 for the opacities. We have 3 markers - // so the opacities should be used periodicly - scatter.model.set('opacities', new Float32Array([0.5, 1.0])); - expect(scatter.opacity.array).to.deep.equal( - new Float32Array([0.5, 1.0, 0.5]) - ); - expect(scatter.opacity.meshPerAttribute).to.equal(1); - expect(scatter.opacity_previous.meshPerAttribute).to.equal(3); - expect(scatter.opacity_previous.array).to.deep.equal(opacities2); - - const new_opacity = new Float32Array([0.5, 1.0, 0.8]); - scatter.model.set('opacity', new_opacity); - expect(scatter.opacity.array).to.deep.equal(new_opacity); - expect(scatter.opacity.meshPerAttribute).to.equal(1); - expect(scatter.opacity_previous.array).to.deep.equal( - new Float32Array([0.5, 1.0, 0.5]) - ); - expect(scatter.opacity_previous.meshPerAttribute).to.equal(1); - - // We push an array that is too short, opacities should be used - scatter.model.set('opacity', new Float32Array([0.8])); - expect(scatter.opacity.array).to.deep.equal( - new Float32Array([0.8, 1.0, 0.5]) - ); - expect(scatter.opacity.meshPerAttribute).to.equal(1); - expect(scatter.opacity_previous.array).to.deep.equal(new_opacity); - expect(scatter.opacity_previous.meshPerAttribute).to.equal(1); - }); - - it('colors', async function () { - const x = { - dtype: 'float32', - value: new DataView(new Float32Array([0, 1, 2, 1]).buffer), - }; - const y = { - dtype: 'float32', - value: new DataView(new Float32Array([2, 3, 4, 3]).buffer), - }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - const red = new Float32Array([1, 0, 0]); - const blue = new Float32Array([0, 0, 1]); - const steelblue = new Float32Array([ - 0.27450981736183167, 0.5098039507865906, 0.7058823704719543, - ]); - - expect(scatter.color.array).to.deep.equal(steelblue); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(4); - expect(scatter.scatter_material.defines['USE_COLORMAP']).to.be.false; - - scatter.model.set('colors', ['red']); - expect(scatter.color.array).to.deep.equal(red); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(4); - expect(scatter.scatter_material.defines['USE_COLORMAP']).to.be.false; - - // We push an array of two colors. We have 4 markers - // so the colors should be used periodicly - scatter.model.set('colors', ['red', 'blue']); - expect(scatter.color.array).to.deep.equal( - new Float32Array([ - red[0], - red[1], - red[2], - blue[0], - blue[1], - blue[2], - red[0], - red[1], - red[2], - blue[0], - blue[1], - blue[2], - ]) - ); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(1); - expect(scatter.scatter_material.defines['USE_COLORMAP']).to.be.false; - - const new_color = new Float32Array([0.5, 1, 0.3, 0.1]); - scatter.model.set('color', new_color); - expect(scatter.color.array).to.deep.equal(new_color); - expect(scatter.color.itemSize).to.equal(1); - expect(scatter.color.meshPerAttribute).to.equal(1); - expect(scatter.scatter_material.defines['USE_COLORMAP']).to.be.true; - expect( - scatter.scatter_material.uniforms['domain_color'].value - ).to.deep.equal([new_color[3], new_color[1]]); - - const new_color2 = new Float32Array([0.5, 2, 0.6, -0.3]); - scatter.model.set('color', new_color2); - expect( - scatter.scatter_material.uniforms['domain_color'].value - ).to.deep.equal([new_color2[3], new_color2[1]]); - - scatter.model.set('color', null); - // TODO: now the min/max are undefined, or is there a good default? - scatter.scales.color.model.set('min', 1); - scatter.scales.color.model.set('max', 3); - expect( - scatter.scatter_material.uniforms['domain_color'].value - ).to.deep.equal([1, 3]); - scatter.scales.color.model.set('min', -1); - expect( - scatter.scatter_material.uniforms['domain_color'].value - ).to.deep.equal([-1, 3]); - }); - - it('selection', async function () { - const x = { - dtype: 'float32', - value: new DataView(new Float32Array([0, 1]).buffer), - }; - const y = { - dtype: 'float32', - value: new DataView(new Float32Array([2, 3]).buffer), - }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - expect(scatter.selected.array).to.deep.equal(new Float32Array([0])); - expect(scatter.selected.itemSize).to.equal(1); - expect(scatter.selected.meshPerAttribute).to.equal(2); - expect(scatter.scatter_material.uniforms['has_selection'].value).to.be - .false; - - // 2 is 'out of bounds', we only have two markers - scatter.model.set('selected', [1, 2]); - expect(scatter.selected.array).to.deep.equal(new Float32Array([0, 1])); - expect(scatter.selected.itemSize).to.equal(1); - expect(scatter.selected.meshPerAttribute).to.equal(1); - expect(scatter.scatter_material.uniforms['has_selection'].value).to.be.true; - - scatter.model.set('selected', [0, 1]); - expect(scatter.selected.array).to.deep.equal(new Float32Array([1, 1])); - expect(scatter.scatter_material.uniforms['has_selection'].value).to.be.true; - - scatter.model.set('selected', [0]); - expect(scatter.selected.array).to.deep.equal(new Float32Array([1, 0])); - expect(scatter.scatter_material.uniforms['has_selection'].value).to.be.true; - }); - - it('rotation', async function () { - const x = { - dtype: 'float32', - value: new DataView(new Float32Array([0, 1]).buffer), - }; - const y = { - dtype: 'float32', - value: new DataView(new Float32Array([2, 3]).buffer), - }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - expect(scatter.rotation.array).to.deep.equal(new Float32Array([0])); - expect(scatter.rotation.itemSize).to.equal(1); - expect(scatter.rotation.meshPerAttribute).to.equal(2); - - scatter.model.set('rotation', [60, 180]); - expect(scatter.rotation.array).to.deep.equal(new Float32Array([60, 180])); - expect(scatter.rotation.itemSize).to.equal(1); - expect(scatter.rotation.meshPerAttribute).to.equal(1); - }); - - it('markers number increase', async function () { - const x_array = new Float32Array([0, 1]); - const y_array = new Float32Array([2, 3]); - const x = { dtype: 'float32', value: new DataView(x_array.buffer) }; - const y = { dtype: 'float32', value: new DataView(y_array.buffer) }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - const steelblue = new Float32Array([ - 0.27450981736183167, 0.5098039507865906, 0.7058823704719543, - ]); - const default_size = scatter.model.get('default_size'); - const opacities = new Float32Array([1]); - - expect(scatter.markers_number).to.equal(2); - expect(scatter.instanced_geometry.maxInstancedCount).to.equal(2); - - // Checking size/opacity/color/selected attributes - expect(scatter.size.array).to.deep.equal(new Float32Array([default_size])); - expect(scatter.size.meshPerAttribute).to.equal(2); - - expect(scatter.opacity.array).to.deep.equal(opacities); - expect(scatter.opacity.meshPerAttribute).to.equal(2); - - expect(scatter.color.array).to.deep.equal(steelblue); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(2); - - expect(scatter.selected.array).to.deep.equal(new Float32Array([0])); - expect(scatter.selected.itemSize).to.equal(1); - expect(scatter.selected.meshPerAttribute).to.equal(2); - - // Increasing x length - // `x_previous` should have the right new size, but the markers - // should not increase until y has increased - const new_x = new Float32Array([3, 2, 10]); - scatter.model.set('x', new_x); - expect(scatter.x.array).to.deep.equal(new_x); - expect(scatter.x_previous.array).to.deep.equal( - new Float32Array([0, 1, 10]) - ); - - expect(scatter.markers_number).to.equal(2); - expect(scatter.instanced_geometry.maxInstancedCount).to.equal(2); - - // Increasing y length - // the markers number should be updated - const new_y = new Float32Array([4, 2, 2]); - scatter.model.set('y', new_y); - expect(scatter.x.array).to.deep.equal(new_x); - expect(scatter.x_previous.array).to.deep.equal( - new Float32Array([0, 1, 10]) - ); - - expect(scatter.y.array).to.deep.equal(new_y); - expect(scatter.y_previous.array).to.deep.equal(new Float32Array([2, 3, 2])); - - expect(scatter.markers_number).to.equal(3); - expect(scatter.instanced_geometry.maxInstancedCount).to.equal(3); - - // Checking size/opacity/color/selected attributes - expect(scatter.size.array).to.deep.equal(new Float32Array([default_size])); - expect(scatter.size.meshPerAttribute).to.equal(3); - - expect(scatter.opacity.array).to.deep.equal(opacities); - expect(scatter.opacity.meshPerAttribute).to.equal(3); - - expect(scatter.color.array).to.deep.equal(steelblue); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(3); - - expect(scatter.selected.array).to.deep.equal(new Float32Array([0])); - expect(scatter.selected.itemSize).to.equal(1); - expect(scatter.selected.meshPerAttribute).to.equal(3); - }); - - it('markers number decrease', async function () { - const x_array = new Float32Array([0, 1]); - const y_array = new Float32Array([2, 3]); - const x = { dtype: 'float32', value: new DataView(x_array.buffer) }; - const y = { dtype: 'float32', value: new DataView(y_array.buffer) }; - const objects = await create_figure_scatter(this.manager, x, y, true); - const scatter = objects.scatter; - - const steelblue = new Float32Array([ - 0.27450981736183167, 0.5098039507865906, 0.7058823704719543, - ]); - const default_size = scatter.model.get('default_size'); - const opacities = new Float32Array([1]); - - expect(scatter.markers_number).to.equal(2); - expect(scatter.instanced_geometry.maxInstancedCount).to.equal(2); - - // Checking size/opacity/color/selected attributes - expect(scatter.size.array).to.deep.equal(new Float32Array([default_size])); - expect(scatter.size.meshPerAttribute).to.equal(2); - - expect(scatter.opacity.array).to.deep.equal(opacities); - expect(scatter.opacity.meshPerAttribute).to.equal(2); - - expect(scatter.color.array).to.deep.equal(steelblue); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(2); - - expect(scatter.selected.array).to.deep.equal(new Float32Array([0])); - expect(scatter.selected.itemSize).to.equal(1); - expect(scatter.selected.meshPerAttribute).to.equal(2); - - // Decreasing x length - // it is fine if `x_previous` has not the right size, but the markers number - // should decrease - const new_x = new Float32Array([3]); - scatter.model.set('x', new_x); - expect(scatter.x.array).to.deep.equal(new_x); - expect(scatter.x_previous.array).to.deep.equal(new Float32Array([0, 1])); - - expect(scatter.markers_number).to.equal(1); - expect(scatter.instanced_geometry.maxInstancedCount).to.equal(1); - - // Checking size/opacity/color/selected attributes - // The meshPerAttribute parameter should not change, as it would trigger - // a creation of a new attribute (ThreeJS does not support dynamic - // meshPerAttribute change on an Attribute) - expect(scatter.size.array).to.deep.equal(new Float32Array([default_size])); - expect(scatter.size.meshPerAttribute).to.equal(2); - - expect(scatter.opacity.array).to.deep.equal(opacities); - expect(scatter.opacity.meshPerAttribute).to.equal(2); - - expect(scatter.color.array).to.deep.equal(steelblue); - expect(scatter.color.itemSize).to.equal(3); - expect(scatter.color.meshPerAttribute).to.equal(2); - - expect(scatter.selected.array).to.deep.equal(new Float32Array([0])); - expect(scatter.selected.itemSize).to.equal(1); - expect(scatter.selected.meshPerAttribute).to.equal(2); - - // Decreasing y length - const new_y = new Float32Array([4]); - scatter.model.set('y', new_y); - expect(scatter.x.array).to.deep.equal(new_x); - expect(scatter.x_previous.array).to.deep.equal(new Float32Array([0, 1])); - - expect(scatter.y.array).to.deep.equal(new_y); - expect(scatter.y_previous.array).to.deep.equal(new Float32Array([2, 3])); - - expect(scatter.markers_number).to.equal(1); - expect(scatter.instanced_geometry.maxInstancedCount).to.equal(1); - }); -}); diff --git a/js/src/test/scatter.ts b/js/src/test/scatter.ts index 24c62208f..56dd4a868 100644 --- a/js/src/test/scatter.ts +++ b/js/src/test/scatter.ts @@ -35,8 +35,8 @@ describe('scatter >', () => { .selectAll('.object_grp') .nodes() .map((el) => el.getAttribute('transform')); - const width = objects.figure.plotarea_width; - const height = objects.figure.plotarea_height; + const width = objects.figure.width; + const height = objects.figure.height; expect(transforms).to.deep.equal([ `translate(0, ${height})`, `translate(${width}, 0)`, diff --git a/js/src/test/widget-utils.ts b/js/src/test/widget-utils.ts index a99ebb33c..49b4dc82d 100644 --- a/js/src/test/widget-utils.ts +++ b/js/src/test/widget-utils.ts @@ -9,9 +9,18 @@ export async function create_model_bqplot( return create_model(manager, 'bqplot', `${name}Model`, name, id, args); } +export async function create_model_bqscales( + manager, + name: string, + id: string, + args: Object +) { + return create_model(manager, 'bqscales', `${name}Model`, name, id, args); +} + export async function create_model( manager, - module: string, + module_name: string, model: string, view: string, id: string, @@ -19,10 +28,10 @@ export async function create_model( ) { const model_widget = await manager.new_widget( { - model_module: module, + model_module: module_name, model_name: model, model_module_version: '*', - view_module: module, + view_module: module_name, view_name: view, view_module_version: '*', model_id: id, @@ -53,8 +62,8 @@ export async function create_figure_scatter( manager, x, y, - mega = false, - log = false + log = false, + autoLayout = false ) { const layout = await create_model( manager, @@ -67,30 +76,30 @@ export async function create_figure_scatter( let scale_x; let scale_y; if (log) { - scale_x = await create_model_bqplot(manager, 'LogScale', 'scale_x', { + scale_x = await create_model_bqscales(manager, 'LogScale', 'scale_x', { min: 0.01, max: 100, allow_padding: false, }); - scale_y = await create_model_bqplot(manager, 'LogScale', 'scale_y', { + scale_y = await create_model_bqscales(manager, 'LogScale', 'scale_y', { min: 0.1, max: 10, allow_padding: false, }); } else { - scale_x = await create_model_bqplot(manager, 'LinearScale', 'scale_x', { + scale_x = await create_model_bqscales(manager, 'LinearScale', 'scale_x', { min: 0, max: 1, allow_padding: false, }); - scale_y = await create_model_bqplot(manager, 'LinearScale', 'scale_y', { + scale_y = await create_model_bqscales(manager, 'LinearScale', 'scale_y', { min: 2, max: 3, allow_padding: false, }); } // TODO: the default values for the ColorScale should not be required, but defined in the defaults method - const scale_color = await create_model_bqplot( + const scale_color = await create_model_bqscales( manager, 'ColorScale', 'scale_color', @@ -109,7 +118,7 @@ export async function create_figure_scatter( const scatterModel = await create_model_bqplot( manager, - mega ? 'ScatterGL' : 'Scatter', + 'Scatter', 'scatter1', { scales: scales, @@ -142,13 +151,14 @@ export async function create_figure_scatter( figure_padding_y: 0, fig_margin: { bottom: 0, left: 0, right: 0, top: 0 }, marks: [scatterModel.toJSON()], + auto_layout: autoLayout, }); } catch (e) { console.error('error', e); } + const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, scatter: await figure.mark_views.views[0] }; } @@ -161,16 +171,26 @@ export async function create_figure_lines(manager, x, y, default_scales = {}) { 'layout_figure1', { _dom_classes: '', width: '400px', height: '500px' } ); - const scale_x = await create_model_bqplot(manager, 'LinearScale', 'scale_x', { - min: 0, - max: 1, - allow_padding: false, - }); - const scale_y = await create_model_bqplot(manager, 'LinearScale', 'scale_y', { - min: 2, - max: 3, - allow_padding: false, - }); + const scale_x = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_x', + { + min: 0, + max: 1, + allow_padding: false, + } + ); + const scale_y = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_y', + { + min: 2, + max: 3, + allow_padding: false, + } + ); const scales = { x: scale_x.toJSON(), y: scale_y.toJSON() }; const scales_mark = { x: default_scales['x'] || scale_x.toJSON(), @@ -213,7 +233,6 @@ export async function create_figure_lines(manager, x, y, default_scales = {}) { } const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, lines: await figure.mark_views.views[0] }; } @@ -227,12 +246,22 @@ export async function create_figure_pie(manager, sizes, labels) { { _dom_classes: '', width: '400px', height: '500px' } ); - const scale_x = await create_model_bqplot(manager, 'LinearScale', 'scale_x', { - allow_padding: false, - }); - const scale_y = await create_model_bqplot(manager, 'LinearScale', 'scale_y', { - allow_padding: false, - }); + const scale_x = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_x', + { + allow_padding: false, + } + ); + const scale_y = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_y', + { + allow_padding: false, + } + ); const pieModel = await create_model_bqplot(manager, 'Pie', 'pie1', { sizes: sizes, @@ -259,7 +288,6 @@ export async function create_figure_pie(manager, sizes, labels) { } const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, pie: await figure.mark_views.views[0] }; } @@ -272,16 +300,26 @@ export async function create_figure_bars(manager, x, y) { 'layout_figure1', { _dom_classes: '', width: '400px', height: '500px' } ); - const scale_x = await create_model_bqplot(manager, 'LinearScale', 'scale_x', { - min: 0, - max: 1, - allow_padding: false, - }); - const scale_y = await create_model_bqplot(manager, 'LinearScale', 'scale_y', { - min: 0, - max: 3, - allow_padding: false, - }); + const scale_x = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_x', + { + min: 0, + max: 1, + allow_padding: false, + } + ); + const scale_y = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_y', + { + min: 0, + max: 3, + allow_padding: false, + } + ); const scales = { x: scale_x.toJSON(), y: scale_y.toJSON() }; const color = null; const size = null; @@ -320,7 +358,6 @@ export async function create_figure_bars(manager, x, y) { } const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, bars: await figure.mark_views.views[0] }; } @@ -373,7 +410,6 @@ export async function create_figure_hist(manager, sample, bins) { } const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, hist: await figure.mark_views.views[0] }; } @@ -386,29 +422,39 @@ export async function create_figure_gridheatmap(manager, color) { 'layout_figure1', { _dom_classes: '', width: '400px', height: '500px' } ); - const scale_x = await create_model_bqplot(manager, 'LinearScale', 'scale_x', { - min: 0, - max: 1, - allow_padding: false, - }); - const scale_y = await create_model_bqplot(manager, 'LinearScale', 'scale_y', { - min: 0, - max: 1, - allow_padding: false, - }); - const scale_row = await create_model_bqplot( + const scale_x = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_x', + { + min: 0, + max: 1, + allow_padding: false, + } + ); + const scale_y = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_y', + { + min: 0, + max: 1, + allow_padding: false, + } + ); + const scale_row = await create_model_bqscales( manager, 'OrdinalScale', 'scale_row', { reverse: true } ); - const scale_column = await create_model_bqplot( + const scale_column = await create_model_bqscales( manager, 'OrdinalScale', 'scale_column', {} ); - const scale_color = await create_model_bqplot( + const scale_color = await create_model_bqscales( manager, 'ColorScale', 'scale_color', @@ -450,7 +496,6 @@ export async function create_figure_gridheatmap(manager, color) { } const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, grid: await figure.mark_views.views[0] }; } @@ -464,12 +509,22 @@ export async function create_figure_image(manager, ipywidgetImage) { { _dom_classes: '', width: '400px', height: '500px' } ); - const scale_x = await create_model_bqplot(manager, 'LinearScale', 'scale_x', { - allow_padding: false, - }); - const scale_y = await create_model_bqplot(manager, 'LinearScale', 'scale_y', { - allow_padding: false, - }); + const scale_x = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_x', + { + allow_padding: false, + } + ); + const scale_y = await create_model_bqscales( + manager, + 'LinearScale', + 'scale_y', + { + allow_padding: false, + } + ); const scales = { x: scale_x.toJSON(), y: scale_y.toJSON() }; const imageModel = await create_model_bqplot(manager, 'Image', 'image1', { @@ -495,7 +550,6 @@ export async function create_figure_image(manager, ipywidgetImage) { } const figure = await create_view(manager, figureModel); await manager.display_view(undefined, figure); - await figure._initial_marks_created; return { figure: figure, image: await figure.mark_views.views[0] }; } export function getFills(selection: any) { diff --git a/js/src/tsconfig.eslint.json b/js/src/tsconfig.eslint.json new file mode 100644 index 000000000..7aa5965d8 --- /dev/null +++ b/js/src/tsconfig.eslint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig", + "include": ["./**/*.ts", "./**/*.tsx"], + "exclude": [] +} diff --git a/js/src/tsconfig.json b/js/src/tsconfig.json new file mode 100644 index 000000000..c625088fa --- /dev/null +++ b/js/src/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfigbase", + "compilerOptions": { + "outDir": "../lib", + "rootDir": "." + }, + "include": ["./**/*.ts", "src/**/*.tsx"], + "exclude": ["./**/__tests__"], + "references": [{ "path": ".." }] +} diff --git a/js/src/utils.ts b/js/src/utils.ts index ce7846f3b..8dc7b328f 100644 --- a/js/src/utils.ts +++ b/js/src/utils.ts @@ -13,6 +13,7 @@ * limitations under the License. */ +import { DOMWidgetView } from '@jupyter-widgets/base'; import * as d3 from 'd3'; // var d3 =Object.assign({}, require("d3-array"), require("d3-scale")); import isTypedArray from 'is-typedarray'; @@ -118,3 +119,28 @@ export function d3GetEvent() { // leading to a null event, for now we can use window.event as fallback. return require('d3-selection').event || window.event; } + +// Phosphor shim for ipywidgets 7 support +export function getLuminoWidget(ipywidget: DOMWidgetView) { + return ipywidget.pWidget ? ipywidget.pWidget : ipywidget.luminoWidget; +} + +export function getEffectiveBackgroundColor(element) { + if (!element) { + // If no element provided or we have traversed beyond the body or html, + // we default to white as the background color. + return 'rgb(255, 255, 255)'; + } + + const style = window.getComputedStyle(element); + const bgColor = style.backgroundColor; + const hasBackgroundImage = style.backgroundImage !== 'none'; + const isTransparent = + bgColor === 'transparent' || bgColor === 'rgba(0, 0, 0, 0)'; + + if (!isTransparent || hasBackgroundImage) { + return bgColor; + } + + return getEffectiveBackgroundColor(element.parentElement); +} diff --git a/js/src/version.ts b/js/src/version.ts index 12234c652..50ef7f311 100644 --- a/js/src/version.ts +++ b/js/src/version.ts @@ -13,4 +13,6 @@ * limitations under the License. */ -export const semver_range = '^' + require('../package.json').version; +import packageJson from '../package.json'; + +export const semver_range = '^' + packageJson.version; diff --git a/js/tsconfig.eslint.json b/js/tsconfig.eslint.json deleted file mode 100644 index 0a76836c5..000000000 --- a/js/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": [] -} diff --git a/js/tsconfig.json b/js/tsconfig.json index 9afb7f818..e987dc3eb 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -1,21 +1,8 @@ { + "extends": "./tsconfigbase", "compilerOptions": { - "declaration": true, - "esModuleInterop": true, - "lib": ["es2015", "dom"], - "module": "commonjs", - "moduleResolution": "node", - "noEmitOnError": true, - "noUnusedLocals": true, - "outDir": "lib", - "resolveJsonModule": true, - "rootDir": "src", - "skipLibCheck": true, - "sourceMap": true, - "strict": false, - "strictPropertyInitialization": false, - "target": "es2015" + "outDir": "./", + "rootDir": "./" }, - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["src/**/__tests__"] + "files": ["package.json"] } diff --git a/js/tsconfigbase.json b/js/tsconfigbase.json new file mode 100644 index 000000000..c3ee7a69b --- /dev/null +++ b/js/tsconfigbase.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "composite": true, + "incremental": true, + "declaration": true, + "esModuleInterop": true, + "lib": ["es2015", "dom"], + "module": "esnext", + "moduleResolution": "node", + "noEmitOnError": true, + "noUnusedLocals": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": false, + "strictPropertyInitialization": false, + "target": "es2015" + } +} diff --git a/js/webpack.config.js b/js/webpack.config.js index baa9240da..d70646315 100644 --- a/js/webpack.config.js +++ b/js/webpack.config.js @@ -1,5 +1,12 @@ const path = require('path'); +const crypto = require('crypto'); + +// Workaround for loaders using "md4" by default, which is not supported in FIPS-compliant OpenSSL +const cryptoOrigCreateHash = crypto.createHash; +crypto.createHash = (algorithm) => + cryptoOrigCreateHash(algorithm == 'md4' ? 'sha256' : algorithm); + const rules = [ { test: /\.css$/, diff --git a/js/webpack.lab.config.js b/js/webpack.lab.config.js new file mode 100644 index 000000000..b5c505cce --- /dev/null +++ b/js/webpack.lab.config.js @@ -0,0 +1,6 @@ +const crypto = require('crypto'); + +// Workaround for loaders using "md4" by default, which is not supported in FIPS-compliant OpenSSL +const cryptoOrigCreateHash = crypto.createHash; +crypto.createHash = (algorithm) => + cryptoOrigCreateHash(algorithm == 'md4' ? 'sha256' : algorithm); diff --git a/js/yarn.lock b/js/yarn.lock index 561283d90..2ef382f43 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -1,8112 +1,11510 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" - integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w== - -"@babel/core@^7.11.1", "@babel/core@^7.7.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.5.tgz#d281f46a9905f07d1b3bf71ead54d9c7d89cb1e3" - integrity sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== - dependencies: - "@babel/types" "^7.14.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz#8842ec495516dd1ed8f6c572be92ba78b1e9beef" - integrity sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" - integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helpers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.5.tgz#4870f8d9a6fdbbd65e5674a3558b4ff7fef0d9b2" - integrity sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829" - integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - -"@babel/plugin-proposal-async-generator-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39" - integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf" - integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-classes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-destructuring@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35" - integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== - dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c" - integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-spread@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz#bd269fb4119754d2ce7f4cc39a96b4f71baae356" - integrity sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/preset-env@^7.11.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997" - integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.5" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.5" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.5" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.14.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.5.tgz#665450911c6031af38f81db530f387ec04cd9a98" - integrity sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870" - integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.14.5", "@babel/types@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - to-fast-properties "^2.0.0" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== - -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jupyter-widgets/base@^2 || ^3 || ^4.0.0", "@jupyter-widgets/base@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@jupyter-widgets/base/-/base-4.0.0.tgz#6935461a3bd78df5523022e1c3d370ae24c9a454" - integrity sha512-lBQgLYzq6C+XjfVJTidk+rckKo/+xlTgIm1XUtACA3BUz8bgi2du2zmbYkcrplJMwGub4QWP6GnKgM5ZZRhzYg== - dependencies: - "@jupyterlab/services" "^6.0.0" - "@lumino/coreutils" "^1.2.0" - "@lumino/messaging" "^1.2.1" - "@lumino/widgets" "^1.3.0" - "@types/backbone" "^1.4.1" - "@types/lodash" "^4.14.134" - backbone "1.2.3" - base64-js "^1.2.1" - jquery "^3.1.1" - lodash "^4.17.4" - -"@jupyter-widgets/controls@^1.5.0 || ^2 || ^3": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@jupyter-widgets/controls/-/controls-3.0.0.tgz#76e0c343627f0d300908e2dbdb524651f1be6315" - integrity sha512-VyoBxUp/8pf7IFlM4hriD/UvYpHzXFXrUAaT/NRAhMUFO4Ruh4ALcxeHdWFnqxMjiSyOnWdjzdIeQL0pYi83Gg== - dependencies: - "@jupyter-widgets/base" "^4.0.0" - "@lumino/algorithm" "^1.1.0" - "@lumino/domutils" "^1.1.0" - "@lumino/messaging" "^1.2.1" - "@lumino/signaling" "^1.2.0" - "@lumino/widgets" "^1.3.0" - d3-format "^1.3.0" - jquery "^3.1.1" - jquery-ui "^1.12.1" - underscore "^1.8.3" - -"@jupyterlab/builder@^3.0.0": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@jupyterlab/builder/-/builder-3.0.9.tgz#60b184accd63afced196d2369c886f6fe238acc4" - integrity sha512-IjWHk/xTgufTyggbT/0tGFeRdsHe3rNMQkOMqDN5+8YqFV4uCTUNokgvyysedgwB7JP+tcPclN/a3QoIPjAq/w== - dependencies: - "@jupyterlab/buildutils" "^3.0.7" - "@lumino/algorithm" "^1.3.3" - "@lumino/application" "^1.13.1" - "@lumino/commands" "^1.12.0" - "@lumino/coreutils" "^1.5.3" - "@lumino/disposable" "^1.4.3" - "@lumino/domutils" "^1.2.3" - "@lumino/dragdrop" "^1.7.1" - "@lumino/messaging" "^1.4.3" - "@lumino/properties" "^1.2.3" - "@lumino/signaling" "^1.4.3" - "@lumino/virtualdom" "^1.8.0" - "@lumino/widgets" "^1.16.1" - ajv "^6.12.3" - commander "~6.0.0" - css-loader "^5.0.1" - duplicate-package-checker-webpack-plugin "^3.0.0" - file-loader "~6.0.0" - fs-extra "^9.0.1" - glob "~7.1.6" - mini-css-extract-plugin "~1.3.2" - path-browserify "^1.0.0" - process "^0.11.10" - raw-loader "~4.0.0" - style-loader "~2.0.0" - supports-color "^7.2.0" - svg-url-loader "~6.0.0" - terser-webpack-plugin "^4.1.0" - to-string-loader "^1.1.6" - url-loader "~4.1.0" - webpack "^5.3.1" - webpack-cli "^4.1.0" - webpack-merge "^5.1.2" - worker-loader "^3.0.2" - -"@jupyterlab/buildutils@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jupyterlab/buildutils/-/buildutils-3.0.7.tgz#e83d3303b5f2bddd0b6b39fdab81864b67574dec" - integrity sha512-V3A9foBIP9CJcblyZTEKHtkY6o/3pRodxNAZqveiDDpBdQhM8xv4uOLBKkkMxroa5Eh5Goub4fw+JHxI2nKGXw== - dependencies: - "@lumino/coreutils" "^1.5.3" - "@yarnpkg/lockfile" "^1.1.0" - child_process "~1.0.2" - commander "~6.0.0" - crypto "~1.0.1" - dependency-graph "^0.9.0" - fs-extra "^9.0.1" - glob "~7.1.6" - inquirer "^7.0.0" - package-json "^6.5.0" - prettier "^2.1.1" - semver "^7.3.2" - sort-package-json "~1.44.0" - typescript "~4.1.3" - -"@jupyterlab/coreutils@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-5.0.6.tgz#dd36591d01191762ff35e3b096f324e990e0e617" - integrity sha512-nXGpI1IJw+4pNq6Afy+oI3LrTsaQ14xG7Kxbhg9UPfoDgsNt2rdG4pwYe4NZyj2GJHAkUj00lcUD9eBTrxMWvw== - dependencies: - "@lumino/coreutils" "^1.5.3" - "@lumino/disposable" "^1.4.3" - "@lumino/signaling" "^1.4.3" - minimist "~1.2.0" - moment "^2.24.0" - path-browserify "^1.0.0" - url-parse "~1.5.1" - -"@jupyterlab/nbformat@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@jupyterlab/nbformat/-/nbformat-3.0.6.tgz#858a6567cdd60879bc7f9dad6c9dcb5587417b5d" - integrity sha512-4+u770JYPmRpLyEPpnG0crj8ePUkg/vCF1W4hnDDxnLTVjzKw5kv6KVb5yJGEHAihUOf51bjceNUOp/+nLVBTg== - dependencies: - "@lumino/coreutils" "^1.5.3" - -"@jupyterlab/observables@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-4.0.6.tgz#be3bb0f08d2e79f86f4553857ed0aa90d7b293f2" - integrity sha512-PYJosNXGSkLExaEXqpUuDjEXTEcxTpvM6kG8I6NFJyDQVD6E50LggC6NofY5EIcEsJsO771BLvI4kwNk7LRQSA== - dependencies: - "@lumino/algorithm" "^1.3.3" - "@lumino/coreutils" "^1.5.3" - "@lumino/disposable" "^1.4.3" - "@lumino/messaging" "^1.4.3" - "@lumino/signaling" "^1.4.3" - -"@jupyterlab/services@^6.0.0": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-6.0.9.tgz#70a10d7f6883b8fafff81216663d96858b0cf46b" - integrity sha512-zeN9roqwbYo6b2I5BXWx+Mr4KzTpe2UcVwrcAGw9NXqIieb0ZnvtHqtNj/vcHCM2xQKuPup9W1X1bE5b3wF5Yw== - dependencies: - "@jupyterlab/coreutils" "^5.0.6" - "@jupyterlab/nbformat" "^3.0.6" - "@jupyterlab/observables" "^4.0.6" - "@jupyterlab/settingregistry" "^3.0.6" - "@jupyterlab/statedb" "^3.0.6" - "@lumino/algorithm" "^1.3.3" - "@lumino/coreutils" "^1.5.3" - "@lumino/disposable" "^1.4.3" - "@lumino/polling" "^1.3.3" - "@lumino/signaling" "^1.4.3" - node-fetch "^2.6.0" - ws "^7.2.0" - -"@jupyterlab/settingregistry@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@jupyterlab/settingregistry/-/settingregistry-3.0.6.tgz#000cd9dc4984a1ccac01d73c7967893befe14b8d" - integrity sha512-fIeVJjkaf8FYSJ4jwJobwNeco8J2CEuWzmEJKiDjhmzmRZApS9Jjx+CJXDkTxoSMDQ41ELxQKJq5bcbih/90zQ== - dependencies: - "@jupyterlab/statedb" "^3.0.6" - "@lumino/commands" "^1.12.0" - "@lumino/coreutils" "^1.5.3" - "@lumino/disposable" "^1.4.3" - "@lumino/signaling" "^1.4.3" - ajv "^6.12.3" - json5 "^2.1.1" - -"@jupyterlab/statedb@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@jupyterlab/statedb/-/statedb-3.0.6.tgz#d331c815496f80083d53277e1972095da954f31f" - integrity sha512-hXewp5TAKneWJcYXenTZuzSUagGjyWv5vRHDFarw1O4pkEg7zz8IyN2yAvbYH6+GDqIhF/91rgGu9alkx/yjjA== - dependencies: - "@lumino/commands" "^1.12.0" - "@lumino/coreutils" "^1.5.3" - "@lumino/disposable" "^1.4.3" - "@lumino/properties" "^1.2.3" - "@lumino/signaling" "^1.4.3" - -"@lumino/algorithm@^1.1.0", "@lumino/algorithm@^1.3.3", "@lumino/algorithm@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@lumino/algorithm/-/algorithm-1.6.0.tgz#771e7896cd94e660f9b58a52f80e1bb255de1d41" - integrity sha512-NMOcm5Yr9nXz5gokS/K4jHBbUMQYBkvDXl1n51XWdcz0LY+oGuIKPhjazhUgmbNRehzdZBj5hMMd1+htYWeVKQ== - -"@lumino/application@^1.13.1": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@lumino/application/-/application-1.20.0.tgz#b50ca4180bc400589fdfcfcaab08c4af937fccd0" - integrity sha512-FAoQcq4L3ZswTK0lWfLKnG1ecG26cwqjzg2fyoBeuWGBi1TG9BYjFBdV7ErTFMxW8jE1CLOLuxsZaKFLNErcKA== - dependencies: - "@lumino/commands" "^1.15.0" - "@lumino/coreutils" "^1.8.0" - "@lumino/widgets" "^1.23.0" - -"@lumino/collections@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@lumino/collections/-/collections-1.6.0.tgz#7d3e94cee26409b0cd719c1934bdda471e6a5662" - integrity sha512-ZETm0/xF0oUHV03sOXNOfFI1EEpS317HvN5n+fZBJvCNZIrJkWmKD8QuxcfwHb7AChKUhXlVHhDbWlb1LKnd7g== - dependencies: - "@lumino/algorithm" "^1.6.0" - -"@lumino/commands@^1.12.0", "@lumino/commands@^1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@lumino/commands/-/commands-1.15.0.tgz#06eb94fb4b34cad59f35b1fcaf473e8d2047f779" - integrity sha512-JOE68KfbR9xw5YTfcwo+9E0PSWidifEMAcOC/aXd7iSzfsCRknMTcMQIUGL277IU7J7CJvoe10DUE5QKwTmX+g== - dependencies: - "@lumino/algorithm" "^1.6.0" - "@lumino/coreutils" "^1.8.0" - "@lumino/disposable" "^1.7.0" - "@lumino/domutils" "^1.5.0" - "@lumino/keyboard" "^1.5.0" - "@lumino/signaling" "^1.7.0" - "@lumino/virtualdom" "^1.11.0" - -"@lumino/coreutils@^1.2.0", "@lumino/coreutils@^1.5.3", "@lumino/coreutils@^1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-1.8.0.tgz#4feb3ccbfbc3efc8e395a90f22b5a938fbad959a" - integrity sha512-OvCsaASUqOE7R6Dxngyk4/b5QMOjyRUNxuZuuL+fx+JvGKZFZ/B2c9LYtAJ9mDmQ1BQiGNV/qSpL4o7x8PCfjw== - -"@lumino/disposable@^1.4.3", "@lumino/disposable@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@lumino/disposable/-/disposable-1.7.0.tgz#539463490cb42e8d2dc46b5ff7cc291f4f1a8d07" - integrity sha512-3mWi11ko3XVY63BPwvys7MXrbFddA2i+gp72d0wAKM2NDDUopVPikMHhJpjGJcw+otjahzXYiTewxPDEau9dYg== - dependencies: - "@lumino/algorithm" "^1.6.0" - "@lumino/signaling" "^1.7.0" - -"@lumino/domutils@^1.1.0", "@lumino/domutils@^1.2.3", "@lumino/domutils@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@lumino/domutils/-/domutils-1.5.0.tgz#fdba0cfe404b4817e63aa064f63b3c965655e76e" - integrity sha512-dZ0Aa+/qhvfPc1aa5kX4LLGE3B6BW1XmJa0R1XVCEpAFY3cZiujuQWmhYHJtZPrOiqn0UtioT2OpqnWdtCWc0A== - -"@lumino/dragdrop@^1.10.0", "@lumino/dragdrop@^1.7.1": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@lumino/dragdrop/-/dragdrop-1.10.0.tgz#2fddacfee055e660dd33dd9a3cfbd8fbba811673" - integrity sha512-A3cNLcp09zygOprWmLTkLZCQYNq3dJfN+mhni4IZizqCTkKbTCEzo2/IwoCWvy+ABKft8d/A9Y40wFW6yJ9OyA== - dependencies: - "@lumino/coreutils" "^1.8.0" - "@lumino/disposable" "^1.7.0" - -"@lumino/keyboard@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@lumino/keyboard/-/keyboard-1.5.0.tgz#c12213822dd2645c412e8689aecd4a2726113ac6" - integrity sha512-/uF9xqHYVbIkser2Q6UIv7VWrzThr1fxAmSOShjSoKGocL0XHeaBaCOMezSaVxnJ1wm1ciNdhMsjscVM8Inp7g== - -"@lumino/messaging@^1", "@lumino/messaging@^1.2.1", "@lumino/messaging@^1.4.3", "@lumino/messaging@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@lumino/messaging/-/messaging-1.7.0.tgz#32542f9e9a266fd5b3f71842f70cfe141e016d93" - integrity sha512-QYWf9QGIGD0Oes104zw7mVln4S8yRije2mZhNNRBjkYcDuQlPW+eRSuC5LwAMsFnGymBlUPwPbKOUEO2RbhAtg== - dependencies: - "@lumino/algorithm" "^1.6.0" - "@lumino/collections" "^1.6.0" - -"@lumino/polling@^1.3.3": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@lumino/polling/-/polling-1.6.0.tgz#64f40bba4602fe9eceb9f3fae8f3647831e5b7e9" - integrity sha512-jG1nqw6UO5XEN7QamOr6iDW8WvYeZQcBVRjM38fszz62dwJ/VGPvO2hlNl6QWWIfCynbJudms0LQm+z0BT1EdA== - dependencies: - "@lumino/coreutils" "^1.8.0" - "@lumino/disposable" "^1.7.0" - "@lumino/signaling" "^1.7.0" - -"@lumino/properties@^1.2.3", "@lumino/properties@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@lumino/properties/-/properties-1.5.0.tgz#7e8638e84c51bb110c5a69f91ca8b0e40b2c3fca" - integrity sha512-YqpJE6/1Wkjrie0E+ypu+yzd55B5RlvKYMnQs3Ox+SrJsnNBhA6Oj44EhVf8SUTuHgn1t/mm+LvbswKN5RM4+g== - -"@lumino/signaling@^1.2.0", "@lumino/signaling@^1.4.3", "@lumino/signaling@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@lumino/signaling/-/signaling-1.7.0.tgz#76da4738bf8f19e7da6de1d457a54220e2140670" - integrity sha512-a5kd11Sf04jTfpzxCr7TOBD2o5YvItA4IGwiOoG+QR6sPR0Rwmcf47fPItqXo5st58iNIblC3F+c264N+Me+gg== - dependencies: - "@lumino/algorithm" "^1.6.0" - -"@lumino/virtualdom@^1.11.0", "@lumino/virtualdom@^1.8.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@lumino/virtualdom/-/virtualdom-1.11.0.tgz#468b4d28a07e2b8988dc583b4aab40e37dc6955e" - integrity sha512-G0sIx4pLYbgJ4w+SIgsCYQgKP/GBrWgjh8wcumD6XpaYZNivJv4c01xITYYlh7FU61jZmMWMrxtZztArNRDSqg== - dependencies: - "@lumino/algorithm" "^1.6.0" - -"@lumino/widgets@^1", "@lumino/widgets@^1.16.1", "@lumino/widgets@^1.23.0", "@lumino/widgets@^1.3.0": - version "1.23.0" - resolved "https://registry.yarnpkg.com/@lumino/widgets/-/widgets-1.23.0.tgz#096c7574de75fa67b32bcb914c5dae290fbee6f3" - integrity sha512-0Akt9ESgc06SJ3EJG3VK1Liw+AAjRWkKMfm8VUTwT/1QJYYGZ8kfHNO97mkBLv+0EkLEkZIeaQb8fIoU6vh7bw== - dependencies: - "@lumino/algorithm" "^1.6.0" - "@lumino/commands" "^1.15.0" - "@lumino/coreutils" "^1.8.0" - "@lumino/disposable" "^1.7.0" - "@lumino/domutils" "^1.5.0" - "@lumino/dragdrop" "^1.10.0" - "@lumino/keyboard" "^1.5.0" - "@lumino/messaging" "^1.7.0" - "@lumino/properties" "^1.5.0" - "@lumino/signaling" "^1.7.0" - "@lumino/virtualdom" "^1.11.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" - integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.0", "@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@sinonjs/samsam@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-5.3.1.tgz#375a45fe6ed4e92fca2fb920e007c48232a6507f" - integrity sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg== - dependencies: - "@sinonjs/commons" "^1.6.0" - lodash.get "^4.4.2" - type-detect "^4.0.8" - -"@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== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@types/backbone@^1.4.1": - version "1.4.10" - resolved "https://registry.yarnpkg.com/@types/backbone/-/backbone-1.4.10.tgz#042e72ffc966fe920ed02ff92afa66984a036844" - integrity sha512-X6UM8N9i4WFtO1F53Z3DE7mjI7UxEfxyFtMTYHOPFhYFvExDuu0UJENstnA023+/FnVOdxltMIKc4picZxW4dA== - dependencies: - "@types/jquery" "*" - "@types/underscore" "*" - -"@types/chai@^4.1.7": - version "4.2.18" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4" - integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ== - -"@types/d3-array@^1": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-1.2.8.tgz#b852381cb68e31e46bfa23ee70a383cbc6d62146" - integrity sha512-wWV0wT6oLUGprrOR5LMK7Dh8EBiondhnqINsvazv6UucYfTdb2oaFF4knlqzZV2RKB9ZC9G7G1Iojt8b/wolsw== - -"@types/d3-axis@^1": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-1.0.14.tgz#4ff27eb94fab10efbda6c972e1fbb26ea696655b" - integrity sha512-wZAKX/dtFT5t5iuCaiU0QL0BWB19TE6h7C7kgfBVyoka7zidQWvf8E9zQTJ5bNPBQxd0+JmplNqwy1M8O8FOjA== - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-brush@^1": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-1.1.4.tgz#0b5cc9c57476d0144b991228b44664e08494b7f3" - integrity sha512-2t8CgWaha9PsPdSZJ9m6Jl4awqf3DGIXek2e7gfheyfP2R0a/18MX+wuLHx+LyI1Ad7lxDsPWcswKD0XhQEjmg== - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-chord@^1": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-1.0.10.tgz#4c14ca40f61b89a3c615d63f5a34fcc81390805c" - integrity sha512-U6YojfET6ITL1/bUJo+/Lh3pMV9XPAfOWwbshl3y3RlgAX9VO/Bxa13IMAylZIDY4VsA3Gkh29kZP1AcAeyoYA== - -"@types/d3-collection@*": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/d3-collection/-/d3-collection-1.0.10.tgz#bca161e336156968f267c077f7f2bfa8ff224e58" - integrity sha512-54Fdv8u5JbuXymtmXm2SYzi1x/Svt+jfWBU5junkhrCewL92VjqtCBDn97coBRVwVFmYNnVTNDyV8gQyPYfm+A== - -"@types/d3-color@^1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.4.1.tgz#0d9746c84dfef28807b2989eed4f37b2575e1f33" - integrity sha512-xkPLi+gbgUU9ED6QX4g6jqYL2KCB0/3AlM+ncMGqn49OgH0gFMY/ITGqPF8HwEiLzJaC+2L0I+gNwBgABv1Pvg== - -"@types/d3-contour@^1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-1.3.1.tgz#589dc3eec14168eea7e31edd1e3bbe246cc9d626" - integrity sha512-wWwsM/3NfKTRBdH00cSf+XlsaHlNTkvH66PgDedobyvKQZ4sJrXXpr16LXvDnAal4B67v8JGrWDgyx6dqqKLuQ== - dependencies: - "@types/d3-array" "^1" - "@types/geojson" "*" - -"@types/d3-dispatch@^1": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-1.0.9.tgz#c5a180f1e251de853b399cfbfbb6dd7f8bf842ae" - integrity sha512-zJ44YgjqALmyps+II7b1mZLhrtfV/FOxw9owT87mrweGWcg+WK5oiJX2M3SYJ0XUAExBduarysfgbR11YxzojQ== - -"@types/d3-drag@^1": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-1.2.5.tgz#0b1b852cb41577075aa625ae6149379ea6c34dfd" - integrity sha512-7NeTnfolst1Js3Vs7myctBkmJWu6DMI3k597AaHUX98saHjHWJ6vouT83UrpE+xfbSceHV+8A0JgxuwgqgmqWw== - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-dsv@^1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-1.2.1.tgz#1524fee9f19d689c2f76aa0e24e230762bf96994" - integrity sha512-LLmJmjiqp/fTNEdij5bIwUJ6P6TVNk5hKM9/uk5RPO2YNgEu9XvKO0dJ7Iqd3psEdmZN1m7gB1bOsjr4HmO2BA== - -"@types/d3-ease@^1": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-1.0.10.tgz#09910e8558439b6038a7ed620650e510394ffa6d" - integrity sha512-fMFTCzd8DOwruE9zlu2O8ci5ct+U5jkGcDS+cH+HCidnJlDs0MZ+TuSVCFtEzh4E5MasItwy+HvgoFtxPHa5Cw== - -"@types/d3-fetch@^1": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-1.2.2.tgz#b93bfe248b8b761af82f4dac57959c989f67da3e" - integrity sha512-rtFs92GugtV/NpiJQd0WsmGLcg52tIL0uF0bKbbJg231pR9JEb6HT4AUwrtuLq3lOeKdLBhsjV14qb0pMmd0Aw== - dependencies: - "@types/d3-dsv" "^1" - -"@types/d3-force@^1": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-1.2.2.tgz#6337a146dbdf2781f5dde5bb491a646fd03d7bc4" - integrity sha512-TN7KO7sk0tJauedIt0q20RQRFo4V3v97pJKO/TDK40X3LaPM1aXRM2+zFF+nRMtseEiszg4KffudhjR8a3+4cg== - -"@types/d3-format@^1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.4.1.tgz#1e657a219e4b1e3931508a610d570bdec8ecdd9d" - integrity sha512-ss9G2snEKmp2In5Z3T0Jpqv8QaDBc2xHltBw83KjnV5B5w+Iwphbvq5ph/Xnu4d03fmmsdt+o1aWch379rxIbA== - -"@types/d3-geo@^1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-1.12.1.tgz#bec8692ffee9f60e18483af9008f92d4a8428118" - integrity sha512-8+gyGFyMCXIHtnMNKQDT++tZ4XYFXgiP5NK7mcv34aYXA16GQFiBBITjKzxghpO8QNVceOd9rUn1JY92WLNGQw== - dependencies: - "@types/geojson" "*" - -"@types/d3-hierarchy@^1": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-1.1.7.tgz#14a57b0539f8929015f8ad96490de50a16211040" - integrity sha512-fvht6DOYKzqmXjMb/+xfgkmrWM4SD7rMA/ZbM+gGwr9ZTuIDfky95J8CARtaJo/ExeWyS0xGVdL2gqno2zrQ0Q== - -"@types/d3-interpolate@^1": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz#88902a205f682773a517612299a44699285eed7b" - integrity sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg== - dependencies: - "@types/d3-color" "^1" - -"@types/d3-path@^1": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-1.0.9.tgz#73526b150d14cd96e701597cbf346cfd1fd4a58c" - integrity sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ== - -"@types/d3-polygon@^1": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-1.0.8.tgz#127ee83fccda5bf57384011da90f31367fea1530" - integrity sha512-1TOJPXCBJC9V3+K3tGbTqD/CsqLyv/YkTXAcwdsZzxqw5cvpdnCuDl42M4Dvi8XzMxZNCT9pL4ibrK2n4VmAcw== - -"@types/d3-quadtree@^1": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-1.0.8.tgz#980998eb20d5e1c1494089ad9a8466a0e98825a7" - integrity sha512-FuqYiexeSQZlc+IcGAVK8jSJKDFKHcSf/jx8rqJUUVx6rzv7ecQiXKyatrLHHh3W4CAvgNeVI23JKgk4+x2wFg== - -"@types/d3-random@^1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-1.1.3.tgz#8f7fdc23f92d1561e0694eb49567e8ab50537a19" - integrity sha512-XXR+ZbFCoOd4peXSMYJzwk0/elP37WWAzS/DG+90eilzVbUSsgKhBcWqylGWe+lA2ubgr7afWAOBaBxRgMUrBQ== - -"@types/d3-scale-chromatic@^1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.5.1.tgz#e2b7c3401e5c13809f831911eb820e444f4fc67a" - integrity sha512-7FtJYrmXTEWLykShjYhoGuDNR/Bda0+tstZMkFj4RRxUEryv16AGh3be21tqg84B6KfEwiZyEpBcTyPyU+GWjg== - -"@types/d3-scale@^2": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-2.2.4.tgz#ca0d4b84d2f88fe058480f81354d14041a667b96" - integrity sha512-wkQXT+IfgfAnKB5rtS1qMJg3FS32r1rVFHvqtiqk8pX8o5aQR3VwX1P7ErHjzNIicTlkWsaMiUTrYB+E75HFeA== - dependencies: - "@types/d3-time" "^1" - -"@types/d3-selection@^1": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.4.3.tgz#36928bbe64eb8e0bbcbaa01fb05c21ff6c71fa93" - integrity sha512-GjKQWVZO6Sa96HiKO6R93VBE8DUW+DDkFpIMf9vpY5S78qZTlRRSNUsHr/afDpF7TvLDV7VxrUFOWW7vdIlYkA== - -"@types/d3-shape@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-1.3.5.tgz#c0164c1be1429473016f855871d487f806c4e968" - integrity sha512-aPEax03owTAKynoK8ZkmkZEDZvvT4Y5pWgii4Jp4oQt0gH45j6siDl9gNDVC5kl64XHN2goN9jbYoHK88tFAcA== - dependencies: - "@types/d3-path" "^1" - -"@types/d3-time-format@^2": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-2.3.1.tgz#87a30e4513b9d1d53b920327a361f87255bf3372" - integrity sha512-fck0Z9RGfIQn3GJIEKVrp15h9m6Vlg0d5XXeiE/6+CQiBmMDZxfR21XtjEPuDeg7gC3bBM0SdieA5XF3GW1wKA== - -"@types/d3-time@^1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-1.1.1.tgz#6cf3a4242c3bbac00440dfb8ba7884f16bedfcbf" - integrity sha512-ULX7LoqXTCYtM+tLYOaeAJK7IwCT+4Gxlm2MaH0ErKLi07R5lh8NHCAyWcDkCCmx1AfRcBEV6H9QE9R25uP7jw== - -"@types/d3-timer@^1": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-1.0.10.tgz#329c51c2c931f44ed0acff78b8c84571acf0ed21" - integrity sha512-ZnAbquVqy+4ZjdW0cY6URp+qF/AzTVNda2jYyOzpR2cPT35FTXl78s15Bomph9+ckOiI1TtkljnWkwbIGAb6rg== - -"@types/d3-transition@^1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-1.3.1.tgz#5d658eea2db17684daa04eda81d7db9824d3463f" - integrity sha512-U9CpMlTL/NlqdGXBlHYxTZwbmy/vN1cFv8TuAIFPX+xOW/1iChbeJBY2xmINhDQfkGJbgkH4IovafCwI1ZDrgg== - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-voronoi@*": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz#7bbc210818a3a5c5e0bafb051420df206617c9e5" - integrity sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ== - -"@types/d3-zoom@^1": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-1.8.2.tgz#187d33f9ffa59811ce93b2eacd32d92c1ef03f16" - integrity sha512-rU0LirorUxkLxEHSzkFs7pPC0KWsxRGc0sHrxEDR0/iQq+7/xpNkKuuOOwthlgvOtpOvtTLJ2JFOD6Kr0Si4Uw== - dependencies: - "@types/d3-interpolate" "^1" - "@types/d3-selection" "^1" - -"@types/d3@^5.7.2": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@types/d3/-/d3-5.16.4.tgz#a7dc24a3dc1c19922eee72ba16144fd5bcea987a" - integrity sha512-2u0O9iP1MubFiQ+AhR1id4Egs+07BLtvRATG6IL2Gs9+KzdrfaxCKNq5hxEyw1kxwsqB/lCgr108XuHcKtb/5w== - dependencies: - "@types/d3-array" "^1" - "@types/d3-axis" "^1" - "@types/d3-brush" "^1" - "@types/d3-chord" "^1" - "@types/d3-collection" "*" - "@types/d3-color" "^1" - "@types/d3-contour" "^1" - "@types/d3-dispatch" "^1" - "@types/d3-drag" "^1" - "@types/d3-dsv" "^1" - "@types/d3-ease" "^1" - "@types/d3-fetch" "^1" - "@types/d3-force" "^1" - "@types/d3-format" "^1" - "@types/d3-geo" "^1" - "@types/d3-hierarchy" "^1" - "@types/d3-interpolate" "^1" - "@types/d3-path" "^1" - "@types/d3-polygon" "^1" - "@types/d3-quadtree" "^1" - "@types/d3-random" "^1" - "@types/d3-scale" "^2" - "@types/d3-scale-chromatic" "^1" - "@types/d3-selection" "^1" - "@types/d3-shape" "^1" - "@types/d3-time" "^1" - "@types/d3-time-format" "^2" - "@types/d3-timer" "^1" - "@types/d3-transition" "^1" - "@types/d3-voronoi" "*" - "@types/d3-zoom" "^1" - -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "7.2.13" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.13.tgz#e0ca7219ba5ded402062ad6f926d491ebb29dd53" - integrity sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.48" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" - integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== - -"@types/estree@^0.0.47": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== - -"@types/expect.js@^0.3.29": - version "0.3.29" - resolved "https://registry.yarnpkg.com/@types/expect.js/-/expect.js-0.3.29.tgz#28dd359155b84b8ecb094afc3f4b74c3222dca3b" - integrity sha1-KN01kVW4S47LCUr8P0t0wyItyjs= - -"@types/geojson@*": - version "7946.0.7" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" - integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== - -"@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/jquery@*": - version "3.5.5" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.5.tgz#2c63f47c9c8d96693d272f5453602afd8338c903" - integrity sha512-6RXU9Xzpc6vxNrS6FPPapN1SxSHgQ336WC6Jj/N8q30OiaBZ00l1GBgeP7usjVZPivSkGUfL1z/WW6TX989M+w== - dependencies: - "@types/sizzle" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/lodash@^4.14.134": - version "4.14.170" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" - integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== - -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== - -"@types/mocha@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-7.0.2.tgz#b17f16cf933597e10d6d78eae3251e692ce8b0ce" - integrity sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w== - -"@types/node@*": - version "15.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" - integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== - -"@types/node@^13.13.2": - version "13.13.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" - integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== - -"@types/sinon@^9.0.0": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.11.tgz#7af202dda5253a847b511c929d8b6dda170562eb" - integrity sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg== - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" - integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== - -"@types/sizzle@*": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - -"@types/underscore@*": - version "1.11.2" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.2.tgz#9441e0f6402bbcb72dbee771582fa57c5a1dedd3" - integrity sha512-Ls2ylbo7++ITrWk2Yc3G/jijwSq5V3GT0tlgVXEl2kKYXY3ImrtmTCoE2uyTWFRI5owMBriloZFWbE1SXOsE7w== - -"@typescript-eslint/eslint-plugin@^4.19.0": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz#b9c7313321cb837e2bf8bebe7acc2220659e67d3" - integrity sha512-aoIusj/8CR+xDWmZxARivZjbMBQTT9dImUtdZ8tVCVRXgBUuuZyM5Of5A9D9arQPxbi/0rlJLcuArclz/rCMJw== - dependencies: - "@typescript-eslint/experimental-utils" "4.26.1" - "@typescript-eslint/scope-manager" "4.26.1" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - lodash "^4.17.21" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.1.tgz#a35980a2390da9232aa206b27f620eab66e94142" - integrity sha512-sQHBugRhrXzRCs9PaGg6rowie4i8s/iD/DpTB+EXte8OMDfdCG5TvO73XlO9Wc/zi0uyN4qOmX9hIjQEyhnbmQ== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.26.1" - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/typescript-estree" "4.26.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.19.0": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.1.tgz#cecfdd5eb7a5c13aabce1c1cfd7fbafb5a0f1e8e" - integrity sha512-q7F3zSo/nU6YJpPJvQveVlIIzx9/wu75lr6oDbDzoeIRWxpoc/HQ43G4rmMoCc5my/3uSj2VEpg/D83LYZF5HQ== - dependencies: - "@typescript-eslint/scope-manager" "4.26.1" - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/typescript-estree" "4.26.1" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz#075a74a15ff33ee3a7ed33e5fce16ee86689f662" - integrity sha512-TW1X2p62FQ8Rlne+WEShyd7ac2LA6o27S9i131W4NwDSfyeVlQWhw8ylldNNS8JG6oJB9Ha9Xyc+IUcqipvheQ== - dependencies: - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/visitor-keys" "4.26.1" - -"@typescript-eslint/types@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38" - integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg== - -"@typescript-eslint/typescript-estree@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633" - integrity sha512-l3ZXob+h0NQzz80lBGaykdScYaiEbFqznEs99uwzm8fPHhDjwaBFfQkjUC/slw6Sm7npFL8qrGEAMxcfBsBJUg== - dependencies: - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/visitor-keys" "4.26.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546" - integrity sha512-IGouNSSd+6x/fHtYRyLOM6/C+QxMDzWlDtN41ea+flWuSF9g02iqcIlX8wM53JkfljoIjP0U+yp7SiTS1onEkw== - dependencies: - "@typescript-eslint/types" "4.26.1" - eslint-visitor-keys "^2.0.0" - -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== - -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== - -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== - -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== - -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa" - integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ== - -"@webpack-cli/info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b" - integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.1.tgz#b5fde2f0f79c1e120307c415a4c1d5eb15a6f278" - integrity sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw== - -"@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== - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -accepts@~1.3.4: - 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-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn-walk@^8.0.2: - version "8.1.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.0.tgz#d3c6a9faf00987a5e2b9bdb506c2aa76cd707f83" - integrity sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.1.0, acorn@^8.2.1: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" - integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - 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.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.0.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" - integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -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-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -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" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -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-includes@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -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= - -array.prototype.flat@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== - dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" - -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= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -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== - -available-typed-arrays@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9" - integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" - integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.9.1" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - -backbone@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.2.3.tgz#c22cfd07fc86ebbeae61d18929ed115e999d65b9" - integrity sha1-wiz9B/yG676uYdGJKe0RXpmdZbk= - dependencies: - underscore ">=1.7.0" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-arraybuffer@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" - integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= - -base64-js@^1.2.1, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64id@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -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" - -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@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -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" - -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: - 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, 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" - -brfs@^1.3.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" - integrity sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ== - dependencies: - quote-stream "^1.0.1" - resolve "^1.1.5" - static-module "^2.2.0" - through2 "^2.0.0" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-resolve@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" - integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== - dependencies: - resolve "^1.17.0" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -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.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - 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" - -browserslist@^4.14.5, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - -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-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@^5.4.3: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -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.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^15.0.5: - version "15.2.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" - integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -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" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001219: - version "1.0.30001236" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" - integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== - -chai@^4.1.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" - integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== - 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.1" - type-detect "^4.0.5" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.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" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -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= - -child_process@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a" - integrity sha1-sffn/HPSXn/R1FWtyU4UODAYK1o= - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - 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.2.0" - optionalDependencies: - fsevents "~2.1.1" - -chokidar@^3.4.2: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - 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.5.0" - optionalDependencies: - fsevents "~2.3.1" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -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" - -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" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -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" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.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-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -clone@^2.1.1: - 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-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-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -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.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combine-source-map@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -commander@2, 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@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.0.0.tgz#2b270da94f8fb9014455312f829a1129dbf8887e" - integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.1, component-emitter@~1.3.0: - 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== - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -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.6.0: - 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" - -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -console-browserify@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -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-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== - -convert-source-map@^1.5.1, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= - -cookie@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -copy-anything@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" - integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== - dependencies: - is-what "^3.12.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-compat@^3.14.0, core-js-compat@^3.9.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" - integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -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= - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -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" - -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" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.12.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" - -crypto@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" - integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== - -css-loader@^5.0.0, css-loader@^5.0.1: - version "5.2.6" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1" - integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -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== - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" - integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== - -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: - version "1.1.6" - resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.6.tgz#b0a22c7372cabec128bdddf9bddc058592f89e9b" - integrity sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA== - 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: - 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: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" - integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== - -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.7" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.7.tgz#9a834890ef8b8ae8c558b2fe55bd57f5993b85e2" - integrity sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ== - -d3-fetch@1: - 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: - 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, d3-format@^1.3.0: - version "1.4.5" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" - integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== - -d3-geo-projection@0.2: - version "0.2.16" - resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz#4994ecd1033ddb1533b6c4c5528a1c81dcc29427" - integrity sha1-SZTs0QM92xUztsTFUoocgdzClCc= - dependencies: - brfs "^1.3.0" - -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: - 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: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" - integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== - dependencies: - d3-color "1" - -d3-path@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" - integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== - -d3-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-queue@1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-1.2.3.tgz#143a701cfa65fe021292f321c10d14e98abd491b" - integrity sha1-FDpwHPpl/gISkvMhwQ0U6Yq9SRs= - -d3-queue@2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-2.0.3.tgz#07fbda3acae5358a9c5299aaf880adf0953ed2c2" - integrity sha1-B/vaOsrlNYqcUpmq+ICt8JU+0sI= - -d3-random@1: - 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@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-selection@1, d3-selection@^1, 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-shape@1: - version "1.3.7" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" - integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== - dependencies: - d3-path "1" - -d3-time-format@2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850" - integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ== - dependencies: - d3-time "1" - -d3-time@1: - 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-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: - 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" - -date-format@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" - integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== - -date-format@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" - integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - 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.2.6: - 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@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@~4.1.0: - 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= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -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-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3, 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= - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -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" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dependency-graph@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" - integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== - -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" - -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-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-newline@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -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, diff@^4.0.2: - 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" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -domain-browser@^4.16.0: - version "4.19.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" - integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ== - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplicate-package-checker-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz#78bb89e625fa7cf8c2a59c53f62b495fda9ba287" - integrity sha512-aO50/qPC7X2ChjRFniRiscxBLT/K01bALqfcDaf8Ih5OqQ1N4iT/Abx9Ofu3/ms446vHTm46FACIuJUmgUQcDQ== - dependencies: - chalk "^2.3.0" - find-root "^1.0.0" - lodash "^4.17.4" - semver "^5.4.1" - -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= - -electron-to-chromium@^1.3.723: - version "1.3.752" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" - integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -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== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -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.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" - -engine.io-client@~3.5.0: - version "3.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.5.2.tgz#0ef473621294004e9ceebe73cef0af9e36f2f5fa" - integrity sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA== - dependencies: - component-emitter "~1.3.0" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.6" - parseuri "0.0.6" - ws "~7.4.2" - xmlhttprequest-ssl "~1.6.2" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" - integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.4" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.5.0.tgz#9d6b985c8a39b1fe87cd91eb014de0552259821b" - integrity sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - debug "~4.1.0" - engine.io-parser "~2.2.0" - ws "~7.4.2" - -enhanced-resolve@^4.1.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -errno@^0.1.1, errno@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-module-lexer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" - integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== - -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" - -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -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.5, 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= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -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" - -escodegen@~1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" - integrity sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-config-standard@^16.0.2: - version "16.0.3" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" - integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== - -eslint-import-resolver-node@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" - integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== - dependencies: - debug "^3.2.7" - pkg-dir "^2.0.0" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-import@^2.22.1: - version "2.23.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" - integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== - dependencies: - array-includes "^3.1.3" - array.prototype.flat "^1.2.4" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.1" - find-up "^2.0.0" - has "^1.0.3" - is-core-module "^2.4.0" - minimatch "^3.0.4" - object.values "^1.1.3" - pkg-up "^2.0.0" - read-pkg-up "^3.0.0" - resolve "^1.20.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-prettier@^3.3.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-promise@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" - integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.22.0: - version "7.28.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" - integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0, 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== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.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== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -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== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -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@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.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" - -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" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -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" - -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, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.0.3, fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.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, 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= - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-loader@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" - integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.6.5" - -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" - -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@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-root@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@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" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.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" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -flatted@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -follow-redirects@^1.0.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -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= - -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" - -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-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -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@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -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.1: - 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= - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -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-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-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^4.1.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-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -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= - -git-hooks-list@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156" - integrity sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ== - -glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - 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" - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== - dependencies: - type-fest "^0.20.2" - -globby@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.0.tgz#abfcd0630037ae174a88590132c2f6804e291072" - integrity sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - -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-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -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.1, 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.0: - 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.1: - 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" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -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-proxy@^1.18.1: - 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= - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.2: - version "0.2.11" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" - integrity sha1-HOYKOleGSiktEyH/RgnKS7llrcg= - -iconv-lite@0.4, iconv-lite@0.4.24, 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" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -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-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -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" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imports-loader@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" - integrity sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ== - dependencies: - loader-utils "^1.0.2" - source-map "^0.6.1" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -infer-owner@^1.0.4: - 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.1, inherits@^2.0.3, inherits@^2.0.4, 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.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, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= - dependencies: - source-map "~0.5.3" - -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -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.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== - -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-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== - dependencies: - call-bind "^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.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-core-module@^2.2.0, is-core-module@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -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.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== - -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.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -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-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" - integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== - -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-nan@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - -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-plain-obj@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -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.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.2" - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== - dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" - foreach "^2.0.5" - has-symbols "^1.0.1" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-what@^3.12.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" - integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== - -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== - -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: - 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.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -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== - -isbinaryfile@^4.0.6: - version "4.0.8" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" - integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== - -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= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-worker@^26.5.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" - integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jquery-ui@^1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" - integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= - -jquery@^3.1.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" - integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== - -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== - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -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-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-loader@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== - -json-parse-better-errors@^1.0.1, 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== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -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.1, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - 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" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -just-extend@^4.0.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" - integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== - -karma-chai@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/karma-chai/-/karma-chai-0.1.0.tgz#bee5ad40400517811ae34bb945f762909108b79a" - integrity sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o= - -karma-chrome-launcher@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" - integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== - dependencies: - which "^1.2.1" - -karma-mocha-reporter@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560" - integrity sha1-FRIAlejtgZGG5HoLAS8810GJVWA= - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - strip-ansi "^4.0.0" - -karma-mocha@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" - integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== - dependencies: - minimist "^1.2.3" - -karma-sinon@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/karma-sinon/-/karma-sinon-1.0.5.tgz#4e3443f2830fdecff624d3747163f1217daa2a9a" - integrity sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo= - -karma-sourcemap-loader@^0.3.7: - version "0.3.8" - resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz#d4bae72fb7a8397328a62b75013d2df937bdcf9c" - integrity sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g== - dependencies: - graceful-fs "^4.1.2" - -karma-typescript-es6-transform@^5.0.2: - version "5.5.1" - resolved "https://registry.yarnpkg.com/karma-typescript-es6-transform/-/karma-typescript-es6-transform-5.5.1.tgz#bb1061279e22b0259496c037e3014719cc6b3344" - integrity sha512-5iCFir1hLGdWlFEZk5+hfHKu9sDlSEAt1fJO46v8oqElszlMLVjoGQtSzb9E4uWg9fHo7mlRnjFhwM+WKScQHQ== - dependencies: - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - acorn-walk "^8.0.2" - log4js "^6.3.0" - magic-string "^0.25.7" - -karma-typescript@^5.0.2: - version "5.5.1" - resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-5.5.1.tgz#3ceb79ecec695c73d2633aff8714524b5440f38f" - integrity sha512-iQDh48sHv+1pCO/Fvlz4b6HwcmaTuAzx1H0Q6zkUQMQH+5sjz8GNFB9jVDiDblbZcgdr+luVBk7NGUV5mXj+eg== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - assert "^2.0.0" - async "^3.0.1" - browser-resolve "^2.0.0" - browserify-zlib "^0.2.0" - buffer "^5.4.3" - combine-source-map "^0.8.0" - console-browserify "^1.2.0" - constants-browserify "^1.0.0" - convert-source-map "^1.7.0" - crypto-browserify "^3.12.0" - diff "^4.0.1" - domain-browser "^4.16.0" - events "^3.2.0" - glob "^7.1.6" - https-browserify "^1.0.0" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.19" - log4js "^6.3.0" - minimatch "^3.0.4" - os-browserify "^0.3.0" - pad "^3.2.0" - path-browserify "^1.0.0" - process "^0.11.10" - punycode "^2.1.1" - querystring-es3 "^0.2.1" - readable-stream "^3.1.1" - source-map "^0.7.3" - stream-browserify "^3.0.0" - stream-http "^3.1.0" - string_decoder "^1.3.0" - timers-browserify "^2.0.11" - tmp "^0.2.1" - tty-browserify "^0.0.1" - url "^0.11.0" - util "^0.12.1" - vm-browserify "^1.1.2" - -karma-webpack@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" - integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - webpack-merge "^4.1.5" - -karma@^5.0.2: - version "5.2.3" - resolved "https://registry.yarnpkg.com/karma/-/karma-5.2.3.tgz#3264024219bad2728e92542e0058a2492d7a46e4" - integrity sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ== - dependencies: - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.4.2" - colors "^1.4.0" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.6" - graceful-fs "^4.2.4" - http-proxy "^1.18.1" - isbinaryfile "^4.0.6" - lodash "^4.17.19" - log4js "^6.2.1" - mime "^2.4.5" - minimatch "^3.0.4" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^2.3.0" - source-map "^0.6.1" - tmp "0.2.1" - ua-parser-js "0.7.22" - yargs "^15.3.1" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -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== - -less-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" - integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg== - dependencies: - clone "^2.1.1" - loader-utils "^1.1.0" - pify "^4.0.1" - -less@^3.8.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" - integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== - dependencies: - copy-anything "^2.0.1" - 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.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.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" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - -loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, 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, 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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -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" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log4js@^6.2.1, log4js@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" - integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== - dependencies: - date-format "^3.0.0" - debug "^4.1.1" - flatted "^2.0.1" - rfdc "^1.1.4" - streamroller "^2.2.4" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.22.4: - version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - dependencies: - vlq "^0.2.2" - -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.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-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -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-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" - -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.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" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= - -merge-source-map@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" - integrity sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= - dependencies: - source-map "^0.5.6" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.0.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.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -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.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@^2.1.27, mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.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.5: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mini-css-extract-plugin@~1.3.2: - version "1.3.9" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.9.tgz#47a32132b0fd97a119acd530e8421e8f6ab16d5e" - integrity sha512-Ac4s+xhVbqlyhXS5J/Vh/QXUz3ycXlCqoCPpg0vdfhsIBH9eg/It/9L1r1XhSCH737M1lqcWnMuWL13zcygn5A== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -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.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, 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.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@~1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.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.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" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -moment@^2.24.0: - version "2.29.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - -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.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - -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.8" - resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb" - integrity sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -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.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -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@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/nise/-/nise-4.1.0.tgz#8fb75a26e90b99202fa1e63f448f58efbcdedaf6" - integrity sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA== - dependencies: - "@sinonjs/commons" "^1.7.0" - "@sinonjs/fake-timers" "^6.0.0" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - path-to-regexp "^1.7.0" - -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.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-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -npm-run-all@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -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.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== - -object-inspect@~1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" - integrity sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6, 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.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -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" - -object.values@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.2" - -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" - -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" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optimist@0.3: - version "0.3.7" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" - integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= - dependencies: - wordwrap "~0.0.2" - -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" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.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-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.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-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.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-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -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== - -package-json@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pad@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/pad/-/pad-3.2.0.tgz#be7a1d1cb6757049b4ad5b70e71977158fea95d1" - integrity sha512-2u0TrjcGbOjBTJpyewEl4hBO3OeX5wWue7eIFPzQTg6wFSvoaHcBTTUY5m+n0hd04gmTCPuY0kCpVIVuw5etwg== - dependencies: - wcwidth "^1.0.1" - -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== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.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= - -parseqs@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" - integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== - -parseuri@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" - integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== - -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@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -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-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -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-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-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -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" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - 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" - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -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== - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -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" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -popper.js@^1.0.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -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@^8.2.15: - version "8.3.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.1.tgz#71f380151c227f83b898294a46481f689f86b70a" - integrity sha512-9qH0MGjsSm+fjxOi3GnwViL1otfi7qkj+l/WX5gcRGmZNGsIcqc+A5fBkE6PUobEQK4APqYVaES+B3Uti98TCw== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.1.1, prettier@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" - integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== - -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= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -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= - -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@^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" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -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== - -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -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== - -querystring-es3@^0.2.1: - 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.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quote-stream@^1.0.1, quote-stream@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" - integrity sha1-hJY/jJwmuULhU/7rU6rnRlK34LI= - dependencies: - buffer-equal "0.0.1" - minimist "^1.1.3" - through2 "^2.0.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: - 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== - -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, raw-loader@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.3, 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@^3.1.1, readable-stream@^3.5.0, 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@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== - dependencies: - resolve "^1.9.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -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== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -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" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - 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" - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -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.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -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-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -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= - -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-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.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-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -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@^1.1.5, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -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== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.1.4: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - 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" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rw@1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.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-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-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", safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^2.6.5, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.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== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -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.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= - -shapefile@0.3: - version "0.3.1" - resolved "https://registry.yarnpkg.com/shapefile/-/shapefile-0.3.1.tgz#9bb9a429bd6086a0cfb03962d14cfdf420ffba12" - integrity sha1-m7mkKb1ghqDPsDli0Uz99CD/uhI= - dependencies: - d3-queue "1" - iconv-lite "0.2" - optimist "0.3" - -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-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.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= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -sinon-chai@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783" - integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g== - -sinon@^9.0.2: - version "9.2.4" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.2.4.tgz#e55af4d3b174a4443a8762fa8421c2976683752b" - integrity sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg== - dependencies: - "@sinonjs/commons" "^1.8.1" - "@sinonjs/fake-timers" "^6.0.1" - "@sinonjs/samsam" "^5.3.1" - diff "^4.0.2" - nise "^4.0.4" - supports-color "^7.1.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -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" - -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" - integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== - -socket.io-client@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.4.0.tgz#aafb5d594a3c55a34355562fc8aea22ed9119a35" - integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ== - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "~1.3.0" - debug "~3.1.0" - engine.io-client "~3.5.0" - has-binary2 "~1.0.2" - indexof "0.0.1" - parseqs "0.0.6" - parseuri "0.0.6" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@~3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.2.tgz#ef872009d0adcf704f2fbe830191a14752ad50b6" - integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg== - dependencies: - component-emitter "~1.3.0" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" - integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== - dependencies: - component-emitter "1.2.1" - debug "~4.1.0" - isarray "2.0.1" - -socket.io@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.4.1.tgz#95ad861c9a52369d7f1a68acf0d4a1b16da451d2" - integrity sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w== - dependencies: - debug "~4.1.0" - engine.io "~3.5.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.4.0" - socket.io-parser "~3.4.0" - -sort-object-keys@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" - integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== - -sort-package-json@~1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.44.0.tgz#470330be868f8a524a4607b26f2a0233e93d8b6d" - integrity sha512-u9GUZvpavUCXV5SbEqXu9FRbsJrYU6WM10r3zA0gymGPufK5X82MblCLh9GW9l46pXKEZvK+FA3eVTqC4oMp4A== - dependencies: - detect-indent "^6.0.0" - detect-newline "3.1.0" - git-hooks-list "1.0.3" - globby "10.0.0" - is-plain-obj "2.1.0" - sort-object-keys "^1.1.3" - -source-list-map@^2.0.0, source-list-map@^2.0.1: - 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-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - -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.19: - 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.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: - 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, source-map@~0.7.2: - 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== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - -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.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -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" - -static-module@^2.2.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" - integrity sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ== - dependencies: - concat-stream "~1.6.0" - convert-source-map "^1.5.1" - duplexer2 "~0.1.4" - escodegen "~1.9.0" - falafel "^2.1.0" - has "^1.0.1" - magic-string "^0.22.4" - merge-source-map "1.0.4" - object-inspect "~1.4.0" - quote-stream "~1.0.2" - readable-stream "~2.3.3" - shallow-copy "~0.0.1" - static-eval "^2.0.0" - through2 "~2.0.3" - -"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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - -stream-http@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" - integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.4" - readable-stream "^3.6.0" - xtend "^4.0.2" - -streamroller@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" - integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== - dependencies: - date-format "^2.1.0" - debug "^4.1.1" - fs-extra "^8.1.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.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-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.padend@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" - integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - 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@~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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.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-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-loader@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" - -style-loader@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@^5.3.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" - -supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -svg-url-loader@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-6.0.0.tgz#b94861d9f6badfb8ca3e7d3ec4655c1bf732ac5d" - integrity sha512-Qr5SCKxyxKcRnvnVrO3iQj9EX/v40UiGEMshgegzV7vpo3yc+HexELOdtWcA3MKjL8IyZZ1zOdcILmDEa/8JJQ== - dependencies: - file-loader "~6.0.0" - loader-utils "~2.0.0" - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== - -tar@^6.0.2: - version "6.1.5" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.5.tgz#6e25bee1cfda94317aedc3f5d49290ae68361d73" - integrity sha512-FiK6MQyyaqd5vHuUjbg/NpO8BuEGeSXcmlH7Pt/JkugWS8s0w8nKybWjHDJiwzCAIKZ66uof4ghm4tBADjcqRA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terser-webpack-plugin@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser-webpack-plugin@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" - integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== - dependencies: - jest-worker "^27.0.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.7.0" - -terser@^5.3.4, terser@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -three@^0.91.0: - version "0.91.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.91.0.tgz#033fe745b64e56e679a86581957cfd1c5f9fe284" - integrity sha512-dzikzdcddNROFZi3vkbV8YonBmqnonbJv2FxlQBEE2wKzZutddnjiS8qBZG2+EB40l505Xw8OMClQm+GmbwI/g== - -through2@^2.0.0, through2@~2.0.3: - 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.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timers-browserify@^2.0.11: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -tmp@0.2.1, tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -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-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -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-string-loader@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/to-string-loader/-/to-string-loader-1.1.6.tgz#230529ccc63dd0ecca052a85e1fb82afe946b0ab" - integrity sha512-VNg62//PS1WfNwrK3n7t6wtK5Vdtx/qeYLLEioW46VMlYUwAYT6wnfB+OwS2FMTCalIHu0tk79D3RXX8ttmZTQ== - dependencies: - loader-utils "^1.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@^1.6.24: - version "1.6.27" - resolved "https://registry.yarnpkg.com/topojson/-/topojson-1.6.27.tgz#adbe33a67e2f1673d338df12644ad20fc20b42ed" - integrity sha1-rb4zpn4vFnPTON8SZErSD8ILQu0= - dependencies: - d3 "3" - d3-geo-projection "0.2" - d3-queue "2" - optimist "0.3" - rw "1" - shapefile "0.3" - -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tty-browserify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -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, type-detect@^4.0.8: - 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-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.17: - 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" - -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.5.2: - version "3.9.9" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" - integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== - -typescript@~4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" - integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== - -ua-parser-js@0.7.22: - version "0.7.22" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" - integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -underscore@>=1.7.0, underscore@^1.8.3: - version "1.13.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" - integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== - -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.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-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" - -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== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -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= - -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" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - 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-loader@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@~1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - 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.2, 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@^0.12.0, util@^0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - -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= - -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1, v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vlq@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -vm-browserify@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -watchpack@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" - integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webpack-cli@^3.3.12: - 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-cli@^4.1.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.2.tgz#a718db600de6d3906a4357e059ae584a89f4c1a5" - integrity sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.4" - "@webpack-cli/info" "^1.3.0" - "@webpack-cli/serve" "^1.5.1" - colorette "^1.2.1" - commander "^7.0.0" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - -webpack-merge@^4.1.5: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-merge@^5.1.2, webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.4.3: - 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-sources@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" - integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack@^5, webpack@^5.3.1: - version "5.38.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e" - integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.47" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.2.1" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.4.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.0.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.2.0" - webpack-sources "^2.3.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -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-typed-array@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== - dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.0" - es-abstract "^1.18.0-next.1" - foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" - -which@1.3.1, which@^1.2.1, 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" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@^1.2.3, 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== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -worker-loader@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37" - integrity sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.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" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^7.2.0, ws@~7.4.2: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -xmlhttprequest-ssl@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6" - integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== - -xtend@^4.0.2, 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== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@13.1.2, 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-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs@13.3.2, yargs@^13.3.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" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 + languageName: node + linkType: hard + +"@babel/code-frame@npm:7.12.11": + version: 7.12.11 + resolution: "@babel/code-frame@npm:7.12.11" + dependencies: + "@babel/highlight": ^7.10.4 + checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/code-frame@npm:7.22.5" + dependencies: + "@babel/highlight": ^7.22.5 + checksum: cfe804f518f53faaf9a1d3e0f9f74127ab9a004912c3a16fda07fb6a633393ecb9918a053cb71804204c1b7ec3d49e1699604715e2cfb0c9f7bc4933d324ebb6 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/compat-data@npm:7.22.9" + checksum: bed77d9044ce948b4327b30dd0de0779fa9f3a7ed1f2d31638714ed00229fa71fc4d1617ae0eb1fad419338d3658d0e9a5a083297451e09e73e078d0347ff808 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.1, @babel/core@npm:^7.7.5": + version: 7.22.9 + resolution: "@babel/core@npm:7.22.9" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.5 + "@babel/generator": ^7.22.9 + "@babel/helper-compilation-targets": ^7.22.9 + "@babel/helper-module-transforms": ^7.22.9 + "@babel/helpers": ^7.22.6 + "@babel/parser": ^7.22.7 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.8 + "@babel/types": ^7.22.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.1 + checksum: 7bf069aeceb417902c4efdaefab1f7b94adb7dea694a9aed1bda2edf4135348a080820529b1a300c6f8605740a00ca00c19b2d5e74b5dd489d99d8c11d5e56d1 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.22.7, @babel/generator@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/generator@npm:7.22.9" + dependencies: + "@babel/types": ^7.22.5 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 7c9d2c58b8d5ac5e047421a6ab03ec2ff5d9a5ff2c2212130a0055e063ac349e0b19d435537d6886c999771aef394832e4f54cd9fc810100a7f23d982f6af06b + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: d753acac62399fc6dd354cf1b9441bde0c331c2fe792a4c14904c5e5eafc3cac79478f6aa038e8a51c1148b0af6710a2e619855e4b5d54497ac972eaffed5884 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-compilation-targets@npm:7.22.9" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.5 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ea0006c6a93759025f4a35a25228ae260538c9f15023e8aac2a6d45ca68aef4cf86cfc429b19af9a402cbdd54d5de74ad3fbcf6baa7e48184dc079f1a791e178 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6c2436d1a5a3f1ff24628d78fa8c6d3120c40285aa3eda7815b1adbf8c5951e0dd73d368cf845825888fa3dc2f207dadce53309825598d7c67953e5ed9dd51d2 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + regexpu-core: ^5.3.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 87cb48a7ee898ab205374274364c3adc70b87b08c7bd07f51019ae4562c0170d7148e654d591f825dee14b5fe11666a0e7966872dfdbfa0d1b94b861ecf0e4e1 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.4.1": + version: 0.4.1 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.1" + dependencies: + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 712b440cdd343ac7c4617225f91b0a9db5a7b1c96356b720e011af64ad6c4da9c66889f8d2962a0a2ae2e4ccb6a9b4a210c4a3c8c8ff103846b3d93b61bc6634 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-environment-visitor@npm:7.22.5" + checksum: 248532077d732a34cd0844eb7b078ff917c3a8ec81a7f133593f71a860a582f05b60f818dc5049c2212e5baa12289c27889a4b81d56ef409b4863db49646c4b1 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-function-name@npm:7.22.5" + dependencies: + "@babel/template": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: 6b1f6ce1b1f4e513bf2c8385a557ea0dd7fa37971b9002ad19268ca4384bbe90c09681fe4c076013f33deabc63a53b341ed91e792de741b4b35e01c00238177a + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 4bd5791529c280c00743e8bdc669ef0d4cd1620d6e3d35e0d42b862f8262bc2364973e5968007f960780344c539a4b9cf92ab41f5b4f94560a9620f536de2a39 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-module-imports@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 9ac2b0404fa38b80bdf2653fbeaf8e8a43ccb41bd505f9741d820ed95d3c4e037c62a1bcdcb6c9527d7798d2e595924c4d025daed73283badc180ada2c9c49ad + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-module-transforms@npm:7.22.9" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2751f77660518cf4ff027514d6f4794f04598c6393be7b04b8e46c6e21606e11c19f3f57ab6129a9c21bacdf8b3ffe3af87bb401d972f34af2d0ffde02ac3001 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-wrap-function": ^7.22.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 05538079447829b13512157491cc77f9cf1ea7e1680e15cff0682c3ed9ee162de0c4862ece20a6d6b2df28177a1520bcfe45993fbeccf2747a81795a7c3f6290 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-replace-supers@npm:7.22.9" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d41471f56ff2616459d35a5df1900d5f0756ae78b1027040365325ef332d66e08e3be02a9489756d870887585ff222403a228546e93dd7019e19e59c0c0fe586 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-identifier@npm:7.22.5" + checksum: 7f0f30113474a28298c12161763b49de5018732290ca4de13cdaefd4fd0d635a6fe3f6686c37a02905fb1e64f21a5ee2b55140cf7b070e729f1bd66866506aea + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-option@npm:7.22.5" + checksum: bbeca8a85ee86990215c0424997438b388b8d642d69b9f86c375a174d3cdeb270efafd1ff128bc7a1d370923d13b6e45829ba8581c027620e83e3a80c5c414b3 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-wrap-function@npm:7.22.9" + dependencies: + "@babel/helper-function-name": ^7.22.5 + "@babel/template": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: 037317dc06dac6593e388738ae1d3e43193bc1d31698f067c0ef3d4dc6f074dbed860ed42aa137b48a67aa7cb87336826c4bdc13189260481bcf67eb7256c789 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helpers@npm:7.22.6" + dependencies: + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.6 + "@babel/types": ^7.22.5 + checksum: 5c1f33241fe7bf7709868c2105134a0a86dca26a0fbd508af10a89312b1f77ca38ebae43e50be3b208613c5eacca1559618af4ca236f0abc55d294800faeff30 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/highlight@npm:7.22.5" + dependencies: + "@babel/helper-validator-identifier": ^7.22.5 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: f61ae6de6ee0ea8d9b5bcf2a532faec5ab0a1dc0f7c640e5047fc61630a0edb88b18d8c92eb06566d30da7a27db841aca11820ecd3ebe9ce514c9350fbed39c4 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7": + version: 7.22.7 + resolution: "@babel/parser@npm:7.22.7" + bin: + parser: ./bin/babel-parser.js + checksum: 02209ddbd445831ee8bf966fdf7c29d189ed4b14343a68eb2479d940e7e3846340d7cc6bd654a5f3d87d19dc84f49f50a58cf9363bee249dc5409ff3ba3dab54 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e353a060fb2cd8f1256d28cd768f16fb02513f905b9b6d656fb0242c96c341a196fa188b27c2701506a6e27515359fbcc1a5ca7fa8b9b530cf88fbd137baefc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.22.5 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 16e7a5f3bf2f2ac0ca032a70bf0ebd7e886d84dbb712b55c0643c04c495f0f221fbcbca14b5f8f8027fa6c87a3dafae0934022ad2b409384af6c5c356495b7bd + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 + languageName: node + linkType: hard + +"@babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": + version: 7.18.6 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8575ecb7ff24bf6c6e94808d5c84bb5a0c6dd7892b54f09f4646711ba0ee1e1668032b3c43e3e1dfec2c5716c302e851ac756c1645e15882d73df6ad21ae951 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.22.7": + version: 7.22.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.7" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.5 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 57cd2cce3fb696dadf00e88f168683df69e900b92dadeae07429243c43bc21d5ccdc0c2db61cf5c37bd0fbd893fc455466bef6babe4aa5b79d9cb8ba89f40ae7 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" + dependencies: + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoping@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 26987002cfe6e24544e60fa35f07052b6557f590c1a1cc5cf35d6dc341d7fea163c1222a2d70d5d2692f0b9860d942fd3ba979848b2995d4debffa387b9b19ae + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-static-block@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: bc48b92dbaf625a14f2bf62382384eef01e0515802426841636ae9146e27395d068c7a8a45e9e15699491b0a01d990f38f179cbc9dc89274a393f85648772f12 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/plugin-transform-classes@npm:7.22.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8380e855c01033dbc7460d9acfbc1fc37c880350fa798c2de8c594ef818ade0e4c96173ec72f05f2a4549d8d37135e18cb62548352d51557b45a0fb4388d2f3f + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/template": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c2a77a0f94ec71efbc569109ec14ea2aa925b333289272ced8b33c6108bdbb02caf01830ffc7e49486b62dec51911924d13f3a76f1149f40daace1898009e131 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 76f6ea2aee1fcfa1c3791eb7a5b89703c6472650b993e8666fff0f1d6e9d737a84134edf89f63c92297f3e75064c1263219463b02dd9bc7434b6e5b9935e3f20 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.22.5, @babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.22.5 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 186a6d59f36eb3c5824739fc9c22ed0f4ca68e001662aa3a302634346a8b785cb9579b23b0c158f4570604d697d19598ca09b58c60a7fa2894da1163c4eb1907 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3d197b788758044983c96b9c49bed4b456055f35a388521a405968db0f6e2ffb6fd59110e3931f4dcc5e126ae9e5e00e154a0afb47a7ea359d8d0dea79f480d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-for-of@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7b8d4db010bce7273674caa95c4e6abd909362866ce297e86a2ecaa9ae636e05d525415811db9b3c942155df7f3651d19b91dd6c41f142f7308a97c7cb06023 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-function-name@npm:7.22.5" + dependencies: + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-json-strings@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4e00b902487a670b6c8948f33f9108133fd745cf9d1478aca515fb460b9b2f12e137988ebc1663630fb82070a870aed8b0c1aa4d007a841c18004619798f255c + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 18748e953c08f64885f18c224eac58df10a13eac4d845d16b5d9b6276907da7ca2530dfebe6ed41cdc5f8a75d9db3e36d8eb54ddce7cd0364af1cab09b435302 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7da4c4ebbbcf7d182abb59b2046b22d86eee340caf8a22a39ef6a727da2d8acfec1f714fcdcd5054110b280e4934f735e80a6848d192b6834c5d4459a014f04d + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2067aca8f6454d54ffcce69b02c457cfa61428e11372f6a1d99ff4fcfbb55c396ed2ca6ca886bf06c852e38c1a205b8095921b2364fd0243f3e66bc1dda61caa + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.5" + dependencies: + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 04f4178589543396b3c24330a67a59c5e69af5e96119c9adda730c0f20122deaff54671ebbc72ad2df6495a5db8a758bd96942de95fba7ad427de9c80b1b38c8 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 46622834c54c551b231963b867adbc80854881b3e516ff29984a8da989bd81665bd70e8cba6710345248e97166689310f544aee1a5773e262845a8f1b3e5b8b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-new-target@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e6a059169d257fc61322d0708edae423072449b7c33de396261e68dee582aec5396789a1c22bce84e5bd88a169623c2e750b513fc222930979e6accd52a44bf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9e7837d4eae04f211ebaa034fe5003d2927b6bf6d5b9dc09f2b1183c01482cdde5a75b8bd5c7ff195c2abc7b923339eb0b2a9d27cb78359d38248a3b2c2367c4 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.5" + dependencies: + "@babel/compat-data": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3b5e091f0dc67108f2e41ed5a97e15bbe4381a19d9a7eea80b71c7de1d8169fd28784e1e41a3d2ad12709ab212e58fc481282a5bb65d591fae7b443048de3330 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-super@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b0e8b4233ff06b5c9d285257f49c5bd441f883189b24282e6200f9ebdf5db29aeeebbffae57fbbcd5df9f4387b3e66e5d322aaae5652a78e89685ddbae46bbd1 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.22.5, @babel/plugin-transform-optional-chaining@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.6" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9713f7920ed04090c149fc5ec024dd1638e8b97aa4ae3753b93072d84103b8de380afb96d6cf03e53b285420db4f705f3ac13149c6fd54f322b61dc19e33c54f + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-parameters@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b44f89cf97daf23903776ba27c2ab13b439d80d8c8a95be5c476ab65023b1e0c0e94c28d3745f3b60a58edc4e590fa0cd4287a0293e51401ca7d29a2ddb13b8e + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9ac019fb2772f3af6278a7f4b8b14b0663accb3fd123d87142ceb2fbc57fd1afa07c945d1329029b026b9ee122096ef71a3f34f257a9e04cf4245b87298c38b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + regenerator-transform: ^0.15.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f7c5ca5151321963df777cc02725d10d1ccc3b3b8323da0423aecd9ac6144cbdd2274af5281a5580db2fc2f8b234e318517b5d76b85669118906533a559f2b6a + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-spread@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5587f0deb60b3dfc9b274e269031cc45ec75facccf1933ea2ea71ced9fd3ce98ed91bb36d6cd26817c14474b90ed998c5078415f0eab531caf301496ce24c95c + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: da5e85ab3bb33a75cbf6181bfd236b208dc934702fd304db127232f17b4e0f42c6d3f238de8589470b4190906967eea8ca27adf3ae9d8ee4de2a2eae906ed186 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.11.0": + version: 7.22.9 + resolution: "@babel/preset-env@npm:7.22.9" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-compilation-targets": ^7.22.9 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.5 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.5 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.5 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.22.5 + "@babel/plugin-syntax-import-attributes": ^7.22.5 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.22.5 + "@babel/plugin-transform-async-generator-functions": ^7.22.7 + "@babel/plugin-transform-async-to-generator": ^7.22.5 + "@babel/plugin-transform-block-scoped-functions": ^7.22.5 + "@babel/plugin-transform-block-scoping": ^7.22.5 + "@babel/plugin-transform-class-properties": ^7.22.5 + "@babel/plugin-transform-class-static-block": ^7.22.5 + "@babel/plugin-transform-classes": ^7.22.6 + "@babel/plugin-transform-computed-properties": ^7.22.5 + "@babel/plugin-transform-destructuring": ^7.22.5 + "@babel/plugin-transform-dotall-regex": ^7.22.5 + "@babel/plugin-transform-duplicate-keys": ^7.22.5 + "@babel/plugin-transform-dynamic-import": ^7.22.5 + "@babel/plugin-transform-exponentiation-operator": ^7.22.5 + "@babel/plugin-transform-export-namespace-from": ^7.22.5 + "@babel/plugin-transform-for-of": ^7.22.5 + "@babel/plugin-transform-function-name": ^7.22.5 + "@babel/plugin-transform-json-strings": ^7.22.5 + "@babel/plugin-transform-literals": ^7.22.5 + "@babel/plugin-transform-logical-assignment-operators": ^7.22.5 + "@babel/plugin-transform-member-expression-literals": ^7.22.5 + "@babel/plugin-transform-modules-amd": ^7.22.5 + "@babel/plugin-transform-modules-commonjs": ^7.22.5 + "@babel/plugin-transform-modules-systemjs": ^7.22.5 + "@babel/plugin-transform-modules-umd": ^7.22.5 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 + "@babel/plugin-transform-new-target": ^7.22.5 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.5 + "@babel/plugin-transform-numeric-separator": ^7.22.5 + "@babel/plugin-transform-object-rest-spread": ^7.22.5 + "@babel/plugin-transform-object-super": ^7.22.5 + "@babel/plugin-transform-optional-catch-binding": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.22.6 + "@babel/plugin-transform-parameters": ^7.22.5 + "@babel/plugin-transform-private-methods": ^7.22.5 + "@babel/plugin-transform-private-property-in-object": ^7.22.5 + "@babel/plugin-transform-property-literals": ^7.22.5 + "@babel/plugin-transform-regenerator": ^7.22.5 + "@babel/plugin-transform-reserved-words": ^7.22.5 + "@babel/plugin-transform-shorthand-properties": ^7.22.5 + "@babel/plugin-transform-spread": ^7.22.5 + "@babel/plugin-transform-sticky-regex": ^7.22.5 + "@babel/plugin-transform-template-literals": ^7.22.5 + "@babel/plugin-transform-typeof-symbol": ^7.22.5 + "@babel/plugin-transform-unicode-escapes": ^7.22.5 + "@babel/plugin-transform-unicode-property-regex": ^7.22.5 + "@babel/plugin-transform-unicode-regex": ^7.22.5 + "@babel/plugin-transform-unicode-sets-regex": ^7.22.5 + "@babel/preset-modules": ^0.1.5 + "@babel/types": ^7.22.5 + babel-plugin-polyfill-corejs2: ^0.4.4 + babel-plugin-polyfill-corejs3: ^0.8.2 + babel-plugin-polyfill-regenerator: ^0.5.1 + core-js-compat: ^3.31.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6caa2897bbda30c6932aed0a03827deb1337c57108050c9f97dc9a857e1533c7125b168b6d70b9d191965bf05f9f233f0ad20303080505dff7ce39740aaa759d + languageName: node + linkType: hard + +"@babel/preset-modules@npm:^0.1.5": + version: 0.1.5 + resolution: "@babel/preset-modules@npm:0.1.5" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 + "@babel/plugin-transform-dotall-regex": ^7.4.4 + "@babel/types": ^7.4.4 + esutils: ^2.0.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8430e0e9e9d520b53e22e8c4c6a5a080a12b63af6eabe559c2310b187bd62ae113f3da82ba33e9d1d0f3230930ca702843aae9dd226dec51f7d7114dc1f51c10 + languageName: node + linkType: hard + +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.8.4": + version: 7.22.6 + resolution: "@babel/runtime@npm:7.22.6" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: e585338287c4514a713babf4fdb8fc2a67adcebab3e7723a739fc62c79cfda875b314c90fd25f827afb150d781af97bc16c85bfdbfa2889f06053879a1ddb597 + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/template@npm:7.22.5" + dependencies: + "@babel/code-frame": ^7.22.5 + "@babel/parser": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: c5746410164039aca61829cdb42e9a55410f43cace6f51ca443313f3d0bdfa9a5a330d0b0df73dc17ef885c72104234ae05efede37c1cc8a72dc9f93425977a3 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8": + version: 7.22.8 + resolution: "@babel/traverse@npm:7.22.8" + dependencies: + "@babel/code-frame": ^7.22.5 + "@babel/generator": ^7.22.7 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.22.7 + "@babel/types": ^7.22.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: a381369bc3eedfd13ed5fef7b884657f1c29024ea7388198149f0edc34bd69ce3966e9f40188d15f56490a5e12ba250ccc485f2882b53d41b054fccefb233e33 + languageName: node + linkType: hard + +"@babel/types@npm:^7.22.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/types@npm:7.22.5" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 + to-fast-properties: ^2.0.0 + checksum: c13a9c1dc7d2d1a241a2f8363540cb9af1d66e978e8984b400a20c4f38ba38ca29f06e26a0f2d49a70bad9e57615dac09c35accfddf1bb90d23cd3e0a0bab892 + languageName: node + linkType: hard + +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.5.0": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^0.4.3": + version: 0.4.3 + resolution: "@eslint/eslintrc@npm:0.4.3" + dependencies: + ajv: ^6.12.4 + debug: ^4.1.1 + espree: ^7.3.0 + globals: ^13.9.0 + ignore: ^4.0.6 + import-fresh: ^3.2.1 + js-yaml: ^3.13.1 + minimatch: ^3.0.4 + strip-json-comments: ^3.1.1 + checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.5.0": + version: 0.5.0 + resolution: "@humanwhocodes/config-array@npm:0.5.0" + dependencies: + "@humanwhocodes/object-schema": ^1.2.0 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.0": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.5 + resolution: "@jridgewell/source-map@npm:0.3.5" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1ad4dec0bdafbade57920a50acec6634f88a0eb735851e0dda906fa9894e7f0549c492678aad1a10f8e144bfe87f238307bf2a914a1bc85b7781d345417e9f6f + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 + languageName: node + linkType: hard + +"@jupyter-widgets/base-manager@npm:^1.0.12": + version: 1.0.12 + resolution: "@jupyter-widgets/base-manager@npm:1.0.12" + dependencies: + "@jupyter-widgets/base": ^6.0.11 + "@jupyterlab/services": ^6 || ^7 + "@lumino/coreutils": ^1 || ^2 + base64-js: ^1.2.1 + sanitize-html: ^2.3 + checksum: d043d84c349891658b103c2ec1f7420885914b5a5b23fa4e1c983f50c64a44da41286324c6df4bbdb701c91be8ec3d37310a837fa79f93f6d024b7d4ad8a8c96 + languageName: node + linkType: hard + +"@jupyter-widgets/base@npm:^2 || ^3 || ^4 || ^5 || ^6, @jupyter-widgets/base@npm:^6.0.11, @jupyter-widgets/base@npm:^6.0.5": + version: 6.0.11 + resolution: "@jupyter-widgets/base@npm:6.0.11" + dependencies: + "@jupyterlab/services": ^6 || ^7 + "@lumino/coreutils": ^1 || ^2 + "@lumino/messaging": ^1 || ^2 + "@lumino/widgets": ^1 || ^2 + "@types/backbone": 1.4.14 + "@types/lodash": ^4.14.134 + backbone: 1.4.0 + jquery: ^3.1.1 + lodash: ^4.17.4 + checksum: 7ec558edd5519e76a4e1a6d5209927b34f19d4e4a3b76a4dba89f67784dd50fef8b536cd15694576fa1930e3c92822c7565ddb47d1b558444c596af24b78790b + languageName: node + linkType: hard + +"@jupyter-widgets/controls@npm:^5": + version: 5.0.6 + resolution: "@jupyter-widgets/controls@npm:5.0.6" + dependencies: + "@jupyter-widgets/base": ^6.0.5 + "@lumino/algorithm": ^1.9.1 || ^2.1 + "@lumino/domutils": ^1.8.1 || ^2.1 + "@lumino/messaging": ^1.10.1 || ^2.1 + "@lumino/signaling": ^1.10.1 || ^2.1 + "@lumino/widgets": ^1.30.0 || ^2.1 + d3-color: ^3.0.1 + d3-format: ^3.0.1 + jquery: ^3.1.1 + nouislider: 15.4.0 + checksum: e6b335937c61acc6ed58d29d03ff1af729d519add5fed53636333fa7ab4a44c5af1c77a87cea8b8bda43b996d30bd2548132a01e879a702870f7d949d03bf816 + languageName: node + linkType: hard + +"@jupyter/ydoc@npm:^3.1.0": + version: 3.3.2 + resolution: "@jupyter/ydoc@npm:3.3.2" + dependencies: + "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 + "@lumino/coreutils": ^1.11.0 || ^2.0.0 + "@lumino/disposable": ^1.10.0 || ^2.0.0 + "@lumino/signaling": ^1.10.0 || ^2.0.0 + y-protocols: ^1.0.5 + yjs: ^13.5.40 + checksum: 3b9cf9dafc966aef6bab283cc26314222eb9e8395b48e15dc4e63675af5420482657d5fd78e52c928acdd0d40dd3d15683e3a59b8e52c2b52f883cccb01f1362 + languageName: node + linkType: hard + +"@jupyterlab/builder@npm:^4.5": + version: 4.5.0 + resolution: "@jupyterlab/builder@npm:4.5.0" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/application": ^2.4.5 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/messaging": ^2.0.4 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + "@lumino/widgets": ^2.7.2 + ajv: ^8.12.0 + commander: ^9.4.1 + css-loader: ^6.7.1 + duplicate-package-checker-webpack-plugin: ^3.0.0 + fs-extra: ^10.1.0 + glob: ~7.1.6 + license-webpack-plugin: ^2.3.14 + mini-css-extract-plugin: ^2.7.0 + mini-svg-data-uri: ^1.4.4 + path-browserify: ^1.0.0 + process: ^0.11.10 + source-map-loader: ~1.0.2 + style-loader: ~3.3.1 + supports-color: ^7.2.0 + terser-webpack-plugin: ^5.3.7 + webpack: ^5.76.1 + webpack-cli: ^5.0.1 + webpack-merge: ^5.8.0 + worker-loader: ^3.0.2 + bin: + build-labextension: lib/build-labextension.js + checksum: 2efc4b3efd31a263e49c5908a15ee05509005cf13659ff3d00abeff25d0d3b46f05813b711ddd90d322d5fec98c9159d4fa5b0abc810f7927c08ebf477c5a7a7 + languageName: node + linkType: hard + +"@jupyterlab/coreutils@npm:^6.5.0": + version: 6.5.0 + resolution: "@jupyterlab/coreutils@npm:6.5.0" + dependencies: + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + minimist: ~1.2.0 + path-browserify: ^1.0.0 + url-parse: ~1.5.4 + checksum: 5c198d899c36cfe25077ef1d1ae764a42e37564b72cd769572b710e64018e62a420367364483fa3e10407b8debe7c5eb4824cd372db733788c36296ff35fe002 + languageName: node + linkType: hard + +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/nbformat@npm:4.5.0" + dependencies: + "@lumino/coreutils": ^2.2.2 + checksum: 64dca8d7d59ac081f2d1a99b335217c12f2ea8d2f89e24e595b2774f45416c19480b471305def6af5bcf67a31f59fc1c6889c3226eafa8c61a9ee174fb1ab12b + languageName: node + linkType: hard + +"@jupyterlab/services@npm:^6 || ^7": + version: 7.5.0 + resolution: "@jupyterlab/services@npm:7.5.0" + dependencies: + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/settingregistry": ^4.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/polling": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + ws: ^8.11.0 + checksum: fa579b22fc6d6b15b5c37377c984322499eb76d3b67684c0d335a0a81a5ce23d712e941c9ef1d8f81c7fa0b93614b355a55ba1a0ec176f218b7c7a2eb5220eeb + languageName: node + linkType: hard + +"@jupyterlab/settingregistry@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/settingregistry@npm:4.5.0" + dependencies: + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@rjsf/utils": ^5.13.4 + ajv: ^8.12.0 + json5: ^2.2.3 + peerDependencies: + react: ">=16" + checksum: acae2d98e368b0537ffb08d20ecaf3326b1c31e196887ff63c82459dc7ec01d1dc20deec0a48990670ccf2bf4c6760908169665c1e38cd99f2b1da2b050d0d76 + languageName: node + linkType: hard + +"@jupyterlab/statedb@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/statedb@npm:4.5.0" + dependencies: + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + checksum: 4e6a0f18d288a4f73c68284dce6ce1c0bac134a38b357a8f0fec7bdbb51d0801d7e96ae106960bab7c48637dc07e8239a45e5466d8c8e7372a026de11dc83a03 + languageName: node + linkType: hard + +"@lumino/algorithm@npm:^1.9.1 || ^2.1, @lumino/algorithm@npm:^1.9.2": + version: 1.9.2 + resolution: "@lumino/algorithm@npm:1.9.2" + checksum: a89e7c63504236119634858e271db1cc649684d30ced5a6ebe2788af7c0837f1e05a6fd3047d8525eb756c42ce137f76b3688f75fd3ef915b71cd4f213dfbb96 + languageName: node + linkType: hard + +"@lumino/algorithm@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/algorithm@npm:2.0.4" + checksum: ec1532fc294666fb483dd35082ec50ad979d0e9e1daf7a951ca045fd36a1ae88c7c73bf09c1aafed1ea826319f038ec2ed7058f58d214d5ed9f6a4cf61f232e8 + languageName: node + linkType: hard + +"@lumino/application@npm:^1.7.3 || ^2, @lumino/application@npm:^2.4.5": + version: 2.4.5 + resolution: "@lumino/application@npm:2.4.5" + dependencies: + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/widgets": ^2.7.2 + checksum: 7a034b49cfde045a81d3ed0cb51bfff79a595f9e299c601cc71c19c0709dfe49db5a0a21fdc36fb9d77e441f144ebbeabf9f5ff132a265d530ad3551e9ecc11b + languageName: node + linkType: hard + +"@lumino/collections@npm:^1.9.3": + version: 1.9.3 + resolution: "@lumino/collections@npm:1.9.3" + dependencies: + "@lumino/algorithm": ^1.9.2 + checksum: 1c87a12743eddd6f6b593e47945a5645e2f99ad61c5192499b0745e48ee9aff263c7145541e77dfeea4c9f50bdd017fddfa47bfc60e718de4f28533ce45bf8c3 + languageName: node + linkType: hard + +"@lumino/collections@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/collections@npm:2.0.4" + dependencies: + "@lumino/algorithm": ^2.0.4 + checksum: ee8dfdcde3815ddb72d977705e8295ee9500a44697717a86fed644dd810bce8d8ad448659eec02dafeee1b1b3a74fc851224481933c385a812055793d34224f1 + languageName: node + linkType: hard + +"@lumino/commands@npm:^2.3.3": + version: 2.3.3 + resolution: "@lumino/commands@npm:2.3.3" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/keyboard": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + checksum: 4f44b180b7ce4580647fb86a61c00b8638ce9d538a7222feb85073f691f29b2f942b79a71f11e25d503c6d4ad3e8becec67cb8829710b34e04676f41d3505937 + languageName: node + linkType: hard + +"@lumino/coreutils@npm:^1 || ^2, @lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^2.2.2": + version: 2.2.2 + resolution: "@lumino/coreutils@npm:2.2.2" + dependencies: + "@lumino/algorithm": ^2.0.4 + checksum: ec4f7eedcd8e27c43f541bcf9d571fc69e82959879c80a50c7c6fb803d923834399e3a52e6c044a898426e220168602f0c4ca702c9683354510f5393fe3b160a + languageName: node + linkType: hard + +"@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.1.5": + version: 2.1.5 + resolution: "@lumino/disposable@npm:2.1.5" + dependencies: + "@lumino/signaling": ^2.1.5 + checksum: 31b3edd0643dd8d64131379a379c6364ff7a7e1884186d56a6e7b812cc8ee52f38cb43c20e8d45a8a5343a80af4a8180acf62c51f59c9a522349f35c65fe4d29 + languageName: node + linkType: hard + +"@lumino/domutils@npm:^1.8.1 || ^2.1": + version: 1.8.2 + resolution: "@lumino/domutils@npm:1.8.2" + checksum: 196f25316a17cd8df8f11dbe17f10cbd96e5ce166ea97aab6402307dc554382423d860859bb5d05226f05909748b781fb281bb9220690fe1f3ddc716072c2ed5 + languageName: node + linkType: hard + +"@lumino/domutils@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/domutils@npm:2.0.4" + checksum: 5aacb1e3f597c8dd24fc09c7dabc97c630c293e43afaf7100e59d630bb9379b96b88536a37559cf92102a82364ab80734ccb21eb12811df8ed6ca2662e5cf9f1 + languageName: node + linkType: hard + +"@lumino/dragdrop@npm:^2.1.7": + version: 2.1.7 + resolution: "@lumino/dragdrop@npm:2.1.7" + dependencies: + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + checksum: 92365f45bf3876db2575e6c46a8951f5521fa889146a760386fd189927ae14b7fb00a0e3390f78cfca2703d9d57854e3b17fb4b457a8f288df268f3a36158858 + languageName: node + linkType: hard + +"@lumino/keyboard@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/keyboard@npm:2.0.4" + checksum: 550497726ab8a17e9046fe88f74fbf0ae32e2811d9d7138ccefc7758e8cbf22c6705f3aca8415e0419def17939e12b1363268d71aae00e22f6bbbcfaff5faf82 + languageName: node + linkType: hard + +"@lumino/messaging@npm:^1 || ^2, @lumino/messaging@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/messaging@npm:2.0.4" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/collections": ^2.0.4 + checksum: 08b8ec0fcb21f61a2fa7050d22f94c9c54bf3d310c014a16bea5966320ba760a39bfecc9cd21e1d09ec367805ac0ad8be2466fff15ca1be7536a1077297eb6c7 + languageName: node + linkType: hard + +"@lumino/messaging@npm:^1.10.1 || ^2.1": + version: 1.10.3 + resolution: "@lumino/messaging@npm:1.10.3" + dependencies: + "@lumino/algorithm": ^1.9.2 + "@lumino/collections": ^1.9.3 + checksum: 1131e80379fa9b8a9b5d3418c90e25d4be48e2c92ec711518190772f9e8845a695bef45daddd06a129168cf6f158c8ad80ae86cb245f566e9195bbd9a0843b7a + languageName: node + linkType: hard + +"@lumino/polling@npm:^2.1.5": + version: 2.1.5 + resolution: "@lumino/polling@npm:2.1.5" + dependencies: + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + checksum: 2b510ef4a5ac05470f01281112d1c467ea95f9f783f702d61fe512d8efecda93f360c907eb3e9fd180f507afe79face1d0ca7878a9d844a3e1f588aba7c5a28e + languageName: node + linkType: hard + +"@lumino/properties@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/properties@npm:2.0.4" + checksum: f76d03ba0db12d3c83517484e1cd427b49006bf71e5e1bda00ddb1f02ab85a0079e47c715572a809d4102b348422cab15d587285a0fa17e7e91bbd288d9b6112 + languageName: node + linkType: hard + +"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^1.10.1 || ^2.1, @lumino/signaling@npm:^2.1.5": + version: 2.1.5 + resolution: "@lumino/signaling@npm:2.1.5" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + checksum: ca8fa6f55a28e1dc05ae2a9ab89f34dbbbc4678e891689bfc84ef3a4f85bfdd4abfcff05ff08d6733872bd6808d71138de5fe35692cced6f008d2893b8506d47 + languageName: node + linkType: hard + +"@lumino/virtualdom@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/virtualdom@npm:2.0.4" + dependencies: + "@lumino/algorithm": ^2.0.4 + checksum: 2153f31703088a2dc7dc9cd2353f2876ae626839d267be50c0b191c187649b04b8d1596810f6294afc041e183baff5e5e8e9e4958ce8006df2c5c6ced7bbea42 + languageName: node + linkType: hard + +"@lumino/widgets@npm:^1 || ^2, @lumino/widgets@npm:^1.30.0 || ^2.1, @lumino/widgets@npm:^1.9.3 || ^2, @lumino/widgets@npm:^2.7.2": + version: 2.7.2 + resolution: "@lumino/widgets@npm:2.7.2" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/keyboard": ^2.0.4 + "@lumino/messaging": ^2.0.4 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + checksum: ca9017aecc1df504f433a6189ede84d8ae3ec2c76dd612cf1b43f131ace5d992e6f8ac5359f6ec04abd336c8abadc5eeada43f48f5140cfed54630f1bd84b44a + languageName: node + linkType: hard + +"@nicolo-ribaudo/semver-v6@npm:^6.3.3": + version: 6.3.3 + resolution: "@nicolo-ribaudo/semver-v6@npm:6.3.3" + bin: + semver: bin/semver.js + checksum: 8290855b1591477d2298364541fda64fafd4acc110b387067a71c9b05f4105c0a4ac079857ae9cd107c42ee884e8724a406b5116f069575e02d7ab87a35a5272 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.13.4": + version: 5.24.13 + resolution: "@rjsf/utils@npm:5.24.13" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: 40bb315a6e0b2e635dd6998a1ce82ce9fda2c8f57206f952006abc80e48d54790fa4298b167c0fdbc28a5a278573dbdb5bc68ec1da99c49a6b6c45fc7b61cdf5 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.1": + version: 1.8.6 + resolution: "@sinonjs/commons@npm:1.8.6" + dependencies: + type-detect: 4.0.8 + checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^6.0.0, @sinonjs/fake-timers@npm:^6.0.1": + version: 6.0.1 + resolution: "@sinonjs/fake-timers@npm:6.0.1" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 + languageName: node + linkType: hard + +"@sinonjs/samsam@npm:^5.3.1": + version: 5.3.1 + resolution: "@sinonjs/samsam@npm:5.3.1" + dependencies: + "@sinonjs/commons": ^1.6.0 + lodash.get: ^4.4.2 + type-detect: ^4.0.8 + checksum: 1c2c49d51b1840775980e9496707d68b936f443896f92e48150c4f7713d14904e576740e52660b602f8a53b665bd5f149c5c733758030758427ddb1621090279 + languageName: node + linkType: hard + +"@sinonjs/text-encoding@npm:^0.7.1": + version: 0.7.2 + resolution: "@sinonjs/text-encoding@npm:0.7.2" + checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab + languageName: node + linkType: hard + +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.0 + resolution: "@socket.io/component-emitter@npm:3.1.0" + checksum: db069d95425b419de1514dffe945cc439795f6a8ef5b9465715acf5b8b50798e2c91b8719cbf5434b3fe7de179d6cdcd503c277b7871cb3dd03febb69bdd50fa + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@types/backbone@npm:1.4.14": + version: 1.4.14 + resolution: "@types/backbone@npm:1.4.14" + dependencies: + "@types/jquery": "*" + "@types/underscore": "*" + checksum: 4f44bfb71d75332b5de610be7687f4ae523ad4ef02da844a828403b534b6a94a6288b32cab64371d0ad526e35cfed511652ac53af22d0b9caaac3f4cfb4375dd + languageName: node + linkType: hard + +"@types/chai@npm:^4.1.7": + version: 4.3.5 + resolution: "@types/chai@npm:4.3.5" + checksum: c8f26a88c6b5b53a3275c7f5ff8f107028e3cbb9ff26795fff5f3d9dea07106a54ce9e2dce5e40347f7c4cc35657900aaf0c83934a25a1ae12e61e0f5516e431 + languageName: node + linkType: hard + +"@types/cookie@npm:^0.4.1": + version: 0.4.1 + resolution: "@types/cookie@npm:0.4.1" + checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18 + languageName: node + linkType: hard + +"@types/cors@npm:^2.8.12": + version: 2.8.13 + resolution: "@types/cors@npm:2.8.13" + dependencies: + "@types/node": "*" + checksum: 7ef197ea19d2e5bf1313b8416baa6f3fd6dd887fd70191da1f804f557395357dafd8bc8bed0ac60686923406489262a7c8a525b55748f7b2b8afa686700de907 + languageName: node + linkType: hard + +"@types/d3-array@npm:^1": + version: 1.2.9 + resolution: "@types/d3-array@npm:1.2.9" + checksum: baa59c95d31fe541ed6bc45c2b508f73231353b910dfe7eb5ae3d66d3b38767677829802bfd86a1a2af435e48c218358d663343374846e6141d741c7c5ab0a91 + languageName: node + linkType: hard + +"@types/d3-axis@npm:^1": + version: 1.0.16 + resolution: "@types/d3-axis@npm:1.0.16" + dependencies: + "@types/d3-selection": ^1 + checksum: 770bd5a0547e760d2f3c891efbe9a0ef1f1aee7696a519c04d3e4742858747bd60e8a06650bdd7d3e798fb8ab2b18195c10a38181108104e01b4297086103529 + languageName: node + linkType: hard + +"@types/d3-brush@npm:^1": + version: 1.1.5 + resolution: "@types/d3-brush@npm:1.1.5" + dependencies: + "@types/d3-selection": ^1 + checksum: 58f0237780acdf1c5fd68e52c0fe348145e2da6e1df1d90a92065d679fd4f9ce92b4b525d054b79d827fb96a4cf34590ac85bf0973313ec1fce9540f8b7f3231 + languageName: node + linkType: hard + +"@types/d3-chord@npm:^1": + version: 1.0.11 + resolution: "@types/d3-chord@npm:1.0.11" + checksum: 2b609f82789923da00593647277959d5ec3e9e3fb706e2a0e84ba682aacdefed29cacd13ea785dfaac04438c66e4c16bc9383640f48e55fa0ba8fad5db0b03a9 + languageName: node + linkType: hard + +"@types/d3-collection@npm:*": + version: 1.0.10 + resolution: "@types/d3-collection@npm:1.0.10" + checksum: f6904524148f512ef1630667edbef5cd2255bacc9efe24401baf8e155e849b352c01688eb3176ccaf2cab291dd87abce2a731926490221752464bd4bfae01766 + languageName: node + linkType: hard + +"@types/d3-color@npm:^1": + version: 1.4.2 + resolution: "@types/d3-color@npm:1.4.2" + checksum: 60d0f00ceb53052a142c606465eeec49b264a8dee180ddeda121770bd24e2fe34d8c33140022d929a5bf3d862e6908a55ee86ac629d10ac93f124fb40db7022a + languageName: node + linkType: hard + +"@types/d3-contour@npm:^1": + version: 1.3.3 + resolution: "@types/d3-contour@npm:1.3.3" + dependencies: + "@types/d3-array": ^1 + "@types/geojson": "*" + checksum: 841eb88217ca583b0921ff9600cd48bcda74c1c949e695f637dfb3b78a7bf1bf96b0c3a8602324460ab871b5ead1e0727e2019165d7c28713d194de15f9e4056 + languageName: node + linkType: hard + +"@types/d3-dispatch@npm:^1": + version: 1.0.9 + resolution: "@types/d3-dispatch@npm:1.0.9" + checksum: d04c07ce3902f248f955a076b10117b4394c02d3b53a03230a8b25f7df40e3cfe2d303189bec10388bff0cd8904152245eaecb2ceec2a5c35d0c3f379bc98a48 + languageName: node + linkType: hard + +"@types/d3-drag@npm:^1": + version: 1.2.5 + resolution: "@types/d3-drag@npm:1.2.5" + dependencies: + "@types/d3-selection": ^1 + checksum: d4e98a4f616201adca591023e1a370db13caf1f26d11fa5ce80788d0de4e3bd18414d9f7b1414317e948f595fbc93ba21fc9b01b5fa13743583d788368d735dd + languageName: node + linkType: hard + +"@types/d3-dsv@npm:^1": + version: 1.2.2 + resolution: "@types/d3-dsv@npm:1.2.2" + checksum: af443b7c9b98ceed9247472d036404b982d25af4eaa09ffe54017e675e26c1b9ba29a3464b658b4552e5cc2635a03c0e8354138ab47ad6b06c29ccb65bac3c5b + languageName: node + linkType: hard + +"@types/d3-ease@npm:^1": + version: 1.0.11 + resolution: "@types/d3-ease@npm:1.0.11" + checksum: fe28fbdbd75f0baeac5504c0a3acf7a4202865547b04dab840b8278bd0b0287f244e7b333bf212d22b3fcbea51b58650e1f62ea6ad3a3d74ad3c6894c54df81b + languageName: node + linkType: hard + +"@types/d3-fetch@npm:^1": + version: 1.2.2 + resolution: "@types/d3-fetch@npm:1.2.2" + dependencies: + "@types/d3-dsv": ^1 + checksum: ff53208b073ba2267e52b5af60fb853b792a7b44f46cb2644423fb507b2ed28e953f3fb04bb0d355639a9abfcdbabb82c3ca8e171a5f03b9d2b91b276ec8c704 + languageName: node + linkType: hard + +"@types/d3-force@npm:^1": + version: 1.2.4 + resolution: "@types/d3-force@npm:1.2.4" + checksum: 07f159da9cd7fe75f0fc6d4e8f27e9059b9ebd27a4a5fe0361624ea2f56ba3af24b96797fd49cdff65ec10a674170d48dd13a30c8e37ec95672aae97bb2aaa79 + languageName: node + linkType: hard + +"@types/d3-format@npm:^1": + version: 1.4.2 + resolution: "@types/d3-format@npm:1.4.2" + checksum: aa70d25a3e2010bf3979044b438b8c387e6749a30d1cd95a37eac90e378a7b70bba4a6cce426d18dc936c95a95afe3b2efd2bb3c9a14bf0ce165a5b72f0aa09f + languageName: node + linkType: hard + +"@types/d3-geo@npm:^1": + version: 1.12.4 + resolution: "@types/d3-geo@npm:1.12.4" + dependencies: + "@types/geojson": "*" + checksum: 301180d2524fe45a5a5f9c1cafd4d4b89ea1bf99be390ee84e06510ca2126d34b4d674c62ca389078c59e34177140d85cef5ab9512583beed50eee3b07c3a075 + languageName: node + linkType: hard + +"@types/d3-hierarchy@npm:^1": + version: 1.1.8 + resolution: "@types/d3-hierarchy@npm:1.1.8" + checksum: fb661b4d4727c8726ca5bc8dcd425811f1473cff7294dce55b0943d223b8d547c0f1d000c0b4ca7a7ce42e683e255521730a93b255f3ff3c9c8528420815415e + languageName: node + linkType: hard + +"@types/d3-interpolate@npm:^1": + version: 1.4.2 + resolution: "@types/d3-interpolate@npm:1.4.2" + dependencies: + "@types/d3-color": ^1 + checksum: 3d551377c036580efb4f918171300d849d9bf7c6fe61b1ee6ba916065a2e406cded2aaef067a39d068ec6ab898053abb703413921f2d3701c9332bd201152ef9 + languageName: node + linkType: hard + +"@types/d3-path@npm:^1": + version: 1.0.9 + resolution: "@types/d3-path@npm:1.0.9" + checksum: acbf7376fd7bef61701bce915bf5a9cb5eaa9741b7919d3e644f841a65faf1aea3cf63ba949c21ddda8c9849221394856a2054805aa698d3bb5ac3fe7d029817 + languageName: node + linkType: hard + +"@types/d3-polygon@npm:^1": + version: 1.0.8 + resolution: "@types/d3-polygon@npm:1.0.8" + checksum: 20ed3432a9cb436e4cc8b3623ccce2b030955cb9a57175119607f946e78e3d13f5c7c1fd543cac3fc942b6d2d2a8c6868e2d4180ec691feae7f66adb596744a4 + languageName: node + linkType: hard + +"@types/d3-quadtree@npm:^1": + version: 1.0.9 + resolution: "@types/d3-quadtree@npm:1.0.9" + checksum: 4e6dcbaef392461b1a1bcfc292385f225d9d5dbcd4f7d3264b66817d6cc7c7686d4347c5271d3fb4393cecd796657346659b45ac59e19990e8b3572cd1f00e95 + languageName: node + linkType: hard + +"@types/d3-random@npm:^1": + version: 1.1.3 + resolution: "@types/d3-random@npm:1.1.3" + checksum: 09420e5b0e94282afc4c3895a8687e53cf87c14470b134ac9ac8fc262f4d69ab0b09464d8c596a809f412d6c564a14102c391ee3c8ac4d93447a661ac3d3e285 + languageName: node + linkType: hard + +"@types/d3-scale-chromatic@npm:^1": + version: 1.5.1 + resolution: "@types/d3-scale-chromatic@npm:1.5.1" + checksum: 45e273d6f9493a7ee2318fb7b92f999c618f6d262c7db5a9e25414692b932095f32d992cc749528d6f2add49c02965d101cd3718c3e516510222de9c6201fbcd + languageName: node + linkType: hard + +"@types/d3-scale@npm:^2": + version: 2.2.6 + resolution: "@types/d3-scale@npm:2.2.6" + dependencies: + "@types/d3-time": ^1 + checksum: ba4bd7e09995f8c08b0723b74aae5a165dbdf46178ae06016f6a4c7dd810dba76b8ec4b000bef95424eed204c02b7e7f3d9b8faaaf16255c57e79c4a59e3f18e + languageName: node + linkType: hard + +"@types/d3-selection@npm:^1": + version: 1.4.3 + resolution: "@types/d3-selection@npm:1.4.3" + checksum: 6ab11ac517d5878dca18021c698576f6678fb8374dcf1c519021969ba90d6c84fb8368f8f555bddce78b278b95d40f438398e1b082a96c257b7103ec543ad28b + languageName: node + linkType: hard + +"@types/d3-shape@npm:^1": + version: 1.3.8 + resolution: "@types/d3-shape@npm:1.3.8" + dependencies: + "@types/d3-path": ^1 + checksum: a7f78a3f0be1215b512efb636ba381768ab4104ef9b72b7fcc2ab9810e7d6fc2ee062f3103ef99236f4462deabac60d2fd96375315ec7ad33278757918c94592 + languageName: node + linkType: hard + +"@types/d3-time-format@npm:^2": + version: 2.3.1 + resolution: "@types/d3-time-format@npm:2.3.1" + checksum: 4c22f0454abc374a5a830ba6b84bed021a276cba44ad3ac0d611d1e152dc00ed54af62ce6f431675a2ea5f37f5ce86c05b096420a068caf855b989b269b68deb + languageName: node + linkType: hard + +"@types/d3-time@npm:^1": + version: 1.1.1 + resolution: "@types/d3-time@npm:1.1.1" + checksum: 5c859a2219fd9d4eeac7962eb981b6bb99a23044286fe093b247a98c72b4fe0ccd635cb0e9c4e4454fe56b8e655a26a414d3dd79bcb2074400ad6c2b1e78b633 + languageName: node + linkType: hard + +"@types/d3-timer@npm:^1": + version: 1.0.10 + resolution: "@types/d3-timer@npm:1.0.10" + checksum: da893a7ac813e36a7bfdd9f3a95eb1b91bdb807ecfc03cce44bb1dcb8ea5269e7ddb2756fa2c070390998c1ccf9ad7d454f1a586b9b3ec899f5340e89a8b6620 + languageName: node + linkType: hard + +"@types/d3-transition@npm:^1": + version: 1.3.2 + resolution: "@types/d3-transition@npm:1.3.2" + dependencies: + "@types/d3-selection": ^1 + checksum: 3b9687382363fa3ee5732944ecdf9b3e36801611779be671a73617a69b49173c6081e1f82f9546af6d3aff9afbe217f4a6c1cbd3ae06e6822033c22b321c5305 + languageName: node + linkType: hard + +"@types/d3-voronoi@npm:*": + version: 1.1.9 + resolution: "@types/d3-voronoi@npm:1.1.9" + checksum: 604e8c4fb4d65f9fc6a549fc3a32a8e9bc7e54e566a2ca6a834f5ff91e41728b3289cfc5c85dd96283fac772c7b9184e023702ec7230e2646a97b78907ddbecb + languageName: node + linkType: hard + +"@types/d3-zoom@npm:^1": + version: 1.8.4 + resolution: "@types/d3-zoom@npm:1.8.4" + dependencies: + "@types/d3-interpolate": ^1 + "@types/d3-selection": ^1 + checksum: 62129a784c14446d6b07433fc877c798ae703d1623fcd86fbe0ed8471ceb36b8ca695c57be321f0a94da1ff938939bacb85f612cdf9ddde92ce47986a11553ff + languageName: node + linkType: hard + +"@types/d3@npm:^5.7.2": + version: 5.16.4 + resolution: "@types/d3@npm:5.16.4" + dependencies: + "@types/d3-array": ^1 + "@types/d3-axis": ^1 + "@types/d3-brush": ^1 + "@types/d3-chord": ^1 + "@types/d3-collection": "*" + "@types/d3-color": ^1 + "@types/d3-contour": ^1 + "@types/d3-dispatch": ^1 + "@types/d3-drag": ^1 + "@types/d3-dsv": ^1 + "@types/d3-ease": ^1 + "@types/d3-fetch": ^1 + "@types/d3-force": ^1 + "@types/d3-format": ^1 + "@types/d3-geo": ^1 + "@types/d3-hierarchy": ^1 + "@types/d3-interpolate": ^1 + "@types/d3-path": ^1 + "@types/d3-polygon": ^1 + "@types/d3-quadtree": ^1 + "@types/d3-random": ^1 + "@types/d3-scale": ^2 + "@types/d3-scale-chromatic": ^1 + "@types/d3-selection": ^1 + "@types/d3-shape": ^1 + "@types/d3-time": ^1 + "@types/d3-time-format": ^2 + "@types/d3-timer": ^1 + "@types/d3-transition": ^1 + "@types/d3-voronoi": "*" + "@types/d3-zoom": ^1 + checksum: 8b25bd1935f7b9b580da8c3180ee23a5bd79f5ffd104520d5d4bd3ba6e9db0ab5f2c8765a4ff6757a6ad9b37f0cf4213fe9ceca3958676ed50e56403764e04af + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.4 + resolution: "@types/eslint-scope@npm:3.7.4" + dependencies: + "@types/eslint": "*" + "@types/estree": "*" + checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.44.0 + resolution: "@types/eslint@npm:8.44.0" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: 2655f409a4ecdd64bb9dd9eb6715e7a2ac30c0e7f902b414e10dbe9d6d497baa5a0f13105e1f7bd5ad7a913338e2ab4bed1faf192a7a0d27d1acd45ba79d3f69 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree@npm:1.0.1" + checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d + languageName: node + linkType: hard + +"@types/expect.js@npm:^0.3.29": + version: 0.3.29 + resolution: "@types/expect.js@npm:0.3.29" + checksum: c04ea8ae20939a69e66b09fce3a03041a93db300f16a3ca660f84601a35eaee10ca64d190467d1cf09f13d20347890bfa46397a2ac676daca0ec77c4d4950dcd + languageName: node + linkType: hard + +"@types/geojson@npm:*": + version: 7946.0.10 + resolution: "@types/geojson@npm:7946.0.10" + checksum: 12c407c2dc93ecb26c08af533ee732f1506a9b29456616ba7ba1d525df96206c28ddf44a528f6a5415d7d22893e9d967420940a9c095ee5e539c1eba5fefc1f4 + languageName: node + linkType: hard + +"@types/jquery@npm:*": + version: 3.5.16 + resolution: "@types/jquery@npm:3.5.16" + dependencies: + "@types/sizzle": "*" + checksum: 13c995f15d1c2f1d322103dc1cb0a22b95eecc3e7546f00279b8731aea21d7ec04550af40e609ee48e755d4e11bf61c25b4aa9f53df3bcbec4b8fe8e81471732 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.12 + resolution: "@types/json-schema@npm:7.0.12" + checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293 + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + +"@types/lodash@npm:^4.14.134": + version: 4.14.195 + resolution: "@types/lodash@npm:4.14.195" + checksum: 39b75ca635b3fa943d17d3d3aabc750babe4c8212485a4df166fe0516e39288e14b0c60afc6e21913cc0e5a84734633c71e617e2bd14eaa1cf51b8d7799c432e + languageName: node + linkType: hard + +"@types/mocha@npm:^7.0.2": + version: 7.0.2 + resolution: "@types/mocha@npm:7.0.2" + checksum: 9be72c563976a809caa3594e3ee1fd71748887aaf105b4cfa99c69e882659d3ddbb331d4c1e3b3af9a67c78f3b7b4ab30fe1baa13cb50561dcc386512a75142a + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=10.0.0": + version: 20.4.2 + resolution: "@types/node@npm:20.4.2" + checksum: 99e544ea7560d51f01f95627fc40394c24a13da8f041121a0da13e4ef0a2aa332932eaf9a5e8d0e30d1c07106e96a183be392cbba62e8cf0bf6a085d5c0f4149 + languageName: node + linkType: hard + +"@types/node@npm:^13.13.2": + version: 13.13.52 + resolution: "@types/node@npm:13.13.52" + checksum: 8f1afff497ebeba209e2dc340d823284e087a47632afe99a7daa30eaff80893e520f222ad400cd1f2d3b8288e93cf3eaded52a8e64eaefb8aacfe6c35de98f42 + languageName: node + linkType: hard + +"@types/sinon@npm:^9.0.0": + version: 9.0.11 + resolution: "@types/sinon@npm:9.0.11" + dependencies: + "@types/sinonjs__fake-timers": "*" + checksum: 2074490973012283ec9ccb9f607fa12f36c78d8801f63ec437d3e8351dae161a018836cc02e8b039118ec9fb7680331594716ed0858075a11d381edd27faa75c + languageName: node + linkType: hard + +"@types/sinonjs__fake-timers@npm:*": + version: 8.1.2 + resolution: "@types/sinonjs__fake-timers@npm:8.1.2" + checksum: bbc73a5ab6c0ec974929392f3d6e1e8db4ebad97ec506d785301e1c3d8a4f98a35b1aa95b97035daef02886fd8efd7788a2fa3ced2ec7105988bfd8dce61eedd + languageName: node + linkType: hard + +"@types/sizzle@npm:*": + version: 2.3.3 + resolution: "@types/sizzle@npm:2.3.3" + checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 + languageName: node + linkType: hard + +"@types/source-list-map@npm:*": + version: 0.1.2 + resolution: "@types/source-list-map@npm:0.1.2" + checksum: fda8f37537aca9d3ed860d559289ab1dddb6897e642e6f53e909bbd18a7ac3129a8faa2a7d093847c91346cf09c86ef36e350c715406fba1f2271759b449adf6 + languageName: node + linkType: hard + +"@types/underscore@npm:*": + version: 1.11.5 + resolution: "@types/underscore@npm:1.11.5" + checksum: 6cd928c436bd65a7b544c979e0958762816dc3fd4f0d430d055faa1e914336568c3a8dd52350760c16ecc37be71d40b0792012bae455d8c5d63e50f02986c9e2 + languageName: node + linkType: hard + +"@types/webpack-sources@npm:^0.1.5": + version: 0.1.9 + resolution: "@types/webpack-sources@npm:0.1.9" + dependencies: + "@types/node": "*" + "@types/source-list-map": "*" + source-map: ^0.6.1 + checksum: bc09c584c7047e8aed29801a3981787dee3898e9e7a99891a362df114fcac3879eea5a00932314866a01b25220391839be09fe1487b16d4970ff4a7afd5b9725 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^4.19.0": + version: 4.33.0 + resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" + dependencies: + "@typescript-eslint/experimental-utils": 4.33.0 + "@typescript-eslint/scope-manager": 4.33.0 + debug: ^4.3.1 + functional-red-black-tree: ^1.0.1 + ignore: ^5.1.8 + regexpp: ^3.1.0 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d74855d0a5ffe0b2f362ec02fcd9301d39a53fb4155b9bd0cb15a0a31d065143129ebf98df9d86af4b6f74de1d423a4c0d8c0095520844068117453afda5bc4f + languageName: node + linkType: hard + +"@typescript-eslint/experimental-utils@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" + dependencies: + "@types/json-schema": ^7.0.7 + "@typescript-eslint/scope-manager": 4.33.0 + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/typescript-estree": 4.33.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: "*" + checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^4.19.0": + version: 4.33.0 + resolution: "@typescript-eslint/parser@npm:4.33.0" + dependencies: + "@typescript-eslint/scope-manager": 4.33.0 + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/typescript-estree": 4.33.0 + debug: ^4.3.1 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 102457eae1acd516211098fea081c8a2ed728522bbda7f5a557b6ef23d88970514f9a0f6285d53fca134d3d4d7d17822b5d5e12438d5918df4d1f89cc9e67d57 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/scope-manager@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/visitor-keys": 4.33.0 + checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/types@npm:4.33.0" + checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/visitor-keys": 4.33.0 + debug: ^4.3.1 + globby: ^11.0.3 + is-glob: ^4.0.1 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + eslint-visitor-keys: ^2.0.0 + checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/ast@npm:1.11.6" + dependencies: + "@webassemblyjs/helper-numbers": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + checksum: 38ef1b526ca47c210f30975b06df2faf1a8170b1636ce239fc5738fc231ce28389dd61ecedd1bacfc03cbe95b16d1af848c805652080cb60982836eb4ed2c6cf + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" + checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" + checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" + checksum: b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" + checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + checksum: b2cf751bf4552b5b9999d27bbb7692d0aca75260140195cb58ea6374d7b9c2dc69b61e10b211a0e773f66209c3ddd612137ed66097e3684d7816f854997682e9 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/ieee754@npm:1.11.6" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/leb128@npm:1.11.6" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/utf8@npm:1.11.6" + checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/helper-wasm-section": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-opt": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + "@webassemblyjs/wast-printer": 1.11.6 + checksum: 29ce75870496d6fad864d815ebb072395a8a3a04dc9c3f4e1ffdc63fc5fa58b1f34304a1117296d8240054cfdbc38aca88e71fb51483cf29ffab0a61ef27b481 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: a645a2eecbea24833c3260a249704a7f554ef4a94c6000984728e94bb2bc9140a68dfd6fd21d5e0bbb09f6dfc98e083a45760a83ae0417b41a0196ff6d45a23a + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + checksum: b4557f195487f8e97336ddf79f7bef40d788239169aac707f6eaa2fa5fe243557c2d74e550a8e57f2788e70c7ae4e7d32f7be16101afe183d597b747a3bdd528 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: 8200a8d77c15621724a23fdabe58d5571415cda98a7058f542e670ea965dd75499f5e34a48675184947c66f3df23adf55df060312e6d72d57908e3f049620d8a + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wast-printer@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: d2fa6a4c427325ec81463e9c809aa6572af6d47f619f3091bf4c4a6fc34f1da3df7caddaac50b8e7a457f8784c62cd58c6311b6cb69b0162ccd8d4c072f79cf8 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^2.1.1": + version: 2.1.1 + resolution: "@webpack-cli/configtest@npm:2.1.1" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^2.0.2": + version: 2.0.2 + resolution: "@webpack-cli/info@npm:2.0.2" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^2.0.5": + version: 2.0.5 + resolution: "@webpack-cli/serve@npm:2.0.5" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 75f0e54681796d567a71ac3e2781d2901a8d8cf1cdfc82f261034dddac59a8343e8c3bc5e32b4bb9d6766759ba49fb29a5cd86ef1701d79c506fe886bb63ac75 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + +"abab@npm:^2.0.3": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"accepts@npm:~1.3.4": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" + peerDependencies: + acorn: ^8 + checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.1": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.2": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^7.1.1, acorn@npm:^7.4.0": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 + languageName: node + linkType: hard + +"acorn@npm:^8.1.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" + dependencies: + debug: ^4.1.0 + depd: ^2.0.0 + humanize-ms: ^1.2.1 + checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + 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 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.12.0, ajv@npm:^8.9.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ansi-colors@npm:3.2.3": + version: 3.2.3 + resolution: "ansi-colors@npm:3.2.3" + checksum: 018a92fbf8b143feb9e00559655072598902ff2cdfa07dbe24b933c70ae04845e3dda2c091ab128920fc50b3db06c3f09947f49fcb287d53beb6c5869b8bb32b + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"arr-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "arr-diff@npm:4.0.0" + checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 + languageName: node + linkType: hard + +"arr-flatten@npm:^1.1.0": + version: 1.1.0 + resolution: "arr-flatten@npm:1.1.0" + checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 + languageName: node + linkType: hard + +"arr-union@npm:^3.1.0": + version: 3.1.0 + resolution: "arr-union@npm:3.1.0" + checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array-unique@npm:^0.3.2": + version: 0.3.2 + resolution: "array-unique@npm:0.3.2" + checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flat@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + +"array.prototype.reduce@npm:^1.0.5": + version: 1.0.5 + resolution: "array.prototype.reduce@npm:1.0.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-array-method-boxes-properly: ^1.0.0 + is-string: ^1.0.7 + checksum: f44691395f9202aba5ec2446468d4c27209bfa81464f342ae024b7157dbf05b164e47cca01250b8c7c2a8219953fb57651cca16aab3d16f43b85c0d92c26eef3 + languageName: node + linkType: hard + +"asn1.js@npm:^5.2.0": + version: 5.4.1 + resolution: "asn1.js@npm:5.4.1" + dependencies: + bn.js: ^4.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + safer-buffer: ^2.1.0 + checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a + languageName: node + linkType: hard + +"assert@npm:^2.0.0": + version: 2.0.0 + resolution: "assert@npm:2.0.0" + dependencies: + es6-object-assign: ^1.1.0 + is-nan: ^1.2.1 + object-is: ^1.0.1 + util: ^0.12.0 + checksum: bb91f181a86d10588ee16c5e09c280f9811373974c29974cbe401987ea34e966699d7989a812b0e19377b511ea0bc627f5905647ce569311824848ede382cae8 + languageName: node + linkType: hard + +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + +"assign-symbols@npm:^1.0.0": + version: 1.0.0 + resolution: "assign-symbols@npm:1.0.0" + checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 + languageName: node + linkType: hard + +"async@npm:^3.0.1": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"atob@npm:^2.1.2": + version: 2.1.2 + resolution: "atob@npm:2.1.2" + bin: + atob: bin/atob.js + checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.4": + version: 0.4.4 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.4" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.4.1 + "@nicolo-ribaudo/semver-v6": ^6.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0273f3d74ccbf78086a3b14bb11b1fb94933830f51c576a24229d75b3b91c8b357c3a381d4ab3146abf9b052fa4c33ec9368dd010ada9ee355e1d03ff64e1ff0 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.8.2": + version: 0.8.2 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.2" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.1 + core-js-compat: ^3.31.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0bc3e9e0114eba18f4fea8a9ff5a6016cae73b74cb091290c3f75fd7b9e34e712ee26f95b52d796f283970d7c6256fb01196e3608e8db03f620e3389d56d37c6 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.5.1": + version: 0.5.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.1" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85a56d28b34586fbe482225fb6a9592fc793a459c5eea987a3427fb723c7aa2f76916348a9fc5e9ca48754ebf6086cfbb9226f4cd0cf9c6257f94553622562ed + languageName: node + linkType: hard + +"backbone@npm:1.4.0": + version: 1.4.0 + resolution: "backbone@npm:1.4.0" + dependencies: + underscore: ">=1.8.3" + checksum: 09abdf184c485a4cd2c68218298cf772fbefeaa166ef8eb795cdb0159b4ad1d2f6823dde089352eaf0be929e5bbef67c57555722f4d1886f969d954f77814870 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.2.1, base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"base64id@npm:2.0.0, base64id@npm:~2.0.0": + version: 2.0.0 + resolution: "base64id@npm:2.0.0" + checksum: 581b1d37e6cf3738b7ccdd4d14fe2bfc5c238e696e2720ee6c44c183b838655842e22034e53ffd783f872a539915c51b0d4728a49c7cc678ac5a758e00d62168 + languageName: node + linkType: hard + +"base@npm:^0.11.1": + version: 0.11.2 + resolution: "base@npm:0.11.2" + 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 + checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"body-parser@npm:^1.19.0": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + languageName: node + linkType: hard + +"bqplot@workspace:.": + version: 0.0.0-use.local + resolution: "bqplot@workspace:." + dependencies: + "@jupyter-widgets/base": ^2 || ^3 || ^4 || ^5 || ^6 + "@jupyter-widgets/base-manager": ^1.0.12 + "@jupyter-widgets/controls": ^5 + "@jupyterlab/builder": ^4.5 + "@lumino/messaging": ^1 || ^2 + "@lumino/widgets": ^1 || ^2 + "@types/chai": ^4.1.7 + "@types/d3": ^5.7.2 + "@types/expect.js": ^0.3.29 + "@types/mocha": ^7.0.2 + "@types/node": ^13.13.2 + "@types/sinon": ^9.0.0 + "@typescript-eslint/eslint-plugin": ^4.19.0 + "@typescript-eslint/parser": ^4.19.0 + bqscales: ^0.3.2 + chai: ^4.1.2 + css-loader: ^5.0.0 + d3: ^5.7.0 + d3-selection: ^1 + eslint: ^7.22.0 + eslint-config-prettier: ^8.1.0 + eslint-config-standard: ^16.0.2 + eslint-plugin-import: ^2.22.1 + eslint-plugin-node: ^11.1.0 + eslint-plugin-prettier: ^3.3.1 + eslint-plugin-promise: ^4.2.1 + is-typedarray: ^1.0.0 + karma: ^6.3.14 + karma-chai: ^0.1.0 + karma-chrome-launcher: ^3.1.0 + karma-mocha: ^2.0.0 + karma-mocha-reporter: ^2.2.5 + karma-sinon: ^1.0.5 + karma-sourcemap-loader: ^0.3.7 + karma-typescript: ^5.0.2 + karma-typescript-es6-transform: ^5.0.2 + karma-webpack: ^5.0.0 + kiwi.js: ^1.1.2 + less: ^3.8.1 + less-loader: ^5.0.0 + mocha: ^7.1.1 + npm-run-all: ^4.1.3 + popper.js: ^1.0.0 + prettier: ^2.2.1 + rimraf: ^3.0.2 + sinon: ^9.0.2 + sinon-chai: ^3.3.0 + style-loader: ^1.2.0 + topojson: ^1.6.24 + typescript: ~5 + underscore: ^1.8.3 + webpack: ^5 + webpack-cli: ^3.3.12 + languageName: unknown + linkType: soft + +"bqscales@npm:^0.3.2": + version: 0.3.2 + resolution: "bqscales@npm:0.3.2" + dependencies: + "@jupyter-widgets/base": ^2 || ^3 || ^4 || ^5 || ^6 + "@lumino/application": ^1.7.3 || ^2 + "@lumino/widgets": ^1.9.3 || ^2 + d3-array: ^2.4.0 + d3-geo: ^1.11.9 + d3-scale: ^3.2.1 + underscore: ^1.9.2 + checksum: 15800b15403fed66dc486e477ddb58a7036926056632ac53efd26279f2a1872bf40614732cfc32bfc9a4edf16d4f9a79987f72bff340494609da15887aa181b7 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^2.3.1": + version: 2.3.2 + resolution: "braces@npm:2.3.2" + 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 + checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"brfs@npm:^1.3.0": + version: 1.6.1 + resolution: "brfs@npm:1.6.1" + dependencies: + quote-stream: ^1.0.1 + resolve: ^1.1.5 + static-module: ^2.2.0 + through2: ^2.0.0 + bin: + brfs: bin/cmd.js + checksum: 007d9dc507bbb1d770ca2fb3a9c1b5f4710592ff160535e959ceaed47a481a08c8a3bce3ea7eecbb781e7fff9801eca6da58a968f66668e89df83d559b624f19 + languageName: node + linkType: hard + +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + +"browser-resolve@npm:^2.0.0": + version: 2.0.0 + resolution: "browser-resolve@npm:2.0.0" + dependencies: + resolve: ^1.17.0 + checksum: 69225e73b555bd6d2a08fb93c7342cfcf3b5058b975099c52649cd5c3cec84c2066c5385084d190faedfb849684d9dabe10129f0cd401d1883572f2e6650f440 + languageName: node + linkType: hard + +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: b717b19b25952dd6af483e368f9bcd6b14b87740c3d226c2977a65e84666ffd67000bddea7d911f111a9b6ddc822b234de42d52ab6507bce4119a4cc003ef7b3 + languageName: node + linkType: hard + +"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4": + version: 1.2.0 + resolution: "browserify-aes@npm:1.2.0" + 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 + checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 + languageName: node + linkType: hard + +"browserify-cipher@npm:^1.0.0": + version: 1.0.1 + resolution: "browserify-cipher@npm:1.0.1" + dependencies: + browserify-aes: ^1.0.4 + browserify-des: ^1.0.0 + evp_bytestokey: ^1.0.0 + checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 + languageName: node + linkType: hard + +"browserify-des@npm:^1.0.0": + version: 1.0.2 + resolution: "browserify-des@npm:1.0.2" + dependencies: + cipher-base: ^1.0.1 + des.js: ^1.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 + languageName: node + linkType: hard + +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" + dependencies: + bn.js: ^5.0.0 + randombytes: ^2.0.1 + checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + languageName: node + linkType: hard + +"browserify-sign@npm:^4.0.0": + version: 4.2.1 + resolution: "browserify-sign@npm:4.2.1" + dependencies: + bn.js: ^5.1.1 + browserify-rsa: ^4.0.1 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + elliptic: ^6.5.3 + inherits: ^2.0.4 + parse-asn1: ^5.1.5 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 + languageName: node + linkType: hard + +"browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" + dependencies: + pako: ~1.0.5 + checksum: 5cd9d6a665190fedb4a97dfbad8dabc8698d8a507298a03f42c734e96d58ca35d3c7d4085e283440bbca1cd1938cff85031728079bedb3345310c58ab1ec92d6 + languageName: node + linkType: hard + +"browserslist@npm:^4.14.5, browserslist@npm:^4.21.9": + version: 4.21.9 + resolution: "browserslist@npm:4.21.9" + dependencies: + caniuse-lite: ^1.0.30001503 + electron-to-chromium: ^1.4.431 + node-releases: ^2.0.12 + update-browserslist-db: ^1.0.11 + bin: + browserslist: cli.js + checksum: 80d3820584e211484ad1b1a5cfdeca1dd00442f47be87e117e1dda34b628c87e18b81ae7986fa5977b3e6a03154f6d13cd763baa6b8bf5dd9dd19f4926603698 + languageName: node + linkType: hard + +"buffer-equal@npm:0.0.1": + version: 0.0.1 + resolution: "buffer-equal@npm:0.0.1" + checksum: ca4b52e6c01143529d957a78cb9a93e4257f172bbab30d9eb87c20ae085ed23c5e07f236ac051202dacbf3d17aba42e1455f84cba21ea79b67d57f2b05e9a613 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer-xor@npm:^1.0.3": + version: 1.0.3 + resolution: "buffer-xor@npm:1.0.3" + checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a + languageName: node + linkType: hard + +"buffer@npm:^5.4.3": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"builtin-status-codes@npm:^3.0.0": + version: 3.0.0 + resolution: "builtin-status-codes@npm:3.0.0" + checksum: 1119429cf4b0d57bf76b248ad6f529167d343156ebbcc4d4e4ad600484f6bc63002595cbb61b67ad03ce55cd1d3c4711c03bbf198bf24653b8392420482f3773 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.3 + resolution: "cacache@npm:17.1.3" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 385756781e1e21af089160d89d7462b7ed9883c978e848c7075b90b73cb823680e66092d61513050164588387d2ca87dd6d910e28d64bc13a9ac82cd8580c796 + languageName: node + linkType: hard + +"cache-base@npm:^1.0.1": + version: 1.0.1 + resolution: "cache-base@npm:1.0.1" + 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 + checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001503": + version: 1.0.30001515 + resolution: "caniuse-lite@npm:1.0.30001515" + checksum: ec5d51785aea6af5cf62ca9d35821d36ab7fa0f85e3e7f752d532025ad59e07131fa3cb3a0a6c486b5ac8620c8c3440e761dc5b38c990d49c17655906f216123 + languageName: node + linkType: hard + +"chai@npm:^4.1.2": + version: 4.3.7 + resolution: "chai@npm:4.3.7" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.2 + deep-eql: ^4.1.2 + get-func-name: ^2.0.0 + loupe: ^2.3.1 + pathval: ^1.1.1 + type-detect: ^4.0.5 + checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c + languageName: node + linkType: hard + +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"check-error@npm:^1.0.2": + version: 1.0.2 + resolution: "check-error@npm:1.0.2" + checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e + languageName: node + linkType: hard + +"chokidar@npm:3.3.0": + version: 3.3.0 + resolution: "chokidar@npm:3.3.0" + dependencies: + anymatch: ~3.1.1 + braces: ~3.0.2 + fsevents: ~2.1.1 + glob-parent: ~5.1.0 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.2.0 + dependenciesMeta: + fsevents: + optional: true + checksum: e9863256ebb29dbc5e58a7e2637439814beb63b772686cb9e94478312c24dcaf3d0570220c5e75ea29029f43b664f9956d87b716120d38cf755f32124f047e8e + languageName: node + linkType: hard + +"chokidar@npm:^3.5.1": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + languageName: node + linkType: hard + +"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e + languageName: node + linkType: hard + +"class-utils@npm:^0.3.5": + version: 0.3.6 + resolution: "class-utils@npm:0.3.6" + dependencies: + arr-union: ^3.1.0 + define-property: ^0.2.5 + isobject: ^3.0.0 + static-extend: ^0.1.1 + checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cliui@npm:^5.0.0": + version: 5.0.0 + resolution: "cliui@npm:5.0.0" + dependencies: + string-width: ^3.1.0 + strip-ansi: ^5.2.0 + wrap-ansi: ^5.1.0 + checksum: 0bb8779efe299b8f3002a73619eaa8add4081eb8d1c17bc4fedc6240557fb4eacdc08fe87c39b002eacb6cfc117ce736b362dbfd8bf28d90da800e010ee97df4 + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"clone@npm:^2.1.1": + version: 2.1.2 + resolution: "clone@npm:2.1.2" + checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d + languageName: node + linkType: hard + +"collection-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "collection-visit@npm:1.0.0" + dependencies: + map-visit: ^1.0.0 + object-visit: ^1.0.0 + checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d + languageName: node + linkType: hard + +"combine-source-map@npm:^0.8.0": + version: 0.8.0 + resolution: "combine-source-map@npm:0.8.0" + dependencies: + convert-source-map: ~1.1.0 + inline-source-map: ~0.6.0 + lodash.memoize: ~3.0.3 + source-map: ~0.5.3 + checksum: 26b3064a4e58400e04089acbf5c8741c47db079706bb2fcd79a7768f99d68de9baf1eb48081cdfbc568e308633105af2aeaf52c73e388619ba1f56463fb73a2e + languageName: node + linkType: hard + +"commander@npm:2, commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 + languageName: node + linkType: hard + +"commander@npm:^9.4.1": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + languageName: node + linkType: hard + +"component-emitter@npm:^1.2.1": + version: 1.3.0 + resolution: "component-emitter@npm:1.3.0" + checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b + languageName: node + linkType: hard + +"compute-gcd@npm:^1.2.1": + version: 1.2.1 + resolution: "compute-gcd@npm:1.2.1" + dependencies: + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 + languageName: node + linkType: hard + +"compute-lcm@npm:^1.1.2": + version: 1.1.2 + resolution: "compute-lcm@npm:1.1.2" + dependencies: + compute-gcd: ^1.2.1 + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:~1.6.0": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^2.2.2 + typedarray: ^0.0.6 + checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 + languageName: node + linkType: hard + +"connect@npm:^3.7.0": + version: 3.7.0 + resolution: "connect@npm:3.7.0" + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: ~1.3.3 + utils-merge: 1.0.1 + checksum: 96e1c4effcf219b065c7823e57351c94366d2e2a6952fa95e8212bffb35c86f1d5a3f9f6c5796d4cd3a5fdda628368b1c3cc44bf19c66cfd68fe9f9cab9177e2 + languageName: node + linkType: hard + +"console-browserify@npm:^1.2.0": + version: 1.2.0 + resolution: "console-browserify@npm:1.2.0" + checksum: 226591eeff8ed68e451dffb924c1fb750c654d54b9059b3b261d360f369d1f8f70650adecf2c7136656236a4bfeb55c39281b5d8a55d792ebbb99efd3d848d52 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"constants-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "constants-browserify@npm:1.0.0" + checksum: f7ac8c6d0b6e4e0c77340a1d47a3574e25abd580bfd99ad707b26ff7618596cf1a5e5ce9caf44715e9e01d4a5d12cb3b4edaf1176f34c19adb2874815a56e64f + languageName: node + linkType: hard + +"content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.1, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:~1.1.0": + version: 1.1.3 + resolution: "convert-source-map@npm:1.1.3" + checksum: 0ed6bdecd330fd05941b417b63ebc9001b438f6d6681cd9a068617c3d4b649794dc35c95ba239d0a01f0b9499912b9e0d0d1b7c612e3669c57c65ce4bbc8fdd8 + languageName: node + linkType: hard + +"cookie@npm:~0.4.1": + version: 0.4.2 + resolution: "cookie@npm:0.4.2" + checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b + languageName: node + linkType: hard + +"copy-anything@npm:^2.0.1": + version: 2.0.6 + resolution: "copy-anything@npm:2.0.6" + dependencies: + is-what: ^3.14.1 + checksum: 7318dc00ca14f846d14fc886845cff63bf20a3c5f4fcdd31f68c40a213648c78a1093426947ac0f8f8577845e9a7a11eeaaeefb05d9a6f1b78ca5ec60c2aaf6e + languageName: node + linkType: hard + +"copy-descriptor@npm:^0.1.0": + version: 0.1.1 + resolution: "copy-descriptor@npm:0.1.1" + checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b + languageName: node + linkType: hard + +"core-js-compat@npm:^3.31.0": + version: 3.31.1 + resolution: "core-js-compat@npm:3.31.1" + dependencies: + browserslist: ^4.21.9 + checksum: 9a16d6992621f4e099169297381a28d5712cdef7df1fa85352a7c285a5885d5d7a117ec2eae9ad715ed88c7cc774787a22cdb8aceababf6775fbc8b0cbeccdb7 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cors@npm:~2.8.5": + version: 2.8.5 + resolution: "cors@npm:2.8.5" + dependencies: + object-assign: ^4 + vary: ^1 + checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 + languageName: node + linkType: hard + +"create-ecdh@npm:^4.0.0": + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" + dependencies: + bn.js: ^4.1.0 + elliptic: ^6.5.3 + checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: ^1.0.1 + inherits: ^2.0.1 + md5.js: ^1.3.4 + ripemd160: ^2.0.1 + sha.js: ^2.4.0 + checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": + version: 1.1.7 + resolution: "create-hmac@npm:1.1.7" + 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 + checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed + languageName: node + linkType: hard + +"cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: ^1.0.4 + path-key: ^2.0.1 + semver: ^5.5.0 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-browserify@npm:^3.12.0": + version: 3.12.0 + resolution: "crypto-browserify@npm:3.12.0" + 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 + checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 + languageName: node + linkType: hard + +"css-loader@npm:^5.0.0": + version: 5.2.7 + resolution: "css-loader@npm:5.2.7" + dependencies: + icss-utils: ^5.1.0 + loader-utils: ^2.0.0 + postcss: ^8.2.15 + postcss-modules-extract-imports: ^3.0.0 + postcss-modules-local-by-default: ^4.0.0 + postcss-modules-scope: ^3.0.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.1.0 + schema-utils: ^3.0.0 + semver: ^7.3.5 + peerDependencies: + webpack: ^4.27.0 || ^5.0.0 + checksum: fb0742b30ac0919f94b99a323bdefe6d48ae46d66c7d966aae59031350532f368f8bba5951fcd268f2e053c5e6e4655551076268e9073ccb58e453f98ae58f8e + languageName: node + linkType: hard + +"css-loader@npm:^6.7.1": + version: 6.8.1 + resolution: "css-loader@npm:6.8.1" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.21 + postcss-modules-extract-imports: ^3.0.0 + postcss-modules-local-by-default: ^4.0.3 + postcss-modules-scope: ^3.0.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.2.0 + semver: ^7.3.8 + peerDependencies: + webpack: ^5.0.0 + checksum: 7c1784247bdbe76dc5c55fb1ac84f1d4177a74c47259942c9cfdb7a8e6baef11967a0bc85ac285f26bd26d5059decb848af8154a03fdb4f4894f41212f45eef3 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"custom-event@npm:~1.0.0": + version: 1.0.1 + resolution: "custom-event@npm:1.0.1" + checksum: 334f48a6d5fb98df95c5f72cab2729417ffdcc74aebb1d51aa9220391bdee028ec36d9e19976a5a64f536e1e4aceb5bb4f0232d4761acc3e8fd74c54573959bd + languageName: node + linkType: hard + +"d3-array@npm:1, d3-array@npm:^1.1.1, d3-array@npm:^1.2.0": + version: 1.2.4 + resolution: "d3-array@npm:1.2.4" + checksum: d0be1fa7d72dbfac8a3bcffbb669d42bcb9128d8818d84d2b1df0c60bbe4c8e54a798be0457c55a219b399e2c2fabcbd581cbb130eb638b5436b0618d7e56000 + languageName: node + linkType: hard + +"d3-array@npm:2, d3-array@npm:^2.3.0, d3-array@npm:^2.4.0": + version: 2.12.1 + resolution: "d3-array@npm:2.12.1" + dependencies: + internmap: ^1.0.0 + checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb + languageName: node + linkType: hard + +"d3-axis@npm:1": + version: 1.0.12 + resolution: "d3-axis@npm:1.0.12" + checksum: b1cf820fb6e95cc3371b340353b05272dba16ce6ad4fe9a0992d075ab48a08810f87f5e6c7cbb6c63fca1ee1e9b7c822307a1590187daa7627f45728a747c746 + languageName: node + linkType: hard + +"d3-brush@npm:1": + version: 1.1.6 + resolution: "d3-brush@npm:1.1.6" + dependencies: + d3-dispatch: 1 + d3-drag: 1 + d3-interpolate: 1 + d3-selection: 1 + d3-transition: 1 + checksum: ffa23a5543699cc1199f45ac87d4e1293167c4bab0833657d77172d84d910448893569393290dba3689af1e5a1fc77503d94a2dec3976de8a7bc68ed0e32413a + languageName: node + linkType: hard + +"d3-chord@npm:1": + version: 1.0.6 + resolution: "d3-chord@npm:1.0.6" + dependencies: + d3-array: 1 + d3-path: 1 + checksum: e4ca95ffff089f0eccf796d16a5574121e0ecbe658dcd9d5fa760af3573c3349264ce325c0adf1f32bcad67038d3938edd109712166cfb5b3bbe068e27c012e9 + languageName: node + linkType: hard + +"d3-collection@npm:1": + version: 1.0.7 + resolution: "d3-collection@npm:1.0.7" + checksum: 9c6b910a9da0efb021e294509f98263ca4f62d10b997bb30ccfb6edd582b703da36e176b968b5bac815fbb0f328e49643c38cf93b5edf8572a179ba55cf4a09d + languageName: node + linkType: hard + +"d3-color@npm:1": + version: 1.4.1 + resolution: "d3-color@npm:1.4.1" + checksum: a214b61458b5fcb7ad1a84faed0e02918037bab6be37f2d437bf0e2915cbd854d89fbf93754f17b0781c89e39d46704633d05a2bfae77e6209f0f4b140f9894b + languageName: node + linkType: hard + +"d3-color@npm:1 - 2": + version: 2.0.0 + resolution: "d3-color@npm:2.0.0" + checksum: b887354aa383937abd04fbffed3e26e5d6a788472cd3737fb10735930e427763e69fe93398663bccf88c0b53ee3e638ac6fcf0c02226b00ed9e4327c2dfbf3dc + languageName: node + linkType: hard + +"d3-color@npm:^3.0.1": + version: 3.1.0 + resolution: "d3-color@npm:3.1.0" + checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b + languageName: node + linkType: hard + +"d3-contour@npm:1": + version: 1.3.2 + resolution: "d3-contour@npm:1.3.2" + dependencies: + d3-array: ^1.1.1 + checksum: c18a099a7f4af2adf788e96d07bfc7236661a6e40c017ef8e172fe0142561f3722f71263075c565a17b72e6cd6a2a05de3868fcc5420eb77b00d3a0179a69a0d + languageName: node + linkType: hard + +"d3-dispatch@npm:1": + version: 1.0.6 + resolution: "d3-dispatch@npm:1.0.6" + checksum: b4ecb016b6dda8b99aa4263b2d0a0c7b12e7dea93e4b0ce3013c94dca4d360d9ba00f5bdc15dc944cc4543af8e341067bd628f061f7b8deb642257e2ac90d06c + languageName: node + linkType: hard + +"d3-drag@npm:1": + version: 1.2.5 + resolution: "d3-drag@npm:1.2.5" + dependencies: + d3-dispatch: 1 + d3-selection: 1 + checksum: 6e86e89aa8d511979eea1b5326709c05c2a3c2d43a93a82ed6b6f98528b2ab03b2f58f5e4f66582f2f1c0ae44f9c19f6f4f857249eb66aabc46e4942295fa0a7 + languageName: node + linkType: hard + +"d3-dsv@npm:1": + version: 1.2.0 + resolution: "d3-dsv@npm:1.2.0" + dependencies: + commander: 2 + iconv-lite: 0.4 + rw: 1 + bin: + csv2json: bin/dsv2json + csv2tsv: bin/dsv2dsv + dsv2dsv: bin/dsv2dsv + dsv2json: bin/dsv2json + json2csv: bin/json2dsv + json2dsv: bin/json2dsv + json2tsv: bin/json2dsv + tsv2csv: bin/dsv2dsv + tsv2json: bin/dsv2json + checksum: 96c6e3d5ca1566624ca613b5941bc6fa916082cbe4b2b71cb6c5978c471db58c489b17206e3e31fbe30719dbd75e9c8ed8ab12a9d353cff90a35102690de7823 + languageName: node + linkType: hard + +"d3-ease@npm:1": + version: 1.0.7 + resolution: "d3-ease@npm:1.0.7" + checksum: 117811d51dfc4a126e8d23d249252df792fbbe30a93615e1d67158c482eff69b900e45a4cc92746fe65b1143287455406a89aae04eb4ca1ba5b1dc2a42af5b85 + languageName: node + linkType: hard + +"d3-fetch@npm:1": + version: 1.2.0 + resolution: "d3-fetch@npm:1.2.0" + dependencies: + d3-dsv: 1 + checksum: 00f091945bff4afbd06e6ce9ad762f0e91b7aac912c1ae7fe0efdbcce3a997d4fa2a93c254a3ba9b3f53f2134d606b20fb13791adbf5c6ed5c0be329a775945f + languageName: node + linkType: hard + +"d3-force@npm:1": + version: 1.2.1 + resolution: "d3-force@npm:1.2.1" + dependencies: + d3-collection: 1 + d3-dispatch: 1 + d3-quadtree: 1 + d3-timer: 1 + checksum: b73fe29d6c9a9c432ae65166d71238d14578a3a9537df095bebff87b7814161cd2822aff54a38d2400edb98b7f6d9221a810dcad7a53c6e8ddff0973f44ab3fa + languageName: node + linkType: hard + +"d3-format@npm:1": + version: 1.4.5 + resolution: "d3-format@npm:1.4.5" + checksum: 1b8b2c0bca182173bccd290a43e8b635a83fc8cfe52ec878c7bdabb997d47daac11f2b175cebbe73f807f782ad655f542bdfe18180ca5eb3498a3a82da1e06ab + languageName: node + linkType: hard + +"d3-format@npm:1 - 2": + version: 2.0.0 + resolution: "d3-format@npm:2.0.0" + checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7 + languageName: node + linkType: hard + +"d3-format@npm:^3.0.1": + version: 3.1.0 + resolution: "d3-format@npm:3.1.0" + checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 + languageName: node + linkType: hard + +"d3-geo-projection@npm:0.2": + version: 0.2.16 + resolution: "d3-geo-projection@npm:0.2.16" + dependencies: + brfs: ^1.3.0 + checksum: ccc6f3cdd883c3d7ed2cf081b9f774d7a508f7051378ddaa926609f891a5400857d4c8f49449138f56c0ef9603be52ca5ab6570ebef2a2563a877fede7ef6ed8 + languageName: node + linkType: hard + +"d3-geo@npm:1, d3-geo@npm:^1.11.9": + version: 1.12.1 + resolution: "d3-geo@npm:1.12.1" + dependencies: + d3-array: 1 + checksum: 8ede498e5fce65c127403646f5cc6181a858a1e401e23e2856ce50ad27e6fdf8b49aeb88d2fad02696879d5825a45420ca1b5db9fa9c935ee413fe15b5bc37c4 + languageName: node + linkType: hard + +"d3-hierarchy@npm:1": + version: 1.1.9 + resolution: "d3-hierarchy@npm:1.1.9" + checksum: 5fd8761c302252cb9abe9ce2a0934fc97104dd0df8d1b5de6472532903416f40e13b4b58d03ce215a0b816d7129c4ed4503bd4fdbc00a130fdcf46a63d734a52 + languageName: node + linkType: hard + +"d3-interpolate@npm:1": + version: 1.4.0 + resolution: "d3-interpolate@npm:1.4.0" + dependencies: + d3-color: 1 + checksum: d98988bd1e2f59d01f100d0a19315ad8f82ef022aa09a65aff76f747a44f9b52f2d64c6578b8f47e01f2b14a8f0ef88f5460d11173c0dd2d58238c217ac0ec03 + languageName: node + linkType: hard + +"d3-interpolate@npm:1.2.0 - 2": + version: 2.0.1 + resolution: "d3-interpolate@npm:2.0.1" + dependencies: + d3-color: 1 - 2 + checksum: 4a2018ac34fbcc3e0e7241e117087ca1b2274b8b33673913658623efacc5db013b8d876586d167b23e3145bdb34ec8e441d301299b082e1a90985b2f18d4299c + languageName: node + linkType: hard + +"d3-path@npm:1": + version: 1.0.9 + resolution: "d3-path@npm:1.0.9" + checksum: d4382573baf9509a143f40944baeff9fead136926aed6872f7ead5b3555d68925f8a37935841dd51f1d70b65a294fe35c065b0906fb6e42109295f6598fc16d0 + languageName: node + linkType: hard + +"d3-polygon@npm:1": + version: 1.0.6 + resolution: "d3-polygon@npm:1.0.6" + checksum: 4a9764c2064d15e9f4fc9018c975f127540f6e701c18442e2a2e9339e743726f40e017d5213982d983cac3c23802321c257f2a10e686c803ec5533c6ff42bb7a + languageName: node + linkType: hard + +"d3-quadtree@npm:1": + version: 1.0.7 + resolution: "d3-quadtree@npm:1.0.7" + checksum: 32181f578cbd69eed6b240073fed7f977f8039a121a3b9fc58ea1eea0c3c14d1237ef48cb4f80abb833063f8b0e7b885ef6de734e7bcc4e5b37e53ec444830f8 + languageName: node + linkType: hard + +"d3-queue@npm:1": + version: 1.2.3 + resolution: "d3-queue@npm:1.2.3" + checksum: ad51e90d25d42dc0edf86cec655fe8c98c4290320c14b574283abff7b880b1d792f33b34025b893fb893df9f8ebc4c413a448da2ebe09ac706561ee98c769124 + languageName: node + linkType: hard + +"d3-queue@npm:2": + version: 2.0.3 + resolution: "d3-queue@npm:2.0.3" + checksum: 40dff8453269f5e45ea6caef7035e53911369727b01e761bc587397dac74c0956df7543f58cfa66063f7f8a370067b59fdc2affde01210982be425bbe4145e03 + languageName: node + linkType: hard + +"d3-random@npm:1": + version: 1.1.2 + resolution: "d3-random@npm:1.1.2" + checksum: a27326319fa61d59b6ce8d5ce7547cc823dee1bc6dda35e9c233d709f43f76488c09353862463c9c5da99081482b0f7ea4177d78721b67bb677bb12354bffe42 + languageName: node + linkType: hard + +"d3-scale-chromatic@npm:1": + version: 1.5.0 + resolution: "d3-scale-chromatic@npm:1.5.0" + dependencies: + d3-color: 1 + d3-interpolate: 1 + checksum: 3bff7717f6e6b309b3347d48d6532e2295037a280bc5174f908ce5fc0e17a9470f6b202e49499b01a17a1f28cb76a61aae870a6c13c57195a362847f33747501 + languageName: node + linkType: hard + +"d3-scale@npm:2": + version: 2.2.2 + resolution: "d3-scale@npm:2.2.2" + dependencies: + d3-array: ^1.2.0 + d3-collection: 1 + d3-format: 1 + d3-interpolate: 1 + d3-time: 1 + d3-time-format: 2 + checksum: 42086d4b9db9f8492a99dbbdacf546983faef1bb6260fe875c0c1884f1ca9cf5fd233de3702c2f9e24145b1c5383945e929c8682d80fa57ab515ef2c4f2c61f6 + languageName: node + linkType: hard + +"d3-scale@npm:^3.2.1": + version: 3.3.0 + resolution: "d3-scale@npm:3.3.0" + dependencies: + d3-array: ^2.3.0 + d3-format: 1 - 2 + d3-interpolate: 1.2.0 - 2 + d3-time: ^2.1.1 + d3-time-format: 2 - 3 + checksum: f77e73f0fb422292211d0687914c30d26e29011a936ad2a535a868ae92f306c3545af1fe7ea5db1b3e67dbce7a6c6cd952e53d02d1d557543e7e5d30e30e52f2 + languageName: node + linkType: hard + +"d3-selection@npm:1, d3-selection@npm:^1, d3-selection@npm:^1.1.0": + version: 1.4.2 + resolution: "d3-selection@npm:1.4.2" + checksum: 2484b392259b087a98f546f2610e6a11c90f38dae6b6b20a3fc85171038fcab4c72e702788b1960a4fece88bed2e36f268096358b5b48d3c7f0d35cfbe305da6 + languageName: node + linkType: hard + +"d3-shape@npm:1": + version: 1.3.7 + resolution: "d3-shape@npm:1.3.7" + dependencies: + d3-path: 1 + checksum: 46566a3ab64a25023653bf59d64e81e9e6c987e95be985d81c5cedabae5838bd55f4a201a6b69069ca862eb63594cd263cac9034afc2b0e5664dfe286c866129 + languageName: node + linkType: hard + +"d3-time-format@npm:2": + version: 2.3.0 + resolution: "d3-time-format@npm:2.3.0" + dependencies: + d3-time: 1 + checksum: 5445eaaf2b3b2095cdc1fa75dfd2f361a61c39b677dcc1c2ba4cb6bc0442953de0fbaaa397d7d7a9325ad99c63d869f162a713e150e826ff8af482615664cb3f + languageName: node + linkType: hard + +"d3-time-format@npm:2 - 3": + version: 3.0.0 + resolution: "d3-time-format@npm:3.0.0" + dependencies: + d3-time: 1 - 2 + checksum: c20c1667dbea653f81d923e741f84c23e4b966002ba0d6ed94cbc70692105566e55e89d18d175404534a879383fd1123300bd12885a3c924fe924032bb0060db + languageName: node + linkType: hard + +"d3-time@npm:1": + version: 1.1.0 + resolution: "d3-time@npm:1.1.0" + checksum: 33fcfff94ff093dde2048c190ecca8b39fe0ec8b3c61e9fc39c5f6072ce5b86dd2b91823f086366995422bbbac7f74fd9abdb7efe4f292a73b1c6197c699cc78 + languageName: node + linkType: hard + +"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": + version: 2.1.1 + resolution: "d3-time@npm:2.1.1" + dependencies: + d3-array: 2 + checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6 + languageName: node + linkType: hard + +"d3-timer@npm:1": + version: 1.0.10 + resolution: "d3-timer@npm:1.0.10" + checksum: f7040953672deb2dfa03830ace80dbbcb212f80890218eba15dcca6f33f74102d943023ccc2a563295195cd8c63639bb2410ef1691c8fecff4a114fdf5c666f4 + languageName: node + linkType: hard + +"d3-transition@npm:1": + version: 1.3.2 + resolution: "d3-transition@npm:1.3.2" + dependencies: + d3-color: 1 + d3-dispatch: 1 + d3-ease: 1 + d3-interpolate: 1 + d3-selection: ^1.1.0 + d3-timer: 1 + checksum: 1b4a0cfa7aeb4033ab20e26a310488cfac989de44c6c2bf10e9f0808af915a33add6dca23fbafcefe8c08613fd0d6a933e48b4de24c0779163c2852a1c7c16f4 + languageName: node + linkType: hard + +"d3-voronoi@npm:1": + version: 1.1.4 + resolution: "d3-voronoi@npm:1.1.4" + checksum: d28a74bc62f2b936b0d3b51d5be8d2366afca4fd7026d7ee8f655600650bf0c985da38a8c3ae46bfa315b5f524f3ca1c5211437cf1c8c737cc1da681e015baee + languageName: node + linkType: hard + +"d3-zoom@npm:1": + version: 1.8.3 + resolution: "d3-zoom@npm:1.8.3" + dependencies: + d3-dispatch: 1 + d3-drag: 1 + d3-interpolate: 1 + d3-selection: 1 + d3-transition: 1 + checksum: de408e5dc6df1481ef6854a3d495f8e963dbf5b0de41bcbd35def0602abda55b3f2c1fa751c75c2f0a9bafd3b278f30795c27503fe609b3dbe06a0720d01d5be + languageName: node + linkType: hard + +"d3@npm:3": + version: 3.5.17 + resolution: "d3@npm:3.5.17" + checksum: 79b59275c36fa35a0af55f326bb56d65e14d71d44e96cbd05af767000af63c3ab8b3f479e2c25281afff7ba3f5858e272ded081e5d33807b005f217c4bfbd82d + languageName: node + linkType: hard + +"d3@npm:^5.7.0": + version: 5.16.0 + resolution: "d3@npm:5.16.0" + 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 + checksum: 1462789c421c3ea3930a18b91be6c02c7b976fa4d714200ee2a042c62cbfb349448c79f1ae3dbaf186f79edb734b7aa7b734ee6ad61d81ab4305e6663623ab8e + languageName: node + linkType: hard + +"data-urls@npm:^2.0.0": + version: 2.0.0 + resolution: "data-urls@npm:2.0.0" + dependencies: + abab: ^2.0.3 + whatwg-mimetype: ^2.3.0 + whatwg-url: ^8.0.0 + checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 + languageName: node + linkType: hard + +"date-format@npm:^4.0.14": + version: 4.0.14 + resolution: "date-format@npm:4.0.14" + checksum: dfe5139df6af5759b9dd3c007b899b3f60d45a9240ffeee6314ab74e6ab52e9b519a44ccf285888bdd6b626c66ee9b4c8a523075fa1140617b5beb1cbb9b18d1 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:3.2.6": + version: 3.2.6 + resolution: "debug@npm:3.2.6" + dependencies: + ms: ^2.1.1 + checksum: 07bc8b3a13ef3cfa6c06baf7871dfb174c291e5f85dbf566f086620c16b9c1a0e93bb8f1935ebbd07a683249e7e30286f2966e2ef461e8fd17b1b60732062d6b + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1, debug@npm:~4.3.2": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + languageName: node + linkType: hard + +"deep-eql@npm:^4.1.2": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": + version: 1.2.0 + resolution: "define-properties@npm:1.2.0" + dependencies: + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + languageName: node + linkType: hard + +"define-property@npm:^0.2.5": + version: 0.2.5 + resolution: "define-property@npm:0.2.5" + dependencies: + is-descriptor: ^0.1.0 + checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 + languageName: node + linkType: hard + +"define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "define-property@npm:1.0.0" + dependencies: + is-descriptor: ^1.0.0 + checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a + languageName: node + linkType: hard + +"define-property@npm:^2.0.2": + version: 2.0.2 + resolution: "define-property@npm:2.0.2" + dependencies: + is-descriptor: ^1.0.2 + isobject: ^3.0.1 + checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"depd@npm:2.0.0, depd@npm:^2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"des.js@npm:^1.0.0": + version: 1.1.0 + resolution: "des.js@npm:1.1.0" + dependencies: + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + checksum: 0e9c1584b70d31e20f20a613fc9ef60fbc6a147dfec9e448a168794a4b97ac04d8dc47ea008f1fa93b0f8aaf7c1ead632a5e59ce1913a6079d2d244c9f5ebe33 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + +"detect-file@npm:^1.0.0": + version: 1.0.0 + resolution: "detect-file@npm:1.0.0" + checksum: 1861e4146128622e847abe0e1ed80fef01e78532665858a792267adf89032b7a9c698436137707fcc6f02956c2a6a0052d6a0cef5be3d4b76b1ff0da88e2158a + languageName: node + linkType: hard + +"di@npm:^0.0.1": + version: 0.0.1 + resolution: "di@npm:0.0.1" + checksum: 3f09a99534d33e49264585db7f863ea8bc76c25c4d5a60df387c946018ecf1e1516b2c05a2092e5ca51fcdc08cefe609a6adc5253fa831626cb78cad4746505e + languageName: node + linkType: hard + +"diff@npm:3.5.0": + version: 3.5.0 + resolution: "diff@npm:3.5.0" + checksum: 00842950a6551e26ce495bdbce11047e31667deea546527902661f25cc2e73358967ebc78cf86b1a9736ec3e14286433225f9970678155753a6291c3bca5227b + languageName: node + linkType: hard + +"diff@npm:^4.0.1, diff@npm:^4.0.2": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"diffie-hellman@npm:^5.0.0": + version: 5.0.3 + resolution: "diffie-hellman@npm:5.0.3" + dependencies: + bn.js: ^4.1.0 + miller-rabin: ^4.0.0 + randombytes: ^2.0.0 + checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dom-serialize@npm:^2.2.1": + version: 2.2.1 + resolution: "dom-serialize@npm:2.2.1" + dependencies: + custom-event: ~1.0.0 + ent: ~2.2.0 + extend: ^3.0.0 + void-elements: ^2.0.0 + checksum: 48262e299a694dbfa32905ecceb29b89f2ce59adfc00cb676284f85ee0c8db0225e07961cbf9b06bf309291deebf52c958f855a5b6709d556000acf46d5a46ef + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domain-browser@npm:^4.16.0": + version: 4.22.0 + resolution: "domain-browser@npm:4.22.0" + checksum: e7ce1c19073e17dec35cfde050a3ddaac437d3ba8b870adabf9d5682e665eab3084df05de432dedf25b34303f0a2c71ac30f1cdba61b1aea018047b10de3d988 + languageName: node + linkType: hard + +"domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.1.0 + resolution: "domutils@npm:3.1.0" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 + languageName: node + linkType: hard + +"duplexer2@npm:~0.1.4": + version: 0.1.4 + resolution: "duplexer2@npm:0.1.4" + dependencies: + readable-stream: ^2.0.2 + checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 + languageName: node + linkType: hard + +"duplicate-package-checker-webpack-plugin@npm:^3.0.0": + version: 3.0.0 + resolution: "duplicate-package-checker-webpack-plugin@npm:3.0.0" + dependencies: + chalk: ^2.3.0 + find-root: ^1.0.0 + lodash: ^4.17.4 + semver: ^5.4.1 + checksum: d77be45cb72d79a429c64d8f8f7603fea681d182fb795459a3d4afa608faad9a923378a7e80c6855f465263e1983140b6fc3682bd0213228b8cd7906ab4b934d + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.431": + version: 1.4.459 + resolution: "electron-to-chromium@npm:1.4.459" + checksum: 2052797a639c131e459c7d8261506b52b277c3e9c0622a1171dcc9b9dc2293c3b2b43260687d320e89a2a82264521135a525c4ed97beba43f5507583d8c0d532 + languageName: node + linkType: hard + +"elliptic@npm:^6.5.3": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + dependencies: + bn.js: ^4.11.9 + brorand: ^1.1.0 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.1 + inherits: ^2.0.4 + minimalistic-assert: ^1.0.1 + minimalistic-crypto-utils: ^1.0.1 + checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 + languageName: node + linkType: hard + +"emoji-regex@npm:^7.0.1": + version: 7.0.3 + resolution: "emoji-regex@npm:7.0.3" + checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"engine.io-parser@npm:~5.1.0": + version: 5.1.0 + resolution: "engine.io-parser@npm:5.1.0" + checksum: a15fc0ba5d5fc5fb2c3029de1826538970463d0fa5c04d8dc2c72aabde92f1c923a9de409962490c3204da7245704286f9fb0ed4e5d71b55a6b035945f64c281 + languageName: node + linkType: hard + +"engine.io@npm:~6.5.0": + version: 6.5.1 + resolution: "engine.io@npm:6.5.1" + dependencies: + "@types/cookie": ^0.4.1 + "@types/cors": ^2.8.12 + "@types/node": ">=10.0.0" + accepts: ~1.3.4 + base64id: 2.0.0 + cookie: ~0.4.1 + cors: ~2.8.5 + debug: ~4.3.1 + engine.io-parser: ~5.1.0 + ws: ~8.11.0 + checksum: e902bbb3a484236edd6f0be89c14eb694cd905e727f88f3082a8b33ba23af9a71ca51e109b213962ccf836b02ba5bb9eea6f680a44d5008eb5b6aa2028d3bb7f + languageName: node + linkType: hard + +"enhanced-resolve@npm:^4.1.1": + version: 4.5.0 + resolution: "enhanced-resolve@npm:4.5.0" + dependencies: + graceful-fs: ^4.1.2 + memory-fs: ^0.5.0 + tapable: ^1.0.0 + checksum: 4d87488584c4d67d356ef4ba04978af4b2d4d18190cb859efac8e8475a34d5d6c069df33faa5a0a22920b0586dbf330f6a08d52bb15a8771a9ce4d70a2da74ba + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.15.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 + languageName: node + linkType: hard + +"enquirer@npm:^2.3.5": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: ^4.1.1 + checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 + languageName: node + linkType: hard + +"ent@npm:~2.2.0": + version: 2.2.0 + resolution: "ent@npm:2.2.0" + checksum: f588b5707d6fef36011ea10d530645912a69530a1eb0831f8708c498ac028363a7009f45cfadd28ceb4dafd9ac17ec15213f88d09ce239cd033cfe1328dd7d7d + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3": + version: 7.10.0 + resolution: "envinfo@npm:7.10.0" + bin: + envinfo: dist/cli.js + checksum: 05e81a5768c42cbd5c580dc3f274db3401facadd53e9bd52e2aa49dfbb5d8b26f6181c25a6652d79618a6994185bd2b1c137673101690b147f758e4e71d42f7d + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"errno@npm:^0.1.1, errno@npm:^0.1.3": + version: 0.1.8 + resolution: "errno@npm:0.1.8" + dependencies: + prr: ~1.0.1 + bin: + errno: cli.js + checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2": + version: 1.21.3 + resolution: "es-abstract@npm:1.21.3" + dependencies: + array-buffer-byte-length: ^1.0.0 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.5 + get-intrinsic: ^1.2.1 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.10 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.0 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.7 + string.prototype.trimend: ^1.0.6 + string.prototype.trimstart: ^1.0.6 + typed-array-byte-offset: ^1.0.0 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.10 + checksum: 4c5ee900699030a629fc224a3595dcd05f9ff31d607e72bc9042d15e3b1bfde99f408c940b622e96439e755a7b23a3b9e47f3be234015750d32dad38b8f772f4 + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.3.0 + resolution: "es-module-lexer@npm:1.3.0" + checksum: 48fd9f504a9d2a894126f75c8b7ccc6273a289983e9b67255f165bfd9ae765d50100218251e94e702ca567826905ea2f7b3b4a0c4d74d3ce99cce3a2a606a238 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"es6-object-assign@npm:^1.1.0": + version: 1.1.0 + resolution: "es6-object-assign@npm:1.1.0" + checksum: 8d4fdf63484d78b5c64cacc2c2e1165bc7b6a64b739d2a9db6a4dc8641d99cc9efb433cdd4dc3d3d6b00bfa6ce959694e4665e3255190339945c5f33b692b5d8 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + +"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^1.11.1": + version: 1.14.3 + resolution: "escodegen@npm:1.14.3" + dependencies: + esprima: ^4.0.1 + estraverse: ^4.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 + languageName: node + linkType: hard + +"escodegen@npm:~1.9.0": + version: 1.9.1 + resolution: "escodegen@npm:1.9.1" + dependencies: + esprima: ^3.1.3 + estraverse: ^4.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: ./bin/escodegen.js + esgenerate: ./bin/esgenerate.js + checksum: 628dae3d486db2428d2349960c0e5c523e3941582c481030fbc851577c512f1216d09e89711ef5234e9c4b81a2ff089e5231c17ee86eb093b1d9706d3491f3d0 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.1.0": + version: 8.8.0 + resolution: "eslint-config-prettier@npm:8.8.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c + languageName: node + linkType: hard + +"eslint-config-standard@npm:^16.0.2": + version: 16.0.3 + resolution: "eslint-config-standard@npm:16.0.3" + peerDependencies: + eslint: ^7.12.1 + eslint-plugin-import: ^2.22.1 + eslint-plugin-node: ^11.1.0 + eslint-plugin-promise: ^4.2.1 || ^5.0.0 + checksum: 6ae193634f289ae95dbbf2291dc1e7c5bedef2425c594db07ec58476c902e6eb51a2b1c9cd2bad3772e921f5515dc2f8fb5447f7a56c20c99801ef1296c3bfef + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.7": + version: 0.3.7 + resolution: "eslint-import-resolver-node@npm:0.3.7" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.11.0 + resolve: ^1.22.1 + checksum: 3379aacf1d2c6952c1b9666c6fa5982c3023df695430b0d391c0029f6403a7775414873d90f397e98ba6245372b6c8960e16e74d9e4a3b0c0a4582f3bdbe3d6e + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.7.4": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 + languageName: node + linkType: hard + +"eslint-plugin-es@npm:^3.0.0": + version: 3.0.1 + resolution: "eslint-plugin-es@npm:3.0.1" + dependencies: + eslint-utils: ^2.0.0 + regexpp: ^3.0.0 + peerDependencies: + eslint: ">=4.19.1" + checksum: e57592c52301ee8ddc296ae44216df007f3a870bcb3be8d1fbdb909a1d3a3efe3fa3785de02066f9eba1d6466b722d3eb3cc3f8b75b3cf6a1cbded31ac6298e4 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.22.1": + version: 2.27.5 + resolution: "eslint-plugin-import@npm:2.27.5" + dependencies: + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + array.prototype.flatmap: ^1.3.1 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.7 + eslint-module-utils: ^2.7.4 + has: ^1.0.3 + is-core-module: ^2.11.0 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.values: ^1.1.6 + resolve: ^1.22.1 + semver: ^6.3.0 + tsconfig-paths: ^3.14.1 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: f500571a380167e25d72a4d925ef9a7aae8899eada57653e5f3051ec3d3c16d08271fcefe41a30a9a2f4fefc232f066253673ee4ea77b30dba65ae173dade85d + languageName: node + linkType: hard + +"eslint-plugin-node@npm:^11.1.0": + version: 11.1.0 + resolution: "eslint-plugin-node@npm:11.1.0" + dependencies: + eslint-plugin-es: ^3.0.0 + eslint-utils: ^2.0.0 + ignore: ^5.1.1 + minimatch: ^3.0.4 + resolve: ^1.10.1 + semver: ^6.1.0 + peerDependencies: + eslint: ">=5.16.0" + checksum: 5804c4f8a6e721f183ef31d46fbe3b4e1265832f352810060e0502aeac7de034df83352fc88643b19641bb2163f2587f1bd4119aff0fd21e8d98c57c450e013b + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^3.3.1": + version: 3.4.1 + resolution: "eslint-plugin-prettier@npm:3.4.1" + dependencies: + prettier-linter-helpers: ^1.0.0 + peerDependencies: + eslint: ">=5.0.0" + prettier: ">=1.13.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: fa6a89f0d7cba1cc87064352f5a4a68dc3739448dd279bec2bced1bfa3b704467e603d13b69dcec853f8fa30b286b8b715912898e9da776e1b016cf0ee48bd99 + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:^4.2.1": + version: 4.3.1 + resolution: "eslint-plugin-promise@npm:4.3.1" + checksum: 3a6f4180008bb3b7106371ed49060c9bca06ba5cffa82fb249f83d2c4fcf94bbefd468a837bff1164dd52066fe1be7ff2d126b212aaa8fe13e681916e78b1618 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d + languageName: node + linkType: hard + +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + +"eslint@npm:^7.22.0": + version: 7.32.0 + resolution: "eslint@npm:7.32.0" + dependencies: + "@babel/code-frame": 7.12.11 + "@eslint/eslintrc": ^0.4.3 + "@humanwhocodes/config-array": ^0.5.0 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.0.1 + doctrine: ^3.0.0 + enquirer: ^2.3.5 + escape-string-regexp: ^4.0.0 + eslint-scope: ^5.1.1 + eslint-utils: ^2.1.0 + eslint-visitor-keys: ^2.0.0 + espree: ^7.3.1 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^5.1.2 + globals: ^13.6.0 + ignore: ^4.0.6 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^3.13.1 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.0.4 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + progress: ^2.0.0 + regexpp: ^3.1.0 + semver: ^7.2.1 + strip-ansi: ^6.0.0 + strip-json-comments: ^3.1.0 + table: ^6.0.9 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 + languageName: node + linkType: hard + +"espree@npm:^7.3.0, espree@npm:^7.3.1": + version: 7.3.1 + resolution: "espree@npm:7.3.1" + dependencies: + acorn: ^7.4.0 + acorn-jsx: ^5.3.1 + eslint-visitor-keys: ^1.3.0 + checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45 + languageName: node + linkType: hard + +"esprima@npm:^3.1.3": + version: 3.1.3 + resolution: "esprima@npm:3.1.3" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 2771c059aa61f2b2fe9d898f11c737c45c26eae6052908f1e2b8bd91c6a440607420f2679cbfd6cbb79f2fa502b37a3053048d287bcd30ea582d46c969fcf67e + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.4.0": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": + version: 1.0.3 + resolution: "evp_bytestokey@npm:1.0.3" + dependencies: + md5.js: ^1.3.4 + node-gyp: latest + safe-buffer: ^5.1.1 + checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 + languageName: node + linkType: hard + +"expand-brackets@npm:^2.1.4": + version: 2.1.4 + resolution: "expand-brackets@npm:2.1.4" + 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 + checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 + languageName: node + linkType: hard + +"expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2": + version: 2.0.2 + resolution: "expand-tilde@npm:2.0.2" + dependencies: + homedir-polyfill: ^1.0.1 + checksum: 2efe6ed407d229981b1b6ceb552438fbc9e5c7d6a6751ad6ced3e0aa5cf12f0b299da695e90d6c2ac79191b5c53c613e508f7149e4573abfbb540698ddb7301a + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: ^0.1.0 + checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 + languageName: node + linkType: hard + +"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": + version: 3.0.2 + resolution: "extend-shallow@npm:3.0.2" + dependencies: + assign-symbols: ^1.0.0 + is-extendable: ^1.0.1 + checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 + languageName: node + linkType: hard + +"extend@npm:^3.0.0": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"extglob@npm:^2.0.4": + version: 2.0.4 + resolution: "extglob@npm:2.0.4" + 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 + checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 + languageName: node + linkType: hard + +"falafel@npm:^2.1.0": + version: 2.2.5 + resolution: "falafel@npm:2.2.5" + dependencies: + acorn: ^7.1.1 + isarray: ^2.0.1 + checksum: bfd46e92bca87670fd2ef31c6123088431271f98f3b2a300a58e9c3e5f4f9944f0058f7daaaaa8cefd68d461a334bd528c952bcec17061522b68b61f7925b382 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.0 + resolution: "fast-glob@npm:3.3.0" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 20df62be28eb5426fe8e40e0d05601a63b1daceb7c3d87534afcad91bdcf1e4b1743cf2d5247d6e225b120b46df0b9053a032b2691ba34ee121e033acd81f547 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"fill-range@npm:^4.0.0": + version: 4.0.0 + resolution: "fill-range@npm:4.0.0" + dependencies: + extend-shallow: ^2.0.1 + is-number: ^3.0.0 + repeat-string: ^1.6.1 + to-regex-range: ^2.1.0 + checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"finalhandler@npm:1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + 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 + checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e + languageName: node + linkType: hard + +"find-root@npm:^1.0.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + +"find-up@npm:3.0.0, find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"findup-sync@npm:^3.0.0": + version: 3.0.0 + resolution: "findup-sync@npm:3.0.0" + dependencies: + detect-file: ^1.0.0 + is-glob: ^4.0.0 + micromatch: ^3.0.4 + resolve-dir: ^1.0.1 + checksum: cafd706255f3c0e3491e4ee2eb9e585e6e76999bdc50e1ecde6d4ef7316d8dbcae77eb49d27b1f61ff011971933de43e90cb7cb535620b2616eb2ff89baf9347 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.0.4 + resolution: "flat-cache@npm:3.0.4" + dependencies: + flatted: ^3.1.0 + rimraf: ^3.0.2 + checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + languageName: node + linkType: hard + +"flat@npm:^4.1.0": + version: 4.1.1 + resolution: "flat@npm:4.1.1" + dependencies: + is-buffer: ~2.0.3 + bin: + flat: cli.js + checksum: 398be12185eb0f3c59797c3670a8c35d07020b673363175676afbaf53d6b213660e060488554cf82c25504986e1a6059bdbcc5d562e87ca3e972e8a33148e3ae + languageName: node + linkType: hard + +"flatted@npm:^3.1.0, flatted@npm:^3.2.7": + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"for-in@npm:^1.0.2": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"fragment-cache@npm:^0.2.1": + version: 0.2.1 + resolution: "fragment-cache@npm:0.2.1" + dependencies: + map-cache: ^0.2.2 + checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.2 + resolution: "fs-minipass@npm:3.0.2" + dependencies: + minipass: ^5.0.0 + checksum: e9cc0e1f2d01c6f6f62f567aee59530aba65c6c7b2ae88c5027bc34c711ebcfcfaefd0caf254afa6adfe7d1fba16bc2537508a6235196bac7276747d078aef0a + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.1.1": + version: 2.1.3 + resolution: "fsevents@npm:2.1.3" + dependencies: + node-gyp: latest + checksum: b5ec0516b44d75b60af5c01ff80a80cd995d175e4640d2a92fbabd02991dd664d76b241b65feef0775c23d531c3c74742c0fbacd6205af812a9c3cef59f04292 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.1.1#~builtin": + version: 2.1.3 + resolution: "fsevents@patch:fsevents@npm%3A2.1.3#~builtin::version=2.1.3&hash=31d12a" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.5": + version: 1.1.5 + resolution: "function.prototype.name@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + functions-have-names: ^1.2.2 + checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + languageName: node + linkType: hard + +"get-value@npm:^2.0.3, get-value@npm:^2.0.6": + version: 2.0.6 + resolution: "get-value@npm:2.0.6" + checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + +"glob@npm:7.1.3": + version: 7.1.3 + resolution: "glob@npm:7.1.3" + 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 + checksum: d72a834a393948d6c4a5cacc6a29fe5fe190e1cd134e55dfba09aee0be6fe15be343e96d8ec43558ab67ff8af28e4420c7f63a4d4db1c779e515015e9c318616 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.3 + resolution: "glob@npm:10.3.3" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.0.3 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/cjs/src/bin.js + checksum: 29190d3291f422da0cb40b77a72fc8d2c51a36524e99b8bf412548b7676a6627489528b57250429612b6eec2e6fe7826d328451d3e694a9d15e575389308ec53 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"glob@npm:~7.1.6": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + 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 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + +"global-modules@npm:^1.0.0": + version: 1.0.0 + resolution: "global-modules@npm:1.0.0" + dependencies: + global-prefix: ^1.0.1 + is-windows: ^1.0.1 + resolve-dir: ^1.0.0 + checksum: 10be68796c1e1abc1e2ba87ec4ea507f5629873b119ab0cd29c07284ef2b930f1402d10df01beccb7391dedd9cd479611dd6a24311c71be58937beaf18edf85e + languageName: node + linkType: hard + +"global-modules@npm:^2.0.0": + version: 2.0.0 + resolution: "global-modules@npm:2.0.0" + dependencies: + global-prefix: ^3.0.0 + checksum: d6197f25856c878c2fb5f038899f2dca7cbb2f7b7cf8999660c0104972d5cfa5c68b5a0a77fa8206bb536c3903a4615665acb9709b4d80846e1bb47eaef65430 + languageName: node + linkType: hard + +"global-prefix@npm:^1.0.1": + version: 1.0.2 + resolution: "global-prefix@npm:1.0.2" + dependencies: + expand-tilde: ^2.0.2 + homedir-polyfill: ^1.0.1 + ini: ^1.3.4 + is-windows: ^1.0.1 + which: ^1.2.14 + checksum: 061b43470fe498271bcd514e7746e8a8535032b17ab9570517014ae27d700ff0dca749f76bbde13ba384d185be4310d8ba5712cb0e74f7d54d59390db63dd9a0 + languageName: node + linkType: hard + +"global-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "global-prefix@npm:3.0.0" + dependencies: + ini: ^1.3.5 + kind-of: ^6.0.2 + which: ^1.3.1 + checksum: 8a82fc1d6f22c45484a4e34656cc91bf021a03e03213b0035098d605bfc612d7141f1e14a21097e8a0413b4884afd5b260df0b6a25605ce9d722e11f1df2881d + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.6.0, globals@npm:^13.9.0": + version: 13.20.0 + resolution: "globals@npm:13.20.0" + dependencies: + type-fest: ^0.20.2 + checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + languageName: node + linkType: hard + +"globby@npm:^11.0.3": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"growl@npm:1.10.5": + version: 1.10.5 + resolution: "growl@npm:1.10.5" + checksum: 4b86685de6831cebcbb19f93870bea624afee61124b0a20c49017013987cd129e73a8c4baeca295728f41d21265e1f859d25ef36731b142ca59c655fea94bb1a + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has-value@npm:^0.3.1": + version: 0.3.1 + resolution: "has-value@npm:0.3.1" + dependencies: + get-value: ^2.0.3 + has-values: ^0.1.4 + isobject: ^2.0.0 + checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f + languageName: node + linkType: hard + +"has-value@npm:^1.0.0": + version: 1.0.0 + resolution: "has-value@npm:1.0.0" + dependencies: + get-value: ^2.0.6 + has-values: ^1.0.0 + isobject: ^3.0.0 + checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 + languageName: node + linkType: hard + +"has-values@npm:^0.1.4": + version: 0.1.4 + resolution: "has-values@npm:0.1.4" + checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc + languageName: node + linkType: hard + +"has-values@npm:^1.0.0": + version: 1.0.0 + resolution: "has-values@npm:1.0.0" + dependencies: + is-number: ^3.0.0 + kind-of: ^4.0.0 + checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 + languageName: node + linkType: hard + +"has@npm:^1.0.1, has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + languageName: node + linkType: hard + +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + +"he@npm:1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + +"homedir-polyfill@npm:^1.0.1": + version: 1.0.3 + resolution: "homedir-polyfill@npm:1.0.3" + dependencies: + parse-passwd: ^1.0.0 + checksum: 18dd4db87052c6a2179d1813adea0c4bfcfa4f9996f0e226fefb29eb3d548e564350fa28ec46b0bf1fbc0a1d2d6922ceceb80093115ea45ff8842a4990139250 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.0": + version: 8.0.2 + resolution: "htmlparser2@npm:8.0.2" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + entities: ^4.4.0 + checksum: 29167a0f9282f181da8a6d0311b76820c8a59bc9e3c87009e21968264c2987d2723d6fde5a964d4b7b6cba663fca96ffb373c06d8223a85f52a6089ced942700 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + +"https-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "https-browserify@npm:1.0.0" + checksum: 09b35353e42069fde2435760d13f8a3fb7dd9105e358270e2e225b8a94f811b461edd17cb57594e5f36ec1218f121c160ddceeec6e8be2d55e01dcbbbed8cbae + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:0.2": + version: 0.2.11 + resolution: "iconv-lite@npm:0.2.11" + checksum: 69c4523f28e6e2943a2286e2dbd3a354ed0523cbd8d6d8c224bb20bb035ce0c90470d474a06afc89bc2b280632b9404ee948a3aec01dfe82bf0f0979579825ba + languageName: node + linkType: hard + +"iconv-lite@npm:0.4, iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore@npm:^4.0.6": + version: 4.0.6 + resolution: "ignore@npm:4.0.6" + checksum: 248f82e50a430906f9ee7f35e1158e3ec4c3971451dd9f99c9bc1548261b4db2b99709f60ac6c6cac9333494384176cc4cc9b07acbe42d52ac6a09cad734d800 + languageName: node + linkType: hard + +"ignore@npm:^5.1.1, ignore@npm:^5.1.8, ignore@npm:^5.2.0": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"image-size@npm:~0.5.0": + version: 0.5.5 + resolution: "image-size@npm:0.5.5" + bin: + image-size: bin/image-size.js + checksum: 6709d5cb73e96d5097ae5e9aa746dd36d6a9c8cf645e7eecac72ea07dbd6f312a65183752762fa92e2f3b698d4ed8d85dd55bf5207b6367245996bd16576d8fe + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-local@npm:^2.0.0": + version: 2.0.0 + resolution: "import-local@npm:2.0.0" + dependencies: + pkg-dir: ^3.0.0 + resolve-cwd: ^2.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: b8469252483624379fd65d53c82f3658b32a1136f7168bfeea961a4ea7ca10a45786ea2b02e0006408f9cd22d2f33305a6f17a64e4d5a03274a50942c5e7c949 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^1.3.4, ini@npm:^1.3.5": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"inline-source-map@npm:~0.6.0": + version: 0.6.2 + resolution: "inline-source-map@npm:0.6.2" + dependencies: + source-map: ~0.5.3 + checksum: 1f7fa2ad1764d03a0a525d5c47993f9e3d0445f29c2e2413d2878deecb6ecb1e6f9137a6207e3db8dc129565bde15de88c1ba2665407e753e7f3ec768ca29262 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" + dependencies: + get-intrinsic: ^1.2.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + languageName: node + linkType: hard + +"internmap@npm:^1.0.0": + version: 1.0.1 + resolution: "internmap@npm:1.0.1" + checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 + languageName: node + linkType: hard + +"interpret@npm:^1.4.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-accessor-descriptor@npm:^0.1.6": + version: 0.1.6 + resolution: "is-accessor-descriptor@npm:0.1.6" + dependencies: + kind-of: ^3.0.2 + checksum: 3d629a086a9585bc16a83a8e8a3416f400023301855cafb7ccc9a1d63145b7480f0ad28877dcc2cce09492c4ec1c39ef4c071996f24ee6ac626be4217b8ffc8a + languageName: node + linkType: hard + +"is-accessor-descriptor@npm:^1.0.0": + version: 1.0.0 + resolution: "is-accessor-descriptor@npm:1.0.0" + dependencies: + kind-of: ^6.0.0 + checksum: 8e475968e9b22f9849343c25854fa24492dbe8ba0dea1a818978f9f1b887339190b022c9300d08c47fe36f1b913d70ce8cbaca00369c55a56705fdb7caed37fe + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-buffer@npm:^1.1.5": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 + languageName: node + linkType: hard + +"is-buffer@npm:~2.0.3": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.12.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: ^1.0.3 + checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 + languageName: node + linkType: hard + +"is-data-descriptor@npm:^0.1.4": + version: 0.1.4 + resolution: "is-data-descriptor@npm:0.1.4" + dependencies: + kind-of: ^3.0.2 + checksum: 5c622e078ba933a78338ae398a3d1fc5c23332b395312daf4f74bab4afb10d061cea74821add726cb4db8b946ba36217ee71a24fe71dd5bca4632edb7f6aad87 + languageName: node + linkType: hard + +"is-data-descriptor@npm:^1.0.0": + version: 1.0.0 + resolution: "is-data-descriptor@npm:1.0.0" + dependencies: + kind-of: ^6.0.0 + checksum: e705e6816241c013b05a65dc452244ee378d1c3e3842bd140beabe6e12c0d700ef23c91803f971aa7b091fb0573c5da8963af34a2b573337d87bc3e1f53a4e6d + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-descriptor@npm:^0.1.0": + version: 0.1.6 + resolution: "is-descriptor@npm:0.1.6" + dependencies: + is-accessor-descriptor: ^0.1.6 + is-data-descriptor: ^0.1.4 + kind-of: ^5.0.0 + checksum: 0f780c1b46b465f71d970fd7754096ffdb7b69fd8797ca1f5069c163eaedcd6a20ec4a50af669075c9ebcfb5266d2e53c8b227e485eefdb0d1fee09aa1dd8ab6 + languageName: node + linkType: hard + +"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": + version: 1.0.2 + resolution: "is-descriptor@npm:1.0.2" + dependencies: + is-accessor-descriptor: ^1.0.0 + is-data-descriptor: ^1.0.0 + kind-of: ^6.0.2 + checksum: 2ed623560bee035fb67b23e32ce885700bef8abe3fbf8c909907d86507b91a2c89a9d3a4d835a4d7334dd5db0237a0aeae9ca109c1e4ef1c0e7b577c0846ab5a + languageName: node + linkType: hard + +"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 + languageName: node + linkType: hard + +"is-extendable@npm:^1.0.1": + version: 1.0.1 + resolution: "is-extendable@npm:1.0.1" + dependencies: + is-plain-object: ^2.0.4 + checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-nan@npm:^1.2.1": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + checksum: 5dfadcef6ad12d3029d43643d9800adbba21cf3ce2ec849f734b0e14ee8da4070d82b15fdb35138716d02587c6578225b9a22779cab34888a139cc43e4e3610a + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^3.0.0": + version: 3.0.0 + resolution: "is-number@npm:3.0.0" + dependencies: + kind-of: ^3.0.2 + checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 + languageName: node + linkType: hard + +"is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-what@npm:^3.14.1": + version: 3.14.1 + resolution: "is-what@npm:3.14.1" + checksum: a9a6ce92d33799f1ae0916c7afb6f8128a23ce9d28bd69d9ec3ec88910e7a1f68432e6236c3c8a4d544cf0b864675e5d828437efde60ee0cf8102061d395c1df + languageName: node + linkType: hard + +"is-windows@npm:^1.0.1, is-windows@npm:^1.0.2": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + languageName: node + linkType: hard + +"isarray@npm:1.0.0, isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isarray@npm:^2.0.1, isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + +"isbinaryfile@npm:^4.0.8": + version: 4.0.10 + resolution: "isbinaryfile@npm:4.0.10" + checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isobject@npm:^2.0.0": + version: 2.1.0 + resolution: "isobject@npm:2.1.0" + dependencies: + isarray: 1.0.0 + checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f + languageName: node + linkType: hard + +"isobject@npm:^3.0.0, isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"isomorphic.js@npm:^0.2.4": + version: 0.2.5 + resolution: "isomorphic.js@npm:0.2.5" + checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^4.0.0": + version: 4.0.3 + resolution: "istanbul-lib-instrument@npm:4.0.3" + dependencies: + "@babel/core": ^7.7.5 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.0.0 + semver: ^6.3.0 + checksum: fa1171d3022b1bb8f6a734042620ac5d9ee7dc80f3065a0bb12863e9f0494d0eefa3d86608fcc0254ab2765d29d7dad8bdc42e5f8df2f9a1fbe85ccc59d76cb9 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.0.0": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + languageName: node + linkType: hard + +"jackspeak@npm:^2.0.3": + version: 2.2.1 + resolution: "jackspeak@npm:2.2.1" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + +"jquery@npm:^3.1.1": + version: 3.7.0 + resolution: "jquery@npm:3.7.0" + checksum: 907785e133afc427650a131af5fccef66a404885037513b3d4d7d63aee6409bcc32a39836868c60e59b05aa0fb8ace8961c18b2ee3ffdf6ffdb571d6d7cd88ff + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:3.13.1": + version: 3.13.1 + resolution: "js-yaml@npm:3.13.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: 7511b764abb66d8aa963379f7d2a404f078457d106552d05a7b556d204f7932384e8477513c124749fa2de52eb328961834562bd09924902c6432e40daa408bc + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-compare@npm:^0.2.2": + version: 0.2.2 + resolution: "json-schema-compare@npm:0.2.2" + dependencies: + lodash: ^4.17.4 + checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c + languageName: node + linkType: hard + +"json-schema-merge-allof@npm:^0.8.1": + version: 0.8.1 + resolution: "json-schema-merge-allof@npm:0.8.1" + dependencies: + compute-lcm: ^1.1.2 + json-schema-compare: ^0.2.2 + lodash: ^4.17.20 + checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^1.0.1, json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + +"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.1": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c + languageName: node + linkType: hard + +"just-extend@npm:^4.0.2": + version: 4.2.1 + resolution: "just-extend@npm:4.2.1" + checksum: ff9fdede240fad313efeeeb68a660b942e5586d99c0058064c78884894a2690dc09bba44c994ad4e077e45d913fef01a9240c14a72c657b53687ac58de53b39c + languageName: node + linkType: hard + +"karma-chai@npm:^0.1.0": + version: 0.1.0 + resolution: "karma-chai@npm:0.1.0" + peerDependencies: + chai: "*" + karma: ">=0.10.9" + checksum: 7fae0b4acea35121218c5284e49c7a0e4ad5806abca50ee1451e314e63b4e7b72aaccda90a78d0099cc3a02eb07ebea92cc8877b74cfd62db52fe7bb0907a287 + languageName: node + linkType: hard + +"karma-chrome-launcher@npm:^3.1.0": + version: 3.2.0 + resolution: "karma-chrome-launcher@npm:3.2.0" + dependencies: + which: ^1.2.1 + checksum: e1119e4f95dbcdaec937e5d15a9ffea1b7e5c1d7566f7074ff140161983d4a0821ad274d3dcc34aacfb792caf842a39c459ba9c263723faa6a060cca8692d9b7 + languageName: node + linkType: hard + +"karma-mocha-reporter@npm:^2.2.5": + version: 2.2.5 + resolution: "karma-mocha-reporter@npm:2.2.5" + dependencies: + chalk: ^2.1.0 + log-symbols: ^2.1.0 + strip-ansi: ^4.0.0 + peerDependencies: + karma: ">=0.13" + checksum: 8b9e43c64bc975d38c18958d7ba95baf9a8d23f11ee4641955fe0ae5e8bd563596c8965d6f290ce8c73c4832fb98bb7ed5fbbaa82b49273d2ca24aa7f3d0d5e5 + languageName: node + linkType: hard + +"karma-mocha@npm:^2.0.0": + version: 2.0.1 + resolution: "karma-mocha@npm:2.0.1" + dependencies: + minimist: ^1.2.3 + checksum: a09f4758758a899fb97836660624ccd1769325e05f6efca63c9132806cc8dfeb20eaf78b3bc4db7921dcb3c48384fbfd5cddfa3568ddaf00197c75852ec9b480 + languageName: node + linkType: hard + +"karma-sinon@npm:^1.0.5": + version: 1.0.5 + resolution: "karma-sinon@npm:1.0.5" + peerDependencies: + karma: ">=0.10" + sinon: "*" + checksum: 86ee1ec40d5cb2c9c9ff6bc1cfd6aabd310e28d1a140d06322a2769e89d27eb699feab3610633d0cfabf4f302e14c48c332b588da3c0bab710a78f3d04138774 + languageName: node + linkType: hard + +"karma-sourcemap-loader@npm:^0.3.7": + version: 0.3.8 + resolution: "karma-sourcemap-loader@npm:0.3.8" + dependencies: + graceful-fs: ^4.1.2 + checksum: 12e21849af695f4aaa012752128b494e8b4b601c8d910212253d153b92153017364ad99f9ed86d58578ce44a7e53e9498ebd329950f1d0f0290bb90f4fea6d2c + languageName: node + linkType: hard + +"karma-typescript-es6-transform@npm:^5.0.2": + version: 5.5.4 + resolution: "karma-typescript-es6-transform@npm:5.5.4" + dependencies: + "@babel/core": ^7.11.1 + "@babel/preset-env": ^7.11.0 + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + log4js: ^6.3.0 + magic-string: ^0.25.7 + checksum: eb7008f418ebef113072bd0cbca91163bcfe7ab261e8665ee504a0f13a206b580bf4458d178bbac46f3c34eccccedefc6969f64f5848a8c11adb5c223a940ccf + languageName: node + linkType: hard + +"karma-typescript@npm:^5.0.2": + version: 5.5.4 + resolution: "karma-typescript@npm:5.5.4" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + assert: ^2.0.0 + async: ^3.0.1 + browser-resolve: ^2.0.0 + browserify-zlib: ^0.2.0 + buffer: ^5.4.3 + combine-source-map: ^0.8.0 + console-browserify: ^1.2.0 + constants-browserify: ^1.0.0 + convert-source-map: ^1.7.0 + crypto-browserify: ^3.12.0 + diff: ^4.0.1 + domain-browser: ^4.16.0 + events: ^3.2.0 + glob: ^7.1.6 + https-browserify: ^1.0.0 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^4.0.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.0.0 + json-stringify-safe: ^5.0.1 + lodash: ^4.17.19 + log4js: ^6.3.0 + minimatch: ^3.0.4 + os-browserify: ^0.3.0 + pad: ^3.2.0 + path-browserify: ^1.0.0 + process: ^0.11.10 + punycode: ^2.1.1 + querystring-es3: ^0.2.1 + readable-stream: ^3.1.1 + source-map: ^0.7.3 + stream-browserify: ^3.0.0 + stream-http: ^3.1.0 + string_decoder: ^1.3.0 + timers-browserify: ^2.0.11 + tmp: ^0.2.1 + tty-browserify: ^0.0.1 + url: ^0.11.0 + util: ^0.12.1 + vm-browserify: ^1.1.2 + peerDependencies: + karma: 1 || 2 || 3 || 4 || 5 || 6 + typescript: 1 || 2 || 3 || 4 || 5 + checksum: 81336ac06ef1c292285212c8d7299e75a6f8905de6cfb2193611f8f996f633d3380df3e90dd5c8925f1d03caba49fc525a62150f0a34d9a70312664a3ac3a846 + languageName: node + linkType: hard + +"karma-webpack@npm:^5.0.0": + version: 5.0.0 + resolution: "karma-webpack@npm:5.0.0" + dependencies: + glob: ^7.1.3 + minimatch: ^3.0.4 + webpack-merge: ^4.1.5 + peerDependencies: + webpack: ^5.0.0 + checksum: 869b835f91b99036d12c1b4342126b75093f7f524e2b245d557e720a402faf8bc90050f99962b0f12af98535812f46fa6325d1a7ed8569aed6dc5ead40c63ec4 + languageName: node + linkType: hard + +"karma@npm:^6.3.14": + version: 6.4.2 + resolution: "karma@npm:6.4.2" + dependencies: + "@colors/colors": 1.5.0 + body-parser: ^1.19.0 + braces: ^3.0.2 + chokidar: ^3.5.1 + connect: ^3.7.0 + di: ^0.0.1 + dom-serialize: ^2.2.1 + glob: ^7.1.7 + graceful-fs: ^4.2.6 + http-proxy: ^1.18.1 + isbinaryfile: ^4.0.8 + lodash: ^4.17.21 + log4js: ^6.4.1 + mime: ^2.5.2 + minimatch: ^3.0.4 + mkdirp: ^0.5.5 + qjobs: ^1.2.0 + range-parser: ^1.2.1 + rimraf: ^3.0.2 + socket.io: ^4.4.1 + source-map: ^0.6.1 + tmp: ^0.2.1 + ua-parser-js: ^0.7.30 + yargs: ^16.1.1 + bin: + karma: bin/karma + checksum: e493874729d87955f7c0f1f6c20b2e27184c82a3b33a14607538df9b049077b0263ecb398f5f0ebbba92325cb16f4f43a1461fa486d5a06eabbfdfb5f289f001 + languageName: node + linkType: hard + +"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": + version: 3.2.2 + resolution: "kind-of@npm:3.2.2" + dependencies: + is-buffer: ^1.1.5 + checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 + languageName: node + linkType: hard + +"kind-of@npm:^4.0.0": + version: 4.0.0 + resolution: "kind-of@npm:4.0.0" + dependencies: + is-buffer: ^1.1.5 + checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f + languageName: node + linkType: hard + +"kind-of@npm:^5.0.0": + version: 5.1.0 + resolution: "kind-of@npm:5.1.0" + checksum: f2a0102ae0cf19c4a953397e552571bad2b588b53282874f25fca7236396e650e2db50d41f9f516bd402536e4df968dbb51b8e69e4d5d4a7173def78448f7bab + languageName: node + linkType: hard + +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kiwi.js@npm:^1.1.2": + version: 1.1.3 + resolution: "kiwi.js@npm:1.1.3" + checksum: 61c6994dd1325447f55a9af3cb1937ed833f10e2e6dd5d6076de5078f4072a2b5fbca5a6f2ea6dcde7ec8ea1764a1d95681b7a9e3b4326ec45c4cacb0be22222 + languageName: node + linkType: hard + +"less-loader@npm:^5.0.0": + version: 5.0.0 + resolution: "less-loader@npm:5.0.0" + dependencies: + clone: ^2.1.1 + loader-utils: ^1.1.0 + pify: ^4.0.1 + peerDependencies: + less: ^2.3.1 || ^3.0.0 + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + checksum: b06dfef24ade4668e5a076e83a867506e685d1642b715af43e3c9e19b41f07d56afad948cdb4d1d39450dbcc2b26c726034307af0c0672479e851b5fe68ec0e5 + languageName: node + linkType: hard + +"less@npm:^3.8.1": + version: 3.13.1 + resolution: "less@npm:3.13.1" + dependencies: + copy-anything: ^2.0.1 + 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 + tslib: ^1.10.0 + dependenciesMeta: + errno: + optional: true + graceful-fs: + optional: true + image-size: + optional: true + make-dir: + optional: true + mime: + optional: true + native-request: + optional: true + source-map: + optional: true + bin: + lessc: ./bin/lessc + checksum: cfc2c56f135bbf47d8e53a6d083640e98ed8e92ae8ef36a7103aee571949779af5ee299342a5be83eca8932625adf9ff97017a3c82018e63e8fb9f5e5ab948a5 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"levn@npm:~0.3.0": + version: 0.3.0 + resolution: "levn@npm:0.3.0" + dependencies: + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + languageName: node + linkType: hard + +"lib0@npm:^0.2.42, lib0@npm:^0.2.74": + version: 0.2.78 + resolution: "lib0@npm:0.2.78" + dependencies: + isomorphic.js: ^0.2.4 + bin: + 0gentesthtml: bin/gentesthtml.js + 0serve: bin/0serve.js + checksum: a9c90a9228e10e581bf416f4ecade967687d67e6ea3e822ef69e2628a77a2a0254ef7e2eb7e555d412f9e9467049b7fb760c079878f9a934dd85d2646a53d172 + languageName: node + linkType: hard + +"license-webpack-plugin@npm:^2.3.14": + version: 2.3.21 + resolution: "license-webpack-plugin@npm:2.3.21" + dependencies: + "@types/webpack-sources": ^0.1.5 + webpack-sources: ^1.2.0 + peerDependenciesMeta: + webpack: + optional: true + checksum: 6208bd2060d200fbffbcc89702c929d50c5a4a3f2158b046cf813b3f7f728bbbe4611b9fea2d67843bb5e7d64ad9122cc368a19ac73f5c4ad41765e6283bdc0c + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^4.0.0 + pify: ^3.0.0 + strip-bom: ^3.0.0 + checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + languageName: node + linkType: hard + +"loader-utils@npm:^1.1.0, loader-utils@npm:^1.4.0": + version: 1.4.2 + resolution: "loader-utils@npm:1.4.2" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^1.0.1 + checksum: eb6fb622efc0ffd1abdf68a2022f9eac62bef8ec599cf8adb75e94d1d338381780be6278534170e99edc03380a6d29bc7eb1563c89ce17c5fed3a0b17f1ad804 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 + languageName: node + linkType: hard + +"lodash.memoize@npm:~3.0.3": + version: 3.0.4 + resolution: "lodash.memoize@npm:3.0.4" + checksum: fc52e0916b896fa79d6b85fbeaa0e44a381b70f1fcab7acab10188aaeeb2107e21b9b992bff560f405696e0a6e3bb5c08af18955d628a1e8ab6b11df14ff6172 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 + languageName: node + linkType: hard + +"lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:3.0.0": + version: 3.0.0 + resolution: "log-symbols@npm:3.0.0" + dependencies: + chalk: ^2.4.2 + checksum: f2322e1452d819050b11aad247660e1494f8b2219d40a964af91d5f9af1a90636f1b3d93f2952090e42af07cc5550aecabf6c1d8ec1181207e95cb66ba112361 + languageName: node + linkType: hard + +"log-symbols@npm:^2.1.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + +"log4js@npm:^6.3.0, log4js@npm:^6.4.1": + version: 6.9.1 + resolution: "log4js@npm:6.9.1" + dependencies: + date-format: ^4.0.14 + debug: ^4.3.4 + flatted: ^3.2.7 + rfdc: ^1.3.0 + streamroller: ^3.1.5 + checksum: 59d98c37d4163138dab5d9b06ae26965d1353106fece143973d57b1003b3a482791aa21374fd2cca81a953b8837b2f9756ac225404e60cbfa4dd3ab59f082e2e + languageName: node + linkType: hard + +"loupe@npm:^2.3.1": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: ^2.0.0 + checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.0 + resolution: "lru-cache@npm:10.0.0" + checksum: 18f101675fe283bc09cda0ef1e3cc83781aeb8373b439f086f758d1d91b28730950db785999cd060d3c825a8571c03073e8c14512b6655af2188d623031baf50 + languageName: node + linkType: hard + +"magic-string@npm:^0.22.4": + version: 0.22.5 + resolution: "magic-string@npm:0.22.5" + dependencies: + vlq: ^0.2.2 + checksum: e4d8b2083ed81f139ca471c19f5d0505c0f9083e06b71f48835057b3295a9494a15aac6a111d335573b986a67d3932e41c726d2eb6c76af30d0391b5e254ced3 + languageName: node + linkType: hard + +"magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: ^1.4.8 + checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-dir@npm:^3.0.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"map-cache@npm:^0.2.2": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 + languageName: node + linkType: hard + +"map-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "map-visit@npm:1.0.0" + dependencies: + object-visit: ^1.0.0 + checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a + languageName: node + linkType: hard + +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + +"memory-fs@npm:^0.5.0": + version: 0.5.0 + resolution: "memory-fs@npm:0.5.0" + dependencies: + errno: ^0.1.3 + readable-stream: ^2.0.1 + checksum: a9f25b0a8ecfb7324277393f19ef68e6ba53b9e6e4b526bbf2ba23055c5440fbf61acc7bf66bfd980e9eb4951a4790f6f777a9a3abd36603f22c87e8a64d3d6b + languageName: node + linkType: hard + +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9 + languageName: node + linkType: hard + +"merge-source-map@npm:1.0.4": + version: 1.0.4 + resolution: "merge-source-map@npm:1.0.4" + dependencies: + source-map: ^0.5.6 + checksum: 86a4e60d83980393e61f069c7ae33e7899c4c012c3cd2cf50e01482e7a284bbe9c8cd08d37adbf241fc9eacfa4425241432e7461cf6559f7e9902587889660de + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^3.0.4": + version: 3.1.10 + resolution: "micromatch@npm:3.1.10" + 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 + checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: ^4.0.0 + brorand: ^1.0.1 + bin: + miller-rabin: bin/miller-rabin + checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime@npm:^1.4.1": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + +"mime@npm:^2.5.2": + version: 2.6.0 + resolution: "mime@npm:2.6.0" + bin: + mime: cli.js + checksum: 1497ba7b9f6960694268a557eae24b743fd2923da46ec392b042469f4b901721ba0adcf8b0d3c2677839d0e243b209d76e5edcbd09cfdeffa2dfb6bb4df4b862 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^2.7.0": + version: 2.7.6 + resolution: "mini-css-extract-plugin@npm:2.7.6" + dependencies: + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^5.0.0 + checksum: be6f7cefc6275168eb0a6b8fe977083a18c743c9612c9f00e6c1a62c3393ca7960e93fba1a7ebb09b75f36a0204ad087d772c1ef574bc29c90c0e8175a3c0b83 + languageName: node + linkType: hard + +"mini-svg-data-uri@npm:^1.4.4": + version: 1.4.4 + resolution: "mini-svg-data-uri@npm:1.4.4" + bin: + mini-svg-data-uri: cli.js + checksum: 997f1fbd8d59a70f03761e18626d335197a3479cb9d1ff75678e4b64b864d32a0b8fc18115eabde035e5299b8b4a354a78e57dd6ac10f9d604162a6170898d09 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + +"minimatch@npm:3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: ^1.1.7 + checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.0": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.3 + resolution: "minipass-fetch@npm:3.0.3" + dependencies: + encoding: ^0.1.13 + minipass: ^5.0.0 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af5ab2552a16fcf505d35fd7ffb84b57f4a0eeb269e6e1d9a2a75824dda48b36e527083250b7cca4a4def21d9544e2ade441e4730e233c0bc2133f6abda31e18 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0": + version: 7.0.2 + resolution: "minipass@npm:7.0.2" + checksum: 46776de732eb7cef2c7404a15fb28c41f5c54a22be50d47b03c605bf21f5c18d61a173c0a20b49a97e7a65f78d887245066410642551e45fffe04e9ac9e325bc + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mixin-deep@npm:^1.2.0": + version: 1.3.2 + resolution: "mixin-deep@npm:1.3.2" + dependencies: + for-in: ^1.0.2 + is-extendable: ^1.0.1 + checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d + languageName: node + linkType: hard + +"mkdirp@npm:0.5.5": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" + dependencies: + minimist: ^1.2.5 + bin: + mkdirp: bin/cmd.js + checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.5": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mocha@npm:^7.1.1": + version: 7.2.0 + resolution: "mocha@npm:7.2.0" + dependencies: + ansi-colors: 3.2.3 + browser-stdout: 1.3.1 + chokidar: 3.3.0 + debug: 3.2.6 + diff: 3.5.0 + escape-string-regexp: 1.0.5 + find-up: 3.0.0 + glob: 7.1.3 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 3.13.1 + log-symbols: 3.0.0 + minimatch: 3.0.4 + mkdirp: 0.5.5 + ms: 2.1.1 + node-environment-flags: 1.0.6 + object.assign: 4.1.0 + strip-json-comments: 2.0.1 + supports-color: 6.0.0 + which: 1.3.1 + wide-align: 1.1.3 + yargs: 13.3.2 + yargs-parser: 13.1.2 + yargs-unparser: 1.6.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha + checksum: d098484fe1b165bb964fdbf6b88b256c71fead47575ca7c5bcf8ed07db0dcff41905f6d2f0a05111a0441efaef9d09241a8cc1ddf7961056b28984ec63ba2874 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.1": + version: 2.1.1 + resolution: "ms@npm:2.1.1" + checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + +"nanomatch@npm:^1.2.9": + version: 1.2.13 + resolution: "nanomatch@npm:1.2.13" + 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 + checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 + languageName: node + linkType: hard + +"native-request@npm:^1.0.5": + version: 1.1.0 + resolution: "native-request@npm:1.1.0" + checksum: ab96f79c7a5e726a88eaa90c700d4d844af884e68d9784d90d42134c12224105453e4db82b5985624b458e4a304d5f664c1be760e88b63f7f247001f4e755603 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + +"nise@npm:^4.0.4": + version: 4.1.0 + resolution: "nise@npm:4.1.0" + dependencies: + "@sinonjs/commons": ^1.7.0 + "@sinonjs/fake-timers": ^6.0.0 + "@sinonjs/text-encoding": ^0.7.1 + just-extend: ^4.0.2 + path-to-regexp: ^1.7.0 + checksum: b2ea1c96a41c392adf746509904af565ebd667ad4e40267f6d73be3648f04267945624ba0ce6a991b779f3ae246181f71975152b93b4dafee1f62886fa897c32 + languageName: node + linkType: hard + +"node-environment-flags@npm:1.0.6": + version: 1.0.6 + resolution: "node-environment-flags@npm:1.0.6" + dependencies: + object.getownpropertydescriptors: ^2.0.3 + semver: ^5.7.0 + checksum: 268139ed0f7fabdca346dcb26931300ec7a1dc54a58085a849e5c78a82b94967f55df40177a69d4e819da278d98686d5c4fd49ab0d7bcff16fda25b6fffc4ca3 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.12": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"nouislider@npm:15.4.0": + version: 15.4.0 + resolution: "nouislider@npm:15.4.0" + checksum: 4b7ffe7ca7eb75b27ffc100949db8594468eba5d8ac82e04fd4ab5a4c1b643b6c94ba7a97afcea2a11ec08ed93a59d1ed771550faf4ef1c7a8cdecd962f89f61 + languageName: node + linkType: hard + +"npm-run-all@npm:^4.1.3": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: ^3.2.1 + chalk: ^2.4.1 + cross-spawn: ^6.0.5 + memorystream: ^0.3.1 + minimatch: ^3.0.4 + pidtree: ^0.3.0 + read-pkg: ^3.0.0 + shell-quote: ^1.6.1 + string.prototype.padend: ^3.0.0 + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 373b72c6a36564da13c1642c1fd9bb4dcc756bce7a3648f883772f02661095319820834ff813762d2fee403e9b40c1cd27c8685807c107440f10eb19c006d4a0 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"object-assign@npm:^4": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-copy@npm:^0.1.0": + version: 0.1.0 + resolution: "object-copy@npm:0.1.0" + dependencies: + copy-descriptor: ^0.1.0 + define-property: ^0.2.5 + kind-of: ^3.0.3 + checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 + languageName: node + linkType: hard + +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + languageName: node + linkType: hard + +"object-inspect@npm:~1.4.0": + version: 1.4.1 + resolution: "object-inspect@npm:1.4.1" + checksum: dd92deb565dc93471e395a9c7510f988961e5c292dcc7eda3bd3160a98e069b0769bb72b11882173fbaee131902be1f3aa3a4764a791c5895610acc2dc992b0b + languageName: node + linkType: hard + +"object-is@npm:^1.0.1": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + +"object-keys@npm:^1.0.11, object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object-visit@npm:^1.0.0": + version: 1.0.1 + resolution: "object-visit@npm:1.0.1" + dependencies: + isobject: ^3.0.0 + checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 + languageName: node + linkType: hard + +"object.assign@npm:4.1.0": + version: 4.1.0 + resolution: "object.assign@npm:4.1.0" + dependencies: + define-properties: ^1.1.2 + function-bind: ^1.1.1 + has-symbols: ^1.0.0 + object-keys: ^1.0.11 + checksum: 648a9a463580bf48332d9a49a76fede2660ab1ee7104d9459b8a240562246da790b4151c3c073f28fda31c1fdc555d25a1d871e72be403e997e4468c91f4801f + languageName: node + linkType: hard + +"object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"object.getownpropertydescriptors@npm:^2.0.3": + version: 2.1.6 + resolution: "object.getownpropertydescriptors@npm:2.1.6" + dependencies: + array.prototype.reduce: ^1.0.5 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.21.2 + safe-array-concat: ^1.0.0 + checksum: 7757ce0ef61c8bee7f8043f8980fd3d46fc1ab3faf0795bd1f9f836781143b4afc91f7219a3eed4675fbd0b562f3708f7e736d679ebfd43ea37ab6077d9f5004 + languageName: node + linkType: hard + +"object.pick@npm:^1.3.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: ^3.0.1 + checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a + languageName: node + linkType: hard + +"object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: 1.1.1 + checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"optimist@npm:0.3": + version: 0.3.7 + resolution: "optimist@npm:0.3.7" + dependencies: + wordwrap: ~0.0.2 + checksum: adc02acb8b76d242e56714b47c8c96916b25a5ac2da7b9f735e1f946a970f266f71d53eff0b61d9582ef948301e94734f03b784fa7c309aed0fe7db403d22046 + languageName: node + linkType: hard + +"optionator@npm:^0.8.1": + version: 0.8.3 + resolution: "optionator@npm:0.8.3" + 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 + checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + +"os-browserify@npm:^0.3.0": + version: 0.3.0 + resolution: "os-browserify@npm:0.3.0" + checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"pad@npm:^3.2.0": + version: 3.2.0 + resolution: "pad@npm:3.2.0" + dependencies: + wcwidth: ^1.0.1 + checksum: c681c974613c3681058344d56090883260ba82401e507f11a21676a5cd5e4a9364b24fcaf9063d402311b7a8f1c38563a38c986b390595337f66c278a1d96698 + languageName: node + linkType: hard + +"pako@npm:~1.0.5": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": + version: 5.1.6 + resolution: "parse-asn1@npm:5.1.6" + dependencies: + asn1.js: ^5.2.0 + browserify-aes: ^1.0.0 + evp_bytestokey: ^1.0.0 + pbkdf2: ^3.0.3 + safe-buffer: ^5.1.1 + checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-passwd@npm:^1.0.0": + version: 1.0.0 + resolution: "parse-passwd@npm:1.0.0" + checksum: 4e55e0231d58f828a41d0f1da2bf2ff7bcef8f4cb6146e69d16ce499190de58b06199e6bd9b17fbf0d4d8aef9052099cdf8c4f13a6294b1a522e8e958073066e + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + +"pascalcase@npm:^0.1.1": + version: 0.1.1 + resolution: "pascalcase@npm:0.1.1" + checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.0": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-to-regexp@npm:^1.7.0": + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" + dependencies: + isarray: 0.0.1 + checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: ^3.0.0 + checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + +"pbkdf2@npm:^3.0.3": + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" + 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 + checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: eb49025099f1af89a4696f7673351421f13420f3397b963c901fe23a1c9c2ff50f4750321970d4472c0ffbb065e4a6c3c27f75e226cc62284b19e21d32ce7012 + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pkg-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "pkg-dir@npm:3.0.0" + dependencies: + find-up: ^3.0.0 + checksum: 70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"popper.js@npm:^1.0.0": + version: 1.16.1 + resolution: "popper.js@npm:1.16.1" + checksum: c56ae5001ec50a77ee297a8061a0221d99d25c7348d2e6bcd3e45a0d0f32a1fd81bca29d46cb0d4bdf13efb77685bd6a0ce93f9eb3c608311a461f945fffedbe + languageName: node + linkType: hard + +"posix-character-classes@npm:^0.1.0": + version: 0.1.1 + resolution: "posix-character-classes@npm:0.1.1" + checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-extract-imports@npm:3.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.0, postcss-modules-local-by-default@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-modules-local-by-default@npm:4.0.3" + dependencies: + icss-utils: ^5.0.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.1.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 2f8083687f3d6067885f8863dd32dbbb4f779cfcc7e52c17abede9311d84faf6d3ed8760e7c54c6380281732ae1f78e5e56a28baf3c271b33f450a11c9e30485 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-scope@npm:3.0.0" + dependencies: + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.1.0 + checksum: 330b9398dbd44c992c92b0dc612c0626135e2cc840fee41841eb61247a6cfed95af2bd6f67ead9dd9d0bb41f5b0367129d93c6e434fa3e9c58ade391d9a5a138 + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.0.13 + resolution: "postcss-selector-parser@npm:6.0.13" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: f89163338a1ce3b8ece8e9055cd5a3165e79a15e1c408e18de5ad8f87796b61ec2d48a2902d179ae0c4b5de10fccd3a325a4e660596549b040bc5ad1b465f096 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.21": + version: 8.4.25 + resolution: "postcss@npm:8.4.25" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 9ed3ab8af43ad5210c28f56f916fd9b8c9f94fbeaebbf645dcf579bc28bdd8056c2a7ecc934668d399b81fedb6128f0c4b299f931e50454964bc911c25a3a0a2 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prelude-ls@npm:~1.1.2": + version: 1.1.2 + resolution: "prelude-ls@npm:1.1.2" + checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + +"prettier@npm:^2.2.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"progress@npm:^2.0.0": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prr@npm:~1.0.1": + version: 1.0.1 + resolution: "prr@npm:1.0.1" + checksum: 3bca2db0479fd38f8c4c9439139b0c42dcaadcc2fbb7bb8e0e6afaa1383457f1d19aea9e5f961d5b080f1cfc05bfa1fe9e45c97a1d3fd6d421950a73d3108381 + languageName: node + linkType: hard + +"public-encrypt@npm:^4.0.0": + version: 4.0.3 + resolution: "public-encrypt@npm:4.0.3" + 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 + checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 + languageName: node + linkType: hard + +"punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"qjobs@npm:^1.2.0": + version: 1.2.0 + resolution: "qjobs@npm:1.2.0" + checksum: eb64c00724d2fecaf9246383b4eebc3a4c34845b25d41921dd57f41b30a4310cef661543facac27ceb6911aab64a1acdf45b5d8f1d5e2838554d0c010ee56852 + languageName: node + linkType: hard + +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + +"qs@npm:^6.11.0": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: ^1.0.4 + checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b + languageName: node + linkType: hard + +"querystring-es3@npm:^0.2.1": + version: 0.2.1 + resolution: "querystring-es3@npm:0.2.1" + checksum: 691e8d6b8b157e7cd49ae8e83fcf86de39ab3ba948c25abaa94fba84c0986c641aa2f597770848c64abce290ed17a39c9df6df737dfa7e87c3b63acc7d225d61 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quote-stream@npm:^1.0.1, quote-stream@npm:~1.0.2": + version: 1.0.2 + resolution: "quote-stream@npm:1.0.2" + dependencies: + buffer-equal: 0.0.1 + minimist: ^1.1.3 + through2: ^2.0.0 + bin: + quote-stream: bin/cmd.js + checksum: 73a45ad41000eb23579ecf57d8e3a19795716e988d9279dc4de412f4cf90dd0c5dba792d8d0e65f6c627d3da4e7781104b41af44975614a0f5c94f666bf86468 + languageName: node + linkType: hard + +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"randomfill@npm:^1.0.3": + version: 1.0.4 + resolution: "randomfill@npm:1.0.4" + dependencies: + randombytes: ^2.0.5 + safe-buffer: ^5.1.0 + checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + languageName: node + linkType: hard + +"react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: ^4.0.0 + normalize-package-data: ^2.3.2 + path-type: ^3.0.0 + checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.3, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + 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 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:~3.2.0": + version: 3.2.0 + resolution: "readdirp@npm:3.2.0" + dependencies: + picomatch: ^2.0.4 + checksum: 0456a4465a13eb5eaf40f0e0836b1bc6b9ebe479b48ba6f63a738b127a1990fb7b38f3ec4b4b6052f9230f976bc0558f12812347dc6b42ce4d548cfe82a9b6f3 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" + dependencies: + regenerate: ^1.4.2 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.1": + version: 0.15.1 + resolution: "regenerator-transform@npm:0.15.1" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 + languageName: node + linkType: hard + +"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": + version: 1.0.2 + resolution: "regex-not@npm:1.0.2" + dependencies: + extend-shallow: ^3.0.2 + safe-regex: ^1.1.0 + checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.0": + version: 1.5.0 + resolution: "regexp.prototype.flags@npm:1.5.0" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + functions-have-names: ^1.2.3 + checksum: c541687cdbdfff1b9a07f6e44879f82c66bbf07665f9a7544c5fd16acdb3ec8d1436caab01662d2fbcad403f3499d49ab0b77fbc7ef29ef961d98cc4bc9755b4 + languageName: node + linkType: hard + +"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" + dependencies: + "@babel/regjsgen": ^0.8.0 + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.1.0 + regjsparser: ^0.9.1 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 + languageName: node + linkType: hard + +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + languageName: node + linkType: hard + +"repeat-element@npm:^1.1.2": + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 + languageName: node + linkType: hard + +"repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"resolve-cwd@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve-cwd@npm:2.0.0" + dependencies: + resolve-from: ^3.0.0 + checksum: e7c16880c460656e77f102d537a6dc82b3657d9173697cd6ea82ffce37df96f6c1fc79d0bb35fd73fff8871ac13f21b4396958b5f0a13e5b99c97d69f5e319fa + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": + version: 1.0.1 + resolution: "resolve-dir@npm:1.0.1" + dependencies: + expand-tilde: ^2.0.0 + global-modules: ^1.0.0 + checksum: ef736b8ed60d6645c3b573da17d329bfb50ec4e1d6c5ffd6df49e3497acef9226f9810ea6823b8ece1560e01dcb13f77a9f6180d4f242d00cc9a8f4de909c65c + languageName: node + linkType: hard + +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-url@npm:^0.2.1": + version: 0.2.1 + resolution: "resolve-url@npm:0.2.1" + checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 + languageName: node + linkType: hard + +"resolve@npm:^1.1.5, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": + version: 1.22.3 + resolution: "resolve@npm:1.22.3" + dependencies: + is-core-module: ^2.12.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: fb834b81348428cb545ff1b828a72ea28feb5a97c026a1cf40aa1008352c72811ff4d4e71f2035273dc536dcfcae20c13604ba6283c612d70fa0b6e44519c374 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.1.5#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": + version: 1.22.3 + resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d" + dependencies: + is-core-module: ^2.12.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: ad59734723b596d0891321c951592ed9015a77ce84907f89c9d9307dd0c06e11a67906a3e628c4cae143d3e44898603478af0ddeb2bba3f229a9373efe342665 + languageName: node + linkType: hard + +"ret@npm:~0.1.10": + version: 0.1.15 + resolution: "ret@npm:0.1.15" + checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rw@npm:1": + version: 1.3.3 + resolution: "rw@npm:1.3.3" + checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-array-concat@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: f43cb98fe3b566327d0c09284de2b15fb85ae964a89495c1b1a5d50c7c8ed484190f4e5e71aacc167e16231940079b326f2c0807aea633d47cc7322f40a6b57f + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + +"safe-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex@npm:1.1.0" + dependencies: + ret: ~0.1.10 + checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sanitize-html@npm:^2.3": + version: 2.11.0 + resolution: "sanitize-html@npm:2.11.0" + dependencies: + deepmerge: ^4.2.2 + escape-string-regexp: ^4.0.0 + htmlparser2: ^8.0.0 + is-plain-object: ^5.0.0 + parse-srcset: ^1.0.2 + postcss: ^8.3.11 + checksum: 44807f22b0feb5a6a883b4bc04bcd8690ec3bbd6dacb24d6e52226ffe0c0e4fad43d6a882ce60e3884a327fae2de01e67e566e3a211491add50ff0160be2e98a + languageName: node + linkType: hard + +"schema-utils@npm:^2.7.0": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": ^7.0.5 + ajv: ^6.12.4 + ajv-keywords: ^3.5.2 + checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0": + version: 4.2.0 + resolution: "schema-utils@npm:4.2.0" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.2.1, semver@npm:^7.3.5, semver@npm:^7.3.8": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.1": + version: 6.0.1 + resolution: "serialize-javascript@npm:6.0.1" + dependencies: + randombytes: ^2.1.0 + checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"set-value@npm:^2.0.0, set-value@npm:^2.0.1": + version: 2.0.1 + resolution: "set-value@npm:2.0.1" + dependencies: + extend-shallow: ^2.0.1 + is-extendable: ^0.1.1 + is-plain-object: ^2.0.3 + split-string: ^3.0.1 + checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.4": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shallow-copy@npm:~0.0.1": + version: 0.0.1 + resolution: "shallow-copy@npm:0.0.1" + checksum: 2d249a5a57a160b439d84fbf9ed7c0a107a3d656d1bda0b73edf9476c6e6ea9d2afa79829bf33fce6677fae35b15c14e5c28f9902dc4d07a302637a225d00634 + languageName: node + linkType: hard + +"shapefile@npm:0.3": + version: 0.3.1 + resolution: "shapefile@npm:0.3.1" + dependencies: + d3-queue: 1 + iconv-lite: 0.2 + optimist: 0.3 + bin: + dbfcat: ./bin/dbfcat + shp2json: ./bin/shp2json + shpcat: ./bin/shpcat + checksum: a773fb5c12166666ef6666482ea6830b8c539ac54906a1bdf2ea48ca68c65322eda1bd6637a287b0814181a06415bb559a1c9050d4a7d74aaa2bf5409ba39e95 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.6.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.0.2 + resolution: "signal-exit@npm:4.0.2" + checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 + languageName: node + linkType: hard + +"sinon-chai@npm:^3.3.0": + version: 3.7.0 + resolution: "sinon-chai@npm:3.7.0" + peerDependencies: + chai: ^4.0.0 + sinon: ">=4.0.0" + checksum: 49a353d8eb66cc6db35ac452f6965c72778aa090d1f036dd1e54ba88594b1c3f314b1a403eaff22a4e314f94dc92d9c7d03cbb88c21d89e814293bf5b299964d + languageName: node + linkType: hard + +"sinon@npm:^9.0.2": + version: 9.2.4 + resolution: "sinon@npm:9.2.4" + dependencies: + "@sinonjs/commons": ^1.8.1 + "@sinonjs/fake-timers": ^6.0.1 + "@sinonjs/samsam": ^5.3.1 + diff: ^4.0.2 + nise: ^4.0.4 + supports-color: ^7.1.0 + checksum: 34b881886daa4b491bb9147ccad43d662f58b45a1b6f1e8b26a405ad77041108306fac3648646335f00f702897f0ba12282588ab64de470f48f1a7678e08dc65 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"snapdragon-node@npm:^2.0.1": + version: 2.1.1 + resolution: "snapdragon-node@npm:2.1.1" + dependencies: + define-property: ^1.0.0 + isobject: ^3.0.0 + snapdragon-util: ^3.0.1 + checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd + languageName: node + linkType: hard + +"snapdragon-util@npm:^3.0.1": + version: 3.0.1 + resolution: "snapdragon-util@npm:3.0.1" + dependencies: + kind-of: ^3.2.0 + checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 + languageName: node + linkType: hard + +"snapdragon@npm:^0.8.1": + version: 0.8.2 + resolution: "snapdragon@npm:0.8.2" + 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 + checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 + languageName: node + linkType: hard + +"socket.io-adapter@npm:~2.5.2": + version: 2.5.2 + resolution: "socket.io-adapter@npm:2.5.2" + dependencies: + ws: ~8.11.0 + checksum: 481251c3547221e57eb5cb247d0b1a3cde4d152a4c1c9051cc887345a7770e59f3b47f1011cac4499e833f01fcfc301ed13c4ec6e72f7dbb48a476375a6344cd + languageName: node + linkType: hard + +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.1 + checksum: 61540ef99af33e6a562b9effe0fad769bcb7ec6a301aba5a64b3a8bccb611a0abdbe25f469933ab80072582006a78ca136bf0ad8adff9c77c9953581285e2263 + languageName: node + linkType: hard + +"socket.io@npm:^4.4.1": + version: 4.7.1 + resolution: "socket.io@npm:4.7.1" + dependencies: + accepts: ~1.3.4 + base64id: ~2.0.0 + cors: ~2.8.5 + debug: ~4.3.2 + engine.io: ~6.5.0 + socket.io-adapter: ~2.5.2 + socket.io-parser: ~4.2.4 + checksum: 81404d06383aa5495b3cb9a1a4fc1435cfa97d8963c89fa54403c3ef20e0884eccedb8799b1c804a40896f903d64543e2303071d5d60dcbf7e062edf7a98d87f + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"source-list-map@npm:^2.0.0": + version: 2.0.1 + resolution: "source-list-map@npm:2.0.1" + checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"source-map-loader@npm:~1.0.2": + version: 1.0.2 + resolution: "source-map-loader@npm:1.0.2" + dependencies: + data-urls: ^2.0.0 + iconv-lite: ^0.6.2 + loader-utils: ^2.0.0 + schema-utils: ^2.7.0 + source-map: ^0.6.1 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 0360b536e904f8fea452d0e122b9199661765229dc62a4b8093cc9d14e985f2ddd146355ede6d11acdd0b9bf4639b364e2526afcf9d3218ed45af63aa5eb053f + languageName: node + linkType: hard + +"source-map-resolve@npm:^0.5.0": + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" + 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 + checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map-url@npm:^0.4.0": + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c + languageName: node + linkType: hard + +"source-map@npm:^0.5.6, source-map@npm:~0.5.3": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"source-map@npm:^0.7.3": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.13 + resolution: "spdx-license-ids@npm:3.0.13" + checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + languageName: node + linkType: hard + +"split-string@npm:^3.0.1, split-string@npm:^3.0.2": + version: 3.1.0 + resolution: "split-string@npm:3.1.0" + dependencies: + extend-shallow: ^3.0.0 + checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.4 + resolution: "ssri@npm:10.0.4" + dependencies: + minipass: ^5.0.0 + checksum: fb14da9f8a72b04eab163eb13a9dda11d5962cd2317f85457c4e0b575e9a6e0e3a6a87b5bf122c75cb36565830cd5f263fb457571bf6f1587eb5f95d095d6165 + languageName: node + linkType: hard + +"static-eval@npm:^2.0.0": + version: 2.1.0 + resolution: "static-eval@npm:2.1.0" + dependencies: + escodegen: ^1.11.1 + checksum: 21297ee9af37cd23ef92b3a4b1fd535073539b870d2bb83a4b92f6b668183f7fb552d3c791bbdcd460c62583a2c33d46e5d56e86a7f5851b65b29e19e5d28b41 + languageName: node + linkType: hard + +"static-extend@npm:^0.1.1": + version: 0.1.2 + resolution: "static-extend@npm:0.1.2" + dependencies: + define-property: ^0.2.5 + object-copy: ^0.1.0 + checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c + languageName: node + linkType: hard + +"static-module@npm:^2.2.0": + version: 2.2.5 + resolution: "static-module@npm:2.2.5" + dependencies: + concat-stream: ~1.6.0 + convert-source-map: ^1.5.1 + duplexer2: ~0.1.4 + escodegen: ~1.9.0 + falafel: ^2.1.0 + has: ^1.0.1 + magic-string: ^0.22.4 + merge-source-map: 1.0.4 + object-inspect: ~1.4.0 + quote-stream: ~1.0.2 + readable-stream: ~2.3.3 + shallow-copy: ~0.0.1 + static-eval: ^2.0.0 + through2: ~2.0.3 + checksum: f49dfd543f1d975f8473840c0969154d79dc1f95b4ed743c51e63633ada4aceceb145b6a58fb3c26a8891c909d6ca951762fbe24a5de359b4531813d83be4bc9 + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:~1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: ~2.0.4 + readable-stream: ^3.5.0 + checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 + languageName: node + linkType: hard + +"stream-http@npm:^3.1.0": + version: 3.2.0 + resolution: "stream-http@npm:3.2.0" + dependencies: + builtin-status-codes: ^3.0.0 + inherits: ^2.0.4 + readable-stream: ^3.6.0 + xtend: ^4.0.2 + checksum: c9b78453aeb0c84fcc59555518ac62bacab9fa98e323e7b7666e5f9f58af8f3155e34481078509b02929bd1268427f664d186604cdccee95abc446099b339f83 + languageName: node + linkType: hard + +"streamroller@npm:^3.1.5": + version: 3.1.5 + resolution: "streamroller@npm:3.1.5" + dependencies: + date-format: ^4.0.14 + debug: ^4.3.4 + fs-extra: ^8.1.0 + checksum: c1df5612b785ffa4b6bbf16460590b62994c57265bc55a5166eebeeb0daf648e84bc52dc6d57e0cd4e5c7609bda93076753c63ff54589febd1e0b95590f0e443 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^1.0.2 || 2": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^4.0.0 + checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a + languageName: node + linkType: hard + +"string-width@npm:^3.0.0, string-width@npm:^3.1.0": + version: 3.1.0 + resolution: "string-width@npm:3.1.0" + dependencies: + emoji-regex: ^7.0.1 + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^5.1.0 + checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.padend@npm:^3.0.0": + version: 3.1.4 + resolution: "string.prototype.padend@npm:3.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 76e07238fe31dc12177428f0436b7ed6985f6a7ba97470fd53e4f0a6d9860bfee127d81957f3073cc879b434233df143825d140581e1340278053ad993c92f6c + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.7": + version: 1.2.7 + resolution: "string.prototype.trim@npm:1.2.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimend@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimstart@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: ^3.0.0 + checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca + languageName: node + linkType: hard + +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-json-comments@npm:2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"style-loader@npm:^1.2.0": + version: 1.3.0 + resolution: "style-loader@npm:1.3.0" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^2.7.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 1be9e8705307f5b8eb89e80f3703fa27296dccec349d790eace7aabe212f08c7c8f3ea6b6cb97bc53e82fbebfb9aa0689259671a8315f4655e24a850781e062a + languageName: node + linkType: hard + +"style-loader@npm:~3.3.1": + version: 3.3.3 + resolution: "style-loader@npm:3.3.3" + peerDependencies: + webpack: ^5.0.0 + checksum: f59c953f56f6a935bd6a1dfa409f1128fed2b66b48ce4a7a75b85862a7156e5e90ab163878962762f528ec4d510903d828da645e143fbffd26f055dc1c094078 + languageName: node + linkType: hard + +"supports-color@npm:6.0.0": + version: 6.0.0 + resolution: "supports-color@npm:6.0.0" + dependencies: + has-flag: ^3.0.0 + checksum: 005b4a7e5d78a9a703454f5b7da34336b82825747724d1f3eefea6c3956afcb33b79b31854a93cef0fc1f2449919ae952f79abbfd09a5b5b43ecd26407d3a3a1 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^6.1.0": + version: 6.1.0 + resolution: "supports-color@npm:6.1.0" + dependencies: + has-flag: ^3.0.0 + checksum: 74358f9535c83ee113fbaac354b11e808060f6e7d8722082ee43af3578469134e89d00026dce2a6b93ce4e5b89d0e9a10f638b2b9f64c7838c2fb2883a47b3d5 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"table@npm:^6.0.9": + version: 6.8.1 + resolution: "table@npm:6.8.1" + dependencies: + ajv: ^8.0.1 + lodash.truncate: ^4.4.2 + slice-ansi: ^4.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + checksum: 08249c7046125d9d0a944a6e96cfe9ec66908d6b8a9db125531be6eb05fa0de047fd5542e9d43b4f987057f00a093b276b8d3e19af162a9c40db2681058fd306 + languageName: node + linkType: hard + +"tapable@npm:^1.0.0": + version: 1.1.3 + resolution: "tapable@npm:1.1.3" + checksum: 53ff4e7c3900051c38cc4faab428ebfd7e6ad0841af5a7ac6d5f3045c5b50e88497bfa8295b4b3fbcadd94993c9e358868b78b9fb249a76cb8b018ac8dccafd7 + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.15 + resolution: "tar@npm:6.1.15" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f23832fceeba7578bf31907aac744ae21e74a66f4a17a9e94507acf460e48f6db598c7023882db33bab75b80e027c21f276d405e4a0322d58f51c7088d428268 + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.7": + version: 5.3.9 + resolution: "terser-webpack-plugin@npm:5.3.9" + dependencies: + "@jridgewell/trace-mapping": ^0.3.17 + jest-worker: ^27.4.5 + schema-utils: ^3.1.1 + serialize-javascript: ^6.0.1 + terser: ^5.16.8 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f + languageName: node + linkType: hard + +"terser@npm:^5.16.8": + version: 5.19.0 + resolution: "terser@npm:5.19.0" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: 31c937f1a30c03b68825df7803a3584b13616647438be6cbc0914b688f064a3f4f938d8182e476342ddd1675e84798393b076caeb549393f4df768aec9abd6bd + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"through2@npm:^2.0.0, through2@npm:~2.0.3": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"timers-browserify@npm:^2.0.11": + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" + dependencies: + setimmediate: ^1.0.4 + checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 + languageName: node + linkType: hard + +"tmp@npm:^0.2.1": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: ^3.0.0 + checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-object-path@npm:^0.3.0": + version: 0.3.0 + resolution: "to-object-path@npm:0.3.0" + dependencies: + kind-of: ^3.0.2 + checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 + languageName: node + linkType: hard + +"to-regex-range@npm:^2.1.0": + version: 2.1.1 + resolution: "to-regex-range@npm:2.1.1" + dependencies: + is-number: ^3.0.0 + repeat-string: ^1.6.1 + checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": + version: 3.0.2 + resolution: "to-regex@npm:3.0.2" + dependencies: + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + regex-not: ^1.0.2 + safe-regex: ^1.1.0 + checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"topojson@npm:^1.6.24": + version: 1.6.27 + resolution: "topojson@npm:1.6.27" + dependencies: + d3: 3 + d3-geo-projection: 0.2 + d3-queue: 2 + optimist: 0.3 + rw: 1 + shapefile: 0.3 + bin: + topojson: ./bin/topojson + topojson-geojson: ./bin/topojson-geojson + topojson-group: ./bin/topojson-group + topojson-merge: ./bin/topojson-merge + topojson-svg: ./bin/topojson-svg + checksum: 884c67b1fd03aeab80dc2c777380ac4c84114e3dad9be106f068e946878c82b7fac7cc7021f4723dea2560d3cdf8b68259552eb7e955ab6cac9fc81644461d30 + languageName: node + linkType: hard + +"tr46@npm:^2.1.0": + version: 2.1.0 + resolution: "tr46@npm:2.1.0" + dependencies: + punycode: ^2.1.1 + checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.14.1": + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + languageName: node + linkType: hard + +"tslib@npm:^1.10.0, tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"tty-browserify@npm:^0.0.1": + version: 0.0.1 + resolution: "tty-browserify@npm:0.0.1" + checksum: 93b745d43fa5a7d2b948fa23be8d313576d1d884b48acd957c07710bac1c0d8ac34c0556ad4c57c73d36e11741763ef66b3fb4fb97b06b7e4d525315a3cd45f5 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-check@npm:~0.3.2": + version: 0.3.2 + resolution: "type-check@npm:0.3.2" + dependencies: + prelude-ls: ~1.1.2 + checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-offset@npm:1.0.0" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"typescript@npm:~5": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 0d0ffb84f2cd072c3e164c79a2e5a1a1f4f168e84cb2882ff8967b92afe1def6c2a91f6838fb58b168428f9458c57a2ba06a6737711fdd87a256bbe83e9a217f + languageName: node + linkType: hard + +"typescript@patch:typescript@~5#~builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#~builtin::version=5.9.3&hash=85af82" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 8bb8d86819ac86a498eada254cad7fb69c5f74778506c700c2a712daeaff21d3a6f51fd0d534fe16903cb010d1b74f89437a3d02d4d0ff5ca2ba9a4660de8497 + languageName: node + linkType: hard + +"ua-parser-js@npm:^0.7.30": + version: 0.7.35 + resolution: "ua-parser-js@npm:0.7.35" + checksum: 0a332e8d72d277e62f29ecb3a33843b274de93eb9378350b746ea0f89ef05ee09c94f2c1fdab8001373ad5e95a48beb0a94f39dc1670c908db9fc9b8f0876204 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"underscore@npm:>=1.8.3, underscore@npm:^1.8.3, underscore@npm:^1.9.2": + version: 1.13.6 + resolution: "underscore@npm:1.13.6" + checksum: d5cedd14a9d0d91dd38c1ce6169e4455bb931f0aaf354108e47bd46d3f2da7464d49b2171a5cf786d61963204a42d01ea1332a903b7342ad428deaafaf70ec36 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + +"union-value@npm:^1.0.0": + version: 1.0.1 + resolution: "union-value@npm:1.0.1" + dependencies: + arr-union: ^3.1.0 + get-value: ^2.0.6 + is-extendable: ^0.1.1 + set-value: ^2.0.1 + checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"unset-value@npm:^1.0.0": + version: 1.0.0 + resolution: "unset-value@npm:1.0.0" + dependencies: + has-value: ^0.3.1 + isobject: ^3.0.0 + checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.11": + version: 1.0.11 + resolution: "update-browserslist-db@npm:1.0.11" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"urix@npm:^0.1.0": + version: 0.1.0 + resolution: "urix@npm:0.1.0" + checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 + languageName: node + linkType: hard + +"url-parse@npm:~1.5.4": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"url@npm:^0.11.0": + version: 0.11.1 + resolution: "url@npm:0.11.1" + dependencies: + punycode: ^1.4.1 + qs: ^6.11.0 + checksum: a7de4b37bbcbe60ef199acda4ce437ef843c0ef3a4b34ec3e3d97e0446a5f50dc7bfeafbe33ad118cf4e5aa04805e1328f0d0126e254f2b77bb8498fa395c596 + languageName: node + linkType: hard + +"use@npm:^3.1.0": + version: 3.1.1 + resolution: "use@npm:3.1.1" + checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util@npm:^0.12.0, util@npm:^0.12.1": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + which-typed-array: ^1.1.2 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + +"v8-compile-cache@npm:^2.0.3, v8-compile-cache@npm:^2.1.1": + version: 2.3.0 + resolution: "v8-compile-cache@npm:2.3.0" + checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"validate.io-array@npm:^1.0.3": + version: 1.0.6 + resolution: "validate.io-array@npm:1.0.6" + checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b + languageName: node + linkType: hard + +"validate.io-function@npm:^1.0.2": + version: 1.0.2 + resolution: "validate.io-function@npm:1.0.2" + checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 + languageName: node + linkType: hard + +"validate.io-integer-array@npm:^1.0.0": + version: 1.0.0 + resolution: "validate.io-integer-array@npm:1.0.0" + dependencies: + validate.io-array: ^1.0.3 + validate.io-integer: ^1.0.4 + checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f + languageName: node + linkType: hard + +"validate.io-integer@npm:^1.0.4": + version: 1.0.5 + resolution: "validate.io-integer@npm:1.0.5" + dependencies: + validate.io-number: ^1.0.3 + checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 + languageName: node + linkType: hard + +"validate.io-number@npm:^1.0.3": + version: 1.0.3 + resolution: "validate.io-number@npm:1.0.3" + checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 + languageName: node + linkType: hard + +"vary@npm:^1": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + +"vlq@npm:^0.2.2": + version: 0.2.3 + resolution: "vlq@npm:0.2.3" + checksum: 2231d8caeb5b2c1a438677ab029e9a94aa6fb61ab05819c72691b792aea0456dab29576aff5ae29309ee45bad0a309e832dc45173119bca1393f3b87709d8f8d + languageName: node + linkType: hard + +"vm-browserify@npm:^1.1.2": + version: 1.1.2 + resolution: "vm-browserify@npm:1.1.2" + checksum: 10a1c50aab54ff8b4c9042c15fc64aefccce8d2fb90c0640403242db0ee7fb269f9b102bdb69cfb435d7ef3180d61fd4fb004a043a12709abaf9056cfd7e039d + languageName: node + linkType: hard + +"void-elements@npm:^2.0.0": + version: 2.0.1 + resolution: "void-elements@npm:2.0.1" + checksum: 700c07ba9cfa2dff88bb23974b3173118f9ad8107143db9e5d753552be15cf93380954d4e7f7d7bc80e7306c35c3a7fb83ab0ce4d4dcc18abf90ca8b31452126 + languageName: node + linkType: hard + +"watchpack@npm:^2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"webidl-conversions@npm:^6.1.0": + version: 6.1.0 + resolution: "webidl-conversions@npm:6.1.0" + checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb + languageName: node + linkType: hard + +"webpack-cli@npm:^3.3.12": + version: 3.3.12 + resolution: "webpack-cli@npm:3.3.12" + 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 + peerDependencies: + webpack: 4.x.x + bin: + webpack-cli: bin/cli.js + checksum: 3097084e7b141b63cb999dcd949703d4f7f88c7c78814645c05dbccdd0b0027805fe5b11eb9710d0fae9727fdf4543aa59e707a7be58960673983a6b7fdc8500 + languageName: node + linkType: hard + +"webpack-cli@npm:^5.0.1": + version: 5.1.4 + resolution: "webpack-cli@npm:5.1.4" + dependencies: + "@discoveryjs/json-ext": ^0.5.0 + "@webpack-cli/configtest": ^2.1.1 + "@webpack-cli/info": ^2.0.2 + "@webpack-cli/serve": ^2.0.5 + colorette: ^2.0.14 + commander: ^10.0.1 + cross-spawn: ^7.0.3 + envinfo: ^7.7.3 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^5.7.3 + peerDependencies: + webpack: 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 3a4ad0d0342a6815c850ee4633cc2a8a5dae04f918e7847f180bf24ab400803cf8a8943707ffbed03eb20fe6ce647f996f60a2aade87b0b4a9954da3da172ce0 + languageName: node + linkType: hard + +"webpack-merge@npm:^4.1.5": + version: 4.2.2 + resolution: "webpack-merge@npm:4.2.2" + dependencies: + lodash: ^4.17.15 + checksum: ce58bc8ab53a3dd5d9a0df65684571349eef53372bf8f224521072110485391335b26ab097c5f07829b88d0c146056944149566e5a953f05997b0fe2cbaf8dd6 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.7.3, webpack-merge@npm:^5.8.0": + version: 5.9.0 + resolution: "webpack-merge@npm:5.9.0" + dependencies: + clone-deep: ^4.0.1 + wildcard: ^2.0.0 + checksum: 64fe2c23aacc5f19684452a0e84ec02c46b990423aee6fcc5c18d7d471155bd14e9a6adb02bd3656eb3e0ac2532c8e97d69412ad14c97eeafe32fa6d10050872 + languageName: node + linkType: hard + +"webpack-sources@npm:^1.2.0": + version: 1.4.3 + resolution: "webpack-sources@npm:1.4.3" + dependencies: + source-list-map: ^2.0.0 + source-map: ~0.6.1 + checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 + languageName: node + linkType: hard + +"webpack@npm:^5, webpack@npm:^5.76.1": + version: 5.88.1 + resolution: "webpack@npm:5.88.1" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 + acorn: ^8.7.1 + acorn-import-assertions: ^1.9.0 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.15.0 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.2.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.7 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 726e7e05ab2e7c142609a673dd6aa1a711ed97f349418a2a393d650c5ddad172d191257f60e1e37f6b2a77261571c202aabd5ce9240791a686774f0801cf5ec2 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^2.3.0": + version: 2.3.0 + resolution: "whatwg-mimetype@npm:2.3.0" + checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 + languageName: node + linkType: hard + +"whatwg-url@npm:^8.0.0": + version: 8.7.0 + resolution: "whatwg-url@npm:8.7.0" + dependencies: + lodash: ^4.7.0 + tr46: ^2.1.0 + webidl-conversions: ^6.1.0 + checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.2": + version: 1.1.10 + resolution: "which-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.10 + checksum: 149f54f5d11773ce938c60a2c36306720a1824eccb62bda0620170932c2783fa50ad0226254c5741a962e35c7ccba5f4e4c402b8618cb3b4f2cf47bf5e6ade31 + languageName: node + linkType: hard + +"which@npm:1.3.1, which@npm:^1.2.1, which@npm:^1.2.14, which@npm:^1.2.9, which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:1.1.3": + version: 1.1.3 + resolution: "wide-align@npm:1.1.3" + dependencies: + string-width: ^1.0.2 || 2 + checksum: d09c8012652a9e6cab3e82338d1874a4d7db2ad1bd19ab43eb744acf0b9b5632ec406bdbbbb970a8f4771a7d5ef49824d038ba70aa884e7723f5b090ab87134d + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c + languageName: node + linkType: hard + +"word-wrap@npm:~1.2.3": + version: 1.2.3 + resolution: "word-wrap@npm:1.2.3" + checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f + languageName: node + linkType: hard + +"wordwrap@npm:~0.0.2": + version: 0.0.3 + resolution: "wordwrap@npm:0.0.3" + checksum: dfc2d3512e857ae4b3bc2e8d4e5d2c285c28a4b87cd1d81c977ce9a1a99152d355807e046851a3d61148f39d877fbb889352e07b65a9cbdd2256aa928e159026 + languageName: node + linkType: hard + +"worker-loader@npm:^3.0.2": + version: 3.0.8 + resolution: "worker-loader@npm:3.0.8" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^3.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 84f4a7eeb2a1d8b9704425837e017c91eedfae67ac89e0b866a2dcf283323c1dcabe0258196278b7d5fd0041392da895c8a0c59ddf3a94f1b2e003df68ddfec3 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^5.1.0": + version: 5.1.0 + resolution: "wrap-ansi@npm:5.1.0" + dependencies: + ansi-styles: ^3.2.0 + string-width: ^3.0.0 + strip-ansi: ^5.0.0 + checksum: 9b48c862220e541eb0daa22661b38b947973fc57054e91be5b0f2dcc77741a6875ccab4ebe970a394b4682c8dfc17e888266a105fb8b0a9b23c19245e781ceae + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"ws@npm:~8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + languageName: node + linkType: hard + +"xtend@npm:^4.0.2, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y-protocols@npm:^1.0.5": + version: 1.0.5 + resolution: "y-protocols@npm:1.0.5" + dependencies: + lib0: ^0.2.42 + checksum: d19404a4ebafcf3761c28b881abe8c32ab6e457db0e5ffc7dbb749cbc2c3bb98e003a43f3e8eba7f245b2698c76f2c4cdd1c2db869f8ec0c6ef94736d9a88652 + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": + version: 13.1.2 + resolution: "yargs-parser@npm:13.1.2" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-unparser@npm:1.6.0": + version: 1.6.0 + resolution: "yargs-unparser@npm:1.6.0" + dependencies: + flat: ^4.1.0 + lodash: ^4.17.15 + yargs: ^13.3.0 + checksum: ca662bb94af53d816d47f2162f0a1d135783f09de9fd47645a5cb18dd25532b0b710432b680d2c065ff45de122ba4a96433c41595fa7bfcc08eb12e889db95c1 + languageName: node + linkType: hard + +"yargs@npm:13.3.2, yargs@npm:^13.3.0, yargs@npm:^13.3.2": + version: 13.3.2 + resolution: "yargs@npm:13.3.2" + 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 + checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 + languageName: node + linkType: hard + +"yargs@npm:^16.1.1": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yjs@npm:^13.5.40": + version: 13.6.6 + resolution: "yjs@npm:13.6.6" + dependencies: + lib0: ^0.2.74 + checksum: c69cb9a084aa433e813f6d0a191ebad5800a9a7098f7c6715952e4f8e5fc23270e3b8d7d747e1b0d0f1adca5f6efe01019654389eddb3977006814c4e2ff7ce6 + languageName: node + linkType: hard diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..3ec7bb9bd --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,96 @@ +site_name: bqplot +site_url: https://bqplot.github.io/bqplot +repo_name: bqplot/bqplot +repo_url: https://github.com/bqplot/bqplot +theme: + name: material + custom_dir: custom_theme/ + logo: https://raw.githubusercontent.com/bqplot/design/master/bqplot-logo-notext-nobackground.svg + favicon: https://raw.githubusercontent.com/bqplot/design/master/bqplot-logo-notext-nobackground.svg + extra: + homepage: https://bqplot.github.io/bqplot + palette: + - scheme: default + primary: indigo + accent: indigo + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - scheme: slate + primary: indigo + accent: indigo + toggle: + icon: material/brightness-4 + name: Switch to light mode + features: + - navigation.instant + - navigation.sections + - navigation.tabs + - content.code.copy + - content.code.annotate + - search.suggest + - search.highlight +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.tabbed: + alternate_style: true + - pymdownx.inlinehilite + - admonition + - pymdownx.details + - pymdownx.superfences + - md_in_html + - attr_list +plugins: + - search + - mkdocstrings: + handlers: + python: + options: + show_root_heading: true + show_root_toc_entry: false + docstring_style: numpy + docstring_section_style: spacy + show_source: false +nav: + - bqplot: index.md + - Installation: installation.md + - Usage: + - Pyplot: usage/pyplot.md + - Object Model: usage/object-model.md + - Updating Plots: usage/updating-plots.md + - Figure: usage/figure.md + - Scales: usage/scales.md + - Axes: usage/axes.md + - Marks: + - Introduction: usage/marks/index.md + - Lines: usage/marks/lines.md + - Bars: usage/marks/bars.md + - Scatter: usage/marks/scatter.md + - Pie: usage/marks/pie.md + - Map: usage/marks/map.md + - Heatmap: usage/marks/heatmap.md + - Gridheatmap: usage/marks/gridheatmap.md + - Marketmap: usage/marks/market.md + - Label: usage/marks/label.md + - Interactions: + - Mark Interactions: usage/interactions/mark-interactions.md + - Selectors: usage/interactions/selectors.md + - Panzoom: usage/interactions/panzoom.md + - Handdraw: usage/interactions/hand-draw.md + - Advanced: + - Linking With ipywidgets: usage/advanced/linking-ipywidgets.md + - Dashboarding: usage/advanced/dashboards.md + - Compound Widgets: usage/advanced/compound-widgets.md + - API Documentation: + - Pyplot: api/pyplot.md + - Figure: api/figure.md + - Scales: api/scales.md + - Axes: api/axes.md + - Marks: api/marks.md + - Tooltip: api/tooltip.md + - Toolbar: api/toolbar.md + - Interactions: api/interactions.md + - MarketMap: api/market_map.md + - Migration Guide: migrate.md + - Contributing: contributing.md diff --git a/pyproject.toml b/pyproject.toml index ba04c53f8..5b447e732 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,3 @@ [build-system] -requires = ["jupyter_packaging~=0.7.9", "jupyterlab~=3.0", "setuptools>=40.8.0", "wheel"] +requires = ["jupyter_packaging~=0.12.2", "jupyterlab==4.*", "setuptools>=40.8.0", "wheel"] build-backend = "setuptools.build_meta" diff --git a/pytest.ini b/pytest.ini index 31cd3cca1..29fccb2f6 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,2 +1,5 @@ [pytest] addopts = --nbval --current-env + +; filterwarnings = +; error:::bqplot diff --git a/readthedocs.yml b/readthedocs.yml index b9eadb806..fa89d51cc 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -1,4 +1,12 @@ +version: 2 + +build: + os: "ubuntu-20.04" + tools: + python: "mambaforge-4.10" + +mkdocs: + configuration: mkdocs.yml + conda: - file: docs/environment.yml -python: - version: 3 + environment: docs/mkdocs-environment.yml diff --git a/setup.cfg b/setup.cfg index 81f3493b4..ff8e81d23 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,7 +3,7 @@ name = bqplot description = Interactive plotting for the Jupyter notebook, using d3.js and ipywidgets. long_description = file: README.md long_description_content_type = text/markdown -license = Apache +license = Apache-2.0 license_file = LICENSE author = The BQplot Development Team url = https://github.com/bqplot/bqplot @@ -12,13 +12,20 @@ keywords = ipython, jupyter, widgets, graphics, plotting, d3 [options] packages = find: install_requires = - ipywidgets>=7.5.0 + ipywidgets>=7.5.0,<9 traitlets>=4.3.0 traittypes>=0.0.6 - numpy>=1.10.4,<2.0.0 - pandas>=1.0.0,<2.0.0 + numpy>=1.10.4 + pandas>=1.0.0,<3.0.0 + bqscales>=0.3.3,<0.4 classifiers = Framework :: Jupyter + Framework :: Jupyter :: JupyterLab + Framework :: Jupyter :: JupyterLab :: 2 + Framework :: Jupyter :: JupyterLab :: 3 + Framework :: Jupyter :: JupyterLab :: 4 + Framework :: Jupyter :: JupyterLab :: Extensions + Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt Intended Audience :: Developers Intended Audience :: Science/Research Topic :: Multimedia :: Graphics @@ -26,14 +33,19 @@ classifiers = Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 + Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 python_requires = >=3.6 include_package_data = True zip_safe = False +[options.packages.find] +exclude = + tests + [bdist_wheel] universal=1 diff --git a/setup.py b/setup.py index 0976eb218..64044b3f8 100644 --- a/setup.py +++ b/setup.py @@ -28,6 +28,8 @@ import os from os.path import join as pjoin +name = 'bqplot' + here = os.path.dirname(os.path.abspath(__file__)) version = get_version(pjoin('bqplot', '_version.py')) @@ -35,8 +37,8 @@ # Representative files that should exist after a successful build jstargets = [ - pjoin('share', 'jupyter', 'nbextensions', 'bqplot', 'index.js'), - pjoin('share', 'jupyter', 'labextensions', 'bqplot', 'package.json'), + pjoin('share', 'jupyter', 'nbextensions', name, 'index.js'), + pjoin('share', 'jupyter', 'labextensions', name, 'package.json'), ] data_files_spec = [ @@ -47,7 +49,7 @@ ] js_command = combine_commands( - install_npm(js_dir, build_dir='share/jupyter/', source_dir='js/src', build_cmd='build'), ensure_targets(jstargets), + install_npm(js_dir, npm=['jlpm'], build_dir='share/jupyter/', source_dir='js/src', build_cmd='build'), ensure_targets(jstargets), ) # Adding "map_data" as package_data manually, this should not be needed because it's already diff --git a/test-environment.yml b/test-environment.yml index be28aa524..94298c5ba 100644 --- a/test-environment.yml +++ b/test-environment.yml @@ -4,19 +4,21 @@ channels: dependencies: - pip - python - - yarn - - ipywidgets >=5.2.2 + - ipywidgets >=8 - traitlets >=4.3.0 - traittypes >=0.0.6 - numpy >=1.10.4,<2.0.0 - pandas >=1.0.0,<2.0.0 + - bqscales >=0.3.3 - scipy - - jupyter - - jupyterlab=3.0.11 # to build the lab federated bundle - - jupyter-packaging # to build the wheel + - scikit-image + - nodejs =20 + - yarn =3 + - jupyterlab =4 + - jupyter-packaging - pytest - nbval - pytest-cov - - selenium - flake8 - nose + - codespell diff --git a/tests/binary_serialization_test.py b/tests/binary_serialization_test.py index c77cd87f6..9d738213a 100644 --- a/tests/binary_serialization_test.py +++ b/tests/binary_serialization_test.py @@ -77,8 +77,8 @@ def test_binary_serialize_text(): def test_dtype_with_str(): # dtype object is not supported text = np.array(['foo', None, 'bar']) - assert text.dtype == np.object - with pytest.raises(ValueError, match='.*Unsupported dtype object*'), pytest.warns(UserWarning): + assert text.dtype == object + with pytest.raises(ValueError, match='.*Unsupported dtype object*'): array_to_json(text) # but if they contain all strings, it should convert them. # This is for backward compatibility of expecting pandas dataframe @@ -92,7 +92,7 @@ def test_serialize_nested_list(): [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 2, 3], [0, 1, 2, 3, 4, 5, 6, 7], - ]) + ], dtype=object) serialized_data = array_to_json(data) @@ -116,7 +116,7 @@ def test_serialize_nested_list(): [0, 1, 2, 3, 4, 5, 6], np.array([0, 1, 2, 2, 3]), [0, 1, 2, 3] - ]) + ], dtype=object) serialized_data = array_to_json(data) @@ -139,7 +139,7 @@ def test_serialize_nested_list(): data = np.array([ ['Hello', 'Hallo'], ['Coucou', 'Hi', 'Ciao'] - ]) + ], dtype=object) serialized_data = array_to_json(data) diff --git a/tests/marks_test.py b/tests/marks_test.py index 31d64aa67..e53b7de5f 100644 --- a/tests/marks_test.py +++ b/tests/marks_test.py @@ -16,7 +16,7 @@ def test_scatter(figure): def test_lines(scales): # Create a Line chart with data of multiple shapes should work with binary serialization - lines = bqplot.Lines(x=[[0, 1], [0, 1, 2]], y=[[0, 1], [1, 0, -1]], scales=scales) + lines = bqplot.Lines(x=np.array([[0, 1], [0, 1, 2]], dtype=object), y=np.array([[0, 1], [1, 0, -1]], dtype=object), scales=scales) lines = bqplot.Lines(x=[[0, 1], [0, 1]], y=[[0, 1], [1, 0]], scales=scales) state = lines.get_state() @@ -34,7 +34,8 @@ def test_lines_ordinal(scale_ordinal, scale_y): def test_bars(scales): # Create a Bar chart with data of multiple shapes should work with binary serialization - bars = bqplot.Bars(x=[0, 1], y=[[0, 1], [1, 0, -1]], scales=scales) + y = np.array([[0, 1], [1, 0, -1]], dtype=object) + bars = bqplot.Bars(x=[0, 1], y=y, scales=scales) bars = bqplot.Bars(x=[0, 1], y=[[1, 2], [3, 4]], scales=scales) state = bars.get_state() diff --git a/ui-tests/.yarnrc.yml b/ui-tests/.yarnrc.yml new file mode 100644 index 000000000..35f85e38b --- /dev/null +++ b/ui-tests/.yarnrc.yml @@ -0,0 +1,2 @@ +nodeLinker: node-modules +enableImmutableInstalls: false diff --git a/ui-tests/README.md b/ui-tests/README.md index 3011931a0..6658adb41 100644 --- a/ui-tests/README.md +++ b/ui-tests/README.md @@ -5,24 +5,24 @@ This directory contains visual regression tests for bqplot, using Galata. In order to run them, you need to install dependencies: ```bash -const install -c conda-forge yarn jupyterlab=3.0.7 +conda install -c conda-forge jupyterlab=4 -yarn install +jlpm install ``` Then start JupyterLab in one terminal (you need to check that it properly starts on port 8888): ```bash -yarn run start-jlab +jlpm run start-jlab ``` Finally, run the galata tests: ```bash -yarn run test +jlpm run test ``` If bqplot visuals change, you can re-generate reference images by running: ```bash -yarn run update-references +jlpm run update-references ``` ## Notebooks directory diff --git a/ui-tests/galata-config.json b/ui-tests/galata-config.json deleted file mode 100644 index add5f97da..000000000 --- a/ui-tests/galata-config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "testId": "test" -} diff --git a/ui-tests/jupyter_server_config.py b/ui-tests/jupyter_server_config.py index 7cef023b8..f91275363 100644 --- a/ui-tests/jupyter_server_config.py +++ b/ui-tests/jupyter_server_config.py @@ -1,7 +1,5 @@ -c.ServerApp.port = 8888 -c.ServerApp.token = "" -c.ServerApp.password = "" -c.ServerApp.disable_check_xsrf = True -c.ServerApp.open_browser = False -c.LabApp.open_browser = False -c.LabApp.expose_app_in_browser = True +from jupyterlab.galata import configure_jupyter_server + +configure_jupyter_server(c) # noqa F821 +# Uncomment to set server log level to debug level +# c.ServerApp.log_level = "DEBUG" diff --git a/ui-tests/package.json b/ui-tests/package.json index c74a534e9..2ed3fbc07 100644 --- a/ui-tests/package.json +++ b/ui-tests/package.json @@ -4,17 +4,19 @@ "description": "bqplot UI Tests", "private": true, "scripts": { - "start-jlab": "jupyter lab --config ./jupyter_server_config.py", - "start-jlab:detached": "yarn run start-jlab&", - "clean": "rimraf tests/notebooks/.ipynb_checkpoints && rimraf test-output", - "test": "yarn run clean && galata --image-match-threshold 0.33", - "update-references": "galata --update-references" + "start": "jupyter lab --config jupyter_server_config.py", + "test": "playwright test", + "test:update": "playwright test --update-snapshots", + "test:debug": "PWDEBUG=1 playwright test" }, "author": "bqplot", "license": "Apache-2.0", + "devDependencies": { + "@jupyterlab/galata": "^5.5.0", + "@playwright/test": "^1.32.0" + }, "dependencies": { - "@jupyterlab/galata": "3.0.11-2", - "klaw-sync": "^6.0.0", - "rimraf": "^3.0.2" + "@types/klaw-sync": "^6.0.1", + "klaw-sync": "^6.0.0" } } diff --git a/ui-tests/playwright.config.js b/ui-tests/playwright.config.js new file mode 100644 index 000000000..aee29bd31 --- /dev/null +++ b/ui-tests/playwright.config.js @@ -0,0 +1,15 @@ +/** + * Configuration for Playwright using default from @jupyterlab/galata + */ +const baseConfig = require('@jupyterlab/galata/lib/playwright-config'); + +module.exports = { + ...baseConfig, + webServer: { + command: 'jlpm start', + url: 'http://localhost:8888/lab', + reuseExistingServer: !process.env.CI + }, + timeout: 600000, + retries: 3 +}; diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_0.png deleted file mode 100644 index 7a506b7fb..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_1.png deleted file mode 100644 index b584739f9..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_2.png deleted file mode 100644 index 9a8b5dd7c..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_3.png deleted file mode 100644 index e95d00022..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_4.png deleted file mode 100644 index d31c71c66..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_5.png deleted file mode 100644 index dd29b734c..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_6.png deleted file mode 100644 index e5fcee02a..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_7.png deleted file mode 100644 index dd29b734c..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars2d_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_0.png deleted file mode 100644 index 11a0b1e87..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_1.png deleted file mode 100644 index 5863e3821..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_2.png deleted file mode 100644 index 59150efe6..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_3.png deleted file mode 100644 index 47d4a7ab5..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_4.png deleted file mode 100644 index 21d71f989..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_5.png deleted file mode 100644 index e987f66cc..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_0.png deleted file mode 100644 index b571b8c40..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_1.png deleted file mode 100644 index 8cb32741a..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_2.png deleted file mode 100644 index 89412806b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_3.png deleted file mode 100644 index a2c96c529..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_4.png deleted file mode 100644 index b612681cd..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_5.png deleted file mode 100644 index 6c4d923ec..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_6.png deleted file mode 100644 index 4083a692e..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_7.png deleted file mode 100644 index f881b1da8..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_8.png deleted file mode 100644 index 4083a692e..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_bars_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_0.png deleted file mode 100644 index 3d77d2239..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_1.png deleted file mode 100644 index 118f6acce..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_2.png deleted file mode 100644 index a12ec21c6..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_figure_pyplot_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_graph_ipynb_cell_0.png deleted file mode 100644 index b1b796123..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_graph_ipynb_cell_1.png deleted file mode 100644 index 3ad110388..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_0.png deleted file mode 100644 index b0e3d0d7c..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_1.png deleted file mode 100644 index 13f440b89..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_2.png deleted file mode 100644 index 5bc56cc41..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_3.png deleted file mode 100644 index a2fc608cb..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_4.png deleted file mode 100644 index 42f6416a5..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_5.png deleted file mode 100644 index 9ac768de4..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_6.png deleted file mode 100644 index 9ac768de4..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_7.png deleted file mode 100644 index 9ac768de4..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_graph_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_0.png deleted file mode 100644 index 655c7c4ca..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_1.png deleted file mode 100644 index a9b354791..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_2.png deleted file mode 100644 index 51719b0fb..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_3.png deleted file mode 100644 index cea2ef544..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_4.png deleted file mode 100644 index 73682a398..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_0.png deleted file mode 100644 index 163e7a064..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_1.png deleted file mode 100644 index 199087eb9..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_2.png deleted file mode 100644 index 4f7a6886c..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_3.png deleted file mode 100644 index fa49c66a8..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_4.png deleted file mode 100644 index c8719bcae..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_5.png deleted file mode 100644 index 2b73e21b3..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_6.png deleted file mode 100644 index e7327bf19..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_7.png deleted file mode 100644 index 23ad41ed6..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_8.png deleted file mode 100644 index b269d3010..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_gridheatmap_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_0.png deleted file mode 100644 index bfb3bc837..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_1.png deleted file mode 100644 index 0af034409..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_2.png deleted file mode 100644 index f02197fbc..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_3.png deleted file mode 100644 index 71ecc63fd..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_4.png deleted file mode 100644 index c81cc813b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_5.png deleted file mode 100644 index f51397764..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_6.png deleted file mode 100644 index d62e9aaac..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_7.png deleted file mode 100644 index f51397764..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_hist_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_lines_ipynb_cell_0.png deleted file mode 100644 index db5a82b1a..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_lines_ipynb_cell_1.png deleted file mode 100644 index 189551cb8..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_0.png deleted file mode 100644 index 133c1f3a6..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_1.png deleted file mode 100644 index 3e641dc9f..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_10.png deleted file mode 100644 index a32c7a295..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_2.png deleted file mode 100644 index 0f984272e..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_3.png deleted file mode 100644 index c85e739e3..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_4.png deleted file mode 100644 index 1138ffe8a..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_5.png deleted file mode 100644 index 4a24a2484..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_6.png deleted file mode 100644 index f5aa76744..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_7.png deleted file mode 100644 index 0d500c0cf..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_8.png deleted file mode 100644 index ec2dd8120..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_9.png deleted file mode 100644 index ba6860924..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_lines_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_map_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_map_ipynb_cell_0.png deleted file mode 100644 index 3215e12a1..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_map_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_0.png deleted file mode 100644 index 6fbc9f465..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_1.png deleted file mode 100644 index 0a25298e1..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_2.png deleted file mode 100644 index 27ea78dc7..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_3.png deleted file mode 100644 index 8fc9b6680..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_4.png deleted file mode 100644 index 8fc9b6680..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_5.png deleted file mode 100644 index f873a42a9..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_6.png deleted file mode 100644 index 2730439d2..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_7.png deleted file mode 100644 index 76332a377..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_8.png deleted file mode 100644 index 3684eae80..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_9.png deleted file mode 100644 index c072acc7a..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ohlc_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_0.png deleted file mode 100644 index 2df5b04cb..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_1.png deleted file mode 100644 index f1c87e98f..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_2.png deleted file mode 100644 index 248257cb6..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_3.png deleted file mode 100644 index 2c78d5921..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ordinal_scale_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_0.png deleted file mode 100644 index ea0973ddf..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_1.png deleted file mode 100644 index 2bf599d17..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_10.png deleted file mode 100644 index 6408aa36a..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_11.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_11.png deleted file mode 100644 index 61c7346df..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_11.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_12.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_12.png deleted file mode 100644 index 3e026388e..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_12.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_13.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_13.png deleted file mode 100644 index 3efca4fef..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_13.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_14.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_14.png deleted file mode 100644 index 1d919d749..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_14.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_15.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_15.png deleted file mode 100644 index 7df202b6b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_15.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_16.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_16.png deleted file mode 100644 index 478c730a3..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_16.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_17.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_17.png deleted file mode 100644 index 34eb7ce9b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_17.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_18.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_18.png deleted file mode 100644 index 34eb7ce9b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_18.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_19.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_19.png deleted file mode 100644 index 46a6d20d1..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_19.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_2.png deleted file mode 100644 index b808c3604..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_3.png deleted file mode 100644 index d8dc2f2f1..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_4.png deleted file mode 100644 index 9f7625436..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_5.png deleted file mode 100644 index cf832f744..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_6.png deleted file mode 100644 index 9f7625436..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_7.png deleted file mode 100644 index ebcb6e296..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_8.png deleted file mode 100644 index 2f96482d1..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_9.png deleted file mode 100644 index 0bb3a23fe..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_pie_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_scatter_ipynb_cell_0.png deleted file mode 100644 index c9c6db401..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_scatter_ipynb_cell_1.png deleted file mode 100644 index f1c1c21c2..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_0.png deleted file mode 100644 index c9c6db401..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_1.png deleted file mode 100644 index 021471c87..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_10.png deleted file mode 100644 index 5ff6e0f10..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_11.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_11.png deleted file mode 100644 index c6f2df0e8..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_11.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_2.png deleted file mode 100644 index af630ec93..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_3.png deleted file mode 100644 index 783d017dc..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_4.png deleted file mode 100644 index af3e44e1d..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_5.png deleted file mode 100644 index 82d708534..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_6.png deleted file mode 100644 index 5411e4d7b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_7.png deleted file mode 100644 index 3b8efd08c..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_8.png deleted file mode 100644 index 5411e4d7b..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_9.png deleted file mode 100644 index c6f2df0e8..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scatter_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_0.png deleted file mode 100644 index c2ed3ccb8..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_1.png deleted file mode 100644 index 5483f5e53..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_10.png deleted file mode 100644 index fae2453dd..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_11.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_11.png deleted file mode 100644 index 04ff39ca6..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_11.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_12.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_12.png deleted file mode 100644 index fae2453dd..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_12.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_2.png deleted file mode 100644 index df865c14e..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_3.png deleted file mode 100644 index ffaf098d5..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_4.png deleted file mode 100644 index ffaf098d5..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_5.png deleted file mode 100644 index 13988c963..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_6.png deleted file mode 100644 index 742adb6ce..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_7.png deleted file mode 100644 index 7dd5630f3..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_8.png deleted file mode 100644 index 742adb6ce..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_9.png deleted file mode 100644 index 2fae24fdb..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_scattergl_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_0.png deleted file mode 100644 index 3b126e2da..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_1.png deleted file mode 100644 index 8a28559a7..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_2.png deleted file mode 100644 index 0abf66552..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_3.png deleted file mode 100644 index e5526351d..000000000 Binary files a/ui-tests/reference-output/screenshots/dark_ticks_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_0.png deleted file mode 100644 index 8e2a6eea1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_1.png deleted file mode 100644 index ef428e013..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_2.png deleted file mode 100644 index c973812a0..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_3.png deleted file mode 100644 index c4474b2cb..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_4.png deleted file mode 100644 index a32647616..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_5.png deleted file mode 100644 index c9d804bac..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_6.png deleted file mode 100644 index 29d8b1dc7..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_7.png deleted file mode 100644 index c9d804bac..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars2d_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_0.png deleted file mode 100644 index 1acbb7a23..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_1.png deleted file mode 100644 index 0bc2fd345..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_2.png deleted file mode 100644 index 5b37afd28..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_3.png deleted file mode 100644 index 58f2f6bf8..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_4.png deleted file mode 100644 index c3f784f81..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_5.png deleted file mode 100644 index a7487e751..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_0.png deleted file mode 100644 index b5c50a406..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_1.png deleted file mode 100644 index 3a7f7c222..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_2.png deleted file mode 100644 index 2d96ffe6b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_3.png deleted file mode 100644 index d2461d368..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_4.png deleted file mode 100644 index d94834705..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_5.png deleted file mode 100644 index f7b0eb40b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_6.png deleted file mode 100644 index 67219f8c1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_7.png deleted file mode 100644 index ce6440a73..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_8.png deleted file mode 100644 index 67219f8c1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_bars_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_0.png deleted file mode 100644 index fd8281cb2..000000000 Binary files a/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_1.png deleted file mode 100644 index 2a03f5a42..000000000 Binary files a/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_2.png deleted file mode 100644 index 5f1ecd36b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_figure_pyplot_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_graph_ipynb_cell_0.png deleted file mode 100644 index 2024c1504..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_graph_ipynb_cell_1.png deleted file mode 100644 index b26a746d5..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_0.png deleted file mode 100644 index c73a4d03d..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_1.png deleted file mode 100644 index b697b20b2..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_2.png deleted file mode 100644 index 62f1e89ff..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_3.png deleted file mode 100644 index 4d4e76668..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_4.png deleted file mode 100644 index 1090cdf84..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_5.png deleted file mode 100644 index a49476f25..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_6.png deleted file mode 100644 index a49476f25..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_7.png deleted file mode 100644 index a49476f25..000000000 Binary files a/ui-tests/reference-output/screenshots/light_graph_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_0.png deleted file mode 100644 index 6329fc1dc..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_1.png deleted file mode 100644 index f3770f907..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_2.png deleted file mode 100644 index 3eeefef20..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_3.png deleted file mode 100644 index 5c52c9231..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_4.png deleted file mode 100644 index 6de518cc7..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_0.png deleted file mode 100644 index 0f1368e70..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_1.png deleted file mode 100644 index 0461f9576..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_2.png deleted file mode 100644 index d4692a750..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_3.png deleted file mode 100644 index 14348372a..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_4.png deleted file mode 100644 index 60ae06990..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_5.png deleted file mode 100644 index 61a9ffeb4..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_6.png deleted file mode 100644 index bdb64324a..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_7.png deleted file mode 100644 index 637b1a318..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_8.png deleted file mode 100644 index 7397d9602..000000000 Binary files a/ui-tests/reference-output/screenshots/light_gridheatmap_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_0.png deleted file mode 100644 index 880ab066d..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_1.png deleted file mode 100644 index 035ce293d..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_2.png deleted file mode 100644 index 040fae88e..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_3.png deleted file mode 100644 index 4713eeedd..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_4.png deleted file mode 100644 index 8cfc69e91..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_5.png deleted file mode 100644 index 124624253..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_6.png deleted file mode 100644 index 3a66d080a..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_7.png deleted file mode 100644 index 124624253..000000000 Binary files a/ui-tests/reference-output/screenshots/light_hist_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_lines_ipynb_cell_0.png deleted file mode 100644 index 35f7edc4b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_lines_ipynb_cell_1.png deleted file mode 100644 index 7c53fafae..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_0.png deleted file mode 100644 index 328b89b10..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_1.png deleted file mode 100644 index dc5f6bed1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_10.png deleted file mode 100644 index 580aab289..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_2.png deleted file mode 100644 index 85f1d38d3..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_3.png deleted file mode 100644 index 6196f6189..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_4.png deleted file mode 100644 index b630f2e66..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_5.png deleted file mode 100644 index 492481808..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_6.png deleted file mode 100644 index 9a31ebd3c..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_7.png deleted file mode 100644 index 9f3bfabbc..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_8.png deleted file mode 100644 index aa986ab23..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_9.png deleted file mode 100644 index 666c6a854..000000000 Binary files a/ui-tests/reference-output/screenshots/light_lines_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_map_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_map_ipynb_cell_0.png deleted file mode 100644 index 1a5102a05..000000000 Binary files a/ui-tests/reference-output/screenshots/light_map_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_0.png deleted file mode 100644 index f8bae822b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_1.png deleted file mode 100644 index 7094b6392..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_2.png deleted file mode 100644 index 31f50e72b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_3.png deleted file mode 100644 index 12a06a616..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_4.png deleted file mode 100644 index 12a06a616..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_5.png deleted file mode 100644 index 51cc17c09..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_6.png deleted file mode 100644 index 778528fc1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_7.png deleted file mode 100644 index 650227343..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_8.png deleted file mode 100644 index 929aea1e5..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_9.png deleted file mode 100644 index 4639070d8..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ohlc_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_0.png deleted file mode 100644 index 299885e1d..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_1.png deleted file mode 100644 index b6690e4b3..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_2.png deleted file mode 100644 index f1bd9cc56..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_3.png deleted file mode 100644 index 079af60e1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ordinal_scale_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_0.png deleted file mode 100644 index 8cd12956b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_1.png deleted file mode 100644 index 82ee26f67..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_10.png deleted file mode 100644 index c144105b3..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_11.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_11.png deleted file mode 100644 index 965a2daa4..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_11.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_12.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_12.png deleted file mode 100644 index f72309a19..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_12.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_13.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_13.png deleted file mode 100644 index 052db86c2..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_13.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_14.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_14.png deleted file mode 100644 index 69f0d7e7d..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_14.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_15.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_15.png deleted file mode 100644 index 5211406db..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_15.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_16.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_16.png deleted file mode 100644 index 22c20a4da..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_16.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_17.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_17.png deleted file mode 100644 index c56162e10..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_17.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_18.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_18.png deleted file mode 100644 index c56162e10..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_18.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_19.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_19.png deleted file mode 100644 index 7c7c1261b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_19.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_2.png deleted file mode 100644 index 68bac45e8..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_3.png deleted file mode 100644 index 5c17fb6cc..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_4.png deleted file mode 100644 index c6410a563..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_5.png deleted file mode 100644 index dd6d20127..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_6.png deleted file mode 100644 index ef2c54d2b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_7.png deleted file mode 100644 index 94d3350df..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_8.png deleted file mode 100644 index 51f9bef6a..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_9.png deleted file mode 100644 index f57e7711a..000000000 Binary files a/ui-tests/reference-output/screenshots/light_pie_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_scatter_ipynb_cell_0.png deleted file mode 100644 index 98e6ea2ae..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_scatter_ipynb_cell_1.png deleted file mode 100644 index 7332c644b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_0.png deleted file mode 100644 index 98e6ea2ae..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_1.png deleted file mode 100644 index 14b20f78c..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_10.png deleted file mode 100644 index 01cc93775..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_11.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_11.png deleted file mode 100644 index b93d297ac..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_11.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_2.png deleted file mode 100644 index e0085853b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_3.png deleted file mode 100644 index 2b902051f..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_4.png deleted file mode 100644 index 9284ae11c..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_5.png deleted file mode 100644 index b20f3c8df..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_6.png deleted file mode 100644 index 1f5dfbc3b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_7.png deleted file mode 100644 index c36d7b568..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_8.png deleted file mode 100644 index 1f5dfbc3b..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_9.png deleted file mode 100644 index b93d297ac..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scatter_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_0.png deleted file mode 100644 index 461e94ef6..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_1.png deleted file mode 100644 index 406de80a1..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_10.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_10.png deleted file mode 100644 index c9f007e9c..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_10.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_11.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_11.png deleted file mode 100644 index 9d6fc205c..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_11.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_12.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_12.png deleted file mode 100644 index c9f007e9c..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_12.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_2.png deleted file mode 100644 index 9b4b18ce2..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_3.png deleted file mode 100644 index 55d131eaf..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_4.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_4.png deleted file mode 100644 index 55d131eaf..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_4.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_5.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_5.png deleted file mode 100644 index 7db4797c2..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_5.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_6.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_6.png deleted file mode 100644 index 8f7eb90da..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_6.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_7.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_7.png deleted file mode 100644 index 4e1c0e145..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_7.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_8.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_8.png deleted file mode 100644 index 8f7eb90da..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_8.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_9.png b/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_9.png deleted file mode 100644 index 512854ee7..000000000 Binary files a/ui-tests/reference-output/screenshots/light_scattergl_update_ipynb_cell_9.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_0.png b/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_0.png deleted file mode 100644 index 93864e288..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_0.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_1.png b/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_1.png deleted file mode 100644 index 5d10c0a38..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_1.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_2.png b/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_2.png deleted file mode 100644 index 8e8529576..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_2.png and /dev/null differ diff --git a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_3.png b/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_3.png deleted file mode 100644 index 1edd0a466..000000000 Binary files a/ui-tests/reference-output/screenshots/light_ticks_ipynb_cell_3.png and /dev/null differ diff --git a/ui-tests/tests/bqplot.test.ts b/ui-tests/tests/bqplot.test.ts index 4cdd635a2..18d256c17 100644 --- a/ui-tests/tests/bqplot.test.ts +++ b/ui-tests/tests/bqplot.test.ts @@ -1,171 +1,132 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. -import { galata, describe, test } from '@jupyterlab/galata'; +import { expect, IJupyterLabPageFixture, test } from '@jupyterlab/galata'; import * as path from 'path'; const klaw = require('klaw-sync'); -jest.setTimeout(600000); const filterUpdateNotebooks = item => { const basename = path.basename(item.path); return basename.includes('_update'); } -const testCellOutputs = async (theme: 'JupyterLab Light' | 'JupyterLab Dark') => { - const paths = klaw('tests/notebooks', {filter: item => !filterUpdateNotebooks(item), nodir: true}); +const testCellOutputs = async (page: IJupyterLabPageFixture, tmpPath: string, theme: 'JupyterLab Light' | 'JupyterLab Dark') => { + const paths = klaw(path.resolve(__dirname, './notebooks'), {filter: item => !filterUpdateNotebooks(item), nodir: true}); const notebooks = paths.map(item => path.basename(item.path)); - let results = []; - - const contextPrefix = theme == 'JupyterLab Light' ? 'light_' : 'dark_'; - galata.theme.setTheme(theme); + const contextPrefix = theme == 'JupyterLab Light' ? 'light' : 'dark'; + page.theme.setTheme(theme); for (const notebook of notebooks) { - galata.context.capturePrefix = contextPrefix + notebook; + let results = []; - await galata.notebook.open(notebook); - expect(await galata.notebook.isOpen(notebook)).toBeTruthy(); - await galata.notebook.activate(notebook); - expect(await galata.notebook.isActive(notebook)).toBeTruthy(); + await page.notebook.openByPath(`${tmpPath}/${notebook}`); + await page.notebook.activate(notebook); let numCellImages = 0; - const getCaptureImageName = (id: number): string => { - return `cell-${id}`; + const getCaptureImageName = (contextPrefix: string, notebook: string, id: number): string => { + return `${contextPrefix}-${notebook}-cell-${id}.png`; }; - await galata.notebook.runCellByCell({ + await page.notebook.runCellByCell({ onAfterCellRun: async (cellIndex: number) => { - const cell = await galata.notebook.getCellOutput(cellIndex); + const cell = await page.notebook.getCellOutput(cellIndex); if (cell) { - if ( - await galata.capture.screenshot( - getCaptureImageName(numCellImages), - cell - ) - ) { - numCellImages++; - } + results.push(await cell.screenshot()); + numCellImages++; } } }); + await page.notebook.save(); + for (let c = 0; c < numCellImages; ++c) { - results.push(await galata.capture.compareScreenshot(getCaptureImageName(c))); + expect(results[c]).toMatchSnapshot(getCaptureImageName(contextPrefix, notebook, c), {threshold: 0.3}); } - await galata.notebook.close(true); - } - - for (const result of results) { - expect(result).toBe('same'); + await page.notebook.close(true); } } -const testPlotUpdates = async (theme: 'JupyterLab Light' | 'JupyterLab Dark') => { - const paths = klaw('tests/notebooks', {filter: item => filterUpdateNotebooks(item), nodir: true}); +const testPlotUpdates = async (page: IJupyterLabPageFixture, tmpPath: string, theme: 'JupyterLab Light' | 'JupyterLab Dark') => { + const paths = klaw(path.resolve(__dirname, './notebooks'), {filter: item => filterUpdateNotebooks(item), nodir: true}); const notebooks = paths.map(item => path.basename(item.path)); - let results = []; - - const contextPrefix = theme == 'JupyterLab Light' ? 'light_' : 'dark_'; - galata.theme.setTheme(theme); + const contextPrefix = theme == 'JupyterLab Light' ? 'light' : 'dark'; + page.theme.setTheme(theme); for (const notebook of notebooks) { - galata.context.capturePrefix = contextPrefix + notebook; - - await galata.notebook.open(notebook); - expect(await galata.notebook.isOpen(notebook)).toBeTruthy(); - await galata.notebook.activate(notebook); - expect(await galata.notebook.isActive(notebook)).toBeTruthy(); + let results = []; - let numCellImages = 0; + await page.notebook.openByPath(`${tmpPath}/${notebook}`); + await page.notebook.activate(notebook); - const getCaptureImageName = (id: number): string => { - return `cell-${id}`; + const getCaptureImageName = (contextPrefix: string, notebook: string, id: number): string => { + return `${contextPrefix}-${notebook}-cell-${id}.png`; }; - await galata.notebook.runCellByCell({ + let cellCount = 0; + await page.notebook.runCellByCell({ onAfterCellRun: async (cellIndex: number) => { // Always get first cell output which must contain the plot - const cell = await galata.notebook.getCellOutput(0); + const cell = await page.notebook.getCellOutput(0); if (cell) { - if ( - await galata.capture.screenshot( - getCaptureImageName(numCellImages), - cell - ) - ) { - numCellImages++; - } + results.push(await cell.screenshot()); + cellCount++; } } }); - for (let c = 0; c < numCellImages; ++c) { - results.push(await galata.capture.compareScreenshot(getCaptureImageName(c))); - } + await page.notebook.save(); - await galata.notebook.close(true); - } + for (let i = 0; i < cellCount; i++) { + expect(results[i]).toMatchSnapshot(getCaptureImageName(contextPrefix, notebook, i), {threshold: 0.3}); + } - for (const result of results) { - expect(result).toBe('same'); + await page.notebook.close(true); } }; -describe('bqplot Visual Regression', () => { - beforeAll(async () => { - await galata.resetUI(); - }); - - afterAll(async () => { - galata.context.capturePrefix = ''; - }); +test.describe('bqplot Visual Regression', () => { + test.beforeEach(async ({ page, tmpPath }) => { + page.on("console", (message) => { + console.log('CONSOLE MSG ---', message.text()); + }); - test('Upload files to JupyterLab', async () => { - await galata.contents.moveDirectoryToServer( - path.resolve(__dirname, `./notebooks`), - 'uploaded' + await page.contents.uploadDirectory( + path.resolve(__dirname, './notebooks'), + tmpPath ); - expect( - await galata.contents.fileExists('uploaded/scatter.ipynb') - ).toBeTruthy(); - }); - - test('Refresh File Browser', async () => { - await galata.filebrowser.refresh(); - }); - - test('Open directory uploaded', async () => { - await galata.filebrowser.openDirectory('uploaded'); - expect( - await galata.filebrowser.isFileListedInBrowser('scatter.ipynb') - ).toBeTruthy(); - }); - - test('Light theme: Check bqplot first renders', async () => { - await testCellOutputs('JupyterLab Light'); - }); - - test('Dark theme: Check bqplot first renders', async () => { - await testCellOutputs('JupyterLab Dark'); + await page.filebrowser.openDirectory(tmpPath); }); - test('Light theme: Check bqplot update plot properties', async () => { - await testPlotUpdates('JupyterLab Light'); + test('Light theme: Check bqplot first renders', async ({ + page, + tmpPath, + }) => { + await testCellOutputs(page, tmpPath, 'JupyterLab Light'); }); - test('Dark theme: Check bqplot update plot properties', async () => { - await testPlotUpdates('JupyterLab Dark'); + test('Dark theme: Check bqplot first renders', async ({ + page, + tmpPath, + }) => { + await testCellOutputs(page, tmpPath, 'JupyterLab Dark'); }); - test('Open home directory', async () => { - await galata.filebrowser.openHomeDirectory(); + test('Light theme: Check bqplot update plot properties', async ({ + page, + tmpPath, + }) => { + await testPlotUpdates(page, tmpPath, 'JupyterLab Light'); }); - test('Delete uploaded directory', async () => { - await galata.contents.deleteDirectory('uploaded'); + test('Dark theme: Check bqplot update plot properties', async ({ + page, + tmpPath, + }) => { + await testPlotUpdates(page, tmpPath, 'JupyterLab Dark'); }); }); diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-0-linux.png new file mode 100644 index 000000000..8a8c8c100 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-1-linux.png new file mode 100644 index 000000000..5594cca2a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-2-linux.png new file mode 100644 index 000000000..94aa38c65 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-3-linux.png new file mode 100644 index 000000000..f306a5d21 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-4-linux.png new file mode 100644 index 000000000..8c0fe33b9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-5-linux.png new file mode 100644 index 000000000..b926e3307 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..83aade78a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..c9f4e52de Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..eb8ddf307 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..7612ab971 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..71da9db42 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..a50e99412 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..ea11ed7b9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..85dd30d2d Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..ea11ed7b9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..7a43d203b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..6f9342b79 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..28a6cfbd4 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..602f5c12e Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..66a04aa48 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..867532d21 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..a40e1968c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..73e5d1d05 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-bars2d-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-0-linux.png new file mode 100644 index 000000000..3cfe46984 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-1-linux.png new file mode 100644 index 000000000..1151467ce Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-2-linux.png new file mode 100644 index 000000000..15cda8cd0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-figure-pyplot-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-ipynb-cell-0-linux.png new file mode 100644 index 000000000..2e26f5237 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-ipynb-cell-1-linux.png new file mode 100644 index 000000000..f4ba01b7f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..6df4a6464 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..f77c86e4d Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..07a3f2866 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..5979a0bab Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..6a4283050 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..c7ec8b35e Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..7b1b3e586 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..7b1b3e586 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-graph-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-0-linux.png new file mode 100644 index 000000000..e381ecf2c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-1-linux.png new file mode 100644 index 000000000..15511cae4 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-2-linux.png new file mode 100644 index 000000000..82cf8d568 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-3-linux.png new file mode 100644 index 000000000..a25c2daa2 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-4-linux.png new file mode 100644 index 000000000..4e05a3e0f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..217f0f900 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..41e78affb Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..9803e7e53 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..121303ae8 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..435da8b53 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..fc7c8cfe8 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..59dbea259 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..9fcd12214 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..59dbea259 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-gridheatmap-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..cca689be1 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..8011a42f0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..2ed7cd5a1 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..e6a1e52de Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..99f802414 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..a646adf5d Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..d24883107 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..4624b19f3 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-hist-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-index-selector-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-index-selector-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..2c3e27555 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-index-selector-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-index-selector-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-index-selector-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..1c504ae65 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-index-selector-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-ipynb-cell-0-linux.png new file mode 100644 index 000000000..86712096a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-ipynb-cell-1-linux.png new file mode 100644 index 000000000..339da3454 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..3f9b87f58 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..bac97eeac Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-10-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-10-linux.png new file mode 100644 index 000000000..7a5f96ef4 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-10-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-11-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-11-linux.png new file mode 100644 index 000000000..37aa661e1 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-11-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-12-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-12-linux.png new file mode 100644 index 000000000..f1023a0b3 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-12-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-13-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-13-linux.png new file mode 100644 index 000000000..0630d2d31 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-13-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..4203731ce Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..d52bc28cb Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..c7f542e46 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..6b7655250 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..9102f747b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..6438c94e4 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..0c88cad69 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..e6e3d4617 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-lines-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-map-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-map-ipynb-cell-0-linux.png new file mode 100644 index 000000000..40dc0a9a7 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-map-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..dc2dfd7a6 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..aa960e2e9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..6766c7de9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..3a6d0a4c3 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..3a6d0a4c3 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..402b2e12c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..4ebc70bc1 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..8f9697a75 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..3a4f8bb74 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..3a4f8bb74 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ohlc-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-0-linux.png new file mode 100644 index 000000000..fde8efe2d Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-1-linux.png new file mode 100644 index 000000000..183ba53ec Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-2-linux.png new file mode 100644 index 000000000..76110cffb Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-3-linux.png new file mode 100644 index 000000000..d51de6310 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ordinal-scale-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..1db59fce0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..b3f554028 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-10-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-10-linux.png new file mode 100644 index 000000000..1d07c0360 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-10-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-11-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-11-linux.png new file mode 100644 index 000000000..3dffd26fa Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-11-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-12-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-12-linux.png new file mode 100644 index 000000000..069a7787b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-12-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-13-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-13-linux.png new file mode 100644 index 000000000..e54756dea Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-13-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-14-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-14-linux.png new file mode 100644 index 000000000..5225618de Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-14-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-15-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-15-linux.png new file mode 100644 index 000000000..3768fc1d5 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-15-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-16-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-16-linux.png new file mode 100644 index 000000000..e44f652f7 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-16-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-17-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-17-linux.png new file mode 100644 index 000000000..90297f671 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-17-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-18-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-18-linux.png new file mode 100644 index 000000000..09a305799 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-18-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-19-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-19-linux.png new file mode 100644 index 000000000..a8749e1ca Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-19-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..bf536461e Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..8ab02236b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..62fe9ab91 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..b9b8fe895 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..b39f9697c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..9d552cbfb Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..242c6c0f8 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..19e28d514 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-pie-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-ipynb-cell-0-linux.png new file mode 100644 index 000000000..17da51cea Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-ipynb-cell-1-linux.png new file mode 100644 index 000000000..06ab7b62a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..17da51cea Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..ebc77f16e Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-10-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-10-linux.png new file mode 100644 index 000000000..0778ddd88 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-10-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-11-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-11-linux.png new file mode 100644 index 000000000..531301310 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-11-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..d8af7f835 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..bffa64314 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..b025cee32 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..55ff3560a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..c7ac5c232 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..834744eed Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..c7ac5c232 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..531301310 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-scatter-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-0-linux.png new file mode 100644 index 000000000..14364f3aa Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-1-linux.png new file mode 100644 index 000000000..09ce78362 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-2-linux.png new file mode 100644 index 000000000..2c93057bf Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-3-linux.png new file mode 100644 index 000000000..b1eee2c93 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/dark-ticks-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-0-linux.png new file mode 100644 index 000000000..6d41a6059 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-1-linux.png new file mode 100644 index 000000000..3ed34dcfe Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-2-linux.png new file mode 100644 index 000000000..884357f57 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-3-linux.png new file mode 100644 index 000000000..e0c71ef76 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-4-linux.png new file mode 100644 index 000000000..063a6934b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-5-linux.png new file mode 100644 index 000000000..cb6641050 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..c8d430f82 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..7d05c6f46 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..68909cd9e Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..844aa3392 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..802a099ea Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..1f59e8770 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..1d463e8cf Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..a382559c3 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..1d463e8cf Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..95b65ac66 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..acc1d5221 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..45b3a0430 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..1e3b68553 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..ba0968db2 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..736bf697f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..f569da116 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..f356f0339 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-bars2d-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-0-linux.png new file mode 100644 index 000000000..013acbacc Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-1-linux.png new file mode 100644 index 000000000..2925fd5bb Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-2-linux.png new file mode 100644 index 000000000..f4365b57b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-figure-pyplot-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-ipynb-cell-0-linux.png new file mode 100644 index 000000000..419b12552 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-ipynb-cell-1-linux.png new file mode 100644 index 000000000..3511eec9f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..58be16635 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..15a4bc1ab Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..0e1d13ecd Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..d4c31992c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..3cf096fb7 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..fee04eef2 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..c19887e43 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..c19887e43 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-graph-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-0-linux.png new file mode 100644 index 000000000..7dccf2f7f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-1-linux.png new file mode 100644 index 000000000..2edd02a67 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-2-linux.png new file mode 100644 index 000000000..86de65afa Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-3-linux.png new file mode 100644 index 000000000..a7682442d Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-4-linux.png new file mode 100644 index 000000000..4c0c6ac66 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..e885b6c19 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..f0dcab5cc Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..0af152138 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..7f1abe54b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..b0f361bda Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..25bd987c9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..069d8d091 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..4fae8feb5 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..069d8d091 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-gridheatmap-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..43716ba32 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..59cf034b8 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..95540034b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..c776bf0ee Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..39a9dab41 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..63e19059c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..8aae4562e Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..6a545eeba Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-hist-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-index-selector-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-index-selector-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..10232759a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-index-selector-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-index-selector-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-index-selector-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..d208e9406 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-index-selector-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-ipynb-cell-0-linux.png new file mode 100644 index 000000000..d640f2aa4 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-ipynb-cell-1-linux.png new file mode 100644 index 000000000..0023b1304 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..577a9c79a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..708b56d70 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-10-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-10-linux.png new file mode 100644 index 000000000..6ddc776cc Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-10-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-11-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-11-linux.png new file mode 100644 index 000000000..e65701ff6 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-11-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-12-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-12-linux.png new file mode 100644 index 000000000..3680fc8aa Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-12-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-13-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-13-linux.png new file mode 100644 index 000000000..83bd0dea1 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-13-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..ccd9cae7a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..43f04013a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..09788256f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..12663bb9c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..48aa5cd32 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..12b878a50 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..369402044 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..69095056f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-lines-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-map-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-map-ipynb-cell-0-linux.png new file mode 100644 index 000000000..b8ce9c402 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-map-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..3bdb87c6b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..d4660d5ad Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..a6fb46587 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..1bd393b29 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..1bd393b29 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..5f819d964 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..d2748581b Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..29cac001f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..78d229d40 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..78d229d40 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ohlc-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-0-linux.png new file mode 100644 index 000000000..bf7528802 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-1-linux.png new file mode 100644 index 000000000..33d78d44a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-2-linux.png new file mode 100644 index 000000000..2760d792f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-3-linux.png new file mode 100644 index 000000000..636f5c768 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ordinal-scale-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..ffa8ba16c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..5b5a3b717 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-10-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-10-linux.png new file mode 100644 index 000000000..1467722dd Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-10-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-11-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-11-linux.png new file mode 100644 index 000000000..688d30ab4 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-11-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-12-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-12-linux.png new file mode 100644 index 000000000..f7e1ab4c9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-12-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-13-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-13-linux.png new file mode 100644 index 000000000..61f40b287 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-13-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-14-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-14-linux.png new file mode 100644 index 000000000..d24c721f9 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-14-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-15-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-15-linux.png new file mode 100644 index 000000000..0af8a833f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-15-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-16-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-16-linux.png new file mode 100644 index 000000000..e6ab7dea8 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-16-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-17-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-17-linux.png new file mode 100644 index 000000000..9a7c2862a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-17-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-18-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-18-linux.png new file mode 100644 index 000000000..2b758a352 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-18-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-19-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-19-linux.png new file mode 100644 index 000000000..4f3d93373 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-19-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..302d168b5 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..7046daf6a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..12e3b176d Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..f1e4a7909 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..de76a697a Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..7cb3fdb83 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..cfd0fbd9c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..592372221 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-pie-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-ipynb-cell-0-linux.png new file mode 100644 index 000000000..b8f19dd7f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-ipynb-cell-1-linux.png new file mode 100644 index 000000000..c4ee860f0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-0-linux.png new file mode 100644 index 000000000..b8f19dd7f Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-1-linux.png new file mode 100644 index 000000000..7b80d4183 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-10-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-10-linux.png new file mode 100644 index 000000000..98e08ea41 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-10-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-11-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-11-linux.png new file mode 100644 index 000000000..5227771f0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-11-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-2-linux.png new file mode 100644 index 000000000..024e3f7c2 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-3-linux.png new file mode 100644 index 000000000..c472ad112 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-4-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-4-linux.png new file mode 100644 index 000000000..5b3284528 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-4-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-5-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-5-linux.png new file mode 100644 index 000000000..f825f36e0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-5-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-6-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-6-linux.png new file mode 100644 index 000000000..6e4eb5a26 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-6-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-7-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-7-linux.png new file mode 100644 index 000000000..49d55de90 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-7-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-8-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-8-linux.png new file mode 100644 index 000000000..6e4eb5a26 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-8-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-9-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-9-linux.png new file mode 100644 index 000000000..5227771f0 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-scatter-update-ipynb-cell-9-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-0-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-0-linux.png new file mode 100644 index 000000000..468ac0b6c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-0-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-1-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-1-linux.png new file mode 100644 index 000000000..4c7c3aa3c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-1-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-2-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-2-linux.png new file mode 100644 index 000000000..96fc8b19c Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-2-linux.png differ diff --git a/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-3-linux.png b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-3-linux.png new file mode 100644 index 000000000..7375025f3 Binary files /dev/null and b/ui-tests/tests/bqplot.test.ts-snapshots/light-ticks-ipynb-cell-3-linux.png differ diff --git a/ui-tests/tests/notebooks/bars.ipynb b/ui-tests/tests/notebooks/bars.ipynb index d1f91f173..d58454f1f 100644 --- a/ui-tests/tests/notebooks/bars.ipynb +++ b/ui-tests/tests/notebooks/bars.ipynb @@ -3,39 +3,23 @@ { "cell_type": "code", "execution_count": null, - "id": "romance-heavy", + "id": "excellent-column", "metadata": {}, "outputs": [], "source": [ "from bqplot import *\n", "\n", "import numpy as np\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "physical-right", - "metadata": {}, - "outputs": [], - "source": [ + "import pandas as pd\n", + "\n", "size = 100\n", "np.random.seed(0)\n", "\n", "x_data = range(size)\n", "y_data = np.random.randn(size)\n", "y_data_2 = np.random.randn(size)\n", - "y_data_3 = np.cumsum(np.random.randn(size) * 100.)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "excellent-column", - "metadata": {}, - "outputs": [], - "source": [ + "y_data_3 = np.cumsum(np.random.randn(size) * 100.)\n", + "\n", "# Create Bar\n", "x_ord = OrdinalScale()\n", "y_sc = LinearScale()\n", @@ -161,7 +145,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -175,7 +159,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.10.0" } }, "nbformat": 4, diff --git a/ui-tests/tests/notebooks/bars2d_update.ipynb b/ui-tests/tests/notebooks/bars2d_update.ipynb index 4f217bbed..a6d168a4b 100644 --- a/ui-tests/tests/notebooks/bars2d_update.ipynb +++ b/ui-tests/tests/notebooks/bars2d_update.ipynb @@ -109,7 +109,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -123,7 +123,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.10.0" } }, "nbformat": 4, diff --git a/ui-tests/tests/notebooks/index_selector_update.ipynb b/ui-tests/tests/notebooks/index_selector_update.ipynb new file mode 100644 index 000000000..007efd743 --- /dev/null +++ b/ui-tests/tests/notebooks/index_selector_update.ipynb @@ -0,0 +1,74 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "06ac2448-da47-4939-a22a-e4b556fba103", + "metadata": {}, + "outputs": [], + "source": [ + "from bqplot import *\n", + "from bqplot.interacts import *\n", + "\n", + "# Create Scatter\n", + "sc_x = LinearScale()\n", + "sc_y = LinearScale()\n", + "\n", + "scatt = Scatter(\n", + " x=list(range(10)), \n", + " y=[20, 3, 23, 5, 6, 12, 23, 14, 20, 3],\n", + " scales={'x': sc_x, 'y': sc_y},\n", + " selected_style={\"opacity\": \"1\"},\n", + " unselected_style={\"opacity\": \"0.2\"}\n", + ")\n", + "\n", + "sel = IndexSelector(\n", + " marks=[scatt], \n", + " scale=sc_x,\n", + " selected=3\n", + ")\n", + "\n", + "ax_x = Axis(scale=sc_x)\n", + "ax_y = Axis(scale=sc_y, orientation='vertical')\n", + "\n", + "fig = Figure(\n", + " marks=[scatt], \n", + " axes=[ax_x, ax_y],\n", + " interaction=sel\n", + ")\n", + "fig" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0600d9f-2256-4610-a14e-471c255d4924", + "metadata": {}, + "outputs": [], + "source": [ + "sel.selected = 5" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/ui-tests/tests/notebooks/lines.ipynb b/ui-tests/tests/notebooks/lines.ipynb index f2cf96a24..6338fb5aa 100644 --- a/ui-tests/tests/notebooks/lines.ipynb +++ b/ui-tests/tests/notebooks/lines.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49969f7f", + "id": "da5f4803", "metadata": {}, "outputs": [], "source": [ @@ -12,16 +12,8 @@ "import numpy as np\n", "import pandas as pd\n", "\n", - "np.random.seed(0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "da5f4803", - "metadata": {}, - "outputs": [], - "source": [ + "np.random.seed(0)\n", + "\n", "x = list(range(10))\n", "y = [10**i for i in range(10)]\n", "\n", @@ -60,7 +52,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -74,7 +66,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.10.0" } }, "nbformat": 4, diff --git a/ui-tests/tests/notebooks/lines_update.ipynb b/ui-tests/tests/notebooks/lines_update.ipynb index 5ab333558..cd74b9ca4 100644 --- a/ui-tests/tests/notebooks/lines_update.ipynb +++ b/ui-tests/tests/notebooks/lines_update.ipynb @@ -22,7 +22,7 @@ "sc_y = LinearScale()\n", "\n", "lines = Lines(x=np.arange(len(y1)), y=[y1, y2, y3, y4],\n", - " scales={'x': sc_x, 'y': sc_y})\n", + " scales={'x': sc_x, 'y': sc_y}, apply_clip = False)\n", "ax_x = Axis(scale=sc_x, label='Index')\n", "ax_y = Axis(scale=sc_y, orientation='vertical', label='lines')\n", "\n", @@ -128,6 +128,36 @@ "source": [ "lines.marker = 'circle'" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "384540e9-2d64-4508-827f-1f6d6aedd268", + "metadata": {}, + "outputs": [], + "source": [ + "lines.labels_visibility = 'label'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7444d361-f8f3-4641-88ef-fbe84450bfb3", + "metadata": {}, + "outputs": [], + "source": [ + "lines.x, lines.y = [], []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "481f09e7-f7a9-4393-8388-a608b216ef41", + "metadata": {}, + "outputs": [], + "source": [ + "lines.x, lines.y = np.arange(len(y1)), [y1, y2, y3, y4]" + ] } ], "metadata": { diff --git a/ui-tests/tests/notebooks/scatter.ipynb b/ui-tests/tests/notebooks/scatter.ipynb index 811ffc686..616471d52 100644 --- a/ui-tests/tests/notebooks/scatter.ipynb +++ b/ui-tests/tests/notebooks/scatter.ipynb @@ -3,23 +3,15 @@ { "cell_type": "code", "execution_count": null, - "id": "considered-injection", + "id": "juvenile-dialogue", "metadata": {}, "outputs": [], "source": [ "from bqplot import *\n", "\n", "import numpy as np\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "direct-desperate", - "metadata": {}, - "outputs": [], - "source": [ + "import pandas as pd\n", + "\n", "# Test data\n", "\n", "np.random.seed(0)\n", @@ -39,16 +31,8 @@ "log_sec1 = np.log(sec1_levels)\n", "sec1_returns = log_sec1[1:] - log_sec1[:-1]\n", "\n", - "sec2_levels = np.array(price_data[symbols[1]].values.flatten())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "juvenile-dialogue", - "metadata": {}, - "outputs": [], - "source": [ + "sec2_levels = np.array(price_data[symbols[1]].values.flatten())\n", + "\n", "# Create Scatter\n", "sc_x = DateScale()\n", "sc_y = LinearScale()\n", @@ -77,7 +61,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -91,7 +75,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.10.0" } }, "nbformat": 4, diff --git a/ui-tests/tests/notebooks/scattergl_update.ipynb b/ui-tests/tests/notebooks/scattergl_update.ipynb deleted file mode 100644 index 4a21fddfa..000000000 --- a/ui-tests/tests/notebooks/scattergl_update.ipynb +++ /dev/null @@ -1,196 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "faf6701a", - "metadata": {}, - "outputs": [], - "source": [ - "from bqplot import *\n", - "\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "# Test data\n", - "\n", - "np.random.seed(0)\n", - "price_data = pd.DataFrame(np.cumsum(np.random.randn(150, 2).dot([[1.0, -0.8], [-0.8, 1.0]]), axis=0) + 100,\n", - " columns=['Security 1', 'Security 2'], index=pd.date_range(start='01-01-2007', periods=150))\n", - "size = 100\n", - "x_data = range(size)\n", - "y_data = np.cumsum(np.random.randn(size) * 100.0)\n", - "ord_keys = np.array(['A', 'B', 'C', 'D', 'E', 'F'])\n", - "ordinal_data = np.random.randint(5, size=size)\n", - "\n", - "symbols = ['Security 1', 'Security 2']\n", - "\n", - "dates_all = price_data.index.values\n", - "dates_all_t = dates_all[1:]\n", - "sec1_levels = np.array(price_data[symbols[0]].values.flatten())\n", - "log_sec1 = np.log(sec1_levels)\n", - "sec1_returns = log_sec1[1:] - log_sec1[:-1]\n", - "\n", - "sec2_levels = np.array(price_data[symbols[1]].values.flatten())\n", - "\n", - "# First draw\n", - "\n", - "sc_x = DateScale()\n", - "sc_y = LinearScale()\n", - "\n", - "scatt = ScatterGL(x=dates_all, y=sec2_levels, scales={'x': sc_x, 'y': sc_y})\n", - "ax_x = Axis(scale=sc_x, label='Date')\n", - "ax_y = Axis(scale=sc_y, orientation='vertical', tick_format='0.0f', label='Security 2')\n", - "\n", - "fig = Figure(marks=[scatt], axes=[ax_x, ax_y])\n", - "fig" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3712536e", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.opacities = [0.3, 0.5, 1.]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ade1421e", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.colors = ['green', 'red', 'blue']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "46db1d61", - "metadata": {}, - "outputs": [], - "source": [ - "# Doesn't work?\n", - "# scatt.y = -scatt.y" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4551a614", - "metadata": {}, - "outputs": [], - "source": [ - "# Doesn't work?\n", - "# scatt.default_size = 70" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3717a327", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.scales = dict(x=sc_x, y=sc_y, color=ColorScale())\n", - "scatt.color = scatt.y" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6b814151", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.marker = 'square'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b9783dc7", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.stroke = 'black'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "77a44842", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.stroke = None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "93564933", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.fill = False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d43d838a", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.fill = True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "74371328", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.selected_style = dict(fill='green')\n", - "scatt.unselected_style = dict(fill='red')\n", - "scatt.selected = list(range(50, 60))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a4e5f639", - "metadata": {}, - "outputs": [], - "source": [ - "scatt.selected = None" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/ui-tests/yarn.lock b/ui-tests/yarn.lock index 28019b50f..336e78d1b 100644 --- a/ui-tests/yarn.lock +++ b/ui-tests/yarn.lock @@ -1,4469 +1,6191 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== - -"@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== - dependencies: - "@babel/types" "^7.14.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/template@^7.14.5", "@babel/template@^7.3.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" - slash "^3.0.0" - -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== - dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== - dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== - dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" - -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" - -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" - -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== - dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== - dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jupyterlab/galata@3.0.11-2": - version "3.0.11-2" - resolved "https://registry.yarnpkg.com/@jupyterlab/galata/-/galata-3.0.11-2.tgz#eeaf1a571a744718d664df7a3decc40907405bdc" - integrity sha512-i8jBhL0JUezAZ0Apa56Gy7lH6K0uuYhlkVwY0AYfrMJJw8ILLnd8yunt7QXAPto0m+QC3ud4VZ82KYck4W9+3w== - dependencies: - "@types/dateformat" "^3.0.1" - "@types/jest" "^25.1.2" - "@types/js-beautify" "^1.8.2" - "@types/node" "^13.1.1" - "@types/pixelmatch" "^5.0.0" - "@types/pngjs" "^3.4.1" - "@yarnpkg/lockfile" "^1.1.0" - ansi_up "^5.0.0" - axios "^0.21.1" - chalk "^4.0.0" - cross-spawn "^6.0.5" - dateformat "^3.0.3" - ejs "^3.0.1" - events "^3.0.0" - fs-extra "^8.1.0" - http-server "^0.12.1" - inquirer "^7.1.0" - jest "^25.1.0" - js-beautify "^1.10.3" - meow "^6.0.1" - open "^7.0.4" - pixelmatch "^5.1.0" - playwright "^1.9.1" - pngjs "^3.4.0" - semver "^7.3.2" - ts-jest "^25.2.0" - typescript "^3.7.4" - uuid "^3.4.0" - -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@types/babel__core@^7.1.7": - version "7.1.15" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" - integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== - dependencies: - "@babel/types" "^7.3.0" - -"@types/dateformat@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/dateformat/-/dateformat-3.0.1.tgz#98d747a2e5e9a56070c6bf14e27bff56204e34cc" - integrity sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g== - -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/jest@^25.1.2": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" - integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/js-beautify@^1.8.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@types/js-beautify/-/js-beautify-1.13.2.tgz#49783f6c6c68558738139e612b64b4f1a275383e" - integrity sha512-crV/441NhrynLIclg94i1wV6nX/6rU9ByUyn4muCrsL0HPd3nBzrt6kpQ9MQOB+HeYgLcRARteNJcbnYkp5OwA== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*": - version "16.3.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.2.tgz#655432817f83b51ac869c2d51dd8305fb8342e16" - integrity sha512-jJs9ErFLP403I+hMLGnqDRWT0RYKSvArxuBVh2veudHV7ifEC1WAmjJADacZ7mRbA2nWgHtn8xyECMAot0SkAw== - -"@types/node@^13.1.1": - version "13.13.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" - integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/pixelmatch@^5.0.0": - version "5.2.4" - resolved "https://registry.yarnpkg.com/@types/pixelmatch/-/pixelmatch-5.2.4.tgz#ca145cc5ede1388c71c68edf2d1f5190e5ddd0f6" - integrity sha512-HDaSHIAv9kwpMN7zlmwfTv6gax0PiporJOipcrGsVNF3Ba+kryOZc0Pio5pn6NhisgWr7TaajlPEKTbTAypIBQ== - dependencies: - "@types/node" "*" - -"@types/pngjs@^3.4.1": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-3.4.2.tgz#8dc49b45fbcf18a5873179e3664f049388e39ecf" - integrity sha512-LJVPDraJ5YFEnMHnzxTN4psdWz1M61MtaAAWPn3qnDk5fvs7BAmmQ9pd3KPlrdrvozMyne4ktanD4pg0L7x1Pw== - dependencies: - "@types/node" "*" - -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== - -"@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== - dependencies: - "@types/yargs-parser" "*" - -"@types/yauzl@^2.9.1": - version "2.9.2" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" - integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== - dependencies: - "@types/node" "*" - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -abab@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -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-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -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" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi_up@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-5.0.1.tgz#b66839dba408d3d2f8548904f1ae6fc62d6917ef" - integrity sha512-HGOTjFQECRKZM9fIlGhJfR2pcK8PMUWzFOqcPwqBEnNIa4P2r0Di+g2hxCX0hL0n1NUtAHGRA+fUyA/OajZYFw== - -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.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -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-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -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= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -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= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async@0.9.x: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - -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" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -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== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== - dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -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" - -basic-auth@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -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: - 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: - 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" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@1.x, 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== - -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" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.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== - -caniuse-lite@^1.0.30001219: - version "1.0.30001245" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" - integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^2.0.0, 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" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -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" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -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-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-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -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.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.19.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@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -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== - -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= - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -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-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -corser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" - integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= - -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" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssom@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@4, debug@^4.1.0, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -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: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, 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-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= - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -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" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecstatic@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" - integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== - dependencies: - he "^1.1.1" - mime "^1.6.0" - minimist "^1.1.0" - url-join "^2.0.5" - -editorconfig@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" - integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== - dependencies: - commander "^2.19.0" - lru-cache "^4.1.5" - semver "^5.6.0" - sigmund "^1.0.1" - -ejs@^3.0.1: - version "3.1.6" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" - integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== - dependencies: - jake "^10.6.1" - -electron-to-chromium@^1.3.723: - version "1.3.776" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.776.tgz#33f6e2423b61f1bdaa8d2a103aae78a09764a75f" - integrity sha512-V0w7eFSBoFPpdw4xexjVPZ770UDZIevSwkkj4W97XbE3IsCsTRFpa7/yXGZ88EOQAUEA09JMMsWK0xsw0kRAYw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -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" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -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= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -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" - -esprima@^4.0.0, 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== - -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== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -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" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -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" - -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - -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" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -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-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -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-json-stable-stringify@2.x, 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= - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -filelist@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" - integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== - dependencies: - minimatch "^3.0.4" - -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" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -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= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -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" - -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.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@^2.1.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -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== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -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-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -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-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - 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= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -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-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -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: - 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" - -he@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-proxy@^1.18.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" - -http-server@^0.12.1: - version "0.12.3" - resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" - integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== - dependencies: - basic-auth "^1.0.3" - colors "^1.4.0" - corser "^2.0.1" - ecstatic "^3.3.2" - http-proxy "^1.18.0" - minimist "^1.2.5" - opener "^1.5.1" - portfinder "^1.0.25" - secure-compare "3.0.1" - union "~0.5.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -iconv-lite@0.4.24, 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" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.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= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -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: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^7.1.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -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= - -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-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -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-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== - dependencies: - has "^1.0.3" - -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-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-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -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-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -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-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-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-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -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@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.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= - -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= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jake@^10.6.1: - version "10.8.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== - dependencies: - async "0.9.x" - chalk "^2.4.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== - dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" - -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== - dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" - prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" - -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" - -jest-diff@^25.2.1, jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== - dependencies: - detect-newline "^3.0.0" - -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== - dependencies: - "@jest/types" "^25.5.0" - "@types/graceful-fs" "^4.1.2" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== - dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^1.0.1" - -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== - dependencies: - "@jest/types" "^25.5.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== - dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" - -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" - -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" - -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - make-dir "^3.0.0" - -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" - leven "^3.1.0" - pretty-format "^25.5.0" - -jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== - dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" - -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^25.1.0: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== - dependencies: - "@jest/core" "^25.5.4" - import-local "^3.0.2" - jest-cli "^25.5.4" - -jpeg-js@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b" - integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q== - -js-beautify@^1.10.3: - version "1.14.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.0.tgz#2ce790c555d53ce1e3d7363227acf5dc69024c2d" - integrity sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ== - dependencies: - config-chain "^1.1.12" - editorconfig "^0.15.3" - glob "^7.1.3" - nopt "^5.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== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -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== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - 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" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -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, kind-of@^6.0.3: - 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== - -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -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" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -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.14, lodash@^4.17.19: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lolex@^5.0.0: - 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" - -lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -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-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" - integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== - -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" - -meow@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" - integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "^4.0.2" - normalize-package-data "^2.5.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromatch@4.x, micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -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" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" - -mime@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.6: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -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-options@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, 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== - -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.x, 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" - -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.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -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" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -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== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.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: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -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" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -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.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - -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.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" - -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" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^7.0.4: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -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" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -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-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-limit@^2.2.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@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.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== - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - -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-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -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-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-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -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= - -picomatch@^2.0.4, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pixelmatch@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.2.1.tgz#9e4e4f4aa59648208a31310306a5bed5522b0d65" - integrity sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ== - dependencies: - pngjs "^4.0.1" - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -playwright@^1.9.1: - version "1.12.3" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.12.3.tgz#113afa2cba10fb56e9a5b307377343e32a155a99" - integrity sha512-eyhHvZV7dMAUltqjQsgJ9CjZM8dznzN1+rcfCI6W6lfQ7IlPvTFGLuKOCcI4ETbjfbxqaS5FKIkb1WDDzq2Nww== - dependencies: - commander "^6.1.0" - debug "^4.1.1" - extract-zip "^2.0.1" - https-proxy-agent "^5.0.0" - jpeg-js "^0.4.2" - mime "^2.4.6" - pngjs "^5.0.0" - progress "^2.0.3" - proper-lockfile "^4.1.1" - proxy-from-env "^1.1.0" - rimraf "^3.0.2" - stack-utils "^2.0.3" - ws "^7.4.6" - yazl "^2.5.1" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -pngjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -pngjs@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-4.0.1.tgz#f803869bb2fc1bfe1bf99aa4ec21c108117cfdbe" - integrity sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg== - -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - -portfinder@^1.0.25: - 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= - -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= - -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prompts@^2.0.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -proper-lockfile@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -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" - -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== - -qs@^6.4.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -react-is@^16.12.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -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" - -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= - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -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= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -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= - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -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@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.10.0, resolve@^1.17.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -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= - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - 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-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-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", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - -secure-compare@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" - integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= - -"semver@2 || 3 || 4 || 5", 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.x, 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== - -semver@^7.3.2: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -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" - -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-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.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= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -sigmund@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -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" - -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.6: - 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.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, 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.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== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - -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.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - -stack-utils@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" - integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== - dependencies: - escape-string-regexp "^2.0.0" - -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" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.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-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -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-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -supports-color@^5.3.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@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -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-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" - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -ts-jest@^25.2.0: - version "25.5.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" - integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - micromatch "4.x" - mkdirp "0.x" - semver "6.x" - yargs-parser "18.x" - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -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: - 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-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^3.7.4: - version "3.9.10" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -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" - -union@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" - integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== - dependencies: - qs "^6.4.0" - -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== - -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" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - 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-join@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= - -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== - -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-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.2.0, 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@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -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.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" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - 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== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.0.0, ws@^7.4.6: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yazl@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" - integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== - dependencies: - buffer-crc32 "~0.2.3" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@antfu/install-pkg@npm:^1.1.0": + version: 1.1.0 + resolution: "@antfu/install-pkg@npm:1.1.0" + dependencies: + package-manager-detector: ^1.3.0 + tinyexec: ^1.0.1 + checksum: e20b7cd1c37eff832cc878cddd794f8c3779175681cf6d75c4cc1ae1475526126a4c1f71fa027161aa1ee35a8850782be9ca0ec01b621893defebe97ba9dc70e + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.12.13": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": ^7.27.1 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 5874edc5d37406c4a0bb14cf79c8e51ad412fb0423d176775ac14fc0259831be1bf95bdda9c2aa651126990505e09a9f0ed85deaa99893bc316d2682c5115bdc + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 + languageName: node + linkType: hard + +"@braintree/sanitize-url@npm:^7.1.1": + version: 7.1.1 + resolution: "@braintree/sanitize-url@npm:7.1.1" + checksum: bdfb6add95e97c5a611597197cd8385c6592d340a688bfbb176a1799bde64b9ffa1e723a7bac908d61fdecfccf4301332cdebaa4a1650c2616b5269084d9c8e4 + languageName: node + linkType: hard + +"@chevrotain/cst-dts-gen@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/cst-dts-gen@npm:11.0.3" + dependencies: + "@chevrotain/gast": 11.0.3 + "@chevrotain/types": 11.0.3 + lodash-es: 4.17.21 + checksum: 414229a827e06b4564e271ca3a02ed6f475d400a184dc5ae05308bbc6e966959b84a40a063dacf7debd8f9a1dba5bf8785a891e7b588eafd9f821b43ec16b109 + languageName: node + linkType: hard + +"@chevrotain/gast@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/gast@npm:11.0.3" + dependencies: + "@chevrotain/types": 11.0.3 + lodash-es: 4.17.21 + checksum: 5190ba3a3f03f6f58331dbd108c36172b90314f60675b88dfefca25f704549164577796a1127fa407dd546aefa9f221d6c043e5b95298a0852ffd060b4fff117 + languageName: node + linkType: hard + +"@chevrotain/regexp-to-ast@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/regexp-to-ast@npm:11.0.3" + checksum: 5d665b3340493e302f245c9bbcd73de9b973ca79d0e59c4fbed6cc733b665998b41a2b8a5963bc2e90c763c8b4ba30f6e53736325c40f3fccef0ad3de2095ff2 + languageName: node + linkType: hard + +"@chevrotain/types@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/types@npm:11.0.3" + checksum: 4496bf1955f1db2b08c188f508db23d9f1cbecdf0bfa7f23f8d8dcd3f9ca450529b71acc83a941c59c0f8188b54c0f5687f6e203dcd7dca622ac4ea6291df316 + languageName: node + linkType: hard + +"@chevrotain/utils@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/utils@npm:11.0.3" + checksum: 099f0aa65ff82a7d49ffefd7a90182efcc1518b89b88d516d2125ca730eaa38d61e36ee40fad6c21f7896b6e8393b1e6810b6a69122fabff283f0522ee49eaa5 + languageName: node + linkType: hard + +"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.18.6, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.7.1": + version: 6.20.0 + resolution: "@codemirror/autocomplete@npm:6.20.0" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + checksum: 0defd46302ab2763d10f3a51ef8f2b607dd7268843aaeec76a272e84723fe17f8a5ee5a7ad06e649066b69d9dad2a81d6a6cfdf7593290bd52b711b96c46518b + languageName: node + linkType: hard + +"@codemirror/commands@npm:^6.8.1": + version: 6.10.0 + resolution: "@codemirror/commands@npm:6.10.0" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.4.0 + "@codemirror/view": ^6.27.0 + "@lezer/common": ^1.1.0 + checksum: 29c2852a67bbdbbc9e6ef8d8cc29119abe0bfd82235fff2762dae00b15c70d678f330ef384e3c6fd19f18d0061791e09c869a355eaad340dd9a2ba6000b786e2 + languageName: node + linkType: hard + +"@codemirror/lang-cpp@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-cpp@npm:6.0.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/cpp": ^1.0.0 + checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 + languageName: node + linkType: hard + +"@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.3.1": + version: 6.3.1 + resolution: "@codemirror/lang-css@npm:6.3.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.2 + "@lezer/css": ^1.1.7 + checksum: ed175d75d75bc0a059d1e60b3dcd8464d570da14fc97388439943c9c43e1e9146e37b83fe2ccaad9cd387420b7b411ea1d24ede78ecd1f2045a38acbb4dd36bc + languageName: node + linkType: hard + +"@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.9": + version: 6.4.11 + resolution: "@codemirror/lang-html@npm:6.4.11" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/lang-css": ^6.0.0 + "@codemirror/lang-javascript": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/css": ^1.1.0 + "@lezer/html": ^1.3.12 + checksum: 31a16cc6be4daa58c6765274b9b7ba1bb54a4b0858d33d8ad1c7ec1bcb85920e3715a891f8cb27f5d9dfe87bbe00f0ddfbac5b04011374e15380b9cec7ba3c69 + languageName: node + linkType: hard + +"@codemirror/lang-java@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-java@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/java": ^1.0.0 + checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d + languageName: node + linkType: hard + +"@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.2.3": + version: 6.2.4 + resolution: "@codemirror/lang-javascript@npm:6.2.4" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.6.0 + "@codemirror/lint": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/javascript": ^1.0.0 + checksum: 0350e9ac2df155c4ecf75d556f40b677c284c1d320620dc7228e2aa458e258dd1145c86e5ebf3451347ed6ef528f72c2eb60f5d3f6bd10af8aabb2819109e21a + languageName: node + linkType: hard + +"@codemirror/lang-json@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-json@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/json": ^1.0.0 + checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 + languageName: node + linkType: hard + +"@codemirror/lang-markdown@npm:^6.3.2": + version: 6.5.0 + resolution: "@codemirror/lang-markdown@npm:6.5.0" + dependencies: + "@codemirror/autocomplete": ^6.7.1 + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.3.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.2.1 + "@lezer/markdown": ^1.0.0 + checksum: 15c6bf7eb800b73d77a2e202f08b2282230903d830111699f34a036e0ae334cf5edd65b29f45f138e305fb33a7a11f0ef111c2eaed948b10501e5e8deb7d6c47 + languageName: node + linkType: hard + +"@codemirror/lang-php@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-php@npm:6.0.1" + dependencies: + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/php": ^1.0.0 + checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 + languageName: node + linkType: hard + +"@codemirror/lang-python@npm:^6.2.0": + version: 6.2.1 + resolution: "@codemirror/lang-python@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.3.2 + "@codemirror/language": ^6.8.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.2.1 + "@lezer/python": ^1.1.4 + checksum: 977ce444ab7c68261107c40e8a46d3480a239ac5a093f39fad7da0644fc08cb4b90552c8b7fad396f936e34b5bbac510533ea7b4229d3b8271774a1af1e717aa + languageName: node + linkType: hard + +"@codemirror/lang-rust@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-rust@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/rust": ^1.0.0 + checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 + languageName: node + linkType: hard + +"@codemirror/lang-sql@npm:^6.8.0": + version: 6.10.0 + resolution: "@codemirror/lang-sql@npm:6.10.0" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c37ba6778f5f34f174a387ff530f19844fccc1e5ff65c58205b8861c19b6e39e4b3298ec63f50bd6c860befba3491db40d0d20b463a77021a9e9f20979fa2369 + languageName: node + linkType: hard + +"@codemirror/lang-wast@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-wast@npm:6.0.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 72119d4a7d726c54167aa227c982ae9fa785c8ad97a158d8350ae95eecfbd8028a803eef939f7e6c5c6e626fcecda1dc37e9dffc6d5d6ec105f686aeda6b2c24 + languageName: node + linkType: hard + +"@codemirror/lang-xml@npm:^6.1.0": + version: 6.1.0 + resolution: "@codemirror/lang-xml@npm:6.1.0" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/xml": ^1.0.0 + checksum: 3a1b7af07b29ad7e53b77bf584245580b613bc92256059f175f2b1d7c28c4e39b75654fe169b9a8a330a60164b53ff5254bdb5b8ee8c6e6766427ee115c4e229 + languageName: node + linkType: hard + +"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.11.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": + version: 6.11.3 + resolution: "@codemirror/language@npm:6.11.3" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.23.0 + "@lezer/common": ^1.1.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + style-mod: ^4.0.0 + checksum: 9ad560fb90ccb8e5660ee162b7ca36323b0cc0fe2c2885a93f052763c177e10118930aae5cdea410e90cf2a6a2b86438a7503fcc6d1f550c8d75a6757e31f3bf + languageName: node + linkType: hard + +"@codemirror/legacy-modes@npm:^6.5.1": + version: 6.5.2 + resolution: "@codemirror/legacy-modes@npm:6.5.2" + dependencies: + "@codemirror/language": ^6.0.0 + checksum: 2ae75e40d4357e65d0b3b1ebcb28a85a7700f8a39e5ae2dcc8dece00a4070a800d797c9297e7a4beb398d63e4c69c3e69992b4fb20ab84f748625c7590a82636 + languageName: node + linkType: hard + +"@codemirror/lint@npm:^6.0.0": + version: 6.5.0 + resolution: "@codemirror/lint@npm:6.5.0" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: b4f3899d0f73e5a2b5e9bc1df8e13ecb9324b94c7d384e7c8dde794109dee051461fc86658338f41652b44879b2ccc12cdd51a8ac0bb16a5b18aafa8e57a843c + languageName: node + linkType: hard + +"@codemirror/search@npm:^6.5.10": + version: 6.5.11 + resolution: "@codemirror/search@npm:6.5.11" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 4d418f176bd93705bc51c82a2f1c0e41fecc0368dc43c415635c4dfdd763aa05ebdf7f000bc9ca0083c1887e6d305b89482ec1f4db8b8765c6f38de324187476 + languageName: node + linkType: hard + +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.5.0, @codemirror/state@npm:^6.5.2": + version: 6.5.2 + resolution: "@codemirror/state@npm:6.5.2" + dependencies: + "@marijn/find-cluster-break": ^1.0.0 + checksum: 4473a79475070d73f2e72f2eaaee5b69d2833b5020faa9714609d95dd03f0e5ad02cad8031a541dcd748436842a300332a2925317b39ffa09e3b4831145d98bc + languageName: node + linkType: hard + +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.38.1": + version: 6.38.8 + resolution: "@codemirror/view@npm:6.38.8" + dependencies: + "@codemirror/state": ^6.5.0 + crelt: ^1.0.6 + style-mod: ^4.1.0 + w3c-keyname: ^2.2.4 + checksum: ffbdff6c188d2049fa4b29bfae4f0540331ca8e5a47a0e6fa6798adbdcb332cc883b1ead247cbeae8515060ec9b85a19e961e9b82ebd03c0f562ce281014bbea + languageName: node + linkType: hard + +"@fortawesome/fontawesome-free@npm:^5.12.0": + version: 5.15.4 + resolution: "@fortawesome/fontawesome-free@npm:5.15.4" + checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2 + languageName: node + linkType: hard + +"@iconify/types@npm:^2.0.0": + version: 2.0.0 + resolution: "@iconify/types@npm:2.0.0" + checksum: 029f58542c160e9d4a746869cf2e475b603424d3adf3994c5cc8d0406c47e6e04a3b898b2707840c1c5b9bd5563a1660a34b110d89fce43923baca5222f4e597 + languageName: node + linkType: hard + +"@iconify/utils@npm:^3.0.1": + version: 3.1.0 + resolution: "@iconify/utils@npm:3.1.0" + dependencies: + "@antfu/install-pkg": ^1.1.0 + "@iconify/types": ^2.0.0 + mlly: ^1.8.0 + checksum: b4055a322a13289740b2ecef424a1807ccb1567a200b716e4d1e2f40ad24dd9e24fa7b9a1aa1a275eea30ef3f08a32a4640a1a66f013d32cfe31117ac76b4075 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jupyter/react-components@npm:^0.16.6": + version: 0.16.7 + resolution: "@jupyter/react-components@npm:0.16.7" + dependencies: + "@jupyter/web-components": ^0.16.7 + react: ">=17.0.0 <19.0.0" + checksum: 37894347e63ebb528725e8b8b4038d138019823f5c9e28e3f6abb93b46d771b2ee3cc004d5ff7d9a06a93f2d90e41000bd2abae14364be34ba99c5e05864810e + languageName: node + linkType: hard + +"@jupyter/web-components@npm:^0.16.6, @jupyter/web-components@npm:^0.16.7": + version: 0.16.7 + resolution: "@jupyter/web-components@npm:0.16.7" + dependencies: + "@microsoft/fast-colors": ^5.3.1 + "@microsoft/fast-element": ^1.12.0 + "@microsoft/fast-foundation": ^2.49.4 + "@microsoft/fast-web-utilities": ^5.4.1 + checksum: ec3336247bbabb2e2587c2cf8b9d0e80786b454916dd600b3d6791bf08c3d1e45a7ec1becf366a5491ab56b0be020baa8c50a5b6067961faf5ec904de31243aa + languageName: node + linkType: hard + +"@jupyter/ydoc@npm:^3.1.0": + version: 3.3.2 + resolution: "@jupyter/ydoc@npm:3.3.2" + dependencies: + "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 + "@lumino/coreutils": ^1.11.0 || ^2.0.0 + "@lumino/disposable": ^1.10.0 || ^2.0.0 + "@lumino/signaling": ^1.10.0 || ^2.0.0 + y-protocols: ^1.0.5 + yjs: ^13.5.40 + checksum: 3b9cf9dafc966aef6bab283cc26314222eb9e8395b48e15dc4e63675af5420482657d5fd78e52c928acdd0d40dd3d15683e3a59b8e52c2b52f883cccb01f1362 + languageName: node + linkType: hard + +"@jupyterlab/application@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/application@npm:4.5.0" + dependencies: + "@fortawesome/fontawesome-free": ^5.12.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/application": ^2.4.5 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + checksum: f457adc646cadb120b6eb0608a244a89b3fa2d2cde7c6906bcb79c109a278648e07d595e7276b24a353a818cc4ddd9542b4f0eb3dd0774bb39d8385f978156e4 + languageName: node + linkType: hard + +"@jupyterlab/apputils@npm:^4.6.0": + version: 4.6.0 + resolution: "@jupyterlab/apputils@npm:4.6.0" + dependencies: + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/settingregistry": ^4.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@jupyterlab/statusbar": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + "@lumino/widgets": ^2.7.2 + "@types/react": ^18.0.26 + react: ^18.2.0 + sanitize-html: ~2.12.1 + checksum: f264b4e27d76b86415bac70e280828dd68be564bee1d66c2cd1cfe70f5a182f68eab2d94415a5578d292059c4dff61d4d0be6ee1a1b6e2b2305a5c1fcce1408f + languageName: node + linkType: hard + +"@jupyterlab/attachments@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/attachments@npm:4.5.0" + dependencies: + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + checksum: a38ffb1060bc9c253e352b42f1a103f8401307f8560736c7931802b5e8562d6aa14fd9f5ef3f06d50e3e47e7756f8e15529b96be21f7c4ccfd3d2f353f0fb436 + languageName: node + linkType: hard + +"@jupyterlab/cells@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/cells@npm:4.5.0" + dependencies: + "@codemirror/state": ^6.5.2 + "@codemirror/view": ^6.38.1 + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/attachments": ^4.5.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/codemirror": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/documentsearch": ^4.5.0 + "@jupyterlab/filebrowser": ^4.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/outputarea": ^4.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/toc": ^6.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: f0fe77bf6b951998972532a5ed2eadce7a1b369b4b4090f2f2c7b6be7665b1c202ced984f65ed881ab0de64deadd92e66211e7a04f1b4f344a0dfc80a17cfd09 + languageName: node + linkType: hard + +"@jupyterlab/codeeditor@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/codeeditor@npm:4.5.0" + dependencies: + "@codemirror/state": ^6.5.2 + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/statusbar": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/dragdrop": ^2.1.7 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: fab1411639c293f8d73d2fca8964dec0f73f06c7c7ae1c012885949cec707a3d516f065b55b4fc2ac8b75832c095cec94437aa955029f3f37bf4d70596970de9 + languageName: node + linkType: hard + +"@jupyterlab/codemirror@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/codemirror@npm:4.5.0" + dependencies: + "@codemirror/autocomplete": ^6.18.6 + "@codemirror/commands": ^6.8.1 + "@codemirror/lang-cpp": ^6.0.2 + "@codemirror/lang-css": ^6.3.1 + "@codemirror/lang-html": ^6.4.9 + "@codemirror/lang-java": ^6.0.1 + "@codemirror/lang-javascript": ^6.2.3 + "@codemirror/lang-json": ^6.0.1 + "@codemirror/lang-markdown": ^6.3.2 + "@codemirror/lang-php": ^6.0.1 + "@codemirror/lang-python": ^6.2.0 + "@codemirror/lang-rust": ^6.0.1 + "@codemirror/lang-sql": ^6.8.0 + "@codemirror/lang-wast": ^6.0.2 + "@codemirror/lang-xml": ^6.1.0 + "@codemirror/language": ^6.11.0 + "@codemirror/legacy-modes": ^6.5.1 + "@codemirror/search": ^6.5.10 + "@codemirror/state": ^6.5.2 + "@codemirror/view": ^6.38.1 + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/documentsearch": ^4.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@lezer/common": ^1.2.1 + "@lezer/generator": ^1.7.0 + "@lezer/highlight": ^1.2.0 + "@lezer/markdown": ^1.3.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + yjs: ^13.5.40 + checksum: 0734173801066542892e136d37e4b43c350e83b8de71811954001d2ead6db89f697f363583fe6ddb6c347cb4df14e5182fe6be5c4ff8bd01df883e4a6c832795 + languageName: node + linkType: hard + +"@jupyterlab/console@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/console@npm:4.5.0" + dependencies: + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/cells": ^4.5.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/dragdrop": ^2.1.7 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + checksum: fc3a18b1c1b95a99d470bc896dbe3a244bdcc1bb620aacefa3f5b27e6194ce44506147a56a7e2aede28d1bd0158ad3abc0317cc18277a18af0aae745eb49eae7 + languageName: node + linkType: hard + +"@jupyterlab/coreutils@npm:^6.5.0": + version: 6.5.0 + resolution: "@jupyterlab/coreutils@npm:6.5.0" + dependencies: + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + minimist: ~1.2.0 + path-browserify: ^1.0.0 + url-parse: ~1.5.4 + checksum: 5c198d899c36cfe25077ef1d1ae764a42e37564b72cd769572b710e64018e62a420367364483fa3e10407b8debe7c5eb4824cd372db733788c36296ff35fe002 + languageName: node + linkType: hard + +"@jupyterlab/debugger@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/debugger@npm:4.5.0" + dependencies: + "@codemirror/state": ^6.5.2 + "@codemirror/view": ^6.38.1 + "@jupyter/react-components": ^0.16.6 + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/application": ^4.5.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/cells": ^4.5.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/codemirror": ^4.5.0 + "@jupyterlab/console": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/fileeditor": ^4.5.0 + "@jupyterlab/notebook": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/settingregistry": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/datagrid": ^2.5.3 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + "@vscode/debugprotocol": ^1.51.0 + react: ^18.2.0 + checksum: 84fa56a171e28eeb7472585b777d10cad401218449749ecfa8e4d433cb9b95e9bf0099f6c59df7d77d67c6dd1904988f1d2623e29a55f431650e4df229d5270e + languageName: node + linkType: hard + +"@jupyterlab/docmanager@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/docmanager@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@jupyterlab/statusbar": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: abbd686b15aa43841ca55f5f04f2d0e7e47c32e35bf6b48b62094ab3c1d571ad27c38b49aaca0168a04de348446f43bb3e3402e63b4dea876802cfb5f64f246f + languageName: node + linkType: hard + +"@jupyterlab/docregistry@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/docregistry@npm:4.5.0" + dependencies: + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: 946b4390916fe37ee8b63940b0ec53c11c2be8e56b2c0015176653b580c6e6333635a76f09706abfcbb083469a831992fa722dbeed2f804d8e9fc5d6f8325b7b + languageName: node + linkType: hard + +"@jupyterlab/documentsearch@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/documentsearch@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: 81cfce78f654c6f31de4613599db0ffb4eb23330a16cb45f7f1de5af84102e85e66678f9c7be5c59bf42fe672870974f13427e9a008a916137e432e3f4ef86d5 + languageName: node + linkType: hard + +"@jupyterlab/filebrowser@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/filebrowser@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docmanager": ^4.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@jupyterlab/statusbar": ^4.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + "@lumino/widgets": ^2.7.2 + jest-environment-jsdom: ^29.3.0 + react: ^18.2.0 + checksum: 5ea23081874d9205284765a6c1ebc9b535018b48412a9b0f5333566fd87d787286855ea3f1337e3c98e004ce5cc66884e07e13cbbeb6b50974d90e002643b219 + languageName: node + linkType: hard + +"@jupyterlab/fileeditor@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/fileeditor@npm:4.5.0" + dependencies: + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/codemirror": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/documentsearch": ^4.5.0 + "@jupyterlab/lsp": ^4.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/statusbar": ^4.5.0 + "@jupyterlab/toc": ^6.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/messaging": ^2.0.4 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + regexp-match-indices: ^1.0.2 + checksum: daf77980415860cc0e4595574d6ee53588b6eec4d7f6efbdd7ac714f95ac2a90d41301906f8237d6997788830ebd64b6e4a276af6bef19bad6460e87f2c001c7 + languageName: node + linkType: hard + +"@jupyterlab/galata@npm:^5.5.0": + version: 5.5.0 + resolution: "@jupyterlab/galata@npm:5.5.0" + dependencies: + "@jupyterlab/application": ^4.5.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/debugger": ^4.5.0 + "@jupyterlab/docmanager": ^4.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/notebook": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/settingregistry": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@playwright/test": ^1.56.0 + "@stdlib/stats": ~0.0.13 + fs-extra: ^10.1.0 + json5: ^2.2.3 + path: ~0.12.7 + systeminformation: ^5.8.6 + vega: ^5.20.0 + vega-lite: ^5.6.1 + vega-statistics: ^1.7.9 + checksum: 0afbf622aee136a48afba797f5fc6317786a8a4a4568ac3c442e063bcefa09aab984453a12ecc060a762657d53345452f0e5d028dcf293dc966258c625dd8002 + languageName: node + linkType: hard + +"@jupyterlab/lsp@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/lsp@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/codemirror": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/translation": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + lodash.mergewith: ^4.6.1 + vscode-jsonrpc: ^6.0.0 + vscode-languageserver-protocol: ^3.17.0 + vscode-ws-jsonrpc: ~1.0.2 + checksum: 6d6d94259bbd0de7a1a1048ae1b9ebcb1d1d5fa51a96ba35cb6c43b106b25ca669a61247783c5911ef8e155aa70a4b50dc3ebaff4b565a01516d0a9fc633094b + languageName: node + linkType: hard + +"@jupyterlab/markedparser-extension@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/markedparser-extension@npm:4.5.0" + dependencies: + "@jupyterlab/application": ^4.5.0 + "@jupyterlab/codemirror": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/mermaid": ^4.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + marked: ^16.2.1 + marked-gfm-heading-id: ^4.1.2 + marked-mangle: ^1.1.11 + checksum: 9490e096abfa9c2f27347ee953e8ae7ca2c2070dd72fe317265717dea4fa7bc5fb9c2e5a3a75b5c1460e907e8e0796f691da5e6c509a6a36a2255984556ed674 + languageName: node + linkType: hard + +"@jupyterlab/mermaid@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/mermaid@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/widgets": ^2.7.2 + "@mermaid-js/layout-elk": ^0.2.0 + mermaid: ^11.12.1 + checksum: 14fedc2307d8061fc57537fb9221991b580da40938360a50f57e071755f5bbd532c0f4741d6183b2c8aab4b63bf11683c15768b6fc9948b1f65253e15a9bdf18 + languageName: node + linkType: hard + +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/nbformat@npm:4.5.0" + dependencies: + "@lumino/coreutils": ^2.2.2 + checksum: 64dca8d7d59ac081f2d1a99b335217c12f2ea8d2f89e24e595b2774f45416c19480b471305def6af5bcf67a31f59fc1c6889c3226eafa8c61a9ee174fb1ab12b + languageName: node + linkType: hard + +"@jupyterlab/notebook@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/notebook@npm:4.5.0" + dependencies: + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/cells": ^4.5.0 + "@jupyterlab/codeeditor": ^4.5.0 + "@jupyterlab/codemirror": ^4.5.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/documentsearch": ^4.5.0 + "@jupyterlab/lsp": ^4.5.0 + "@jupyterlab/markedparser-extension": ^4.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/settingregistry": ^4.5.0 + "@jupyterlab/statusbar": ^4.5.0 + "@jupyterlab/toc": ^6.5.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: c15fddc860ded5b36f810b24dcf6c3b0f906ad1112ac098440a09693e8cb66b0e7856922622a51566fcdb1d2c28902882a31b55adbf9a4989130ad594cb4ed9b + languageName: node + linkType: hard + +"@jupyterlab/observables@npm:^5.5.0": + version: 5.5.0 + resolution: "@jupyterlab/observables@npm:5.5.0" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + checksum: 2c686227ac68b70bbaa6367c8e02bb66c79b3956b1b5660e1ff8ca200c2790add029a5c428de4f422b2174dd07597f9f9b2f70b67532f6fd064138760681f360 + languageName: node + linkType: hard + +"@jupyterlab/outputarea@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/outputarea@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/translation": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + checksum: f8536bd36368ec99760e50a827151dde0a9fdc5ef5581da5af07bd661643b48445ddcd1f77df258ca83af7a4ed2ab196c8dd814427016e37b510daaa0f410894 + languageName: node + linkType: hard + +"@jupyterlab/rendermime-interfaces@npm:^3.13.0": + version: 3.13.0 + resolution: "@jupyterlab/rendermime-interfaces@npm:3.13.0" + dependencies: + "@lumino/coreutils": ^1.11.0 || ^2.2.2 + "@lumino/widgets": ^1.37.2 || ^2.7.2 + checksum: 0c4dc92b991e0b8cce1d5f274784709e8efbf13ed6165210d09ccdac1b6a2846542f04f57af11e5caec90208c22440c723e54a94368beec3f2a1c91c745c9abc + languageName: node + linkType: hard + +"@jupyterlab/rendermime@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/rendermime@npm:4.5.0" + dependencies: + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/translation": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + lodash.escape: ^4.0.1 + checksum: ea4ddbafce87a7612732eb3d9231d66717d578d4943d7f21f4e0ed4af17a81efba24006f86595bc6251d7f037da70b9e3b33120f407f69ac6b2982161c89ae8e + languageName: node + linkType: hard + +"@jupyterlab/services@npm:^7.5.0": + version: 7.5.0 + resolution: "@jupyterlab/services@npm:7.5.0" + dependencies: + "@jupyter/ydoc": ^3.1.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/settingregistry": ^4.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/polling": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + ws: ^8.11.0 + checksum: fa579b22fc6d6b15b5c37377c984322499eb76d3b67684c0d335a0a81a5ce23d712e941c9ef1d8f81c7fa0b93614b355a55ba1a0ec176f218b7c7a2eb5220eeb + languageName: node + linkType: hard + +"@jupyterlab/settingregistry@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/settingregistry@npm:4.5.0" + dependencies: + "@jupyterlab/nbformat": ^4.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + "@rjsf/utils": ^5.13.4 + ajv: ^8.12.0 + json5: ^2.2.3 + peerDependencies: + react: ">=16" + checksum: acae2d98e368b0537ffb08d20ecaf3326b1c31e196887ff63c82459dc7ec01d1dc20deec0a48990670ccf2bf4c6760908169665c1e38cd99f2b1da2b050d0d76 + languageName: node + linkType: hard + +"@jupyterlab/statedb@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/statedb@npm:4.5.0" + dependencies: + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + checksum: 4e6a0f18d288a4f73c68284dce6ce1c0bac134a38b357a8f0fec7bdbb51d0801d7e96ae106960bab7c48637dc07e8239a45e5466d8c8e7372a026de11dc83a03 + languageName: node + linkType: hard + +"@jupyterlab/statusbar@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/statusbar@npm:4.5.0" + dependencies: + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: ab9464bf892d51796317e9b06e2b47220a79c106ab36c4f795d1a14320a9ca8211c265f486c068819cc898b707db514420a8fcfc9313b6b32d91245aeac688f8 + languageName: node + linkType: hard + +"@jupyterlab/toc@npm:^6.5.0": + version: 6.5.0 + resolution: "@jupyterlab/toc@npm:6.5.0" + dependencies: + "@jupyter/react-components": ^0.16.6 + "@jupyterlab/apputils": ^4.6.0 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/docregistry": ^4.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime": ^4.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/translation": ^4.5.0 + "@jupyterlab/ui-components": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + react: ^18.2.0 + checksum: 56adcbb1373e63a7e688bd0356a6fa84d2744f3aab52c5f5aa42180144d5ede11c909c2371626aa25fca68527bd11296ced7e94cabca5354a9927c1d17e94f02 + languageName: node + linkType: hard + +"@jupyterlab/translation@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/translation@npm:4.5.0" + dependencies: + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/services": ^7.5.0 + "@jupyterlab/statedb": ^4.5.0 + "@lumino/coreutils": ^2.2.2 + checksum: 12d4e7b1360ee858bcb874bcbb198b58770cc9f2bb865bc8172a62b1c44359ddf8cf4dc1cfdea966689eb216095d9e32c8ea5eabbe251c58a5fcc65b28e3200f + languageName: node + linkType: hard + +"@jupyterlab/ui-components@npm:^4.5.0": + version: 4.5.0 + resolution: "@jupyterlab/ui-components@npm:4.5.0" + dependencies: + "@jupyter/react-components": ^0.16.6 + "@jupyter/web-components": ^0.16.6 + "@jupyterlab/coreutils": ^6.5.0 + "@jupyterlab/observables": ^5.5.0 + "@jupyterlab/rendermime-interfaces": ^3.13.0 + "@jupyterlab/translation": ^4.5.0 + "@lumino/algorithm": ^2.0.4 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/messaging": ^2.0.4 + "@lumino/polling": ^2.1.5 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + "@lumino/widgets": ^2.7.2 + "@rjsf/core": ^5.13.4 + "@rjsf/utils": ^5.13.4 + react: ^18.2.0 + react-dom: ^18.2.0 + typestyle: ^2.0.4 + peerDependencies: + react: ^18.2.0 + checksum: 59eedfbbfcbe224e0670bdaf09ac564bf3fe254a24f3465b4cfb7c8b1739ada8fc0e91ed51cf4fbee023c8df95985b3d0b4feffb1eef4902e17b2d12e2cfa381 + languageName: node + linkType: hard + +"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0, @lezer/common@npm:^1.2.1, @lezer/common@npm:^1.3.0": + version: 1.4.0 + resolution: "@lezer/common@npm:1.4.0" + checksum: 29ce9749028261dcce2821ac0916a45094efe43456eb032dd6f8433b487be26f00df906ee101eb40b7f40a9f9cd4baf9aed8fba7cbac52572f8a1c4ffd65cd94 + languageName: node + linkType: hard + +"@lezer/cpp@npm:^1.0.0": + version: 1.1.2 + resolution: "@lezer/cpp@npm:1.1.2" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: a319cd46fd32affc07c9432e9b2b9954becf7766be0361176c525d03474bb794cc051aad9932f48c9df33833eee1d6bfdccab12e571f2b137b4ca765c60c75de + languageName: node + linkType: hard + +"@lezer/css@npm:^1.1.0, @lezer/css@npm:^1.1.7": + version: 1.3.0 + resolution: "@lezer/css@npm:1.3.0" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.3.0 + checksum: 952cdbee844c1cd6097c3de4ee073861d05ea1edf10815a58c1d29ee8337fd053b7758944bd48dd418c13bc204ab8666554c3be0560ecb31a65cc438e52e0590 + languageName: node + linkType: hard + +"@lezer/generator@npm:^1.7.0": + version: 1.8.0 + resolution: "@lezer/generator@npm:1.8.0" + dependencies: + "@lezer/common": ^1.1.0 + "@lezer/lr": ^1.3.0 + bin: + lezer-generator: src/lezer-generator.cjs + checksum: 2c4e6550bd282efd190100887d107d9e3e4cd87ba47cdb5488f84919f35b2cbb2fb845798017204f2fb3bb5dad6b6300fa45612731f8122960bd7a5346c785a5 + languageName: node + linkType: hard + +"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.2.0": + version: 1.2.3 + resolution: "@lezer/highlight@npm:1.2.3" + dependencies: + "@lezer/common": ^1.3.0 + checksum: 13b0d22d5dc2f3005baa7eed229bba8a61cee4ddeeb9e6a8cdff25fa3101db779c00b4c5d8f493ab2d60b296945a6cc4fe7e4846fece27b3fd2c2a1bfef79dad + languageName: node + linkType: hard + +"@lezer/html@npm:^1.3.12": + version: 1.3.12 + resolution: "@lezer/html@npm:1.3.12" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 894b547555cd7d3dbf17c7022c4067a207241d6d493728ae2f79f6b9245803c1acec98fe89e593289ddcce9e9b6a90d8090be1a7090367bdbc38930aa9ee19a0 + languageName: node + linkType: hard + +"@lezer/java@npm:^1.0.0": + version: 1.1.1 + resolution: "@lezer/java@npm:1.1.1" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 8a071aca6b5e1ed1d22bffed22bbd29f21b102b7337a7ea5c956eb259e6ff20eee2d6e85b7dadff69859cb6615d6b1a3f0ba109673e87ce5a1f6cabdeee626fd + languageName: node + linkType: hard + +"@lezer/javascript@npm:^1.0.0": + version: 1.4.13 + resolution: "@lezer/javascript@npm:1.4.13" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.1.3 + "@lezer/lr": ^1.3.0 + checksum: a5e4607fec7671dff66d1f3bfee5a5da7395982f1867e17ac4d8f2d8f223451fb18516ef2699340b148af112176a07e1fcba9e63c5f8397c12895dd0509113d6 + languageName: node + linkType: hard + +"@lezer/json@npm:^1.0.0": + version: 1.0.2 + resolution: "@lezer/json@npm:1.0.2" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: f899d13765d95599c9199fc3404cb57969031dc40ce07de30f4e648979153966581f0bee02e2f8f70463b0a5322206a97c2fe8d5d14f218888c72a6dcedf90ef + languageName: node + linkType: hard + +"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": + version: 1.4.0 + resolution: "@lezer/lr@npm:1.4.0" + dependencies: + "@lezer/common": ^1.0.0 + checksum: 4c8517017e9803415c6c5cb8230d8764107eafd7d0b847676cd1023abb863a4b268d0d01c7ce3cf1702c4749527c68f0a26b07c329cb7b68c36ed88362d7b193 + languageName: node + linkType: hard + +"@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.3.0": + version: 1.6.1 + resolution: "@lezer/markdown@npm:1.6.1" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + checksum: 4654ea685307f2c6da611a98b93586f9604beb5dfd5d4d8e32ec0ebb7023fa7ef0536827ebe50d7c57d49d9bb151925bb0a2a0b5517861216c6806d5ab0eb43a + languageName: node + linkType: hard + +"@lezer/php@npm:^1.0.0": + version: 1.0.2 + resolution: "@lezer/php@npm:1.0.2" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.1.0 + checksum: c85ef18571d37826b687dd141a0fe110f5814adaf9d1a391e7e482020d7f81df189ca89ec0dd141c1433d48eff4c6e53648b46f008dea8ad2dc574f35f1d4d79 + languageName: node + linkType: hard + +"@lezer/python@npm:^1.1.4": + version: 1.1.13 + resolution: "@lezer/python@npm:1.1.13" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 43465f3289063e16caac9a109f61b8f810dd6a0e1043874df1b4d0f1cee5fba39cfd8c78fa2e507c0aa8f50cee8c48fe36df549ac1f959dae8d51c06e8ec0d0b + languageName: node + linkType: hard + +"@lezer/rust@npm:^1.0.0": + version: 1.0.2 + resolution: "@lezer/rust@npm:1.0.2" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: fc5e97852b42beeb44a0ebe316dc64e3cc49ff481c22e3e67d6003fc4a5c257fcd94959cfcc76cd154fa172db9b3b4b28de5c09f10550d6e5f14869ddc274e5b + languageName: node + linkType: hard + +"@lezer/xml@npm:^1.0.0": + version: 1.0.5 + resolution: "@lezer/xml@npm:1.0.5" + dependencies: + "@lezer/common": ^1.2.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: a0a077b9e455b03593b93a7fdff2a4eab2cb7b230c8e1b878a8bebe80184632b9cc75ca018f1f9e2acb3a26e1386f4777385ab6e87aea70ccf479cde5ca268ee + languageName: node + linkType: hard + +"@lumino/algorithm@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/algorithm@npm:2.0.4" + checksum: ec1532fc294666fb483dd35082ec50ad979d0e9e1daf7a951ca045fd36a1ae88c7c73bf09c1aafed1ea826319f038ec2ed7058f58d214d5ed9f6a4cf61f232e8 + languageName: node + linkType: hard + +"@lumino/application@npm:^2.4.5": + version: 2.4.5 + resolution: "@lumino/application@npm:2.4.5" + dependencies: + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/widgets": ^2.7.2 + checksum: 7a034b49cfde045a81d3ed0cb51bfff79a595f9e299c601cc71c19c0709dfe49db5a0a21fdc36fb9d77e441f144ebbeabf9f5ff132a265d530ad3551e9ecc11b + languageName: node + linkType: hard + +"@lumino/collections@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/collections@npm:2.0.4" + dependencies: + "@lumino/algorithm": ^2.0.4 + checksum: ee8dfdcde3815ddb72d977705e8295ee9500a44697717a86fed644dd810bce8d8ad448659eec02dafeee1b1b3a74fc851224481933c385a812055793d34224f1 + languageName: node + linkType: hard + +"@lumino/commands@npm:^2.3.3": + version: 2.3.3 + resolution: "@lumino/commands@npm:2.3.3" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/keyboard": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + checksum: 4f44b180b7ce4580647fb86a61c00b8638ce9d538a7222feb85073f691f29b2f942b79a71f11e25d503c6d4ad3e8becec67cb8829710b34e04676f41d3505937 + languageName: node + linkType: hard + +"@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.2.2, @lumino/coreutils@npm:^2.2.2": + version: 2.2.2 + resolution: "@lumino/coreutils@npm:2.2.2" + dependencies: + "@lumino/algorithm": ^2.0.4 + checksum: ec4f7eedcd8e27c43f541bcf9d571fc69e82959879c80a50c7c6fb803d923834399e3a52e6c044a898426e220168602f0c4ca702c9683354510f5393fe3b160a + languageName: node + linkType: hard + +"@lumino/datagrid@npm:^2.5.3": + version: 2.5.3 + resolution: "@lumino/datagrid@npm:2.5.3" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/keyboard": ^2.0.4 + "@lumino/messaging": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/widgets": ^2.7.2 + checksum: 6dd9c1f6bfdd5133d762aa19f50bb949ef1ad166a06d6c71c4c25076d45854503a2cace33ee75725bbadef96f1316104e7af833179ef507d579c87352858aaa6 + languageName: node + linkType: hard + +"@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.1.5": + version: 2.1.5 + resolution: "@lumino/disposable@npm:2.1.5" + dependencies: + "@lumino/signaling": ^2.1.5 + checksum: 31b3edd0643dd8d64131379a379c6364ff7a7e1884186d56a6e7b812cc8ee52f38cb43c20e8d45a8a5343a80af4a8180acf62c51f59c9a522349f35c65fe4d29 + languageName: node + linkType: hard + +"@lumino/domutils@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/domutils@npm:2.0.4" + checksum: 5aacb1e3f597c8dd24fc09c7dabc97c630c293e43afaf7100e59d630bb9379b96b88536a37559cf92102a82364ab80734ccb21eb12811df8ed6ca2662e5cf9f1 + languageName: node + linkType: hard + +"@lumino/dragdrop@npm:^2.1.7": + version: 2.1.7 + resolution: "@lumino/dragdrop@npm:2.1.7" + dependencies: + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + checksum: 92365f45bf3876db2575e6c46a8951f5521fa889146a760386fd189927ae14b7fb00a0e3390f78cfca2703d9d57854e3b17fb4b457a8f288df268f3a36158858 + languageName: node + linkType: hard + +"@lumino/keyboard@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/keyboard@npm:2.0.4" + checksum: 550497726ab8a17e9046fe88f74fbf0ae32e2811d9d7138ccefc7758e8cbf22c6705f3aca8415e0419def17939e12b1363268d71aae00e22f6bbbcfaff5faf82 + languageName: node + linkType: hard + +"@lumino/messaging@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/messaging@npm:2.0.4" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/collections": ^2.0.4 + checksum: 08b8ec0fcb21f61a2fa7050d22f94c9c54bf3d310c014a16bea5966320ba760a39bfecc9cd21e1d09ec367805ac0ad8be2466fff15ca1be7536a1077297eb6c7 + languageName: node + linkType: hard + +"@lumino/polling@npm:^2.1.5": + version: 2.1.5 + resolution: "@lumino/polling@npm:2.1.5" + dependencies: + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/signaling": ^2.1.5 + checksum: 2b510ef4a5ac05470f01281112d1c467ea95f9f783f702d61fe512d8efecda93f360c907eb3e9fd180f507afe79face1d0ca7878a9d844a3e1f588aba7c5a28e + languageName: node + linkType: hard + +"@lumino/properties@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/properties@npm:2.0.4" + checksum: f76d03ba0db12d3c83517484e1cd427b49006bf71e5e1bda00ddb1f02ab85a0079e47c715572a809d4102b348422cab15d587285a0fa17e7e91bbd288d9b6112 + languageName: node + linkType: hard + +"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.5": + version: 2.1.5 + resolution: "@lumino/signaling@npm:2.1.5" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/coreutils": ^2.2.2 + checksum: ca8fa6f55a28e1dc05ae2a9ab89f34dbbbc4678e891689bfc84ef3a4f85bfdd4abfcff05ff08d6733872bd6808d71138de5fe35692cced6f008d2893b8506d47 + languageName: node + linkType: hard + +"@lumino/virtualdom@npm:^2.0.4": + version: 2.0.4 + resolution: "@lumino/virtualdom@npm:2.0.4" + dependencies: + "@lumino/algorithm": ^2.0.4 + checksum: 2153f31703088a2dc7dc9cd2353f2876ae626839d267be50c0b191c187649b04b8d1596810f6294afc041e183baff5e5e8e9e4958ce8006df2c5c6ced7bbea42 + languageName: node + linkType: hard + +"@lumino/widgets@npm:^1.37.2 || ^2.7.2, @lumino/widgets@npm:^2.7.2": + version: 2.7.2 + resolution: "@lumino/widgets@npm:2.7.2" + dependencies: + "@lumino/algorithm": ^2.0.4 + "@lumino/commands": ^2.3.3 + "@lumino/coreutils": ^2.2.2 + "@lumino/disposable": ^2.1.5 + "@lumino/domutils": ^2.0.4 + "@lumino/dragdrop": ^2.1.7 + "@lumino/keyboard": ^2.0.4 + "@lumino/messaging": ^2.0.4 + "@lumino/properties": ^2.0.4 + "@lumino/signaling": ^2.1.5 + "@lumino/virtualdom": ^2.0.4 + checksum: ca9017aecc1df504f433a6189ede84d8ae3ec2c76dd612cf1b43f131ace5d992e6f8ac5359f6ec04abd336c8abadc5eeada43f48f5140cfed54630f1bd84b44a + languageName: node + linkType: hard + +"@marijn/find-cluster-break@npm:^1.0.0": + version: 1.0.2 + resolution: "@marijn/find-cluster-break@npm:1.0.2" + checksum: 0d836de25e04d58325813401ef3c2d34caf040da985a5935fcbc9d84e7b47a21bdb15f57d70c2bf0960bd29ed3dbbb1afd00cdd0fc4fafbee7fd0ffe7d508ae1 + languageName: node + linkType: hard + +"@mermaid-js/layout-elk@npm:^0.2.0": + version: 0.2.0 + resolution: "@mermaid-js/layout-elk@npm:0.2.0" + dependencies: + d3: ^7.9.0 + elkjs: ^0.9.3 + peerDependencies: + mermaid: ^11.0.2 + checksum: 1a1ca0ebe32367de883341f2f10484086aacff498f57a3366aec8fcea1749bea66ea574021223de69ac065a7c914c6cd56f385c48c0a7d25c11a71571903ee6d + languageName: node + linkType: hard + +"@mermaid-js/parser@npm:^0.6.3": + version: 0.6.3 + resolution: "@mermaid-js/parser@npm:0.6.3" + dependencies: + langium: 3.3.1 + checksum: 6a3df5e694c6af793571c60265f5f1d25f39f3bb09f87fa91fa135ee36c2a01ec000ca34abdc801cf2baff4c5dbcaf41af38d710374eb5f678add626cc96f7ab + languageName: node + linkType: hard + +"@microsoft/fast-colors@npm:^5.3.1": + version: 5.3.1 + resolution: "@microsoft/fast-colors@npm:5.3.1" + checksum: ff87f402faadb4b5aeee3d27762566c11807f927cd4012b8bbc7f073ca68de0e2197f95330ff5dfd7038f4b4f0e2f51b11feb64c5d570f5c598d37850a5daf60 + languageName: node + linkType: hard + +"@microsoft/fast-element@npm:^1.12.0": + version: 1.12.0 + resolution: "@microsoft/fast-element@npm:1.12.0" + checksum: bbff4e9c83106d1d74f3eeedc87bf84832429e78fee59c6a4ae8164ee4f42667503f586896bea72341b4d2c76c244a3cb0d4fd0d5d3732755f00357714dd609e + languageName: node + linkType: hard + +"@microsoft/fast-foundation@npm:^2.49.4": + version: 2.49.5 + resolution: "@microsoft/fast-foundation@npm:2.49.5" + dependencies: + "@microsoft/fast-element": ^1.12.0 + "@microsoft/fast-web-utilities": ^5.4.1 + tabbable: ^5.2.0 + tslib: ^1.13.0 + checksum: 8a4729e8193ee93f780dc88fac26561b42f2636e3f0a8e89bb1dfe256f50a01a21ed1d8e4d31ce40678807dc833e25f31ba735cb5d3c247b65219aeb2560c82c + languageName: node + linkType: hard + +"@microsoft/fast-web-utilities@npm:^5.4.1": + version: 5.4.1 + resolution: "@microsoft/fast-web-utilities@npm:5.4.1" + dependencies: + exenv-es6: ^1.1.1 + checksum: 303e87847f962944f474e3716c3eb305668243916ca9e0719e26bb9a32346144bc958d915c103776b3e552cea0f0f6233f839fad66adfdf96a8436b947288ca7 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.1 + resolution: "@npmcli/agent@npm:2.2.1" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.1 + checksum: c69aca42dbba393f517bc5777ee872d38dc98ea0e5e93c1f6d62b82b8fecdc177a57ea045f07dda1a770c592384b2dd92a5e79e21e2a7cf51c9159466a8f9c9b + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@playwright/test@npm:^1.32.0, @playwright/test@npm:^1.56.0": + version: 1.57.0 + resolution: "@playwright/test@npm:1.57.0" + dependencies: + playwright: 1.57.0 + bin: + playwright: cli.js + checksum: 1a84783a240d69c2c8081a127b446f812a8dc86fe6f60a9511dd501cc0e6229cbec7e7753972678f3f063ad2bebb2cedbe9caebc5faa41014aebed35773ea242 + languageName: node + linkType: hard + +"@rjsf/core@npm:^5.13.4": + version: 5.17.1 + resolution: "@rjsf/core@npm:5.17.1" + dependencies: + lodash: ^4.17.21 + lodash-es: ^4.17.21 + markdown-to-jsx: ^7.4.1 + nanoid: ^3.3.7 + prop-types: ^15.8.1 + peerDependencies: + "@rjsf/utils": ^5.16.x + react: ^16.14.0 || >=17 + checksum: 2dead2886a4db152d259d3e85281c1fa5975eeac5f05c2840201ccc583ef1cf9d48c922cd404d515133e140eae7a8fca4aa63ccde0bcfe63d0b3fbe3cd621aed + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.13.4": + version: 5.17.1 + resolution: "@rjsf/utils@npm:5.17.1" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: 83010de66b06f1046b023a0b7d0bf30b5f47b152893c3b12f1f42faa89e7c7d18b2f04fe2e9035e5f63454317f09e6d5753fc014d43b933c8023b71fc50c3acf + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: 4.0.8 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@stdlib/array@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/array@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 0d95690461f0c4560eabef0796d1170274415cd03de80333c6d39814d0484a6873ef4be04a64941ebf3a600747e84c3a4f23b21c7020e53842c07985331b39f1 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/assert@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/assert@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: d4dcbeabbfb86ba56cdd972ff785f43e7d25018b2b1800cab8b0deb9e5c54c795d6ead3d142f4dd13c351f636deba4dc1857c85147d6b059fdc78eb2c9510b99 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/bigint@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/bigint@npm:0.0.11" + dependencies: + "@stdlib/utils": ^0.0.x + checksum: 7bf825d116e4b010e214209af239706ac1ef923eecb5c8b0af9229c9975450081355e441ecc7b4765d81a9e653141868e0492b8061d1e65724fa42fb8283aabd + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/blas@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/blas@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 67ea00a968f7a9c710b37f718b7f756e2830e479a1a1ee44cbf6ec3cc27dd8863078928867707d9d1624007e81de89d040f2326d10f435e2cce913cab121975e + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/buffer@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/buffer@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 93df02e3bf548e940ff9cef65121566e7bf93b554f0614d62336c9dbccfc07c9f1b1c4e9a7aebbe4819ef16a6d2a33a7010c2fdf908fface8298a3109c3c4ef0 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/cli@npm:^0.0.x": + version: 0.0.10 + resolution: "@stdlib/cli@npm:0.0.10" + dependencies: + "@stdlib/utils": ^0.0.x + minimist: ^1.2.0 + checksum: bbece8d3dbff2835518582a7726c6c4c22743dc408d2303d9e35a3b72151d5d0a8e78d61bc896663d4c3fb702e966abea7a1bd621ed943723a359f57053f121f + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/complex@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/complex@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 8eda35027495417f1b0dd9bbbc2d4983f50ad3cf9e2276ffe0945ccdbe78f0fc66b9fc36ab71926d2a125c8fb7467c8970a222b230b42ff4bb8042c53314ca09 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/constants@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/constants@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: fc19d055a4e71ae84b6c92e4a3a88371d50693da8f0a813df4063dc549374d19b9cf23f4fdae2fb7b2013e13929f713c3e1b9e4054767e741b75561ed43d15c3 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/fs@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/fs@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + checksum: 33ac5ee4844d4599fe3a8a8402f1a3e2cafee31a5c9cf5b85df530a61a2b54ef17dc30a67be98dacdc2958219413edd0e4cdc3c28266f4bc30277ee024f6a49e + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/math@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/math@npm:0.0.11" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/strided": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + checksum: 6c4c9dda36fbce50553e1437354c5286aa782c42399534dbed8e696ddeb1b91ef6cff5fe5962f1c9e1eb2ef63c63d9bd58f7ca4b87d59018aaac20099c3fb79a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/ndarray@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/ndarray@npm:0.0.13" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/bigint": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 842a94afce5fc74bf8a964b75a302ddb8713eadbc79616e6799f1310c8bce860ed9e9877adc4a39338d9136b8798947ee21cf03368d46408308a313c8075d49a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/nlp@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/nlp@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 398fe2853fb95404bb6598e3e199ca3e0435b94447d50e14e2e30582cadfb91f43464f23d80a0e1da4d64567a4a108a7299d7440509f1ab26b02aea7bb16e9a8 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/number@npm:^0.0.x": + version: 0.0.10 + resolution: "@stdlib/number@npm:0.0.10" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 326190956c787cbf9321c332beedab5ba4b3fa97d52a82aa708a0349b4678c0df7a351424f00a606f4eaca4fb4ba4cc191580c99d7c64ee0f08d37baa3de14f2 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/os@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/os@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 37156b0c723da70d7740d92d08fc592eae803461c1d546cff6ac044765d6e40722fdad342219277e747c39344b513096ac1d0aa1e733cf3079bd8a9a8578612a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/process@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/process@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 6d5c3d943f9914d1ae39bd36ad7436f783cf64baa2bff67a808035c99258676ae3f704c328a78d62754951cf85fe99d8e9af5f4fa7d5f8cba347bca72767e357 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/random@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/random@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/stats": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + readable-stream: ^2.1.4 + checksum: 67fcb5553274f8596ceae91153e96ae297bacfd55279821cb09f19f2844845aaf892802e4a5962965323dbfded0c7df8a89a6ce77d60d5c8a5899d483055a964 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/regexp@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/regexp@npm:0.0.13" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: dd52adb096ff9a02d1c4818be2889ae01bc04a0cdbc0d52473685e0a7a4eaa13e1be603b964f140f7488d11450b644dc5f8c97029d77db1ed4a563554245ff1c + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/stats@npm:^0.0.x, @stdlib/stats@npm:~0.0.13": + version: 0.0.13 + resolution: "@stdlib/stats@npm:0.0.13" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 5ca12b2e123543f56a59aca828e14afaf525ad4aa40467bee7037a9178e21e55d4ce8ba3de9387cc9a0efe3e0d035d6c58705b12f634f77a2b3f87d334dfb076 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/streams@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/streams@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + readable-stream: ^2.1.4 + checksum: 231b4607d082ea81d9dadbeab08002ec398a29c7eb5d611d8a4183f9db6964428e2f8a9e0f8edd085ca12b5d58258576987a575e9d8f6fcabcb5a62c6b8efe88 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/strided@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/strided@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 55ccc8543596894a2e3ad734b394700c69697b499a54b3bfbcf80cddd8d91509792c23931f5cebf7c89269676ac3f44352582e4f42e2c2c2898363cc3a76403d + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/string@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/string@npm:0.0.14" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/nlp": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: aaaaaddf381cccc67f15dbab76f43ce81cb71a4f5595bfa06ef915b6747458deca3c25c60ff3c002c0c36482687d92a150f364069559dfea915f63a040d5f603 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/symbol@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/symbol@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 2263341ce0296de2063d26038902bd63bf1d7b820307402fdf38c3b248bd026f17d96bccdc3189fd9fcc9c83a778eaab797dc11805bd66203b8ac9c6934f6588 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/time@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/time@npm:0.0.14" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 6e8a1b985a09936ab09c98d44bf1b2c79e08995c3c73401494bc1f6f708747ef136d769af4809a8af92a9ceb3d390db6c4c4e01608cd8d794a86c4b57e343eb1 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/types@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/types@npm:0.0.14" + checksum: 5680a655ddb3ad730f5c7eb2363a43e089f3e6a1b85b12546cab49f7749bb3baf293bd50fbfe55486f233f4227f1020b65eb461b754b94fb4a4bc2799647ec22 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/utils@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/utils@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/time": ^0.0.x + "@stdlib/types": ^0.0.x + debug: ^2.6.9 + checksum: e0c3671c5f62c11bb3abd721f2958c41641b00a75d449bd25fbb62bcb8689cfe9c1f600c0688e7b6819ae870d6e5974d0fc7b2ec86081c45d9194b316b2a2ec2 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@types/d3-array@npm:*": + version: 3.2.2 + resolution: "@types/d3-array@npm:3.2.2" + checksum: 72e8e2abe0911cb431d6f3fe0a1f71b915356b679d4d9c826f52941bb30210c0fe8299dde066b08d9986754c620f031b13b13ab6dfc60d404eceab66a075dd5d + languageName: node + linkType: hard + +"@types/d3-axis@npm:*": + version: 3.0.6 + resolution: "@types/d3-axis@npm:3.0.6" + dependencies: + "@types/d3-selection": "*" + checksum: ea1065d9e6d134c04427763603cbe9d549b8b5785b8ae0d002b5b14a362619d5b8f5ee3c2fda8b36b7e5a413cbcd387e1a2d89898b919a9f0cc91ad4e67b5ab5 + languageName: node + linkType: hard + +"@types/d3-brush@npm:*": + version: 3.0.6 + resolution: "@types/d3-brush@npm:3.0.6" + dependencies: + "@types/d3-selection": "*" + checksum: e5166bc53e5c914b1fed0a6ce55ca14d76ae11c5afd16b724b8ae47989e977c4af02bb07496d1ccd0a77f4ccd9a2ca7345e1d289bcfce16490fe4b39a9e0d170 + languageName: node + linkType: hard + +"@types/d3-chord@npm:*": + version: 3.0.6 + resolution: "@types/d3-chord@npm:3.0.6" + checksum: b511cf372ed8a0086d37a715c0d4aca811b614454e1f7c1561fbcd46863beaccdb115d274a7a992a30a8218393fbc3e1fdd7ca6e9d572e729a4570002c327083 + languageName: node + linkType: hard + +"@types/d3-color@npm:*": + version: 3.1.3 + resolution: "@types/d3-color@npm:3.1.3" + checksum: 8a0e79a709929502ec4effcee2c786465b9aec51b653ba0b5d05dbfec3e84f418270dd603002d94021885061ff592f614979193bd7a02ad76317f5608560e357 + languageName: node + linkType: hard + +"@types/d3-contour@npm:*": + version: 3.0.6 + resolution: "@types/d3-contour@npm:3.0.6" + dependencies: + "@types/d3-array": "*" + "@types/geojson": "*" + checksum: 83c13eb0567e95d6675d6d81cbeab38d0899c5af70a7c69354e23e0860ddb2f3e911d2cacd33a8baa60ce7846b38785a337b2d7c8d2763a1340bfb999b4bd2ab + languageName: node + linkType: hard + +"@types/d3-delaunay@npm:*": + version: 6.0.4 + resolution: "@types/d3-delaunay@npm:6.0.4" + checksum: 502fe0eb91f7d05b0f57904d68028c24348a54b1e5458009caf662de995d0e59bd82cd701b4af0087d614ee9e456d415fe32d63c25272ca753bf12b3f27b2d77 + languageName: node + linkType: hard + +"@types/d3-dispatch@npm:*": + version: 3.0.7 + resolution: "@types/d3-dispatch@npm:3.0.7" + checksum: ce7ab5a7d5c64aacf563797c0c61f3862b9ff687cb35470fe462219f09e402185646f51707339beede616586d92ded6974c3958dbeb15e35a85b1ecfafdf13a8 + languageName: node + linkType: hard + +"@types/d3-drag@npm:*": + version: 3.0.7 + resolution: "@types/d3-drag@npm:3.0.7" + dependencies: + "@types/d3-selection": "*" + checksum: 1107cb1667ead79073741c06ea4a9e8e4551698f6c9c60821e327a6aa30ca2ba0b31a6fe767af85a2e38a22d2305f6c45b714df15c2bba68adf58978223a5fc5 + languageName: node + linkType: hard + +"@types/d3-dsv@npm:*": + version: 3.0.7 + resolution: "@types/d3-dsv@npm:3.0.7" + checksum: 5025e01459827d09d14e0d00281995a04042ce9e3e76444c5a65466c1d29649d82cbfaa9251e33837bf576f5c587525d8d8ff5aacc6bd3b831824d54449261b9 + languageName: node + linkType: hard + +"@types/d3-ease@npm:*": + version: 3.0.2 + resolution: "@types/d3-ease@npm:3.0.2" + checksum: 0885219966294bfc99548f37297e1c75e75da812a5f3ec941977ebb57dcab0a25acec5b2bbd82d09a49d387daafca08521ca269b7e4c27ddca7768189e987b54 + languageName: node + linkType: hard + +"@types/d3-fetch@npm:*": + version: 3.0.7 + resolution: "@types/d3-fetch@npm:3.0.7" + dependencies: + "@types/d3-dsv": "*" + checksum: e60cf60b25cbc49b2066ac2a3638f610c7379000562b0f499dd90fd57a8cb9740c24667a70496c2a66456d42867afeffb1722a75b26d95e7d7ee8667d96b0b36 + languageName: node + linkType: hard + +"@types/d3-force@npm:*": + version: 3.0.10 + resolution: "@types/d3-force@npm:3.0.10" + checksum: 0faf1321ddd85f7bf25769ee97513b380a897791ad1cd6c4282f09e0108e566132fad80f4c73cdb592a352139b22388d3c77458298a00f92ef72e27019fb33c7 + languageName: node + linkType: hard + +"@types/d3-format@npm:*": + version: 3.0.4 + resolution: "@types/d3-format@npm:3.0.4" + checksum: e69421cd93861a0c080084b0b23d4a5d6a427497559e46898189002fb756dae2c7c858b465308f6bcede7272b90e39ce8adab810bded2309035a5d9556c59134 + languageName: node + linkType: hard + +"@types/d3-geo@npm:*": + version: 3.1.0 + resolution: "@types/d3-geo@npm:3.1.0" + dependencies: + "@types/geojson": "*" + checksum: a4b2daa8a64012912ce7186891e8554af123925dca344c111b771e168a37477e02d504c6c94ee698440380e8c4f3f373d6755be97935da30eae0904f6745ce40 + languageName: node + linkType: hard + +"@types/d3-hierarchy@npm:*": + version: 3.1.7 + resolution: "@types/d3-hierarchy@npm:3.1.7" + checksum: 69746b3a65e0fe0ceb3ffcb1a8840a61e271eadb32eccb5034f0fce036d24801aef924ee45b99246580c9f7c81839ab0555f776a11773d82e860d522a2ff1c0e + languageName: node + linkType: hard + +"@types/d3-interpolate@npm:*": + version: 3.0.4 + resolution: "@types/d3-interpolate@npm:3.0.4" + dependencies: + "@types/d3-color": "*" + checksum: efd2770e174e84fc7316fdafe03cf3688451f767dde1fa6211610137f495be7f3923db7e1723a6961a0e0e9ae0ed969f4f47c038189fa0beb1d556b447922622 + languageName: node + linkType: hard + +"@types/d3-path@npm:*": + version: 3.1.1 + resolution: "@types/d3-path@npm:3.1.1" + checksum: fee8f6b0d3b28a3611c7d7fda3bf2f79392ded266f54b03a220f205c42117644bdcd33dcbf4853da3cca02229f1c669d2a60d5d297a24ce459ba8271ccb26c03 + languageName: node + linkType: hard + +"@types/d3-polygon@npm:*": + version: 3.0.2 + resolution: "@types/d3-polygon@npm:3.0.2" + checksum: 7cf1eadb54f02dd3617512b558f4c0f3811f8a6a8c887d9886981c3cc251db28b68329b2b0707d9f517231a72060adbb08855227f89bef6ef30caedc0a67cab2 + languageName: node + linkType: hard + +"@types/d3-quadtree@npm:*": + version: 3.0.6 + resolution: "@types/d3-quadtree@npm:3.0.6" + checksum: 631fb1a50dbe4fb0c97574891b180ec3d6a0f524bbd8aee8dfd44eda405e7ed1ca2b03d5568a35f697d09e5e4b598117e149236874b0c8764979a3d6242bb0bc + languageName: node + linkType: hard + +"@types/d3-random@npm:*": + version: 3.0.3 + resolution: "@types/d3-random@npm:3.0.3" + checksum: 33285b57768a724d2466ac1deec002432805c9df3e475ffb7f7fec66681cfe3e18d2f68b7f8ba45f400b274907bbebfe8adff14c9a97ef1987e476135e784925 + languageName: node + linkType: hard + +"@types/d3-scale-chromatic@npm:*": + version: 3.1.0 + resolution: "@types/d3-scale-chromatic@npm:3.1.0" + checksum: cb7b86deac077c7c217a52a3f658cdfb812cff8708404fbfe54918c03ead545e1df87df377e9c4eab21c9d6c1aeee6471320e02a5b6b27e2e3f786a12a82ab02 + languageName: node + linkType: hard + +"@types/d3-scale@npm:*": + version: 4.0.9 + resolution: "@types/d3-scale@npm:4.0.9" + dependencies: + "@types/d3-time": "*" + checksum: c44265a38e538983686b1b8d159abfb4e81c09b33316f3a68f0f372d38400fa950ad531644d25230cc7b48ea5adb50270fc54823f088979ade62dcd0225f7aa3 + languageName: node + linkType: hard + +"@types/d3-selection@npm:*": + version: 3.0.11 + resolution: "@types/d3-selection@npm:3.0.11" + checksum: 4b76630f76dffdafc73cdc786d73e7b4c96f40546483074b3da0e7fe83fd7f5ed9bc6c50f79bcef83595f943dcc9ed6986953350f39371047af644cc39c41b43 + languageName: node + linkType: hard + +"@types/d3-shape@npm:*": + version: 3.1.7 + resolution: "@types/d3-shape@npm:3.1.7" + dependencies: + "@types/d3-path": "*" + checksum: 776b982e2c4fc04763782af5100993c02bca338632ff2c76d2423ace398300ba7c48cd745f95b5f51edefabbfd026c45829a146c411f8facde09ef92580b20ce + languageName: node + linkType: hard + +"@types/d3-time-format@npm:*": + version: 4.0.3 + resolution: "@types/d3-time-format@npm:4.0.3" + checksum: e981fc9780697a9d8c5d1ddf1167d9c6bc28e4e610afddff1384fe55e6eb52cb65309b2a0a1d4cf817413b0a80b9f1a652fe0b2cb8054ace4eafff80a6093aa5 + languageName: node + linkType: hard + +"@types/d3-time@npm:*": + version: 3.0.4 + resolution: "@types/d3-time@npm:3.0.4" + checksum: 0c296884571ce70c4bbd4ea9cd1c93c0c8aee602c6c806b056187dd4ee49daf70c2f41da94b25ba0d796edf8ca83cbb87fe6d1cdda7ca669ab800170ece1c12b + languageName: node + linkType: hard + +"@types/d3-timer@npm:*": + version: 3.0.2 + resolution: "@types/d3-timer@npm:3.0.2" + checksum: 1643eebfa5f4ae3eb00b556bbc509444d88078208ec2589ddd8e4a24f230dd4cf2301e9365947e70b1bee33f63aaefab84cd907822aae812b9bc4871b98ab0e1 + languageName: node + linkType: hard + +"@types/d3-transition@npm:*": + version: 3.0.9 + resolution: "@types/d3-transition@npm:3.0.9" + dependencies: + "@types/d3-selection": "*" + checksum: c8608b1ac7cf09acfe387f3d41074631adcdfd7f2c8ca2efb378309adf0e9fc8469dbcf0d7a8c40fd1f03f2d2bf05fcda0cde7aa356ae8533a141dcab4dff221 + languageName: node + linkType: hard + +"@types/d3-zoom@npm:*": + version: 3.0.8 + resolution: "@types/d3-zoom@npm:3.0.8" + dependencies: + "@types/d3-interpolate": "*" + "@types/d3-selection": "*" + checksum: a1685728949ed39faf8ce162cc13338639c57bc2fd4d55fc7902b2632cad2bc2a808941263e57ce6685647e8a6a0a556e173386a52d6bb74c9ed6195b68be3de + languageName: node + linkType: hard + +"@types/d3@npm:^7.4.3": + version: 7.4.3 + resolution: "@types/d3@npm:7.4.3" + dependencies: + "@types/d3-array": "*" + "@types/d3-axis": "*" + "@types/d3-brush": "*" + "@types/d3-chord": "*" + "@types/d3-color": "*" + "@types/d3-contour": "*" + "@types/d3-delaunay": "*" + "@types/d3-dispatch": "*" + "@types/d3-drag": "*" + "@types/d3-dsv": "*" + "@types/d3-ease": "*" + "@types/d3-fetch": "*" + "@types/d3-force": "*" + "@types/d3-format": "*" + "@types/d3-geo": "*" + "@types/d3-hierarchy": "*" + "@types/d3-interpolate": "*" + "@types/d3-path": "*" + "@types/d3-polygon": "*" + "@types/d3-quadtree": "*" + "@types/d3-random": "*" + "@types/d3-scale": "*" + "@types/d3-scale-chromatic": "*" + "@types/d3-selection": "*" + "@types/d3-shape": "*" + "@types/d3-time": "*" + "@types/d3-time-format": "*" + "@types/d3-timer": "*" + "@types/d3-transition": "*" + "@types/d3-zoom": "*" + checksum: 12234aa093c8661546168becdd8956e892b276f525d96f65a7b32fed886fc6a569fe5a1171bff26fef2a5663960635f460c9504a6f2d242ba281a2b6c8c6465c + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a + languageName: node + linkType: hard + +"@types/geojson@npm:*": + version: 7946.0.16 + resolution: "@types/geojson@npm:7946.0.16" + checksum: d66e5e023f43b3e7121448117af1930af7d06410a32a585a8bc9c6bb5d97e0d656cd93d99e31fa432976c32e98d4b780f82bf1fd1acd20ccf952eb6b8e39edf2 + languageName: node + linkType: hard + +"@types/geojson@npm:7946.0.4": + version: 7946.0.4 + resolution: "@types/geojson@npm:7946.0.4" + checksum: 541aea46540c918b9fe21ab73f497fe17b1eaf4d0d3baeb5f5614029b7f488c37f63843b644c024a8178dc2fb66d3d6623c25d9cf61d7b553aa19c8dc7f99047 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + languageName: node + linkType: hard + +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + +"@types/klaw-sync@npm:^6.0.1": + version: 6.0.5 + resolution: "@types/klaw-sync@npm:6.0.5" + dependencies: + "@types/node": "*" + checksum: 618a985280e4d8d451d8208d85b7df31bc5af8f17f2501cbbe57bedd1b6eb0d297ac6ac2ad2ea4dddf7f9b96f34aac1af7f635cf7c42f276e016c3854de8b9d2 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.11.30 + resolution: "@types/node@npm:20.11.30" + dependencies: + undici-types: ~5.26.4 + checksum: 7597767aa3e44b0f1bf62efa522dd17741135f283c11de6a20ead8bb7016fb4999cc30adcd8f2bb29ebb216906c92894346ccd187de170927dc1e212d2c07c81 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.11 + resolution: "@types/prop-types@npm:15.7.11" + checksum: 7519ff11d06fbf6b275029fe03fff9ec377b4cb6e864cac34d87d7146c7f5a7560fd164bdc1d2dbe00b60c43713631251af1fd3d34d46c69cd354602bc0c7c54 + languageName: node + linkType: hard + +"@types/react@npm:^18.0.26": + version: 18.2.67 + resolution: "@types/react@npm:18.2.67" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 9e48122b0e8d0ae20601f613aca32289eeb94d55c58ff03a7dc532d80ed289a1ba9715f14b773bd926ccdd63e503717f14264143ef531dc370063abe09dee0b2 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 6c091b096daa490093bf30dd7947cd28e5b2cd612ec93448432b33f724b162587fed9309a0acc104d97b69b1d49a0f3fc755a62282054d62975d53d7fd13472d + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: f19409d0190b179331586365912920d192733112a195e870c7f18d20ac8adb7ad0b0ff69dad430dba8bc2be09593453a719cfea92dc3bda19748fd158fe1498d + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.35 + resolution: "@types/yargs@npm:17.0.35" + dependencies: + "@types/yargs-parser": "*" + checksum: ebf1f5373388cfcbf9cfb5e56ce7a77c0ba2450420f26f3701010ca92df48cce7e14e4245ed1f17178a38ff8702467a6f4047742775b8e2fd06dec8f4f3501ce + languageName: node + linkType: hard + +"@vscode/debugprotocol@npm:^1.51.0": + version: 1.65.0 + resolution: "@vscode/debugprotocol@npm:1.65.0" + checksum: 3ea504d01c67cd6a0c56fa3357f61f2dbaa426445443dba8b860292232e62e5bff7111e68e4cb844cedd564db1617e08847477a19527becd9f2608199eae4118 + languageName: node + linkType: hard + +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.2": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: ^8.11.0 + checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c + languageName: node + linkType: hard + +"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.15.0, acorn@npm:^8.8.1": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 309c6b49aedf1a2e34aaf266de06de04aab6eb097c02375c66fdeb0f64556a6a823540409914fb364d9a11bc30d79d485a2eba29af47992d3490e9886c4391c3 + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 9102e246d1ed9b37ac36f57f0a6ca55226876553251a31fc80677e71471f463a54c872dc78d5d7f80740c8ba624395cccbe8b60f7b690c4418f487d8e9fd1106 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 74a71a4a2dd7afd06ebb612f6d612c7f4766a351bedffde466023bf6dae629e46b0d2cd38786239e0fbf245de0c7df76035465e16d1213774a0efb22fec0d713 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"bqplot-ui-tests@workspace:.": + version: 0.0.0-use.local + resolution: "bqplot-ui-tests@workspace:." + dependencies: + "@jupyterlab/galata": ^5.5.0 + "@playwright/test": ^1.32.0 + "@types/klaw-sync": ^6.0.1 + klaw-sync: ^6.0.0 + languageName: unknown + linkType: soft + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.2 + resolution: "cacache@npm:18.0.2" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chevrotain-allstar@npm:~0.3.0": + version: 0.3.1 + resolution: "chevrotain-allstar@npm:0.3.1" + dependencies: + lodash-es: ^4.17.21 + peerDependencies: + chevrotain: ^11.0.0 + checksum: 5f5213693886d03ca04ffacc57f7424b5c8015e7a62de3c193c3bc94ae7472f113e9fab7f4e92ce0553c181483950a170576897d7b695aac6196ce32b988475e + languageName: node + linkType: hard + +"chevrotain@npm:~11.0.3": + version: 11.0.3 + resolution: "chevrotain@npm:11.0.3" + dependencies: + "@chevrotain/cst-dts-gen": 11.0.3 + "@chevrotain/gast": 11.0.3 + "@chevrotain/regexp-to-ast": 11.0.3 + "@chevrotain/types": 11.0.3 + "@chevrotain/utils": 11.0.3 + lodash-es: 4.17.21 + checksum: 43abce4ef2be2ae499027066ad5bfb2dd6b838423108adc69839133655b925a4d86212b97125d8deef9f84dc173b34457eedf59a2d178b6d0b2a0d2e2a7762a4 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"commander@npm:2": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:7": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"commander@npm:^8.3.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 + languageName: node + linkType: hard + +"compute-gcd@npm:^1.2.1": + version: 1.2.1 + resolution: "compute-gcd@npm:1.2.1" + dependencies: + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 + languageName: node + linkType: hard + +"compute-lcm@npm:^1.1.2": + version: 1.1.2 + resolution: "compute-lcm@npm:1.1.2" + dependencies: + compute-gcd: ^1.2.1 + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 + languageName: node + linkType: hard + +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 5c7718ab22cf9e35a31c21ef124156076ae8c9dc65e6463d54961caf5a1d529284485a0fdf83fd23b27329f3b75b0c8c07d2e36c699f5151a2efe903343f976a + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cose-base@npm:^1.0.0": + version: 1.0.3 + resolution: "cose-base@npm:1.0.3" + dependencies: + layout-base: ^1.0.0 + checksum: 3f3d592316df74adb215ca91e430f1c22b6e890bc0025b32ae1f6464c73fdb9614816cb40a8d38b40c6a3e9e7b8c64eda90d53fb9a4a6948abec17dad496f30b + languageName: node + linkType: hard + +"cose-base@npm:^2.2.0": + version: 2.2.0 + resolution: "cose-base@npm:2.2.0" + dependencies: + layout-base: ^2.0.0 + checksum: 2e694f340bf216c71fc126d237578a4168e138720011d0b48c88bf9bfc7fd45f912eff2c603ef3d1307d6e3ce6f465ed382285a764a3a6620db590c5457d2557 + languageName: node + linkType: hard + +"crelt@npm:^1.0.5, crelt@npm:^1.0.6": + version: 1.0.6 + resolution: "crelt@npm:1.0.6" + checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 + languageName: node + linkType: hard + +"cssom@npm:~0.3.6": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 + languageName: node + linkType: hard + +"cssstyle@npm:^2.3.0": + version: 2.3.0 + resolution: "cssstyle@npm:2.3.0" + dependencies: + cssom: ~0.3.6 + checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 + languageName: node + linkType: hard + +"csstype@npm:3.0.10": + version: 3.0.10 + resolution: "csstype@npm:3.0.10" + checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 + languageName: node + linkType: hard + +"cytoscape-cose-bilkent@npm:^4.1.0": + version: 4.1.0 + resolution: "cytoscape-cose-bilkent@npm:4.1.0" + dependencies: + cose-base: ^1.0.0 + peerDependencies: + cytoscape: ^3.2.0 + checksum: bea6aa139e21bf4135b01b99f8778eed061e074d1a1689771597e8164a999d66f4075d46be584b0a88a5447f9321f38c90c8821df6a9322faaf5afebf4848d97 + languageName: node + linkType: hard + +"cytoscape-fcose@npm:^2.2.0": + version: 2.2.0 + resolution: "cytoscape-fcose@npm:2.2.0" + dependencies: + cose-base: ^2.2.0 + peerDependencies: + cytoscape: ^3.2.0 + checksum: 94ffe6f131f9c08c2a0a7a6ce1c6c5e523a395bf8d84eba6d4a5f85e23f33788ea3ff807540861a5f78a6914a27729e06a7e6f66784f4f28ea1c030acf500121 + languageName: node + linkType: hard + +"cytoscape@npm:^3.29.3": + version: 3.33.1 + resolution: "cytoscape@npm:3.33.1" + checksum: 4ebb9551ecb868fc6e831f523933bf96bd107d09b984d6d44db45adfd0a0f82f3383d7d0d5bc2053267ab2e8da47ce5ea280159643e818a4f2534affee248db8 + languageName: node + linkType: hard + +"d3-array@npm:1 - 2": + version: 2.12.1 + resolution: "d3-array@npm:2.12.1" + dependencies: + internmap: ^1.0.0 + checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb + languageName: node + linkType: hard + +"d3-array@npm:1 - 3, d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:3, d3-array@npm:3.2.4, d3-array@npm:^3.2.0, d3-array@npm:^3.2.2": + version: 3.2.4 + resolution: "d3-array@npm:3.2.4" + dependencies: + internmap: 1 - 2 + checksum: a5976a6d6205f69208478bb44920dd7ce3e788c9dceb86b304dbe401a4bfb42ecc8b04c20facde486e9adcb488b5d1800d49393a3f81a23902b68158e12cddd0 + languageName: node + linkType: hard + +"d3-axis@npm:3": + version: 3.0.0 + resolution: "d3-axis@npm:3.0.0" + checksum: 227ddaa6d4bad083539c1ec245e2228b4620cca941997a8a650cb0af239375dc20271993127eedac66f0543f331027aca09385e1e16eed023f93eac937cddf0b + languageName: node + linkType: hard + +"d3-brush@npm:3": + version: 3.0.0 + resolution: "d3-brush@npm:3.0.0" + dependencies: + d3-dispatch: 1 - 3 + d3-drag: 2 - 3 + d3-interpolate: 1 - 3 + d3-selection: 3 + d3-transition: 3 + checksum: 1d042167769a02ac76271c71e90376d7184206e489552b7022a8ec2860209fe269db55e0a3430f3dcbe13b6fec2ff65b1adeaccba3218991b38e022390df72e3 + languageName: node + linkType: hard + +"d3-chord@npm:3": + version: 3.0.1 + resolution: "d3-chord@npm:3.0.1" + dependencies: + d3-path: 1 - 3 + checksum: ddf35d41675e0f8738600a8a2f05bf0858def413438c12cba357c5802ecc1014c80a658acbbee63cbad2a8c747912efb2358455d93e59906fe37469f1dc6b78b + languageName: node + linkType: hard + +"d3-color@npm:1 - 3, d3-color@npm:3, d3-color@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-color@npm:3.1.0" + checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b + languageName: node + linkType: hard + +"d3-contour@npm:4": + version: 4.0.2 + resolution: "d3-contour@npm:4.0.2" + dependencies: + d3-array: ^3.2.0 + checksum: 56aa082c1acf62a45b61c8d29fdd307041785aa17d9a07de7d1d848633769887a33fb6823888afa383f31c460d0f21d24756593e84e334ddb92d774214d32f1b + languageName: node + linkType: hard + +"d3-delaunay@npm:6, d3-delaunay@npm:^6.0.2": + version: 6.0.4 + resolution: "d3-delaunay@npm:6.0.4" + dependencies: + delaunator: 5 + checksum: ce6d267d5ef21a8aeadfe4606329fc80a22ab6e7748d47bc220bcc396ee8be84b77a5473033954c5ac4aa522d265ddc45d4165d30fe4787dd60a15ea66b9bbb4 + languageName: node + linkType: hard + +"d3-dispatch@npm:1 - 3, d3-dispatch@npm:3": + version: 3.0.1 + resolution: "d3-dispatch@npm:3.0.1" + checksum: fdfd4a230f46463e28e5b22a45dd76d03be9345b605e1b5dc7d18bd7ebf504e6c00ae123fd6d03e23d9e2711e01f0e14ea89cd0632545b9f0c00b924ba4be223 + languageName: node + linkType: hard + +"d3-drag@npm:2 - 3, d3-drag@npm:3": + version: 3.0.0 + resolution: "d3-drag@npm:3.0.0" + dependencies: + d3-dispatch: 1 - 3 + d3-selection: 3 + checksum: d297231e60ecd633b0d076a63b4052b436ddeb48b5a3a11ff68c7e41a6774565473a6b064c5e9256e88eca6439a917ab9cea76032c52d944ddbf4fd289e31111 + languageName: node + linkType: hard + +"d3-dsv@npm:1 - 3, d3-dsv@npm:3, d3-dsv@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-dsv@npm:3.0.1" + dependencies: + commander: 7 + iconv-lite: 0.6 + rw: 1 + bin: + csv2json: bin/dsv2json.js + csv2tsv: bin/dsv2dsv.js + dsv2dsv: bin/dsv2dsv.js + dsv2json: bin/dsv2json.js + json2csv: bin/json2dsv.js + json2dsv: bin/json2dsv.js + json2tsv: bin/json2dsv.js + tsv2csv: bin/dsv2dsv.js + tsv2json: bin/dsv2json.js + checksum: 5fc0723647269d5dccd181d74f2265920ab368a2868b0b4f55ffa2fecdfb7814390ea28622cd61ee5d9594ab262879509059544e9f815c54fe76fbfb4ffa4c8a + languageName: node + linkType: hard + +"d3-ease@npm:1 - 3, d3-ease@npm:3": + version: 3.0.1 + resolution: "d3-ease@npm:3.0.1" + checksum: 06e2ee5326d1e3545eab4e2c0f84046a123dcd3b612e68858219aa034da1160333d9ce3da20a1d3486d98cb5c2a06f7d233eee1bc19ce42d1533458bd85dedcd + languageName: node + linkType: hard + +"d3-fetch@npm:3": + version: 3.0.1 + resolution: "d3-fetch@npm:3.0.1" + dependencies: + d3-dsv: 1 - 3 + checksum: 382dcea06549ef82c8d0b719e5dc1d96286352579e3b51b20f71437f5800323315b09cf7dcfd4e1f60a41e1204deb01758470cea257d2285a7abd9dcec806984 + languageName: node + linkType: hard + +"d3-force@npm:3, d3-force@npm:^3.0.0": + version: 3.0.0 + resolution: "d3-force@npm:3.0.0" + dependencies: + d3-dispatch: 1 - 3 + d3-quadtree: 1 - 3 + d3-timer: 1 - 3 + checksum: 6c7e96438cab62fa32aeadb0ade3297b62b51f81b1b38b0a60a5ec9fd627d74090c1189654d92df2250775f31b06812342f089f1d5947de9960a635ee3581def + languageName: node + linkType: hard + +"d3-format@npm:1 - 3, d3-format@npm:3, d3-format@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-format@npm:3.1.0" + checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 + languageName: node + linkType: hard + +"d3-geo-projection@npm:^4.0.0": + version: 4.0.0 + resolution: "d3-geo-projection@npm:4.0.0" + dependencies: + commander: 7 + d3-array: 1 - 3 + d3-geo: 1.12.0 - 3 + bin: + geo2svg: bin/geo2svg.js + geograticule: bin/geograticule.js + geoproject: bin/geoproject.js + geoquantize: bin/geoquantize.js + geostitch: bin/geostitch.js + checksum: 631422b10dd78d1047ba5a3b073148bea27721060bd7087a5fa6c053ca80445d26432e505e0e3acbd6e0d76cf577c61bf9a5db70dabbc9310c493de1f7ff736d + languageName: node + linkType: hard + +"d3-geo@npm:1.12.0 - 3, d3-geo@npm:3, d3-geo@npm:^3.1.0": + version: 3.1.1 + resolution: "d3-geo@npm:3.1.1" + dependencies: + d3-array: 2.5.0 - 3 + checksum: 3cc4bb50af5d2d4858d2df1729a1777b7fd361854079d9faab1166186c988d2cba0d11911da0c4598d5e22fae91d79113ed262a9f98cabdbc6dbf7c30e5c0363 + languageName: node + linkType: hard + +"d3-hierarchy@npm:3, d3-hierarchy@npm:^3.1.2": + version: 3.1.2 + resolution: "d3-hierarchy@npm:3.1.2" + checksum: 0fd946a8c5fd4686d43d3e11bbfc2037a145fda29d2261ccd0e36f70b66af6d7638e2c0c7112124d63fc3d3127197a00a6aecf676bd5bd392a94d7235a214263 + languageName: node + linkType: hard + +"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:3, d3-interpolate@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-interpolate@npm:3.0.1" + dependencies: + d3-color: 1 - 3 + checksum: a42ba314e295e95e5365eff0f604834e67e4a3b3c7102458781c477bd67e9b24b6bb9d8e41ff5521050a3f2c7c0c4bbbb6e187fd586daa3980943095b267e78b + languageName: node + linkType: hard + +"d3-path@npm:1": + version: 1.0.9 + resolution: "d3-path@npm:1.0.9" + checksum: d4382573baf9509a143f40944baeff9fead136926aed6872f7ead5b3555d68925f8a37935841dd51f1d70b65a294fe35c065b0906fb6e42109295f6598fc16d0 + languageName: node + linkType: hard + +"d3-path@npm:1 - 3, d3-path@npm:3, d3-path@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-path@npm:3.1.0" + checksum: 2306f1bd9191e1eac895ec13e3064f732a85f243d6e627d242a313f9777756838a2215ea11562f0c7630c7c3b16a19ec1fe0948b1c82f3317fac55882f6ee5d8 + languageName: node + linkType: hard + +"d3-polygon@npm:3": + version: 3.0.1 + resolution: "d3-polygon@npm:3.0.1" + checksum: 0b85c532517895544683849768a2c377cee3801ef8ccf3fa9693c8871dd21a0c1a2a0fc75ff54192f0ba2c562b0da2bc27f5bf959dfafc7fa23573b574865d2c + languageName: node + linkType: hard + +"d3-quadtree@npm:1 - 3, d3-quadtree@npm:3": + version: 3.0.1 + resolution: "d3-quadtree@npm:3.0.1" + checksum: 5469d462763811475f34a7294d984f3eb100515b0585ca5b249656f6b1a6e99b20056a2d2e463cc9944b888896d2b1d07859c50f9c0cf23438df9cd2e3146066 + languageName: node + linkType: hard + +"d3-random@npm:3": + version: 3.0.1 + resolution: "d3-random@npm:3.0.1" + checksum: a70ad8d1cabe399ebeb2e482703121ac8946a3b336830b518da6848b9fdd48a111990fc041dc716f16885a72176ffa2898f2a250ca3d363ecdba5ef92b18e131 + languageName: node + linkType: hard + +"d3-sankey@npm:^0.12.3": + version: 0.12.3 + resolution: "d3-sankey@npm:0.12.3" + dependencies: + d3-array: 1 - 2 + d3-shape: ^1.2.0 + checksum: df1cb9c9d02dd8fd14040e89f112f0da58c03bd7529fa001572a6925a51496d1d82ff25d9fedb6c429a91645fbd2476c19891e535ac90c8bc28337c33ee21c87 + languageName: node + linkType: hard + +"d3-scale-chromatic@npm:3": + version: 3.1.0 + resolution: "d3-scale-chromatic@npm:3.1.0" + dependencies: + d3-color: 1 - 3 + d3-interpolate: 1 - 3 + checksum: ab6324bd8e1f708e731e02ab44e09741efda2b174cea1d8ca21e4a87546295e99856bc44e2fd3890f228849c96bccfbcf922328f95be6a7df117453eb5cf22c9 + languageName: node + linkType: hard + +"d3-scale@npm:4, d3-scale@npm:^4.0.2": + version: 4.0.2 + resolution: "d3-scale@npm:4.0.2" + dependencies: + d3-array: 2.10.0 - 3 + d3-format: 1 - 3 + d3-interpolate: 1.2.0 - 3 + d3-time: 2.1.1 - 3 + d3-time-format: 2 - 4 + checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e + languageName: node + linkType: hard + +"d3-selection@npm:2 - 3, d3-selection@npm:3": + version: 3.0.0 + resolution: "d3-selection@npm:3.0.0" + checksum: f4e60e133309115b99f5b36a79ae0a19d71ee6e2d5e3c7216ef3e75ebd2cb1e778c2ed2fa4c01bef35e0dcbd96c5428f5bd6ca2184fe2957ed582fde6841cbc5 + languageName: node + linkType: hard + +"d3-shape@npm:3, d3-shape@npm:^3.2.0": + version: 3.2.0 + resolution: "d3-shape@npm:3.2.0" + dependencies: + d3-path: ^3.1.0 + checksum: de2af5fc9a93036a7b68581ca0bfc4aca2d5a328aa7ba7064c11aedd44d24f310c20c40157cb654359d4c15c3ef369f95ee53d71221017276e34172c7b719cfa + languageName: node + linkType: hard + +"d3-shape@npm:^1.2.0": + version: 1.3.7 + resolution: "d3-shape@npm:1.3.7" + dependencies: + d3-path: 1 + checksum: 46566a3ab64a25023653bf59d64e81e9e6c987e95be985d81c5cedabae5838bd55f4a201a6b69069ca862eb63594cd263cac9034afc2b0e5664dfe286c866129 + languageName: node + linkType: hard + +"d3-time-format@npm:2 - 4, d3-time-format@npm:4, d3-time-format@npm:^4.1.0": + version: 4.1.0 + resolution: "d3-time-format@npm:4.1.0" + dependencies: + d3-time: 1 - 3 + checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 + languageName: node + linkType: hard + +"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:3, d3-time@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-time@npm:3.1.0" + dependencies: + d3-array: 2 - 3 + checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 + languageName: node + linkType: hard + +"d3-timer@npm:1 - 3, d3-timer@npm:3, d3-timer@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-timer@npm:3.0.1" + checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 + languageName: node + linkType: hard + +"d3-transition@npm:2 - 3, d3-transition@npm:3": + version: 3.0.1 + resolution: "d3-transition@npm:3.0.1" + dependencies: + d3-color: 1 - 3 + d3-dispatch: 1 - 3 + d3-ease: 1 - 3 + d3-interpolate: 1 - 3 + d3-timer: 1 - 3 + peerDependencies: + d3-selection: 2 - 3 + checksum: cb1e6e018c3abf0502fe9ff7b631ad058efb197b5e14b973a410d3935aead6e3c07c67d726cfab258e4936ef2667c2c3d1cd2037feb0765f0b4e1d3b8788c0ea + languageName: node + linkType: hard + +"d3-zoom@npm:3": + version: 3.0.0 + resolution: "d3-zoom@npm:3.0.0" + dependencies: + d3-dispatch: 1 - 3 + d3-drag: 2 - 3 + d3-interpolate: 1 - 3 + d3-selection: 2 - 3 + d3-transition: 2 - 3 + checksum: 8056e3527281cfd1ccbcbc458408f86973b0583e9dac00e51204026d1d36803ca437f970b5736f02fafed9f2b78f145f72a5dbc66397e02d4d95d4c594b8ff54 + languageName: node + linkType: hard + +"d3@npm:^7.9.0": + version: 7.9.0 + resolution: "d3@npm:7.9.0" + dependencies: + d3-array: 3 + d3-axis: 3 + d3-brush: 3 + d3-chord: 3 + d3-color: 3 + d3-contour: 4 + d3-delaunay: 6 + d3-dispatch: 3 + d3-drag: 3 + d3-dsv: 3 + d3-ease: 3 + d3-fetch: 3 + d3-force: 3 + d3-format: 3 + d3-geo: 3 + d3-hierarchy: 3 + d3-interpolate: 3 + d3-path: 3 + d3-polygon: 3 + d3-quadtree: 3 + d3-random: 3 + d3-scale: 4 + d3-scale-chromatic: 3 + d3-selection: 3 + d3-shape: 3 + d3-time: 3 + d3-time-format: 4 + d3-timer: 3 + d3-transition: 3 + d3-zoom: 3 + checksum: 1c0e9135f1fb78aa32b187fafc8b56ae6346102bd0e4e5e5a5339611a51e6038adbaa293fae373994228100eddd87320e930b1be922baeadc07c9fd43d26d99b + languageName: node + linkType: hard + +"dagre-d3-es@npm:7.0.13": + version: 7.0.13 + resolution: "dagre-d3-es@npm:7.0.13" + dependencies: + d3: ^7.9.0 + lodash-es: ^4.17.21 + checksum: 4a6e5aeb8d4a643c19241b58b8507a7e8aadae8c470ecb9b0133b3af0d6244356cb2cda643fe2f4ef5f872800eb873d7287977b4c5965962396b1757afb0b5de + languageName: node + linkType: hard + +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" + dependencies: + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 + languageName: node + linkType: hard + +"dayjs@npm:^1.11.18": + version: 1.11.19 + resolution: "dayjs@npm:1.11.19" + checksum: dfafcca2c67cc6e542fd880d77f1d91667efd323edc28f0487b470b184a11cc97696163ed5be1142ea2a031045b27a0d0555e72f60a63275e0e0401ac24bea5d + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.2": + version: 10.6.0 + resolution: "decimal.js@npm:10.6.0" + checksum: 9302b990cd6f4da1c7602200002e40e15d15660374432963421d3cd6d81cc6e27e0a488356b030fee64650947e32e78bdbea245d596dadfeeeb02e146d485999 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"delaunator@npm:5": + version: 5.0.1 + resolution: "delaunator@npm:5.0.1" + dependencies: + robust-predicates: ^3.0.2 + checksum: 69ee43ec649b4a13b7f33c8a027fb3e8dfcb09266af324286118da757e04d3d39df619b905dca41421405c311317ccf632ecfa93db44519bacec3303c57c5a0b + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + +"dompurify@npm:^3.2.5": + version: 3.3.1 + resolution: "dompurify@npm:3.3.1" + dependencies: + "@types/trusted-types": ^2.0.7 + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 884fe0acc21a9a2e5aa1b8ce4cecc8f9a71217423b389f760fca7b44595d3c9376d234f1c4ba16d79824789762b3d611d10653c4a90a7e23b351b71e5ef7dd33 + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.2.2 + resolution: "domutils@npm:3.2.2" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + checksum: ae941d56f03d857077d55dde9297e960a625229fc2b933187cc4123084d7c2d2517f58283a7336567127029f1e008449bac8ac8506d44341e29e3bb18e02f906 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"elkjs@npm:^0.9.3": + version: 0.9.3 + resolution: "elkjs@npm:0.9.3" + checksum: 1293e42e0ea034b39d3719f3816b7b3cbaceb52a3114f2c1bd5ddd969bb1e36ae0afef58e77864fff7a1018dc5e96c177e9b0a40c16e4aaac26eb87f5785be4b + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + +"entities@npm:^6.0.0": + version: 6.0.1 + resolution: "entities@npm:6.0.1" + checksum: 937b952e81aca641660a6a07f70001c6821973dea3ae7f6a5013eadce94620f3ed2e9c745832d503c8811ce6e97704d8a0396159580c0e567d815234de7fdecf + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: ^1.3.0 + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 + has-tostringtag: ^1.0.2 + hasown: ^2.0.2 + checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 + languageName: node + linkType: hard + +"esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"exenv-es6@npm:^1.1.1": + version: 1.1.1 + resolution: "exenv-es6@npm:1.1.1" + checksum: 7f2aa12025e6f06c48dc286f380cf3183bb19c6017b36d91695034a3e5124a7235c4f8ff24ca2eb88ae801322f0f99605cedfcfd996a5fcbba7669320e2a448e + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + es-set-tostringtag: ^2.1.0 + hasown: ^2.0.2 + mime-types: ^2.1.12 + checksum: af8328413c16d0cded5fccc975a44d227c5120fd46a9e81de8acf619d43ed838414cc6d7792195b30b248f76a65246949a129a4dadd148721948f90cd6d4fb69 + languageName: node + linkType: hard + +"free-style@npm:3.1.0": + version: 3.1.0 + resolution: "free-style@npm:3.1.0" + checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8 + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fsevents@npm:2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 3bf87f7b0230de5d74529677e6c3ceb3b7b5d9618b5a22d92b45ce3876defbaf5a77791b25a61b0fa7d13f95675b5ff67a7769f3b9af33f096e34653519e873d + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.6": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: ^1.0.0 + async-generator-function: ^1.0.0 + call-bind-apply-helpers: ^1.0.2 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.1.1 + function-bind: ^1.1.2 + generator-function: ^2.0.0 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: c02b3b6a445f9cd53e14896303794ac60f9751f58a69099127248abdb0251957174c6524245fc68579dc8e6a35161d3d94c93e665f808274716f4248b269436a + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + +"github-slugger@npm:^2.0.0": + version: 2.0.0 + resolution: "github-slugger@npm:2.0.0" + checksum: 250375cde2058f21454872c2c79f72c4637340c30c51ff158ca4ec71cbc478f33d54477d787a662f9207aeb095a2060f155bc01f15329ba8a5fb6698e0fc81f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"hachure-fill@npm:^0.5.2": + version: 0.5.2 + resolution: "hachure-fill@npm:0.5.2" + checksum: 01cf2ac6b787ec73ced3d6eb393a0f989d55f32431d1e8a1c1c864769d1b8763c9cb6aa1d45fb1c237a065de90167491c6a46193690b688ea6c25f575f84586c + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.0": + version: 8.0.2 + resolution: "htmlparser2@npm:8.0.2" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + entities: ^4.4.0 + checksum: 29167a0f9282f181da8a6d0311b76820c8a59bc9e3c87009e21968264c2987d2723d6fde5a964d4b7b6cba663fca96ffb373c06d8223a85f52a6089ced942700 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6, iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + +"inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"internmap@npm:1 - 2": + version: 2.0.3 + resolution: "internmap@npm:2.0.3" + checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 + languageName: node + linkType: hard + +"internmap@npm:^1.0.0": + version: 1.0.1 + resolution: "internmap@npm:1.0.1" + checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isomorphic.js@npm:^0.2.4": + version: 0.2.5 + resolution: "isomorphic.js@npm:0.2.5" + checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"jest-environment-jsdom@npm:^29.3.0": + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/jsdom": ^20.0.0 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" + dependencies: + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 + cssstyle: ^2.3.0 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 + escodegen: ^2.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 + is-potential-custom-element-name: ^1.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 + symbol-tree: ^3.2.4 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 + languageName: node + linkType: hard + +"json-schema-compare@npm:^0.2.2": + version: 0.2.2 + resolution: "json-schema-compare@npm:0.2.2" + dependencies: + lodash: ^4.17.4 + checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c + languageName: node + linkType: hard + +"json-schema-merge-allof@npm:^0.8.1": + version: 0.8.1 + resolution: "json-schema-merge-allof@npm:0.8.1" + dependencies: + compute-lcm: ^1.1.2 + json-schema-compare: ^0.2.2 + lodash: ^4.17.20 + checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json-stringify-pretty-compact@npm:~3.0.0": + version: 3.0.0 + resolution: "json-stringify-pretty-compact@npm:3.0.0" + checksum: 01ab5c5c8260299414868d96db97f53aef93c290fe469edd9a1363818e795006e01c952fa2fd7b47cbbab506d5768998eccc25e1da4fa2ccfebd1788c6098791 + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.1": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c + languageName: node + linkType: hard + +"katex@npm:^0.16.22": + version: 0.16.27 + resolution: "katex@npm:0.16.27" + dependencies: + commander: ^8.3.0 + bin: + katex: cli.js + checksum: 8f14457ac48799a7c1b10254f0b2923ba75f6fcd4260834c2d9a67a213d3ef585dfe8faccf34c9ad84f40366554b0fbe6a3e67597b0a8754fd2faec32d0be953 + languageName: node + linkType: hard + +"khroma@npm:^2.1.0": + version: 2.1.0 + resolution: "khroma@npm:2.1.0" + checksum: b34ba39d3a9a52d388110bded8cb1c12272eb69c249d8eb26feab12d18a96a9bc4ceec4851d2afa43de4569f7d5ea78fa305965a3d0e96a38e02fe77c53677da + languageName: node + linkType: hard + +"klaw-sync@npm:^6.0.0": + version: 6.0.0 + resolution: "klaw-sync@npm:6.0.0" + dependencies: + graceful-fs: ^4.1.11 + checksum: 0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 + languageName: node + linkType: hard + +"langium@npm:3.3.1": + version: 3.3.1 + resolution: "langium@npm:3.3.1" + dependencies: + chevrotain: ~11.0.3 + chevrotain-allstar: ~0.3.0 + vscode-languageserver: ~9.0.1 + vscode-languageserver-textdocument: ~1.0.11 + vscode-uri: ~3.0.8 + checksum: b5fcf1cd8d9e8fd9f79425afae5926546f57a30506be20cf7638880a01b2b04ccfe1cd5cae599a7733ad4d38af0bf2ed9bd9e1a95cc5f3de1725628fa7883446 + languageName: node + linkType: hard + +"layout-base@npm:^1.0.0": + version: 1.0.2 + resolution: "layout-base@npm:1.0.2" + checksum: e4c312765ac4fa13b49c940e701461309c7a0aa07f784f81d31f626b945dced90a8abf83222388a5af16b7074271f745501a90ef5a3af676abb2e7eb16d55b2e + languageName: node + linkType: hard + +"layout-base@npm:^2.0.0": + version: 2.0.1 + resolution: "layout-base@npm:2.0.1" + checksum: ef93baf044f67c3680f4f3a6d628bf4c7faba0f70f3e0abb16e4811bed087045208560347ca749e123d169cbf872505ad84e11fb21b0be925997227e042c7f43 + languageName: node + linkType: hard + +"lib0@npm:^0.2.85, lib0@npm:^0.2.86": + version: 0.2.93 + resolution: "lib0@npm:0.2.93" + dependencies: + isomorphic.js: ^0.2.4 + bin: + 0ecdsa-generate-keypair: bin/0ecdsa-generate-keypair.js + 0gentesthtml: bin/gentesthtml.js + 0serve: bin/0serve.js + checksum: 4c482aba249c471316fdec360ee4ace2a70ae42faad5fb6862aebb6786e187de9470eb082a5675489c59ffe54b005a15711a3d7dba33764bcab56349e61a1520 + languageName: node + linkType: hard + +"lodash-es@npm:4.17.21, lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + +"lodash.escape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.escape@npm:4.0.1" + checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.1": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + +"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af + languageName: node + linkType: hard + +"markdown-to-jsx@npm:^7.4.1": + version: 7.4.4 + resolution: "markdown-to-jsx@npm:7.4.4" + peerDependencies: + react: ">= 0.14.0" + checksum: a901e68a4cf258095133b659a52b35dc7b8025706d74cb363831c664cf0c948d06098b6327dd956f0f429e31d8c7f2a272a39d16c9b370072d1012557f2ade41 + languageName: node + linkType: hard + +"marked-gfm-heading-id@npm:^4.1.2": + version: 4.1.3 + resolution: "marked-gfm-heading-id@npm:4.1.3" + dependencies: + github-slugger: ^2.0.0 + peerDependencies: + marked: ">=13 <18" + checksum: 61cccce4b5d8a75c9d5c4c1c9b6ee4896fa9c34747dd7efe37bb3ff100f0cb8bd93cc0f93eed4ead1c2e6b0d546b4886455e4655ada3c6f1051d122a456c507a + languageName: node + linkType: hard + +"marked-mangle@npm:^1.1.11": + version: 1.1.12 + resolution: "marked-mangle@npm:1.1.12" + peerDependencies: + marked: ">=4 <18" + checksum: 3340af16fb4247142a6cb803e89a8e1650f2f4878da0d05344dd80780abd575288015e3f9ff831e075a0b09cc5947fce39fd68bcdce2fc8ed2f727a603d78ada + languageName: node + linkType: hard + +"marked@npm:^16.2.1": + version: 16.4.2 + resolution: "marked@npm:16.4.2" + bin: + marked: bin/marked.js + checksum: 8749bc6228ff59eb63f82c7310750336eb85c42c2b37d0d24f86807cf9e7b441bf8a20ed1bbcadfcd7a2db41d1b6069642286d4403815b90c2ce5be6aa00124c + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 + languageName: node + linkType: hard + +"mermaid@npm:^11.12.1": + version: 11.12.2 + resolution: "mermaid@npm:11.12.2" + dependencies: + "@braintree/sanitize-url": ^7.1.1 + "@iconify/utils": ^3.0.1 + "@mermaid-js/parser": ^0.6.3 + "@types/d3": ^7.4.3 + cytoscape: ^3.29.3 + cytoscape-cose-bilkent: ^4.1.0 + cytoscape-fcose: ^2.2.0 + d3: ^7.9.0 + d3-sankey: ^0.12.3 + dagre-d3-es: 7.0.13 + dayjs: ^1.11.18 + dompurify: ^3.2.5 + katex: ^0.16.22 + khroma: ^2.1.0 + lodash-es: ^4.17.21 + marked: ^16.2.1 + roughjs: ^4.6.6 + stylis: ^4.3.6 + ts-dedent: ^2.2.0 + uuid: ^11.1.0 + checksum: 29069be734b933c513c9676b2937ab46499a387d5cfa48bd252e007962715dfdfdfa912b0812a8f0c07f2c22328f6ea557a2ef7b4d867ce4eb3ed7e089f887ad + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:~1.2.0": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mlly@npm:^1.7.4, mlly@npm:^1.8.0": + version: 1.8.0 + resolution: "mlly@npm:1.8.0" + dependencies: + acorn: ^8.15.0 + pathe: ^2.0.3 + pkg-types: ^1.3.1 + ufo: ^1.6.1 + checksum: cccd626d910f139881cc861bae1af8747a0911c1a5414cca059558b81286e43f271652931eec87ef3c07d9faf4225987ae3219b65a939b94e18b533fa0d22c89 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.2": + version: 2.2.23 + resolution: "nwsapi@npm:2.2.23" + checksum: 7af519de08381df9dc0c913d817255cb21e33671641603f6cdabe8cb04b18b32aca1477fdc5dfe08b2039125afa3216d3ef01a3c2603a97d114e842d9414e0c3 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"package-manager-detector@npm:^1.3.0": + version: 1.6.0 + resolution: "package-manager-detector@npm:1.6.0" + checksum: 154d55225e70e32582f59b5d4a46d25716f0730a14d7e4b6f0fd76c870c720cc6f448d2becca06a15f2042492f0293cf26e5ad8fcd85d0eab0af3b9b46c0b43a + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf + languageName: node + linkType: hard + +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.3.0 + resolution: "parse5@npm:7.3.0" + dependencies: + entities: ^6.0.0 + checksum: ffd040c4695d93f0bc370e3d6d75c1b352178514af41be7afa212475ea5cead1d6e377cd9d4cec6a5e2bcf497ca50daf9e0088eadaa37dbc271f60def08fdfcd + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.0": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + +"path-data-parser@npm:0.1.0, path-data-parser@npm:^0.1.0": + version: 0.1.0 + resolution: "path-data-parser@npm:0.1.0" + checksum: a23a214adb38074576a8873d25e8dea7e090b8396d86f58f83f3f6c6298ff56b06adc694147b67f0ed22f14dc478efa1d525710d3ec7b2d7b1efbac57e3fafe6 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path@npm:~0.12.7": + version: 0.12.7 + resolution: "path@npm:0.12.7" + dependencies: + process: ^0.11.1 + util: ^0.10.3 + checksum: 5dedb71e78fc008fcba797defc0b4e1cf06c1f18e0a631e03ba5bb505136f587ff017afc14f9a3d481cbe77aeedff7dc0c1d2ce4d820c1ebf3c4281ca49423a1 + languageName: node + linkType: hard + +"pathe@npm:^2.0.1, pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 0602bdd4acb54d91044e0c56f1fb63467ae7d44ab3afea1f797947b0eb2b4d1d91cf0d58d065fdb0a8ab0c4acbbd8d3a5b424983eaf10dd5285d37a16f6e3ee9 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + +"picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pkg-types@npm:^1.3.1": + version: 1.3.1 + resolution: "pkg-types@npm:1.3.1" + dependencies: + confbox: ^0.1.8 + mlly: ^1.7.4 + pathe: ^2.0.1 + checksum: 4fa4edb2bb845646cdbd04c5c6bc43cdbc8f02ed4d1c28bfcafb6e65928aece789bcf1335e4cac5f65dfdc376e4bd7435bd509a35e9ec73ef2c076a1b88e289c + languageName: node + linkType: hard + +"playwright-core@npm:1.57.0": + version: 1.57.0 + resolution: "playwright-core@npm:1.57.0" + bin: + playwright-core: cli.js + checksum: 960e80d6ec06305b11a3ca9e78e8e4201cc17f37dd37279cb6fece4df43d74bf589833f4f94535fadd284b427f98c5f1cf09368e22f0f00b6a9477571ce6b03b + languageName: node + linkType: hard + +"playwright@npm:1.57.0": + version: 1.57.0 + resolution: "playwright@npm:1.57.0" + dependencies: + fsevents: 2.3.2 + playwright-core: 1.57.0 + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 176fd9fd890f390e0aa00d42697b70072d534243b15467d9430f3af329e77b3225b67a0afa12ea76fb440300dabd92d4cf040baf5edceee8eeff0ee1590ae5b7 + languageName: node + linkType: hard + +"points-on-curve@npm:0.2.0, points-on-curve@npm:^0.2.0": + version: 0.2.0 + resolution: "points-on-curve@npm:0.2.0" + checksum: 05e87d6839e3d869cfac0e63c2b1ca700fc8f1083e3f9ae80841cc50379fd31204f9e1f221407df1a90afcb8bfa98404aee0b0fa00330b7b3b328d33be21cf47 + languageName: node + linkType: hard + +"points-on-path@npm:^0.2.1": + version: 0.2.1 + resolution: "points-on-path@npm:0.2.1" + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + checksum: 5564dd84d15699579bf07bd33adfd0dc1a5e717c0d36ee11f0832b6b6890941e25e9ea68d15f7858698a9b5ec509f60e6472a0346624bb9dd9c2100cf568ac8f + languageName: node + linkType: hard + +"postcss@npm:^8.3.11": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.0.0 + source-map-js: ^1.2.0 + checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 + languageName: node + linkType: hard + +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.1": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: ^2.3.1 + checksum: 6f777d82eecfe1c2406dadbc15e77467b186fec13202ec887a45d0209a2c6fca530af94a462a477c3c4a767ad892ec9ede7c482d98f61f653dd838b50e89dc15 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-is@npm:^16.13.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 + languageName: node + linkType: hard + +"react@npm:>=17.0.0 <19.0.0, react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"readable-stream@npm:^2.1.4": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + 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 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"regexp-match-indices@npm:^1.0.2": + version: 1.0.2 + resolution: "regexp-match-indices@npm:1.0.2" + dependencies: + regexp-tree: ^0.1.11 + checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.11": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"robust-predicates@npm:^3.0.2": + version: 3.0.2 + resolution: "robust-predicates@npm:3.0.2" + checksum: 36854c1321548ceca96d36ad9d6e0a5a512986029ec6929ad6ed3ec1612c22cc8b46cc72d2c5674af42e8074a119d793f6f0ea3a5b51373e3ab926c64b172d7a + languageName: node + linkType: hard + +"roughjs@npm:^4.6.6": + version: 4.6.6 + resolution: "roughjs@npm:4.6.6" + dependencies: + hachure-fill: ^0.5.2 + path-data-parser: ^0.1.0 + points-on-curve: ^0.2.0 + points-on-path: ^0.2.1 + checksum: ec4b8266ac4a50c7369e337d8ddff3b2d970506229cac5425ddca56f4e6b29fca07dded4300e9e392bb608da4ba618d349fd241283affb25055cab7c2fe48f8f + languageName: node + linkType: hard + +"rw@npm:1": + version: 1.3.3 + resolution: "rw@npm:1.3.3" + checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sanitize-html@npm:~2.12.1": + version: 2.12.1 + resolution: "sanitize-html@npm:2.12.1" + dependencies: + deepmerge: ^4.2.2 + escape-string-regexp: ^4.0.0 + htmlparser2: ^8.0.0 + is-plain-object: ^5.0.0 + parse-srcset: ^1.0.2 + postcss: ^8.3.11 + checksum: fb96ea7170d51b5af2607f5cfd84464c78fc6f47e339407f55783e781c6a0288a8d40bbf97ea6a8758924ba9b2d33dcc4846bb94caacacd90d7f2de10ed8541a + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: ^2.2.0 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.1 + resolution: "socks@npm:2.8.1" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 29586d42e9c36c5016632b2bcb6595e3adfbcb694b3a652c51bc8741b079c5ec37bdd5675a1a89a1620078c8137208294991fabb50786f92d47759a725b2b62e + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 + languageName: node + linkType: hard + +"source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": + version: 4.1.2 + resolution: "style-mod@npm:4.1.2" + checksum: 7c5c3e82747f9bcf5f288d8d07f50848e4630fe5ff7bfe4d94cc87d6b6a2588227cbf21b4c792ac6406e5852293300a75e710714479a5c59a06af677f0825ef8 + languageName: node + linkType: hard + +"stylis@npm:^4.3.6": + version: 4.3.6 + resolution: "stylis@npm:4.3.6" + checksum: 4f56a087caace85b34c3a163cf9d662f58f42dc865b2447af5c3ee3588eebaffe90875fe294578cce26f172ff527cad2b01433f6e1ae156400ec38c37c79fd61 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + languageName: node + linkType: hard + +"systeminformation@npm:^5.8.6": + version: 5.22.6 + resolution: "systeminformation@npm:5.22.6" + bin: + systeminformation: lib/cli.js + checksum: 17f946c4b6ad7e01b5ca296133ffce53716c96778458f0052272744b99ebd412785e4300400138e0fa3f80c376e6e6b7af8fde8cea01994a1755bbfcdeefd865 + conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) + languageName: node + linkType: hard + +"tabbable@npm:^5.2.0": + version: 5.3.3 + resolution: "tabbable@npm:5.3.3" + checksum: 1aa56e1bb617cc10616c407f4e756f0607f3e2d30f9803664d70b85db037ca27e75918ed1c71443f3dc902e21dc9f991ce4b52d63a538c9b69b3218d3babcd70 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + +"tinyexec@npm:^1.0.1": + version: 1.0.2 + resolution: "tinyexec@npm:1.0.2" + checksum: af22de2191cc70bb782eef29bbba7cf6ac16664e550b547b0db68804f988eeb2c70e12fbb7d2d688ee994b28ba831d746e9eded98c3d10042fd3a9b8de208514 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"topojson-client@npm:^3.1.0": + version: 3.1.0 + resolution: "topojson-client@npm:3.1.0" + dependencies: + commander: 2 + bin: + topo2geo: bin/topo2geo + topomerge: bin/topomerge + topoquantize: bin/topoquantize + checksum: 8c029a4f18324ace0b8b55dd90edbd40c9e3c6de18bafbb5da37ca20ebf20e26fbd4420891acb3c2c264e214185f7557871f5651a9eee517028663be98d836de + languageName: node + linkType: hard + +"tough-cookie@npm:^4.1.2": + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" + dependencies: + psl: ^1.1.33 + punycode: ^2.1.1 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c + languageName: node + linkType: hard + +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: ^2.1.1 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"ts-dedent@npm:^2.2.0": + version: 2.2.0 + resolution: "ts-dedent@npm:2.2.0" + checksum: 93ed8f7878b6d5ed3c08d99b740010eede6bccfe64bce61c5a4da06a2c17d6ddbb80a8c49c2d15251de7594a4f93ffa21dd10e7be75ef66a4dc9951b4a94e2af + languageName: node + linkType: hard + +"tslib@npm:^1.13.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:~2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"typestyle@npm:^2.0.4": + version: 2.4.0 + resolution: "typestyle@npm:2.4.0" + dependencies: + csstype: 3.0.10 + free-style: 3.1.0 + checksum: 8b4f02c24f67b594f98507b15a753dabd4db5eb0af007e1d310527c64030e11e9464b25b5a6bc65fb5eec9a4459a8336050121ecc29063ac87b8b47a6d698893 + languageName: node + linkType: hard + +"ufo@npm:^1.6.1": + version: 1.6.1 + resolution: "ufo@npm:1.6.1" + checksum: 2c401dd45bd98ad00806e044aa8571aa2aa1762fffeae5e78c353192b257ef2c638159789f119e5d8d5e5200e34228cd1bbde871a8f7805de25daa8576fb1633 + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.3, url-parse@npm:~1.5.4": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util@npm:^0.10.3": + version: 0.10.4 + resolution: "util@npm:0.10.4" + dependencies: + inherits: 2.0.3 + checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf + languageName: node + linkType: hard + +"uuid@npm:^11.1.0": + version: 11.1.0 + resolution: "uuid@npm:11.1.0" + bin: + uuid: dist/esm/bin/uuid + checksum: 840f19758543c4631e58a29439e51b5b669d5f34b4dd2700b6a1d15c5708c7a6e0c3e2c8c4a2eae761a3a7caa7e9884d00c86c02622ba91137bd3deade6b4b4a + languageName: node + linkType: hard + +"validate.io-array@npm:^1.0.3": + version: 1.0.6 + resolution: "validate.io-array@npm:1.0.6" + checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b + languageName: node + linkType: hard + +"validate.io-function@npm:^1.0.2": + version: 1.0.2 + resolution: "validate.io-function@npm:1.0.2" + checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 + languageName: node + linkType: hard + +"validate.io-integer-array@npm:^1.0.0": + version: 1.0.0 + resolution: "validate.io-integer-array@npm:1.0.0" + dependencies: + validate.io-array: ^1.0.3 + validate.io-integer: ^1.0.4 + checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f + languageName: node + linkType: hard + +"validate.io-integer@npm:^1.0.4": + version: 1.0.5 + resolution: "validate.io-integer@npm:1.0.5" + dependencies: + validate.io-number: ^1.0.3 + checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 + languageName: node + linkType: hard + +"validate.io-number@npm:^1.0.3": + version: 1.0.3 + resolution: "validate.io-number@npm:1.0.3" + checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 + languageName: node + linkType: hard + +"vega-canvas@npm:^1.2.6, vega-canvas@npm:^1.2.7": + version: 1.2.7 + resolution: "vega-canvas@npm:1.2.7" + checksum: 6ff92fcdf0c359f2f662909c859a7f4cb4a502436136ab2f4c02373c47a621996ec0eea23e2108f11d62a618be301de86cd8528b5058c2e207a53ddd7ff58d1b + languageName: node + linkType: hard + +"vega-crossfilter@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-crossfilter@npm:4.1.1" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: e399f7e92d7ba273ad5c1a9e29d362a9ec7feaeacb976eff3aa205b318382fb37a9fac3150ec1cb806364cd2b2cb54d5f23aea3285db684df2b4c27836422464 + languageName: node + linkType: hard + +"vega-dataflow@npm:^5.7.3, vega-dataflow@npm:^5.7.5, vega-dataflow@npm:~5.7.5": + version: 5.7.5 + resolution: "vega-dataflow@npm:5.7.5" + dependencies: + vega-format: ^1.1.1 + vega-loader: ^4.5.1 + vega-util: ^1.17.1 + checksum: 917ed63e88b0871169a883f68da127a404d88e50c9ed6fa3f063a706016b064594fb804a2bf99f09bc4a899819cac320bdde12467edc861af1acc024552dd202 + languageName: node + linkType: hard + +"vega-encode@npm:~4.9.2": + version: 4.9.2 + resolution: "vega-encode@npm:4.9.2" + dependencies: + d3-array: ^3.2.2 + d3-interpolate: ^3.0.1 + vega-dataflow: ^5.7.5 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: fcba123d2efb865b4f6cf8e9d64e0752ebae163dcfe61013f4874f7fe6fce3003ea9dd83b89db3ffab2a1530532a7c902dd24dfec226eb53d08dcf69189f308d + languageName: node + linkType: hard + +"vega-event-selector@npm:^3.0.1, vega-event-selector@npm:~3.0.1": + version: 3.0.1 + resolution: "vega-event-selector@npm:3.0.1" + checksum: 66d09b5800a19a9b0c75f28811b140a1a2e70e84be6d6f87c568cdbce6e17c8e195f130f4e3de5d6dc737142d1f46f4fe7645177e154582cc8ba27c6845b54e8 + languageName: node + linkType: hard + +"vega-expression@npm:^5.0.1, vega-expression@npm:^5.1.0, vega-expression@npm:~5.1.0": + version: 5.1.0 + resolution: "vega-expression@npm:5.1.0" + dependencies: + "@types/estree": ^1.0.0 + vega-util: ^1.17.1 + checksum: 0355ebb6edd8f2ccc2dcf277a29b42b13f971725443212ce8a64cb8a02049f75f0add7ca9afcd3bc6744b93be791b526e7f983d9080d5052e9b0ca55bd488ae5 + languageName: node + linkType: hard + +"vega-force@npm:~4.2.0": + version: 4.2.0 + resolution: "vega-force@npm:4.2.0" + dependencies: + d3-force: ^3.0.0 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: 8a371ca8d0892bc3e932cc279bbf54fe8b88e2b384c42f8df9877c801191953f3ee3e2f516f675a69ecb052ed081232dfb3438989620e8ad5c2a316ccee60277 + languageName: node + linkType: hard + +"vega-format@npm:^1.1.1, vega-format@npm:~1.1.1": + version: 1.1.1 + resolution: "vega-format@npm:1.1.1" + dependencies: + d3-array: ^3.2.2 + d3-format: ^3.1.0 + d3-time-format: ^4.1.0 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: d506acb8611a6340ff419ebf308a758a54aaf3cf141863553df83980dcf8dc7bf806bee257d11a52d43682d159d7be03ab8a92bdd4d018d8c9f39a70c45cb197 + languageName: node + linkType: hard + +"vega-functions@npm:^5.13.1, vega-functions@npm:^5.14.0, vega-functions@npm:~5.14.0": + version: 5.14.0 + resolution: "vega-functions@npm:5.14.0" + dependencies: + d3-array: ^3.2.2 + d3-color: ^3.1.0 + d3-geo: ^3.1.0 + vega-dataflow: ^5.7.5 + vega-expression: ^5.1.0 + vega-scale: ^7.3.0 + vega-scenegraph: ^4.10.2 + vega-selections: ^5.4.2 + vega-statistics: ^1.8.1 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 24857fade62d122ce95ddae87637ade069cac36018e53814cf0ef52055af574641e221199e9baaa8a648cba4fd607c469de7a5e5a0d630e2a676018bfa894673 + languageName: node + linkType: hard + +"vega-geo@npm:~4.4.1": + version: 4.4.1 + resolution: "vega-geo@npm:4.4.1" + dependencies: + d3-array: ^3.2.2 + d3-color: ^3.1.0 + d3-geo: ^3.1.0 + vega-canvas: ^1.2.7 + vega-dataflow: ^5.7.5 + vega-projection: ^1.6.0 + vega-statistics: ^1.8.1 + vega-util: ^1.17.1 + checksum: e9c62d9134c2449a1a80cd5cb71ed6dc455d893a36fdcb1a696bcae3897670c32687cf14a0f366b0ec76905e5be406131dc671e5d607ffcbef74e94b8c697007 + languageName: node + linkType: hard + +"vega-hierarchy@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-hierarchy@npm:4.1.1" + dependencies: + d3-hierarchy: ^3.1.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: beb23948922f1b52bf03b836d71d3a5a36db3a6bfe2af74b6a5fc45a2e2e877226313e2389772be62a459728467618175d8c02a07e88330844fdec45fd5f69ac + languageName: node + linkType: hard + +"vega-label@npm:~1.2.1": + version: 1.2.1 + resolution: "vega-label@npm:1.2.1" + dependencies: + vega-canvas: ^1.2.6 + vega-dataflow: ^5.7.3 + vega-scenegraph: ^4.9.2 + vega-util: ^1.15.2 + checksum: 2704c99328ead677441e746acd8f4529301437d08b2758933fc13353d2eab9af353e4ebcc4ff1f09f41d600401b097e2df3c9e8e56d4861e5216222dd9e29185 + languageName: node + linkType: hard + +"vega-lite@npm:^5.6.1": + version: 5.17.0 + resolution: "vega-lite@npm:5.17.0" + dependencies: + json-stringify-pretty-compact: ~3.0.0 + tslib: ~2.6.2 + vega-event-selector: ~3.0.1 + vega-expression: ~5.1.0 + vega-util: ~1.17.2 + yargs: ~17.7.2 + peerDependencies: + vega: ^5.24.0 + bin: + vl2pdf: bin/vl2pdf + vl2png: bin/vl2png + vl2svg: bin/vl2svg + vl2vg: bin/vl2vg + checksum: 0c508f6060bd20df740be1c81ac0691623c813066424b021f0845422b7cc21fe9211346e8ce84d75288fa53fe3caecfde5c681e3fb590d2b7b372e38879fa2b7 + languageName: node + linkType: hard + +"vega-loader@npm:^4.5.1, vega-loader@npm:~4.5.1": + version: 4.5.1 + resolution: "vega-loader@npm:4.5.1" + dependencies: + d3-dsv: ^3.0.1 + node-fetch: ^2.6.7 + topojson-client: ^3.1.0 + vega-format: ^1.1.1 + vega-util: ^1.17.1 + checksum: 95f6eebc75a97665cf34faaea431934047e1b2e9d7532f48f62dab4884d606a7d9da53962e1631a5790a7a867f720581852a3db9be1a7f667882062f6c102ee0 + languageName: node + linkType: hard + +"vega-parser@npm:~6.3.0": + version: 6.3.0 + resolution: "vega-parser@npm:6.3.0" + dependencies: + vega-dataflow: ^5.7.5 + vega-event-selector: ^3.0.1 + vega-functions: ^5.14.0 + vega-scale: ^7.3.1 + vega-util: ^1.17.2 + checksum: 5af7604116bd2ebe75179f9e8e7282e43c8128844fde9ad0e53b6b1f9aa78e74be6709a2ae44cfe6de12d64d1a52d15287932b5625ac864cb75a23b89436f6ed + languageName: node + linkType: hard + +"vega-projection@npm:^1.6.0, vega-projection@npm:~1.6.0": + version: 1.6.0 + resolution: "vega-projection@npm:1.6.0" + dependencies: + d3-geo: ^3.1.0 + d3-geo-projection: ^4.0.0 + vega-scale: ^7.3.0 + checksum: 9c52848e294ff68051fe9f44fa536656c4e6be3d474bd3359e21aa154ab282755eaee624ac31b1ca01816227900e1d81a6d191e36f46e47525ed6648397f0fa0 + languageName: node + linkType: hard + +"vega-regression@npm:~1.2.0": + version: 1.2.0 + resolution: "vega-regression@npm:1.2.0" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.3 + vega-statistics: ^1.9.0 + vega-util: ^1.15.2 + checksum: 5f79db18c7849b465550e00ca8fec9d896aa3cf6d6279daac8b862beb632d841dcb6a93136d6b827c37e3d1cbd2bb2f7dec58f96c572763870c2d38f2cc4e0b3 + languageName: node + linkType: hard + +"vega-runtime@npm:^6.1.4, vega-runtime@npm:~6.1.4": + version: 6.1.4 + resolution: "vega-runtime@npm:6.1.4" + dependencies: + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: a1da40ddb3109f1ced8e61d2e7b52784fbb29936ee4c47cb5630dbbeb12ef6e0c3cd3cd189c34377f82402bf19c61dd148d90330fec743b8667635ac48e4ba29 + languageName: node + linkType: hard + +"vega-scale@npm:^7.3.0, vega-scale@npm:^7.3.1, vega-scale@npm:~7.3.1": + version: 7.3.1 + resolution: "vega-scale@npm:7.3.1" + dependencies: + d3-array: ^3.2.2 + d3-interpolate: ^3.0.1 + d3-scale: ^4.0.2 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: c1f6a97b26bbf7b4d1d907e8851d8ac6b58200aa331a1b6c0f67f11aa1ce0ced6d121ac4b2036dbca5779429f41eae4013fe7dd55e09802feda8666b5a0a7ece + languageName: node + linkType: hard + +"vega-scenegraph@npm:^4.10.2, vega-scenegraph@npm:^4.9.2, vega-scenegraph@npm:~4.11.2": + version: 4.11.2 + resolution: "vega-scenegraph@npm:4.11.2" + dependencies: + d3-path: ^3.1.0 + d3-shape: ^3.2.0 + vega-canvas: ^1.2.7 + vega-loader: ^4.5.1 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: fefe12c1b0393184abf0cfcae6bfcff7894a1782fe545c6c048275674359e8ec2525280aba1ddbfe6f77e710e45480fdcd9293f849a2409cde87695b04065c5b + languageName: node + linkType: hard + +"vega-selections@npm:^5.4.2": + version: 5.4.2 + resolution: "vega-selections@npm:5.4.2" + dependencies: + d3-array: 3.2.4 + vega-expression: ^5.0.1 + vega-util: ^1.17.1 + checksum: 4e78053ab1f8ba4338005ed424043e7d0e91c857b58ab03600a07292e3777a4244d34caa7f8c85e72b2fdd9916882dfdda2fa93c730120ce790ec9883738f2be + languageName: node + linkType: hard + +"vega-statistics@npm:^1.7.9, vega-statistics@npm:^1.8.1, vega-statistics@npm:^1.9.0, vega-statistics@npm:~1.9.0": + version: 1.9.0 + resolution: "vega-statistics@npm:1.9.0" + dependencies: + d3-array: ^3.2.2 + checksum: bbf2ea088c5a6a662c6aed1bf57996c06a82a98228730ada8a97e57824a6ed391999ea974f16dcde6e73bf88799976d91aff748842848d38ab45dbb9fafba3f9 + languageName: node + linkType: hard + +"vega-time@npm:^2.1.1, vega-time@npm:~2.1.1": + version: 2.1.1 + resolution: "vega-time@npm:2.1.1" + dependencies: + d3-array: ^3.2.2 + d3-time: ^3.1.0 + vega-util: ^1.17.1 + checksum: 3d6a50f779be4b5e7f27bd2aae766035c29e59e03e62d2e96b94a2f759ed3104c1102c1006dd416e7b819ee501880ae7a722c2fa9aabf9efac86503c1aada14a + languageName: node + linkType: hard + +"vega-transforms@npm:~4.11.1": + version: 4.11.1 + resolution: "vega-transforms@npm:4.11.1" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.5 + vega-statistics: ^1.8.1 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 88ae468613a768f2a6324ad66fb4db3712228a17984316080767bcaafbd5c3c1d198bed5844a9b184d9068284a1ad7bf42f93b7b7568e2e37f98bfd43c3c6bd7 + languageName: node + linkType: hard + +"vega-typings@npm:~1.1.0": + version: 1.1.0 + resolution: "vega-typings@npm:1.1.0" + dependencies: + "@types/geojson": 7946.0.4 + vega-event-selector: ^3.0.1 + vega-expression: ^5.1.0 + vega-util: ^1.17.2 + checksum: 59c76d1b48087b36c4386cd1bccc242afa4e1008a147d0e9966912716522c231c1d8ad35b7bc72bb3d7ccab467b786e7ba43280c75ccb54e0381c7f3aed75721 + languageName: node + linkType: hard + +"vega-util@npm:^1.15.2, vega-util@npm:^1.17.1, vega-util@npm:^1.17.2, vega-util@npm:~1.17.2": + version: 1.17.2 + resolution: "vega-util@npm:1.17.2" + checksum: 5d681cb1a6ffda7af1b74df7c1c46a32f1d874daef54f9c9c65c7d7c7bfc4271dc6d9b1c1c7a853b14eb6e4cc8ec811b0132cd3ea25fa85259eac92e1b4f07fa + languageName: node + linkType: hard + +"vega-view-transforms@npm:~4.5.9": + version: 4.5.9 + resolution: "vega-view-transforms@npm:4.5.9" + dependencies: + vega-dataflow: ^5.7.5 + vega-scenegraph: ^4.10.2 + vega-util: ^1.17.1 + checksum: aeeaf3c2f1a02b1303c16a586dbcb20f208c101d06d7e988e18ab71fb67d87be5d8ff228ebf25971535d6e41dc816168cfa68b8676e7250df07a40aefdea32a7 + languageName: node + linkType: hard + +"vega-view@npm:~5.12.0": + version: 5.12.0 + resolution: "vega-view@npm:5.12.0" + dependencies: + d3-array: ^3.2.2 + d3-timer: ^3.0.1 + vega-dataflow: ^5.7.5 + vega-format: ^1.1.1 + vega-functions: ^5.13.1 + vega-runtime: ^6.1.4 + vega-scenegraph: ^4.10.2 + vega-util: ^1.17.1 + checksum: 8ccbff58ad132dc51647afe1ca31759c8f2782e00124e9f3cb5c16a17c27daca10e354e7aa8517f275182ee36ec3e5be8913ab4eb91f66d2f5a17a385400e7ab + languageName: node + linkType: hard + +"vega-voronoi@npm:~4.2.2": + version: 4.2.2 + resolution: "vega-voronoi@npm:4.2.2" + dependencies: + d3-delaunay: ^6.0.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: 719121a675ae021a30854e6c0fce39adc2a59478d7a1088b554140bf5a4a8e382186ad0762a21a969fa49e5e58ff757a4ec398fb77a834fcd2863d6862a1b92d + languageName: node + linkType: hard + +"vega-wordcloud@npm:~4.1.4": + version: 4.1.4 + resolution: "vega-wordcloud@npm:4.1.4" + dependencies: + vega-canvas: ^1.2.7 + vega-dataflow: ^5.7.5 + vega-scale: ^7.3.0 + vega-statistics: ^1.8.1 + vega-util: ^1.17.1 + checksum: 34d1882651d3a2f34ce40a6eaeed700de126f627cdf041ec2bcc7ada46d7b4b68a38a2974236eec87ee876d9abd095af7ab17e7698b0e2fbc831460767969d7a + languageName: node + linkType: hard + +"vega@npm:^5.20.0": + version: 5.28.0 + resolution: "vega@npm:5.28.0" + dependencies: + vega-crossfilter: ~4.1.1 + vega-dataflow: ~5.7.5 + vega-encode: ~4.9.2 + vega-event-selector: ~3.0.1 + vega-expression: ~5.1.0 + vega-force: ~4.2.0 + vega-format: ~1.1.1 + vega-functions: ~5.14.0 + vega-geo: ~4.4.1 + vega-hierarchy: ~4.1.1 + vega-label: ~1.2.1 + vega-loader: ~4.5.1 + vega-parser: ~6.3.0 + vega-projection: ~1.6.0 + vega-regression: ~1.2.0 + vega-runtime: ~6.1.4 + vega-scale: ~7.3.1 + vega-scenegraph: ~4.11.2 + vega-statistics: ~1.9.0 + vega-time: ~2.1.1 + vega-transforms: ~4.11.1 + vega-typings: ~1.1.0 + vega-util: ~1.17.2 + vega-view: ~5.12.0 + vega-view-transforms: ~4.5.9 + vega-voronoi: ~4.2.2 + vega-wordcloud: ~4.1.4 + checksum: ab9cd1a246903ebf8d49e590ad67e8aeb171127fea67548ea76269f3b56a34535b7c541cd000c6126b84c6144a99bdcd86ad0e5832c4e87058febeb00da747f5 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:8.2.0, vscode-jsonrpc@npm:^8.0.2": + version: 8.2.0 + resolution: "vscode-jsonrpc@npm:8.2.0" + checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:^6.0.0": + version: 6.0.0 + resolution: "vscode-jsonrpc@npm:6.0.0" + checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.17.5, vscode-languageserver-protocol@npm:^3.17.0": + version: 3.17.5 + resolution: "vscode-languageserver-protocol@npm:3.17.5" + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71 + languageName: node + linkType: hard + +"vscode-languageserver-textdocument@npm:~1.0.11": + version: 1.0.12 + resolution: "vscode-languageserver-textdocument@npm:1.0.12" + checksum: 49415c8f065860693fdd6cb0f7b8a24470130dc941e887a396b6e6bbae93be132323a644aa1edd7d0eec38a730e05a2d013aebff6bddd30c5af374ef3f4cd9ab + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac + languageName: node + linkType: hard + +"vscode-languageserver@npm:~9.0.1": + version: 9.0.1 + resolution: "vscode-languageserver@npm:9.0.1" + dependencies: + vscode-languageserver-protocol: 3.17.5 + bin: + installServerIntoExtension: bin/installServerIntoExtension + checksum: 8b7dfda47fb64c3f48a9dabd3f01938cc8d39f3f068f1ee586eaf0a373536180a1047bdde8d876f965cfc04160d1587e99828b61b742b0342595fee67c8814ea + languageName: node + linkType: hard + +"vscode-uri@npm:~3.0.8": + version: 3.0.8 + resolution: "vscode-uri@npm:3.0.8" + checksum: 514249126850c0a41a7d8c3c2836cab35983b9dc1938b903cfa253b9e33974c1416d62a00111385adcfa2b98df456437ab704f709a2ecca76a90134ef5eb4832 + languageName: node + linkType: hard + +"vscode-ws-jsonrpc@npm:~1.0.2": + version: 1.0.2 + resolution: "vscode-ws-jsonrpc@npm:1.0.2" + dependencies: + vscode-jsonrpc: ^8.0.2 + checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 + languageName: node + linkType: hard + +"w3c-keyname@npm:^2.2.4": + version: 2.2.8 + resolution: "w3c-keyname@npm:2.2.8" + checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.16.0 + resolution: "ws@npm:8.16.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: feb3eecd2bae82fa8a8beef800290ce437d8b8063bdc69712725f21aef77c49cb2ff45c6e5e7fce622248f9c7abaee506bae0a9064067ffd6935460c7357321b + languageName: node + linkType: hard + +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + languageName: node + linkType: hard + +"y-protocols@npm:^1.0.5": + version: 1.0.6 + resolution: "y-protocols@npm:1.0.6" + dependencies: + lib0: ^0.2.85 + peerDependencies: + yjs: ^13.0.0 + checksum: 4b57c8811befcf2e45c3d47830005f8a33e626c734f78a42fe8a4fa3caad2233ba85a7c8bceefbd52ffc40130d3f3faee664fd0d1c324ff1fa8817a056ccdc1c + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:~17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yjs@npm:^13.5.40": + version: 13.6.14 + resolution: "yjs@npm:13.6.14" + dependencies: + lib0: ^0.2.86 + checksum: df399049049820d32d5759a7bd9d70cf30602408ca2a9771324f1b459f703bb6073fb35b5bcde7493fab3721d64e3c1b60eb88415b184e95a73fbce2947741cb + languageName: node + linkType: hard