From 3b4c87810bad08b4b66222d795604dd5f5999910 Mon Sep 17 00:00:00 2001 From: Ignas Baranauskas Date: Mon, 16 Sep 2024 12:00:13 +0100 Subject: [PATCH 1/2] UI visual regression testing to cover UI widgets visibility --- .github/workflows/ui_notebooks_test.yaml | 113 + .gitignore | 4 + .../guided-demos/3_widget_example.ipynb | 119 + poetry.lock | 1105 ++++++- pyproject.toml | 1 + ui-tests/.yarnrc | 4 + ui-tests/jupyter_server_config.py | 6 + ui-tests/package.json | 22 + ui-tests/playwright.config.js | 13 + .../tests/widget_notebook_example.test.ts | 64 + .../widgets-cell-0-linux.png | Bin 0 -> 16694 bytes .../widgets-cell-2-linux.png | Bin 0 -> 33158 bytes .../widgets-cell-3-linux.png | Bin 0 -> 7513 bytes .../widgets-cell-4-linux.png | Bin 0 -> 9895 bytes ui-tests/yarn.lock | 2812 +++++++++++++++++ 15 files changed, 4261 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/ui_notebooks_test.yaml create mode 100644 demo-notebooks/guided-demos/3_widget_example.ipynb create mode 100644 ui-tests/.yarnrc create mode 100644 ui-tests/jupyter_server_config.py create mode 100644 ui-tests/package.json create mode 100644 ui-tests/playwright.config.js create mode 100644 ui-tests/tests/widget_notebook_example.test.ts create mode 100644 ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-0-linux.png create mode 100644 ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-2-linux.png create mode 100644 ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-3-linux.png create mode 100644 ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-4-linux.png create mode 100644 ui-tests/yarn.lock diff --git a/.github/workflows/ui_notebooks_test.yaml b/.github/workflows/ui_notebooks_test.yaml new file mode 100644 index 000000000..864330b9c --- /dev/null +++ b/.github/workflows/ui_notebooks_test.yaml @@ -0,0 +1,113 @@ +name: UI notebooks tests + +on: + pull_request: + types: [labeled] + +concurrency: + group: ${{ github.head_ref }}-${{ github.workflow }} + cancel-in-progress: true + +env: + CODEFLARE_OPERATOR_IMG: "quay.io/project-codeflare/codeflare-operator:dev" + +jobs: + verify-3_widget_example: + if: ${{ github.event.label.name == 'test-guided-notebooks' || github.event.label.name == 'test-ui-notebooks'}} + runs-on: ubuntu-20.04-4core + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Checkout common repo code + uses: actions/checkout@v4 + with: + repository: "project-codeflare/codeflare-common" + ref: "main" + path: "common" + + - name: Checkout CodeFlare operator repository + uses: actions/checkout@v4 + with: + repository: project-codeflare/codeflare-operator + path: codeflare-operator + + - name: Set Go + uses: actions/setup-go@v5 + with: + go-version-file: "./codeflare-operator/go.mod" + cache-dependency-path: "./codeflare-operator/go.sum" + + - name: Set up gotestfmt + uses: gotesttools/gotestfmt-action@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up specific Python version + uses: actions/setup-python@v5 + with: + python-version: "3.9" + cache: "pip" # caching pip dependencies + + - name: Setup and start KinD cluster + uses: ./common/github-actions/kind + + - name: Deploy CodeFlare stack + id: deploy + run: | + cd codeflare-operator + echo Setting up CodeFlare stack + make setup-e2e + echo Deploying CodeFlare operator + make deploy -e IMG="${CODEFLARE_OPERATOR_IMG}" -e ENV="e2e" + kubectl wait --timeout=120s --for=condition=Available=true deployment -n openshift-operators codeflare-operator-manager + cd .. + + - name: Setup Guided notebooks execution + run: | + echo "Installing papermill and dependencies..." + pip install poetry ipython ipykernel + poetry config virtualenvs.create false + echo "Installing SDK..." + poetry install --with test,docs + + - name: Install Yarn dependencies + run: | + poetry run yarn install + poetry run yarn playwright install chromium + working-directory: ui-tests + + - name: Fix 3_widget_example.ipynb notebook for test + run: | + # Remove login/logout cells, as KinD doesn't support authentication using token + jq -r 'del(.cells[] | select(.source[] | contains("Create authentication object for user permissions")))' 3_widget_example.ipynb > 3_widget_example.ipynb.tmp && mv 3_widget_example.ipynb.tmp 3_widget_example.ipynb + jq -r 'del(.cells[] | select(.source[] | contains("auth.logout()")))' 3_widget_example.ipynb > 3_widget_example.ipynb.tmp && mv 3_widget_example.ipynb.tmp 3_widget_example.ipynb + # Set explicit namespace as SDK need it (currently) to resolve local queues + sed -i "s/head_memory_limits=2,/head_memory_limits=2, namespace='default',/" 3_widget_example.ipynb + working-directory: demo-notebooks/guided-demos + + - name: Run UI notebook tests + run: | + set -euo pipefail + + poetry run yarn test + working-directory: ui-tests + + - name: Upload Playwright Test assets + if: always() + uses: actions/upload-artifact@v4 + with: + name: ipywidgets-test-assets + path: | + ui-tests/test-results + + - name: Upload Playwright Test report + if: always() + uses: actions/upload-artifact@v4 + with: + name: ipywidgets-test-report + path: | + ui-tests/playwright-report diff --git a/.gitignore b/.gitignore index 9b0018c2c..c089dfc6e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ Pipfile.lock build/ tls-cluster-namespace quicktest.yaml +node_modules +.DS_Store +ui-tests/playwright-report +ui-tests/test-results diff --git a/demo-notebooks/guided-demos/3_widget_example.ipynb b/demo-notebooks/guided-demos/3_widget_example.ipynb new file mode 100644 index 000000000..4d3d6ea70 --- /dev/null +++ b/demo-notebooks/guided-demos/3_widget_example.ipynb @@ -0,0 +1,119 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8d4a42f6", + "metadata": {}, + "source": [ + "In this notebook, we will go through the basics of using the SDK to:\n", + " - Spin up a Ray cluster with our desired resources\n", + " - View the status and specs of our Ray cluster\n", + " - Take down the Ray cluster when finished" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b55bc3ea-4ce3-49bf-bb1f-e209de8ca47a", + "metadata": {}, + "outputs": [], + "source": [ + "# Import pieces from codeflare-sdk\n", + "from codeflare_sdk import Cluster, ClusterConfiguration, TokenAuthentication" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "614daa0c", + "metadata": {}, + "outputs": [], + "source": [ + "# Create authentication object for user permissions\n", + "# IF unused, SDK will automatically check for default kubeconfig, then in-cluster config\n", + "# KubeConfigFileAuthentication can also be used to specify kubeconfig path manually\n", + "auth = TokenAuthentication(\n", + " token = \"XXXXX\",\n", + " server = \"XXXXX\",\n", + " skip_tls=False\n", + ")\n", + "auth.login()" + ] + }, + { + "cell_type": "markdown", + "id": "bc27f84c", + "metadata": {}, + "source": [ + "Here, we want to define our cluster by specifying the resources we require for our batch workload. Below, we define our cluster object (which generates a corresponding RayCluster).\n", + "\n", + "NOTE: 'quay.io/modh/ray:2.35.0-py39-cu121' is the default image used by the CodeFlare SDK for creating a RayCluster resource. \n", + "If you have your own Ray image which suits your purposes, specify it in image field to override the default image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f4bc870-091f-4e11-9642-cba145710159", + "metadata": {}, + "outputs": [], + "source": [ + "# Create and configure our cluster object\n", + "# The SDK will try to find the name of your default local queue based on the annotation \"kueue.x-k8s.io/default-queue\": \"true\" unless you specify the local queue manually below\n", + "cluster = Cluster(ClusterConfiguration(\n", + " name='raytest', \n", + " head_cpu_requests='500m',\n", + " head_cpu_limits='500m',\n", + " head_memory_requests=2,\n", + " head_memory_limits=2,\n", + " head_extended_resource_requests={'nvidia.com/gpu':0}, # For GPU enabled workloads set the head_extended_resource_requests and worker_extended_resource_requests\n", + " worker_extended_resource_requests={'nvidia.com/gpu':0},\n", + " num_workers=2,\n", + " worker_cpu_requests='250m',\n", + " worker_cpu_limits=1,\n", + " worker_memory_requests=2,\n", + " worker_memory_limits=2,\n", + " # image=\"\", # Optional Field \n", + " write_to_file=False, # When enabled Ray Cluster yaml files are written to /HOME/.codeflare/resources \n", + " # local_queue=\"local-queue-name\" # Specify the local queue manually\n", + "))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2d8e6ce3", + "metadata": {}, + "outputs": [], + "source": [ + "cluster.status()" + ] + } + ], + "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.9.19" + }, + "vscode": { + "interpreter": { + "hash": "f9f85f796d01129d0dd105a088854619f454435301f6ffec2fea96ecbd9be4ac" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/poetry.lock b/poetry.lock index 215682980..a56bb3f03 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -124,6 +124,115 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "anyio" +version = "4.5.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.5.0-py3-none-any.whl", hash = "sha256:fdeb095b7cc5a5563175eedd926ec4ae55413bb4be5770c424af0ba46ccb4a78"}, + {file = "anyio-4.5.0.tar.gz", hash = "sha256:c5a275fe5ca0afd788001f58fca1e69e29ce706d746e317d660e21f70c530ef9"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = ">=3.6" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + [[package]] name = "asttokens" version = "2.4.1" @@ -142,6 +251,20 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + [[package]] name = "async-timeout" version = "4.0.3" @@ -172,6 +295,20 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +[[package]] +name = "babel" +version = "2.16.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "bcrypt" version = "4.1.3" @@ -212,6 +349,45 @@ files = [ tests = ["pytest (>=3.2.1,!=3.3.0)"] typecheck = ["mypy"] +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + [[package]] name = "cachetools" version = "5.3.3" @@ -580,6 +756,37 @@ test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-co test-randomorder = ["pytest-randomly"] tox = ["tox"] +[[package]] +name = "debugpy" +version = "1.8.5" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, + {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, + {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, + {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, + {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, + {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, + {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, + {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, + {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, + {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, + {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, + {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, + {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, + {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, + {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, + {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, + {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, + {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, + {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, + {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, + {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, + {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, +] + [[package]] name = "decorator" version = "5.1.1" @@ -591,6 +798,17 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + [[package]] name = "distlib" version = "0.3.8" @@ -630,6 +848,20 @@ files = [ [package.extras] tests = ["asttokens", "littleutils", "pytest", "rich"] +[[package]] +name = "fastjsonschema" +version = "2.20.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + [[package]] name = "filelock" version = "3.15.4" @@ -646,6 +878,17 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -892,6 +1135,63 @@ files = [ [package.extras] protobuf = ["grpcio-tools (>=1.64.1)"] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "idna" version = "3.7" @@ -933,6 +1233,39 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "ipykernel" +version = "6.29.5" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=24" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] + [[package]] name = "ipython" version = "8.18.1" @@ -991,6 +1324,20 @@ widgetsnbextension = ">=4.0.10,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + [[package]] name = "jedi" version = "0.19.1" @@ -1027,6 +1374,28 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "json5" +version = "0.9.25" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8" +files = [ + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + [[package]] name = "jsonschema" version = "4.22.0" @@ -1040,9 +1409,17 @@ files = [ [package.dependencies] attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} jsonschema-specifications = ">=2023.03.6" referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -1062,6 +1439,216 @@ files = [ [package.dependencies] referencing = ">=0.31.0" +[[package]] +name = "jupyter-client" +version = "8.6.3" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.2" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, + {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.2.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.2.5-py3-none-any.whl", hash = "sha256:73b6e0775d41a9fee7ee756c80f58a6bed4040869ccc21411dc559818874d321"}, + {file = "jupyterlab-4.2.5.tar.gz", hash = "sha256:ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +setuptools = ">=40.1.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + [[package]] name = "jupyterlab-widgets" version = "3.0.11" @@ -1274,6 +1861,17 @@ docs = ["IPython", "bump2version", "furo", "sphinx", "sphinx-argparse", "towncri lint = ["black", "check-manifest", "flake8", "isort", "mypy"] test = ["Cython", "greenlet", "ipython", "pytest", "pytest-cov", "setuptools"] +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + [[package]] name = "msgpack" version = "1.0.8" @@ -1438,6 +2036,115 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "nbclient" +version = "0.10.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.16.4" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.10.4" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, +] + +[package.dependencies] +fastjsonschema = ">=2.15" +jsonschema = ">=2.6" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + [[package]] name = "numpy" version = "2.0.0" @@ -1551,6 +2258,17 @@ paramiko = "*" pyyaml = "*" six = "*" +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "24.1" @@ -1635,6 +2353,17 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + [[package]] name = "paramiko" version = "3.4.0" @@ -1796,6 +2525,35 @@ files = [ {file = "protobuf-5.27.2.tar.gz", hash = "sha256:f3ecdef226b9af856075f28227ff2c90ce3a594d092c39bee5513573f25e2714"}, ] +[[package]] +name = "psutil" +version = "6.0.0" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + [[package]] name = "ptyprocess" version = "0.7.0" @@ -2087,6 +2845,17 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -2098,6 +2867,44 @@ files = [ {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.13" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -2158,6 +2965,127 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "pyzmq" +version = "26.2.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, + {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, + {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, + {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, + {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, + {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, + {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, + {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, + {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, + {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + [[package]] name = "ray" version = "2.35.0" @@ -2287,6 +3215,31 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + [[package]] name = "rich" version = "12.6.0" @@ -2427,6 +3380,22 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + [[package]] name = "setuptools" version = "70.1.0" @@ -2478,6 +3447,28 @@ test = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-clo webhdfs = ["requests"] zst = ["zstandard"] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + [[package]] name = "stack-data" version = "0.6.3" @@ -2497,6 +3488,45 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + +[[package]] +name = "tinycss2" +version = "1.3.0" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + [[package]] name = "tomli" version = "2.0.1" @@ -2508,6 +3538,26 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +[[package]] +name = "tornado" +version = "6.4.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, +] + [[package]] name = "traitlets" version = "5.14.3" @@ -2523,6 +3573,17 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20240906" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, + {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, +] + [[package]] name = "typing-extensions" version = "4.12.2" @@ -2545,6 +3606,20 @@ files = [ {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + [[package]] name = "urllib3" version = "2.2.2" @@ -2593,6 +3668,32 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "webcolors" +version = "24.8.0" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.8" +files = [ + {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, + {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["coverage[toml]"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + [[package]] name = "websocket-client" version = "1.8.0" @@ -2820,4 +3921,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "cbff1a5a7da645b81c7de962eadeb2a8378eb9f783ebed526a3634f1d97e2bf5" +content-hash = "6f7b98a5dfe61a527f7a5398ebccc955ba6e7233d8c77789dbcf55f3c9f8169f" diff --git a/pyproject.toml b/pyproject.toml index 21729ee8a..a1f02ccc2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ pytest = "7.4.0" coverage = "7.2.7" pytest-mock = "3.11.1" pytest-timeout = "2.3.1" +jupyterlab = "4.2.5" [tool.pytest.ini_options] filterwarnings = [ diff --git a/ui-tests/.yarnrc b/ui-tests/.yarnrc new file mode 100644 index 000000000..0f81e58da --- /dev/null +++ b/ui-tests/.yarnrc @@ -0,0 +1,4 @@ +disable-self-update-check true +ignore-optional true +network-timeout "300000" +registry "https://registry.npmjs.org/" diff --git a/ui-tests/jupyter_server_config.py b/ui-tests/jupyter_server_config.py new file mode 100644 index 000000000..e7983fe7f --- /dev/null +++ b/ui-tests/jupyter_server_config.py @@ -0,0 +1,6 @@ +from jupyterlab.galata import configure_jupyter_server + +configure_jupyter_server(c) + +# 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 new file mode 100644 index 000000000..17b79185b --- /dev/null +++ b/ui-tests/package.json @@ -0,0 +1,22 @@ +{ + "name": "@jupyter-widgets/ui-tests", + "private": true, + "version": "0.1.0", + "description": "ipywidgets UI Tests", + "scripts": { + "start": "jupyter lab --config ./jupyter_server_config.py", + "start:detached": "jlpm start&", + "test": "npx playwright test", + "test:debug": "PWDEBUG=1 npx playwright test", + "test:report": "http-server ./playwright-report -a localhost -o", + "test:update": "npx playwright test --update-snapshots", + "deduplicate": "jlpm && yarn-deduplicate -s fewer --fail" + }, + "author": "Project Jupyter", + "license": "BSD-3-Clause", + "devDependencies": { + "@jupyterlab/galata": "^5.0.1", + "@playwright/test": "^1.32.0", + "yarn-deduplicate": "^6.0.1" + } +} diff --git a/ui-tests/playwright.config.js b/ui-tests/playwright.config.js new file mode 100644 index 000000000..88003f8ea --- /dev/null +++ b/ui-tests/playwright.config.js @@ -0,0 +1,13 @@ +const baseConfig = require('@jupyterlab/galata/lib/playwright-config'); + +module.exports = { + ...baseConfig, + timeout: 460000, + webServer: { + command: 'yarn start', + url: 'http://localhost:8888/lab', + timeout: 120 * 1000, + reuseExistingServer: !process.env.CI, + }, + retries: 0, +}; diff --git a/ui-tests/tests/widget_notebook_example.test.ts b/ui-tests/tests/widget_notebook_example.test.ts new file mode 100644 index 000000000..11eff3193 --- /dev/null +++ b/ui-tests/tests/widget_notebook_example.test.ts @@ -0,0 +1,64 @@ +// Copyright 2024 IBM, Red Hat +// +// 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 { test } from "@jupyterlab/galata"; +import { expect } from "@playwright/test"; +import * as path from "path"; + +test.setTimeout(460000); + +test.describe("Visual Regression", () => { + test.beforeEach(async ({ page, tmpPath }) => { + await page.contents.uploadDirectory( + path.resolve(__dirname, "../../demo-notebooks/guided-demos"), + tmpPath + ); + await page.filebrowser.openDirectory(tmpPath); + }); + + test("Run notebook and capture cell outputs", async ({ + page, + tmpPath, + }) => { + const notebook = "3_widget_example.ipynb"; + await page.notebook.openByPath(`${tmpPath}/${notebook}`); + await page.notebook.activate(notebook); + + const captures: (Buffer | null)[] = []; // Array to store cell screenshots + const cellCount = await page.notebook.getCellCount(); + + // Run all cells and capture their screenshots + await page.notebook.runCellByCell({ + onAfterCellRun: async (cellIndex: number) => { + const cell = await page.notebook.getCellOutput(cellIndex); + if (cell && (await cell.isVisible())) { + captures[cellIndex] = await cell.screenshot(); // Save the screenshot by cell index + } + await page.addStyleTag({ content: '.jp-cell-toolbar { display: none !important; }' }); + }, + }); + + await page.notebook.save(); + + // Ensure that each cell's screenshot is captured + for (let i = 0; i < cellCount; i++) { + const image = `widgets-cell-${i}.png`; + + if (captures[i]) { + expect.soft(captures[i]).toMatchSnapshot(image); // Compare pre-existing capture + continue; + } + } + }); +}); diff --git a/ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-0-linux.png b/ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-0-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..efb098ef7d444d65a0d2be02ebe4f96f27849ccf GIT binary patch literal 16694 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 y|9W2lAK(9W7Z7;7y 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 literal 0 HcmV?d00001 diff --git a/ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-3-linux.png b/ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-3-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..3d01d57a3d77f46e1f64d8312e8e501b019bf977 GIT binary patch literal 7513 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 literal 0 HcmV?d00001 diff --git a/ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-4-linux.png b/ui-tests/tests/widget_notebook_example.test.ts-snapshots/widgets-cell-4-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9d881da2855f221ac585377caeb0773a740a7df8 GIT binary patch literal 9895 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.0.0 <19.0.0" + +"@jupyter/web-components@^0.15.3": + version "0.15.3" + resolved "https://registry.npmjs.org/@jupyter/web-components/-/web-components-0.15.3.tgz#5491b5f6bc4e12f9b9c85bac63cd19514abedef1" + integrity sha512-ZrbyXr9mcYowXZ0Ic09ee6W2T3+t7+HP7yYwd2u7wHmQ0etWq5r8+DNdp8uFHiAeTV1kFm6aogNufR9fH34MCw== + 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" + +"@jupyter/ydoc@^2.0.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-2.1.1.tgz#96487cab6d3eb1419a7891384e8fcbefc971d605" + integrity sha512-NeEwqXQ2j1OyLq4uezeQmsMiI+Qo5k7dYIMqNByOM7dJp6sHeP0jQ96w7BEc9E4SmrxwcOT4cLvcJWJE8Xun4g== + 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" + +"@jupyterlab/application@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/application/-/application-4.2.5.tgz#a24819d607b46c80c6a366811680cf93eb45ea28" + integrity sha512-einksHwj/aki/F3Z3kA9o/8ZfHsDrdvzN753jv8wxPpi8s0aDfMivHafbvV4O4iN02y0Iv2yxsHEpA65SP/Kmg== + dependencies: + "@fortawesome/fontawesome-free" "^5.12.0" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/application" "^2.3.1" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + +"@jupyterlab/apputils@^4.3.5": + version "4.3.5" + resolved "https://registry.npmjs.org/@jupyterlab/apputils/-/apputils-4.3.5.tgz#ea335ed016969c5cc844e1922e0d456cafbcdd9b" + integrity sha512-O88fr29bne7X29r742pb4NIQXm6VYRnx9uDzOh5RuAf/oJlW+xeY95EsHWFfXJQEerueuBp5ivTQxhf1ZM1hew== + dependencies: + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/settingregistry" "^4.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@jupyterlab/statusbar" "^4.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/domutils" "^2.0.1" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/virtualdom" "^2.0.1" + "@lumino/widgets" "^2.3.2" + "@types/react" "^18.0.26" + react "^18.2.0" + sanitize-html "~2.12.1" + +"@jupyterlab/attachments@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/attachments/-/attachments-4.2.5.tgz#55704047a015ce28d32d7696ee9b5f95310abd37" + integrity sha512-W1on7D8ZVfe//Ec/fJOD4OMpsUkRhelEQBEuhJEbgKZ+b5y0awXiCHGsdQ1rkiHt90tLReAPqBDj5+9KavlM7g== + dependencies: + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@lumino/disposable" "^2.1.2" + "@lumino/signaling" "^2.1.2" + +"@jupyterlab/cells@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/cells/-/cells-4.2.5.tgz#205d020f6074d7e6b4c086d86d8a669973971fcf" + integrity sha512-4fSJnZbPT6YKTHu/DWgelFFRCo3+sU2di68e0k8b0oincOc4c0mg6hNa0dmxmrDah1IdOlhVOZX7RqKKYFGFEA== + dependencies: + "@codemirror/state" "^6.4.1" + "@codemirror/view" "^6.26.0" + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/attachments" "^4.2.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/codemirror" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/documentsearch" "^4.2.5" + "@jupyterlab/filebrowser" "^4.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/outputarea" "^4.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/toc" "^6.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/domutils" "^2.0.1" + "@lumino/dragdrop" "^2.1.4" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/signaling" "^2.1.2" + "@lumino/virtualdom" "^2.0.1" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/codeeditor@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/codeeditor/-/codeeditor-4.2.5.tgz#16eb06f25e43be37eb4bd6bbb48cecccd18a46a1" + integrity sha512-Y145T9JSD89mBTiD67JxWG738Adv87Z+RWp87W9CJE4ZLsJo1FzyXBvIAAwXN737zoSvnx3lMMY3mmWqUdicZg== + dependencies: + "@codemirror/state" "^6.4.1" + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/statusbar" "^4.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/dragdrop" "^2.1.4" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/codemirror@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/codemirror/-/codemirror-4.2.5.tgz#b4bd9c46c8629920d4843d7f052ac5aaa5ac3a3d" + integrity sha512-oz0RApEC8Te4ojee4Mmm1nsEjYCBfXiP4qfoWfJJ5kHS52vwaylH8lWm6Dy/7RNiLdfQA29zR9X+ImD69exVKw== + dependencies: + "@codemirror/autocomplete" "^6.15.0" + "@codemirror/commands" "^6.3.3" + "@codemirror/lang-cpp" "^6.0.2" + "@codemirror/lang-css" "^6.2.1" + "@codemirror/lang-html" "^6.4.8" + "@codemirror/lang-java" "^6.0.1" + "@codemirror/lang-javascript" "^6.2.2" + "@codemirror/lang-json" "^6.0.1" + "@codemirror/lang-markdown" "^6.2.4" + "@codemirror/lang-php" "^6.0.1" + "@codemirror/lang-python" "^6.1.4" + "@codemirror/lang-rust" "^6.0.1" + "@codemirror/lang-sql" "^6.6.1" + "@codemirror/lang-wast" "^6.0.2" + "@codemirror/lang-xml" "^6.1.0" + "@codemirror/language" "^6.10.1" + "@codemirror/legacy-modes" "^6.3.3" + "@codemirror/search" "^6.5.6" + "@codemirror/state" "^6.4.1" + "@codemirror/view" "^6.26.0" + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/documentsearch" "^4.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/translation" "^4.2.5" + "@lezer/common" "^1.2.1" + "@lezer/generator" "^1.7.0" + "@lezer/highlight" "^1.2.0" + "@lezer/markdown" "^1.2.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/signaling" "^2.1.2" + yjs "^13.5.40" + +"@jupyterlab/console@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/console/-/console-4.2.5.tgz#fced414f069d1937471752e76cfb276e88967b6a" + integrity sha512-qOPi2w+TG53ADXvud93aMsCsQUDJxhA8c2anWQ961g0ctbzqwOtGgb8MiUVGLEkFf0tUY8Fov39NdOJr75aCmQ== + dependencies: + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/cells" "^4.2.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/dragdrop" "^2.1.4" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + +"@jupyterlab/coreutils@^6.2.5": + version "6.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.2.5.tgz#906dc8b65c841e8bf1c7589983bab90a12f8d24e" + integrity sha512-P3HniEv3bZ3EvV3zUwCmruR713fclGvSTfsuwFPBgI8M3rNIZYqGQ13xkTun7Zl6DUr2E8mrC/cq9jNwxW33yw== + dependencies: + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/signaling" "^2.1.2" + minimist "~1.2.0" + path-browserify "^1.0.0" + url-parse "~1.5.4" + +"@jupyterlab/debugger@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/debugger/-/debugger-4.2.5.tgz#af2dfc32a33a44cb2a10d20ad9dcf6f376b4f494" + integrity sha512-au/0RMAMdau3adrJ1QLnW3m7eAtzDJfTYLFeTgrcMAyQIyrmWLLX6cNLrRlJuYfnBzuJJV5N/9HGClEQEdxeLw== + dependencies: + "@codemirror/state" "^6.4.1" + "@codemirror/view" "^6.26.0" + "@jupyter/react-components" "^0.15.3" + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/application" "^4.2.5" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/cells" "^4.2.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/codemirror" "^4.2.5" + "@jupyterlab/console" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/fileeditor" "^4.2.5" + "@jupyterlab/notebook" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/datagrid" "^2.3.1" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + "@vscode/debugprotocol" "^1.51.0" + react "^18.2.0" + +"@jupyterlab/docmanager@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/docmanager/-/docmanager-4.2.5.tgz#b33805c103f07ab0414e1a3bab978c99c7dd9e28" + integrity sha512-IjWdEMl9MI6kkioViQza67+uwQiqI5DEGBaLyFFZG3R2NFmo2zA1zNbmVMUomMil/lcnVZN60ZnifFhiRvh1rQ== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@jupyterlab/statusbar" "^4.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/docregistry@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/docregistry/-/docregistry-4.2.5.tgz#3027ee9217d295413af3cbb0da111cd1d1a486b6" + integrity sha512-9lKh3PrbhPbm3ui2TRTFgdu7Nxqtdf1kf12HHk+v9rE3+Y8c8k3SrbpNTeBMn03mRZKYOsEe6nYPZkT1R3+ARg== + dependencies: + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/documentsearch@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/documentsearch/-/documentsearch-4.2.5.tgz#5e239efddd6ce6c66d39f3d1046fda876e340034" + integrity sha512-hjBprI8HMgr8dc4MMe5SCi24pPXeNYAq3PaqoDeYkVQwmK+aJexRba6k8V2GMXcifZCHbWiDysOTGsXyGTmizQ== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/filebrowser@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/filebrowser/-/filebrowser-4.2.5.tgz#2019ebb328d64cc3f7b051f67f297597eda14620" + integrity sha512-nI/Rkcye7/2j4GM0BfMXOrAHNQ7aHBQAMZqiqBte3mPUV/AoGc+E4E4Iv4b4bTs2/nKwgc/8B9ZSgN4LeVEAuQ== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docmanager" "^4.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@jupyterlab/statusbar" "^4.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/domutils" "^2.0.1" + "@lumino/dragdrop" "^2.1.4" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/signaling" "^2.1.2" + "@lumino/virtualdom" "^2.0.1" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/fileeditor@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/fileeditor/-/fileeditor-4.2.5.tgz#a69faad6fb0dbc1af4c0936719121ac11c8a6352" + integrity sha512-Daj38DN7jRLMBt+0Zwa7mW0XUWQTk/QOoS7ZInLEIXRcuYz5TcYBdFWFkJdUMr5mvq+RzasSXeaR6ZU5vXZSow== + dependencies: + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/codemirror" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/documentsearch" "^4.2.5" + "@jupyterlab/lsp" "^4.2.5" + "@jupyterlab/statusbar" "^4.2.5" + "@jupyterlab/toc" "^6.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + regexp-match-indices "^1.0.2" + +"@jupyterlab/galata@^5.0.1": + version "5.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/galata/-/galata-5.2.5.tgz#73b05b354e43ab859ab8e94eee52da4fef7eb1bf" + integrity sha512-H/Igp4HxULaLPYyFWsTqQzvcEXWtNh+jgrVfN0Gr2P3DrpA6Hacb4UQVn6kYdEJdQHcwr/F3iAVieG20/Z1+kw== + dependencies: + "@jupyterlab/application" "^4.2.5" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/debugger" "^4.2.5" + "@jupyterlab/docmanager" "^4.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/notebook" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/settingregistry" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@playwright/test" "^1.43.1" + "@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" + +"@jupyterlab/lsp@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/lsp/-/lsp-4.2.5.tgz#23502ebe48c93178e978b3f5bc1a3b74c105befd" + integrity sha512-pnIxXDHjJrPJ9+jZo4YqpF06HeIARtICIPpDPnpF/OW9Ukm3/7Votfh4cf30z/eaLMbCGi9PT4k/j8TH6uO2Yw== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/codemirror" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/translation" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + lodash.mergewith "^4.6.1" + vscode-jsonrpc "^6.0.0" + vscode-languageserver-protocol "^3.17.0" + vscode-ws-jsonrpc "~1.0.2" + +"@jupyterlab/nbformat@^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0", "@jupyterlab/nbformat@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.2.5.tgz#ab9f99b3b33c566b4fa50cbe79a6a4ae1af324b0" + integrity sha512-DF8bdlsEziUR5oKUr3Mm0wUx7kHZjlAtEjD6oJ8cOogQqTrMyBnUAgVjPr9QQob5J7qiyzz9aW2DYtaX+jFhng== + dependencies: + "@lumino/coreutils" "^2.1.2" + +"@jupyterlab/notebook@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/notebook/-/notebook-4.2.5.tgz#9515ea4e99a25af863290f5281b9347b0061c56f" + integrity sha512-GcnAV9u1t5SwwCSbvKDpUA5V0Ytxwc6VtvCzuM9FylvLuAH7PE4LgZlzz29fsPneV4ptoMmA5ExSLojHEhQVeQ== + dependencies: + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/cells" "^4.2.5" + "@jupyterlab/codeeditor" "^4.2.5" + "@jupyterlab/codemirror" "^4.2.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/documentsearch" "^4.2.5" + "@jupyterlab/lsp" "^4.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/settingregistry" "^4.2.5" + "@jupyterlab/statusbar" "^4.2.5" + "@jupyterlab/toc" "^6.2.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/domutils" "^2.0.1" + "@lumino/dragdrop" "^2.1.4" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/virtualdom" "^2.0.1" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/observables@^5.2.5": + version "5.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/observables/-/observables-5.2.5.tgz#3e54e2b33c2bad32488362306fb4da6d7ebea569" + integrity sha512-EvrvweCpLle3uZciUdhbEUU++o0S7yHBKWtqrKFgb9qxM1qYFMlSMXlJLjE/cEXNiq/aZhsruyXiVKZ1UpVsVQ== + dependencies: + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + +"@jupyterlab/outputarea@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/outputarea/-/outputarea-4.2.5.tgz#1fb6e651050ee15b6d395b28ed4584180a5a19a0" + integrity sha512-Oj/GVkEX5zHl/oOXl4Qmw05mdAB/+zEIuY9xsz5agBdeAD3c603PAR7Ep5UqSE4fltdnl+ILjSWyQPJgG4UEGg== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/translation" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + +"@jupyterlab/rendermime-interfaces@^3.10.5": + version "3.10.5" + resolved "https://registry.npmjs.org/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.10.5.tgz#ca63afab7e4070b24562d20575983979785aefef" + integrity sha512-wZq4QhmckMqEjImMxTLFVtj+E0GI82/i0nCuaEI6tReXOqVFDg5wG/ChD/B/g0Xz+uPqt92R5rzZTpzodkDiKA== + dependencies: + "@lumino/coreutils" "^1.11.0 || ^2.1.2" + "@lumino/widgets" "^1.37.2 || ^2.3.2" + +"@jupyterlab/rendermime@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/rendermime/-/rendermime-4.2.5.tgz#b7833d23c938b9e0d94d0dc763e1c20af000a9eb" + integrity sha512-2ZfKM4xNUKbuR1foA7B6nvXg8zRSai1GTEROcF0ievNYn3qYEmdYYW9XlP11+8SoFcM0a4WiTgocRCgVV5Fbiw== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/translation" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + lodash.escape "^4.0.1" + +"@jupyterlab/services@^7.2.5": + version "7.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/services/-/services-7.2.5.tgz#d98bf6999d53005fe978f6151d1060c1f6be5a95" + integrity sha512-Ya/jA8p8WOfiPPERinZasigsfSth54nNNWBQUrT2MEitdka3jVsjC3fR9R5XBpYQ59Qkczz782jMfXvaWNfCHQ== + dependencies: + "@jupyter/ydoc" "^2.0.1" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/settingregistry" "^4.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/polling" "^2.1.2" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + ws "^8.11.0" + +"@jupyterlab/settingregistry@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.2.5.tgz#2ce28049c47ced6703c837766e6c2ff0e879b98b" + integrity sha512-RTHwFoldrP8h4hMxZrKafrOt3mLYKAcmUsnExkzKCqHuc3CIOh9hj+eN3gCh1mxjabbP9QIK0/08e89Rp/EG5w== + dependencies: + "@jupyterlab/nbformat" "^4.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/signaling" "^2.1.2" + "@rjsf/utils" "^5.13.4" + ajv "^8.12.0" + json5 "^2.2.3" + +"@jupyterlab/statedb@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.2.5.tgz#9007e9b51eb79daae17ceb12abaa4ed3b707170b" + integrity sha512-GGP4NSkVzcn/zYZyjKId8OvDxq+JQTHEmiE2ayzUvvP4BwpGJ2GafY1V+QT5Tl+4SB0AzowpNud6XHUJ28M/tA== + dependencies: + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + +"@jupyterlab/statusbar@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/statusbar/-/statusbar-4.2.5.tgz#eb5c2553f834b31fe86f421f5a3b4b2ddfbf2fbc" + integrity sha512-YjZf9gClZc6HWF2BN0lSFYuHQ/Im8AM1wF+BHKyGh2qgnN4Z34/d87fCGjvX4yY5tLynw0fFiydNZMwQnkWqLA== + dependencies: + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/toc@^6.2.5": + version "6.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/toc/-/toc-6.2.5.tgz#f878d9fac248ecafd398684704924c522c402174" + integrity sha512-W2xQkVA7v87MaBcUB7OjzkOUY51bZzLL8S6esSARrNYdh5AY4rFKfnw0sKHAkSmrqB2DQLEZl/1z1GTNmyuYhQ== + dependencies: + "@jupyterlab/apputils" "^4.3.5" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/docregistry" "^4.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime" "^4.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/translation" "^4.2.5" + "@jupyterlab/ui-components" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/widgets" "^2.3.2" + react "^18.2.0" + +"@jupyterlab/translation@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/translation/-/translation-4.2.5.tgz#32f01cbc556dc0083fbff695f779c017e2cc2ed1" + integrity sha512-r2QABaUl2cm0d+8klviLc+l4+jssRrNUDnZ3hBVluCN0QowmwsovWc7V+R0VWIULzB5Jzf79RfJumXfVOpgUfg== + dependencies: + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/services" "^7.2.5" + "@jupyterlab/statedb" "^4.2.5" + "@lumino/coreutils" "^2.1.2" + +"@jupyterlab/ui-components@^4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@jupyterlab/ui-components/-/ui-components-4.2.5.tgz#be78e9aaa95164ede17ea7aa5d401ad0f70aca15" + integrity sha512-IZ6M4U48IJbthe4nQrOo8+JQeIrUxGQCK/ReKECx9xg9XCsvQ37iA1ZwOYXv5MhlF2bmIF7dXcwI7mpJgUAgOg== + dependencies: + "@jupyter/react-components" "^0.15.3" + "@jupyter/web-components" "^0.15.3" + "@jupyterlab/coreutils" "^6.2.5" + "@jupyterlab/observables" "^5.2.5" + "@jupyterlab/rendermime-interfaces" "^3.10.5" + "@jupyterlab/translation" "^4.2.5" + "@lumino/algorithm" "^2.0.1" + "@lumino/commands" "^2.3.0" + "@lumino/coreutils" "^2.1.2" + "@lumino/disposable" "^2.1.2" + "@lumino/messaging" "^2.0.1" + "@lumino/polling" "^2.1.2" + "@lumino/properties" "^2.0.1" + "@lumino/signaling" "^2.1.2" + "@lumino/virtualdom" "^2.0.1" + "@lumino/widgets" "^2.3.2" + "@rjsf/core" "^5.13.4" + "@rjsf/utils" "^5.13.4" + react "^18.2.0" + react-dom "^18.2.0" + typestyle "^2.0.4" + +"@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" + integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== + +"@lezer/cpp@^1.0.0": + version "1.1.2" + resolved "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.1.2.tgz#1db93b09e011e8a7a08c347c9d5b7749971253bf" + integrity sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/css@^1.1.0", "@lezer/css@^1.1.7": + version "1.1.9" + resolved "https://registry.npmjs.org/@lezer/css/-/css-1.1.9.tgz#404563d361422c5a1fe917295f1527ee94845ed1" + integrity sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/generator@^1.7.0": + version "1.7.1" + resolved "https://registry.npmjs.org/@lezer/generator/-/generator-1.7.1.tgz#90c1a9de2fb4d5a714216fa659058c7859accaab" + integrity sha512-MgPJN9Si+ccxzXl3OAmCeZuUKw4XiPl4y664FX/hnnyG9CTqUPq65N3/VGPA2jD23D7QgMTtNqflta+cPN+5mQ== + dependencies: + "@lezer/common" "^1.1.0" + "@lezer/lr" "^1.3.0" + +"@lezer/highlight@^1.0.0", "@lezer/highlight@^1.1.3", "@lezer/highlight@^1.2.0": + version "1.2.1" + resolved "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz#596fa8f9aeb58a608be0a563e960c373cbf23f8b" + integrity sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA== + dependencies: + "@lezer/common" "^1.0.0" + +"@lezer/html@^1.3.0": + version "1.3.10" + resolved "https://registry.npmjs.org/@lezer/html/-/html-1.3.10.tgz#1be9a029a6fe835c823b20a98a449a630416b2af" + integrity sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/java@^1.0.0": + version "1.1.2" + resolved "https://registry.npmjs.org/@lezer/java/-/java-1.1.2.tgz#01a6ffefa9a692ac6cd492f8b924009edcb903d7" + integrity sha512-3j8X70JvYf0BZt8iSRLXLkt0Ry1hVUgH6wT32yBxH/Xi55nW2VMhc1Az4SKwu4YGSmxCm1fsqDDcHTuFjC8pmg== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/javascript@^1.0.0": + version "1.4.17" + resolved "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.17.tgz#8456e369f960c328b9e823342d0c72d704238c31" + integrity sha512-bYW4ctpyGK+JMumDApeUzuIezX01H76R1foD6LcRX224FWfyYit/HYxiPGDjXXe/wQWASjCvVGoukTH68+0HIA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.1.3" + "@lezer/lr" "^1.3.0" + +"@lezer/json@^1.0.0": + version "1.0.2" + resolved "https://registry.npmjs.org/@lezer/json/-/json-1.0.2.tgz#bdc849e174113e2d9a569a5e6fb1a27e2f703eaf" + integrity sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/lr@^1.0.0", "@lezer/lr@^1.1.0", "@lezer/lr@^1.3.0": + version "1.4.2" + resolved "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz#931ea3dea8e9de84e90781001dae30dea9ff1727" + integrity sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA== + dependencies: + "@lezer/common" "^1.0.0" + +"@lezer/markdown@^1.0.0", "@lezer/markdown@^1.2.0": + version "1.3.1" + resolved "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.3.1.tgz#2193012296927f383102d7a2b035f323759315b3" + integrity sha512-DGlzU/i8DC8k0uz1F+jeePrkATl0jWakauTzftMQOcbaMkHbNSRki/4E2tOzJWsVpoKYhe7iTJ03aepdwVUXUA== + dependencies: + "@lezer/common" "^1.0.0" + "@lezer/highlight" "^1.0.0" + +"@lezer/php@^1.0.0": + version "1.0.2" + resolved "https://registry.npmjs.org/@lezer/php/-/php-1.0.2.tgz#7c291631fc1e7f7efe99977522bc48bdc732658a" + integrity sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.1.0" + +"@lezer/python@^1.1.4": + version "1.1.14" + resolved "https://registry.npmjs.org/@lezer/python/-/python-1.1.14.tgz#a0887086fb7645cd09ada38ed748ca1d968e6363" + integrity sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/rust@^1.0.0": + version "1.0.2" + resolved "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.2.tgz#cc9a75605d67182a0e799ac40b1965a61dcc6ef0" + integrity sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/xml@^1.0.0": + version "1.0.5" + resolved "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.5.tgz#4bb7fd3e527f41b78372477aa753f035b41c3846" + integrity sha512-VFouqOzmUWfIg+tfmpcdV33ewtK+NSwd4ngSe1aG7HFb4BN0ExyY1b8msp+ndFrnlG4V4iC8yXacjFtrwERnaw== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lumino/algorithm@^2.0.1", "@lumino/algorithm@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz#d211da98c92be0271afde96b949982e29178ae48" + integrity sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA== + +"@lumino/application@^2.3.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@lumino/application/-/application-2.4.1.tgz#6d312a4f8f8e14e61d1b784339f552f4a065f1ee" + integrity sha512-XdCAlNajcsGdK6ep+s6QC70EY+uBnP3kDiWthFLl3EMkvkYwmjOPzIPGlwLEd9Hu0XCO+1Vd2PlpeTnxw5D3/g== + dependencies: + "@lumino/commands" "^2.3.1" + "@lumino/coreutils" "^2.2.0" + "@lumino/widgets" "^2.5.0" + +"@lumino/collections@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.2.tgz#c790d8d4555d5dd349ecc817c8bd9e65b7f21c64" + integrity sha512-o0QmfV1D3WhAeA8GI1/YmEPaK89JtHVa764rQ5T0LdbDEwUtUDbjavHs1E/+y66tNTXz9RUJ4D2rcSb9tysYsg== + dependencies: + "@lumino/algorithm" "^2.0.2" + +"@lumino/commands@^2.3.0", "@lumino/commands@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.1.tgz#4ab5ec6521fefd3a9ff7ae0983c645483b9ecd07" + integrity sha512-DpX1kkE4PhILpvK1T4ZnaFb6UP4+YTkdZifvN3nbiomD64O2CTd+wcWIBpZMgy6MMgbVgrE8dzHxHk1EsKxNxw== + dependencies: + "@lumino/algorithm" "^2.0.2" + "@lumino/coreutils" "^2.2.0" + "@lumino/disposable" "^2.1.3" + "@lumino/domutils" "^2.0.2" + "@lumino/keyboard" "^2.0.2" + "@lumino/signaling" "^2.1.3" + "@lumino/virtualdom" "^2.0.2" + +"@lumino/coreutils@^1.11.0 || ^2.0.0", "@lumino/coreutils@^1.11.0 || ^2.1.2", "@lumino/coreutils@^2.1.2", "@lumino/coreutils@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz#3f9d5c36f2513f067b2563c7ad3b33f43905a4e2" + integrity sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g== + dependencies: + "@lumino/algorithm" "^2.0.2" + +"@lumino/datagrid@^2.3.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@lumino/datagrid/-/datagrid-2.4.1.tgz#6624d170d2695a707fc92d7364a08514778f2a4b" + integrity sha512-9sJg8UU/hqcKDqO5Rd0Blm2JYKT9nyAK/kuPYeaQc4ZLvtgn4SoOenNaShLDr3Wp54quBM8npAlk1mWG+yYC2g== + dependencies: + "@lumino/algorithm" "^2.0.2" + "@lumino/coreutils" "^2.2.0" + "@lumino/disposable" "^2.1.3" + "@lumino/domutils" "^2.0.2" + "@lumino/dragdrop" "^2.1.5" + "@lumino/keyboard" "^2.0.2" + "@lumino/messaging" "^2.0.2" + "@lumino/signaling" "^2.1.3" + "@lumino/widgets" "^2.5.0" + +"@lumino/disposable@^1.10.0 || ^2.0.0", "@lumino/disposable@^2.1.2", "@lumino/disposable@^2.1.3": + version "2.1.3" + resolved "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.3.tgz#cd2b11d82896eb654c2a528c9ff79a85ccf88d74" + integrity sha512-k5KXy/+T3UItiWHY4WwQawnsJnGo3aNtP5CTRKqo4+tbTNuhc3rTSvygJlNKIbEfIZXW2EWYnwfFDozkYx95eA== + dependencies: + "@lumino/signaling" "^2.1.3" + +"@lumino/domutils@^2.0.1", "@lumino/domutils@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz#b05973a179db2da71239976f25194f65c0f8eb98" + integrity sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ== + +"@lumino/dragdrop@^2.1.4", "@lumino/dragdrop@^2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.5.tgz#2c178ac3e7520551f08ffb4f31521d87940dcce1" + integrity sha512-zqwR4GakrQBKZOW6S5pj2nfrQDurOErAoe9x3HS3BKLa1AzWA+t9PD5NESOKd81NqXFHjiMirSyFkTUs6pw+uA== + dependencies: + "@lumino/coreutils" "^2.2.0" + "@lumino/disposable" "^2.1.3" + +"@lumino/keyboard@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.2.tgz#8ff5e360b8960716f45b742845bea6f3c5f44760" + integrity sha512-icRUpvswDaFjqmAJNbQRb/aTu6Iugo6Y2oC08TiIwhQtLS9W+Ee9VofdqvbPSvCm6DkyP+DCWMuA3KXZ4V4g4g== + +"@lumino/messaging@^2.0.1", "@lumino/messaging@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.2.tgz#133b94d1fa1c67ad60e622a32acaf682faf05aaa" + integrity sha512-2sUF07cYA0f3mDil41Eh5sfBk0aGAH/mOh1I4+vyRUsKyBqp4WTUtpJFd8xVJGAntygxwnebIygkIaXXTIQvxA== + dependencies: + "@lumino/algorithm" "^2.0.2" + "@lumino/collections" "^2.0.2" + +"@lumino/polling@^2.1.2": + version "2.1.3" + resolved "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.3.tgz#395fcfba3ada12439d5cc9592b68a89d781a54ed" + integrity sha512-WEZk96ddK6eHEhdDkFUAAA40EOLit86QVbqQqnbPmhdGwFogek26Kq9b1U273LJeirv95zXCATOJAkjRyb7D+w== + dependencies: + "@lumino/coreutils" "^2.2.0" + "@lumino/disposable" "^2.1.3" + "@lumino/signaling" "^2.1.3" + +"@lumino/properties@^2.0.1", "@lumino/properties@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.2.tgz#39213876b06a917eae72e8ea38b71daa1c699682" + integrity sha512-b312oA3Bh97WFK8efXejYmC3DVJmvzJk72LQB7H3fXhfqS5jUWvL7MSnNmgcQvGzl9fIhDWDWjhtSTi0KGYYBg== + +"@lumino/signaling@^1.10.0 || ^2.0.0", "@lumino/signaling@^2.1.2", "@lumino/signaling@^2.1.3": + version "2.1.3" + resolved "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz#612419e6948ce77c00328f9eff5ecd995c960a70" + integrity sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw== + dependencies: + "@lumino/algorithm" "^2.0.2" + "@lumino/coreutils" "^2.2.0" + +"@lumino/virtualdom@^2.0.1", "@lumino/virtualdom@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.2.tgz#927c9803ebd31cd97ca2c599ec9a5d509afb3b2d" + integrity sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg== + dependencies: + "@lumino/algorithm" "^2.0.2" + +"@lumino/widgets@^1.37.2 || ^2.3.2", "@lumino/widgets@^2.3.2", "@lumino/widgets@^2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.5.0.tgz#7e37d86dbbc4eed1f85aa199b9fffa4919aa1e3e" + integrity sha512-RSRpc6aIEiuw79jqWUHYWXLJ2GBy7vhwuqgo94UVzg6oeh3XBECX0OvXGjK2k7N2BhmRrIs9bXky7Dm861S6mQ== + dependencies: + "@lumino/algorithm" "^2.0.2" + "@lumino/commands" "^2.3.1" + "@lumino/coreutils" "^2.2.0" + "@lumino/disposable" "^2.1.3" + "@lumino/domutils" "^2.0.2" + "@lumino/dragdrop" "^2.1.5" + "@lumino/keyboard" "^2.0.2" + "@lumino/messaging" "^2.0.2" + "@lumino/properties" "^2.0.2" + "@lumino/signaling" "^2.1.3" + "@lumino/virtualdom" "^2.0.2" + +"@microsoft/fast-colors@^5.3.1": + version "5.3.1" + resolved "https://registry.npmjs.org/@microsoft/fast-colors/-/fast-colors-5.3.1.tgz#defc59874176e42316be7e6d24c31885ead8ca56" + integrity sha512-72RZXVfCbwQzvo5sXXkuLXLT7rMeYaSf5r/6ewQiv/trBtqpWRm4DEH2EilHw/iWTBKOXs1qZNQndgUMa5n4LA== + +"@microsoft/fast-element@^1.12.0", "@microsoft/fast-element@^1.13.0": + version "1.13.0" + resolved "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.13.0.tgz#d390ff13697064a48dc6ad6bb332a5f5489f73f8" + integrity sha512-iFhzKbbD0cFRo9cEzLS3Tdo9BYuatdxmCEKCpZs1Cro/93zNMpZ/Y9/Z7SknmW6fhDZbpBvtO8lLh9TFEcNVAQ== + +"@microsoft/fast-foundation@^2.49.4", "@microsoft/fast-foundation@^2.49.6": + version "2.49.6" + resolved "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.6.tgz#0bdee7d28dcf93918075618359b083a676d2891c" + integrity sha512-DZVr+J/NIoskFC1Y6xnAowrMkdbf2d5o7UyWK6gW5AiQ6S386Ql8dw4KcC4kHaeE1yL2CKvweE79cj6ZhJhTvA== + dependencies: + "@microsoft/fast-element" "^1.13.0" + "@microsoft/fast-web-utilities" "^5.4.1" + tabbable "^5.2.0" + tslib "^1.13.0" + +"@microsoft/fast-react-wrapper@^0.3.22": + version "0.3.24" + resolved "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.3.24.tgz#caed362a95fac88f9715a4b82425c395fba550c2" + integrity sha512-sRnSBIKaO42p4mYoYR60spWVkg89wFxFAgQETIMazAm2TxtlsnsGszJnTwVhXq2Uz+XNiD8eKBkfzK5c/i6/Kw== + dependencies: + "@microsoft/fast-element" "^1.13.0" + "@microsoft/fast-foundation" "^2.49.6" + +"@microsoft/fast-web-utilities@^5.4.1": + version "5.4.1" + resolved "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz#8e3082ee2ff2b5467f17e7cb1fb01b0e4906b71f" + integrity sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg== + dependencies: + exenv-es6 "^1.1.1" + +"@playwright/test@^1.32.0", "@playwright/test@^1.43.1": + version "1.47.0" + resolved "https://registry.npmjs.org/@playwright/test/-/test-1.47.0.tgz#69fc55b10754147cc20021afbfa05747d4961bf0" + integrity sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA== + dependencies: + playwright "1.47.0" + +"@rjsf/core@^5.13.4": + version "5.21.0" + resolved "https://registry.npmjs.org/@rjsf/core/-/core-5.21.0.tgz#35c3b2303345dc5e616d18061e5797e8b9ff1b31" + integrity sha512-G8eROGeHVerBRcXyHKSrNeY0C3YeeLINLwZOl4XeDPA0hHxrrM6/kRhZ2l07t96LX/vZmqrNqrMCbWokvxQ/uw== + 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" + +"@rjsf/utils@^5.13.4": + version "5.21.0" + resolved "https://registry.npmjs.org/@rjsf/utils/-/utils-5.21.0.tgz#5626f7e8ad4b8015eacfe1017183230c00a5fe9b" + integrity sha512-rpYylVRHv7m9HG49vBxo6pRP5vXIoiZrdCKISE5+0CMO9bI1R6wF+5m1SZH4AL4C4sbcwA5vApK12slpzNXwTA== + dependencies: + fast-equals "^5.0.1" + 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" + +"@stdlib/array@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/array/-/array-0.0.12.tgz#12f40ab95bb36d424cdad991f29fc3cb491ee29e" + integrity sha512-nDksiuvRC1dSTHrf5yOGQmlRwAzSKV8MdFQwFSvLbZGGhi5Y4hExqea5HloLgNVouVs8lnAFi2oubSM4Mc7YAg== + 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" + +"@stdlib/assert@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/assert/-/assert-0.0.12.tgz#1648c9016e5041291f55a6464abcc4069c5103ce" + integrity sha512-38FxFf+ZoQZbdc+m09UsWtaCmzd/2e7im0JOaaFYE7icmRfm+4KiE9BRvBT4tIn7ioLB2f9PsBicKjIsf+tY1w== + 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" + +"@stdlib/bigint@^0.0.x": + version "0.0.11" + resolved "https://registry.npmjs.org/@stdlib/bigint/-/bigint-0.0.11.tgz#c416a1d727001c55f4897e6424124199d638f2fd" + integrity sha512-uz0aYDLABAYyqxaCSHYbUt0yPkXYUCR7TrVvHN+UUD3i8FZ02ZKcLO+faKisDyxKEoSFTNtn3Ro8Ir5ebOlVXQ== + dependencies: + "@stdlib/utils" "^0.0.x" + +"@stdlib/blas@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/blas/-/blas-0.0.12.tgz#7e93e42b4621fc6903bf63264f045047333536c2" + integrity sha512-nWY749bWceuoWQ7gz977blCwR7lyQ/rsIXVO4b600h+NFpeA2i/ea7MYC680utIbeu2cnDWHdglBPoK535VAzA== + 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" + +"@stdlib/buffer@^0.0.x": + version "0.0.11" + resolved "https://registry.npmjs.org/@stdlib/buffer/-/buffer-0.0.11.tgz#6137b00845e6c905181cc7ebfae9f7e47c01b0ce" + integrity sha512-Jeie5eDDa1tVuRcuU+cBXI/oOXSmMxUUccZpqXzgYe0IO8QSNtNxv9mUTzJk/m5wH+lmLoDvNxzPpOH9TODjJg== + 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" + +"@stdlib/cli@^0.0.x": + version "0.0.10" + resolved "https://registry.npmjs.org/@stdlib/cli/-/cli-0.0.10.tgz#28e2fbe6865d7f5cd15b7dc5846c99bd3b91674f" + integrity sha512-OITGaxG46kwK799+NuOd/+ccosJ9koVuQBC610DDJv0ZJf8mD7sbjGXrmue9C4EOh8MP7Vm/6HN14BojX8oTCg== + dependencies: + "@stdlib/utils" "^0.0.x" + minimist "^1.2.0" + +"@stdlib/complex@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/complex/-/complex-0.0.12.tgz#3afbc190cd0a9b37fc7c6e508c3aa9fda9106944" + integrity sha512-UbZBdaUxT2G+lsTIrVlRZwx2IRY6GXnVILggeejsIVxHSuK+oTyapfetcAv0FJFLP+Rrr+ZzrN4b9G3hBw6NHA== + dependencies: + "@stdlib/array" "^0.0.x" + "@stdlib/assert" "^0.0.x" + "@stdlib/types" "^0.0.x" + "@stdlib/utils" "^0.0.x" + +"@stdlib/constants@^0.0.x": + version "0.0.11" + resolved "https://registry.npmjs.org/@stdlib/constants/-/constants-0.0.11.tgz#78cd56d6c2982b30264843c3d75bde7125e90cd2" + integrity sha512-cWKy0L9hXHUQTvFzdPkTvZnn/5Pjv7H4UwY0WC1rLt+A5CxFDJKjvnIi9ypSzJS3CAiGl1ZaHCdadoqXhNdkUg== + dependencies: + "@stdlib/array" "^0.0.x" + "@stdlib/assert" "^0.0.x" + "@stdlib/number" "^0.0.x" + "@stdlib/utils" "^0.0.x" + +"@stdlib/fs@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/fs/-/fs-0.0.12.tgz#662365fd5846a51f075724b4f2888ae88441b70d" + integrity sha512-zcDLbt39EEM3M3wJW6luChS53B8T+TMJkjs2526UpKJ71O0/0adR57cI7PfCpkMd33d05uM7GM+leEj4eks4Cw== + 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" + +"@stdlib/math@^0.0.x": + version "0.0.11" + resolved "https://registry.npmjs.org/@stdlib/math/-/math-0.0.11.tgz#eb6638bc03a20fbd6727dd5b977ee0170bda4649" + integrity sha512-qI78sR1QqGjHj8k/aAqkZ51Su2fyBvaR/jMKQqcB/ML8bpYpf+QGlGvTty5Qdru/wpqds4kVFOVbWGcNFIV2+Q== + 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" + +"@stdlib/ndarray@^0.0.x": + version "0.0.13" + resolved "https://registry.npmjs.org/@stdlib/ndarray/-/ndarray-0.0.13.tgz#2e8fc645e10f56a645a0ab81598808c0e8f43b82" + integrity sha512-Z+U9KJP4U2HWrLtuAXSPvhNetAdqaNLMcliR6S/fz+VPlFDeymRK7omRFMgVQ+1zcAvIgKZGJxpLC3vjiPUYEw== + 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" + +"@stdlib/nlp@^0.0.x": + version "0.0.11" + resolved "https://registry.npmjs.org/@stdlib/nlp/-/nlp-0.0.11.tgz#532ec0f7267b8d639e4c20c6de864e8de8a09054" + integrity sha512-D9avYWANm0Db2W7RpzdSdi5GxRYALGAqUrNnRnnKIO6sMEfr/DvONoAbWruda4QyvSC+0MJNwcEn7+PHhRwYhw== + 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" + +"@stdlib/number@^0.0.x": + version "0.0.10" + resolved "https://registry.npmjs.org/@stdlib/number/-/number-0.0.10.tgz#4030ad8fc3fac19a9afb415c443cee6deea0e65c" + integrity sha512-RyfoP9MlnX4kccvg8qv7vYQPbLdzfS1Mnp/prGOoWhvMG3pyBwFAan34kwFb5IS/zHC3W5EmrgXCV2QWyLg/Kg== + 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" + +"@stdlib/os@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/os/-/os-0.0.12.tgz#08bbf013c62a7153099fa9cbac086ca1349a4677" + integrity sha512-O7lklZ/9XEzoCmYvzjPh7jrFWkbpOSHGI71ve3dkSvBy5tyiSL3TtivfKsIC+9ZxuEJZ3d3lIjc9e+yz4HVbqQ== + 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" + +"@stdlib/process@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/process/-/process-0.0.12.tgz#123325079d89a32f4212f72fb694f8fe3614cf18" + integrity sha512-P0X0TMvkissBE1Wr877Avi2/AxmP7X5Toa6GatHbpJdDg6jQmN4SgPd+NZNp98YtZUyk478c8XSIzMr1krQ20g== + 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" + +"@stdlib/random@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/random/-/random-0.0.12.tgz#e819c3abd602ed5559ba800dba751e49c633ff85" + integrity sha512-c5yND4Ahnm9Jx0I+jsKhn4Yrz10D53ALSrIe3PG1qIz3kNFcIPnmvCuNGd+3V4ch4Mbrez55Y8z/ZC5RJh4vJQ== + 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" + +"@stdlib/regexp@^0.0.x": + version "0.0.13" + resolved "https://registry.npmjs.org/@stdlib/regexp/-/regexp-0.0.13.tgz#80b98361dc7a441b47bc3fa964bb0c826759e971" + integrity sha512-3JT5ZIoq/1nXY+dY+QtkU8/m7oWDeekyItEEXMx9c/AOf0ph8fmvTUGMDNfUq0RetcznFe3b66kFz6Zt4XHviA== + dependencies: + "@stdlib/assert" "^0.0.x" + "@stdlib/utils" "^0.0.x" + +"@stdlib/stats@^0.0.x", "@stdlib/stats@~0.0.13": + version "0.0.13" + resolved "https://registry.npmjs.org/@stdlib/stats/-/stats-0.0.13.tgz#87c973f385379d794707c7b5196a173dba8b07e1" + integrity sha512-hm+t32dKbx/L7+7WlQ1o4NDEzV0J4QSnwFBCsIMIAO8+VPxTZ4FxyNERl4oKlS3hZZe4AVKjoOVhBDtgEWrS4g== + 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" + +"@stdlib/streams@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/streams/-/streams-0.0.12.tgz#07f5ceae5852590afad8e1cb7ce94174becc8739" + integrity sha512-YLUlXwjJNknHp92IkJUdvn5jEQjDckpawKhDLLCoxyh3h5V+w/8+61SH7TMTfKx5lBxKJ8vvtchZh90mIJOAjQ== + 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" + +"@stdlib/strided@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/strided/-/strided-0.0.12.tgz#86ac48e660cb7f64a45cf07e80cbbfe58be21ae1" + integrity sha512-1NINP+Y7IJht34iri/bYLY7TVxrip51f6Z3qWxGHUCH33kvk5H5QqV+RsmFEGbbyoGtdeHrT2O+xA+7R2e3SNg== + 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" + +"@stdlib/string@^0.0.x": + version "0.0.14" + resolved "https://registry.npmjs.org/@stdlib/string/-/string-0.0.14.tgz#4feea4f9089ab72428eebb65fe7b93d90a7f34f4" + integrity sha512-1ClvUTPysens7GZz3WsrkFYIFs8qDmnXkyAd3zMvTXgRpy7hqrv6nNzLMQj8BHv5cBWaWPOXYd/cZ+JyMnZNQQ== + 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" + +"@stdlib/symbol@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/symbol/-/symbol-0.0.12.tgz#b9f396b0bf269c2985bb7fe99810a8e26d7288c3" + integrity sha512-2IDhpzWVGeLHgsvIsX12RXvf78r7xBkc4QLoRUv3k7Cp61BisR1Ym1p0Tq9PbxT8fknlvLToh9n5RpmESi2d4w== + dependencies: + "@stdlib/assert" "^0.0.x" + "@stdlib/utils" "^0.0.x" + +"@stdlib/time@^0.0.x": + version "0.0.14" + resolved "https://registry.npmjs.org/@stdlib/time/-/time-0.0.14.tgz#ea6daa438b1d3b019b99f5091117ee4bcef55d60" + integrity sha512-1gMFCQTabMVIgww+k4g8HHHIhyy1tIlvwT8mC0BHW7Q7TzDAgobwL0bvor+lwvCb5LlDAvNQEpaRgVT99QWGeQ== + 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" + +"@stdlib/types@^0.0.x": + version "0.0.14" + resolved "https://registry.npmjs.org/@stdlib/types/-/types-0.0.14.tgz#02d3aab7a9bfaeb86e34ab749772ea22f7b2f7e0" + integrity sha512-AP3EI9/il/xkwUazcoY+SbjtxHRrheXgSbWZdEGD+rWpEgj6n2i63hp6hTOpAB5NipE0tJwinQlDGOuQ1lCaCw== + +"@stdlib/utils@^0.0.x": + version "0.0.12" + resolved "https://registry.npmjs.org/@stdlib/utils/-/utils-0.0.12.tgz#670de5a7b253f04f11a4cba38f790e82393bcb46" + integrity sha512-+JhFpl6l7RSq/xGnbWRQ5dAL90h9ONj8MViqlb7teBZFtePZLMwoRA1wssypFcJ8SFMRWQn7lPmpYVUkGwRSOg== + 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" + +"@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/geojson@7946.0.4": + version "7946.0.4" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.4.tgz#4e049756383c3f055dd8f3d24e63fb543e98eb07" + integrity sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q== + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/react@^18.0.26": + version "18.3.5" + resolved "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz#5f524c2ad2089c0ff372bbdabc77ca2c4dbadf8f" + integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@vscode/debugprotocol@^1.51.0": + version "1.67.0" + resolved "https://registry.npmjs.org/@vscode/debugprotocol/-/debugprotocol-1.67.0.tgz#cbeef6f9e8e4b5e9a30468faa6f42c96e4d42040" + integrity sha512-vTn5JwZ+LQy2QqT/wUD8Rlrb+7eLo5fsiKIxD5i0BZIuvdRbxTTfGU7+47PsorMrfBzozngIrocKCKS3OVnYyw== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +ajv@^8.12.0: + version "8.17.1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/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.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +commander@2: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@7: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +compute-gcd@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" + integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== + dependencies: + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +compute-lcm@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23" + integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== + 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" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crelt@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" + integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== + +csstype@3.0.10: + version "3.0.10" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" + integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +"d3-array@1 - 3", "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3.2.4, d3-array@^3.2.2: + version "3.2.4" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + +"d3-color@1 - 3", d3-color@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== + +d3-delaunay@^6.0.2: + version "6.0.4" + resolved "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + +"d3-dispatch@1 - 3": + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== + +d3-dsv@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + +d3-force@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + +"d3-format@1 - 3", d3-format@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== + +d3-geo-projection@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz#dc229e5ead78d31869a4e87cf1f45bd2716c48ca" + integrity sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg== + dependencies: + commander "7" + d3-array "1 - 3" + d3-geo "1.12.0 - 3" + +"d3-geo@1.12.0 - 3", d3-geo@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz#6027cf51246f9b2ebd64f99e01dc7c3364033a4d" + integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q== + dependencies: + d3-array "2.5.0 - 3" + +d3-hierarchy@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + +d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +"d3-quadtree@1 - 3": + version "3.0.1" + resolved "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-scale-chromatic@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#34c39da298b23c20e02f1a4b239bd0f22e7f1314" + integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + +d3-scale@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== + 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" + +d3-shape@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + +"d3-time-format@2 - 4", d3-time-format@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" + +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== + dependencies: + d3-array "2 - 3" + +"d3-timer@1 - 3", d3-timer@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +delaunator@5: + version "5.0.1" + resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz#39032b08053923e924d6094fe2cde1a99cc51278" + integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw== + dependencies: + robust-predicates "^3.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +exenv-es6@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz#80b7a8c5af24d53331f755bac07e84abb1f6de67" + integrity sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ== + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-equals@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" + integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== + +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + +free-style@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/free-style/-/free-style-3.1.0.tgz#4e2996029534e6b1731611d843437b9e2f473f08" + integrity sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fsevents@2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +htmlparser2@^8.0.0: + version "8.0.2" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isomorphic.js@^0.2.4: + version "0.2.5" + resolved "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" + integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +json-schema-compare@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" + integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== + dependencies: + lodash "^4.17.4" + +json-schema-merge-allof@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz#ed2828cdd958616ff74f932830a26291789eaaf2" + integrity sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w== + dependencies: + compute-lcm "^1.1.2" + json-schema-compare "^0.2.2" + lodash "^4.17.20" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stringify-pretty-compact@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab" + integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +lib0@^0.2.85, lib0@^0.2.86: + version "0.2.97" + resolved "https://registry.npmjs.org/lib0/-/lib0-0.2.97.tgz#a68d7c88577ac1910cdbe5204bac070f07c8e0b4" + integrity sha512-Q4d1ekgvufi9FiHkkL46AhecfNjznSL9MRNoJRQ76gBHS9OqU2ArfQK0FvBpuxgWeJeNI0LVgAYMIpsGeX4gYg== + dependencies: + isomorphic.js "^0.2.4" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== + +lodash.mergewith@^4.6.1: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +markdown-to-jsx@^7.4.1: + version "7.5.0" + resolved "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz#42ece0c71e842560a7d8bd9f81e7a34515c72150" + integrity sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw== + +minimist@^1.2.0, minimist@~1.2.0: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path@~0.12.7: + version "0.12.7" + resolved "https://registry.npmjs.org/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q== + dependencies: + process "^0.11.1" + util "^0.10.3" + +picocolors@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== + +playwright-core@1.47.0: + version "1.47.0" + resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz#b54ec060fd83e5c2e46b63986b5ebb5e96ace427" + integrity sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg== + +playwright@1.47.0: + version "1.47.0" + resolved "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz#fb9b028883fad11362f9ff63ce7ba44bda0bf626" + integrity sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww== + dependencies: + playwright-core "1.47.0" + optionalDependencies: + fsevents "2.3.2" + +postcss@^8.3.11: + version "8.4.45" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz#538d13d89a16ef71edbf75d895284ae06b79e603" + integrity sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.1: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +react-dom@^18.2.0: + version "18.3.1" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.2.0: + version "18.3.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +"react@>=17.0.0 <19.0.0", react@^18.2.0: + version "18.3.1" + resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + +readable-stream@^2.1.4: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +regexp-match-indices@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz#cf20054a6f7d5b3e116a701a7b00f82889d10da6" + integrity sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ== + dependencies: + regexp-tree "^0.1.11" + +regexp-tree@^0.1.11: + version "0.1.27" + resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +robust-predicates@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + +rw@1: + version "1.3.3" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-html@~2.12.1: + version "2.12.1" + resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.12.1.tgz#280a0f5c37305222921f6f9d605be1f6558914c7" + integrity sha512-Plh+JAn0UVDpBRP/xEjsk+xDCoOvMBwQUf/K+/cBAVuTbtX8bj2VB7S1sL1dssVpykqp0/KPSesHrqXtokVBpA== + 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" + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +semver@^7.5.0: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +source-map-js@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +style-mod@^4.0.0, style-mod@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" + integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== + +systeminformation@^5.8.6: + version "5.23.5" + resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.23.5.tgz#bf7544be42c42f7d14a81b02aa0365e9ca1f5266" + integrity sha512-PEpJwhRYxZgBCAlWZhWIgfMTjXLqfcaZ1pJsJn9snWNfBW/Z1YQg1mbIUSWrEV3ErAHF7l/OoVLQeaZDlPzkpA== + +tabbable@^5.2.0: + version "5.3.3" + resolved "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" + integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== + +topojson-client@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.13.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.5.0: + version "2.7.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@~2.6.3: + version "2.6.3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +typestyle@^2.0.4: + version "2.4.0" + resolved "https://registry.npmjs.org/typestyle/-/typestyle-2.4.0.tgz#df5bae6ff15093f5ce51f0caac5ef79428f64e78" + integrity sha512-/d1BL6Qi+YlMLEydnUEB8KL/CAjAN8cyt3/UyGnOyBrWf7bLGcR/6yhmsaUstO2IcYwZfagjE7AIzuI2vUW9mg== + dependencies: + csstype "3.0.10" + free-style "3.1.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +url-parse@~1.5.4: + version "1.5.10" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.npmjs.org/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +validate.io-array@^1.0.3: + version "1.0.6" + resolved "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== + +validate.io-function@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" + integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== + +validate.io-integer-array@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" + integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA== + dependencies: + validate.io-array "^1.0.3" + validate.io-integer "^1.0.4" + +validate.io-integer@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" + integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ== + dependencies: + validate.io-number "^1.0.3" + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" + integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== + +vega-canvas@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz#cf62169518f5dcd91d24ad352998c2248f8974fb" + integrity sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q== + +vega-crossfilter@~4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.2.tgz#810281c279b3592310f12814bc61206dd42ca61d" + integrity sha512-J7KVEXkpfRJBfRvwLxn5vNCzQCNkrnzmDvkvwhuiwT4gPm5sk7MK5TuUP8GCl/iKYw+kWeVXEtrVHwWtug+bcQ== + dependencies: + d3-array "^3.2.2" + vega-dataflow "^5.7.6" + vega-util "^1.17.2" + +vega-dataflow@^5.7.6, vega-dataflow@~5.7.6: + version "5.7.6" + resolved "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.6.tgz#21dfad9120cb18d9aeaed578658670839d1adc95" + integrity sha512-9Md8+5iUC1MVKPKDyZ7pCEHk6I9am+DgaMzZqo/27O/KI4f23/WQXPyuI8jbNmc/mkm340P0TKREmzL5M7+2Dg== + dependencies: + vega-format "^1.1.2" + vega-loader "^4.5.2" + vega-util "^1.17.2" + +vega-encode@~4.10.1: + version "4.10.1" + resolved "https://registry.npmjs.org/vega-encode/-/vega-encode-4.10.1.tgz#1656e20396db99c414f495704ef3d9cff99631df" + integrity sha512-d25nVKZDrg109rC65M8uxE+7iUrTxktaqgK4fU3XZBgpWlh1K4UbU5nDag7kiHVVN4tKqwgd+synEotra9TiVQ== + dependencies: + d3-array "^3.2.2" + d3-interpolate "^3.0.1" + vega-dataflow "^5.7.6" + vega-scale "^7.4.1" + vega-util "^1.17.2" + +vega-event-selector@^3.0.1, vega-event-selector@~3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.1.tgz#b99e92147b338158f8079d81b28b2e7199c2e259" + integrity sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A== + +vega-expression@^5.0.1, vega-expression@^5.1.1, vega-expression@~5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.1.tgz#9b2d287a1f34d990577c9798ae68ec88453815ef" + integrity sha512-zv9L1Hm0KHE9M7mldHyz8sXbGu3KmC0Cdk7qfHkcTNS75Jpsem6jkbu6ZAwx5cNUeW91AxUQOu77r4mygq2wUQ== + dependencies: + "@types/estree" "^1.0.0" + vega-util "^1.17.2" + +vega-force@~4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/vega-force/-/vega-force-4.2.1.tgz#bdce6ec8572867b4ff2fb7e09d2894798c5358ec" + integrity sha512-2BcuuqFr77vcCyKfcpedNFeYMxi+XEFCrlgLWNx7YV0PI8pdP5y/yPkzyuE9Tb894+KkRAvfQHZRAshcnFNcMw== + dependencies: + d3-force "^3.0.0" + vega-dataflow "^5.7.6" + vega-util "^1.17.2" + +vega-format@^1.1.2, vega-format@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vega-format/-/vega-format-1.1.2.tgz#d344ba8a2680144e92127459c149a4181e9e7f84" + integrity sha512-0kUfAj0dg0U6GcEY0Kp6LiSTCZ8l8jl1qVdQyToMyKmtZg/q56qsiJQZy3WWRr1MtWkTIZL71xSJXgjwjeUaAw== + dependencies: + d3-array "^3.2.2" + d3-format "^3.1.0" + d3-time-format "^4.1.0" + vega-time "^2.1.2" + vega-util "^1.17.2" + +vega-functions@^5.15.0, vega-functions@~5.15.0: + version "5.15.0" + resolved "https://registry.npmjs.org/vega-functions/-/vega-functions-5.15.0.tgz#a7905e1dd6457efe265dbf954cbc0a5721c484b0" + integrity sha512-pCqmm5efd+3M65jrJGxEy3UGuRksmK6DnWijoSNocnxdCBxez+yqUUVX9o2pN8VxMe3648vZnR9/Vk5CXqRvIQ== + dependencies: + d3-array "^3.2.2" + d3-color "^3.1.0" + d3-geo "^3.1.0" + vega-dataflow "^5.7.6" + vega-expression "^5.1.1" + vega-scale "^7.4.1" + vega-scenegraph "^4.13.0" + vega-selections "^5.4.2" + vega-statistics "^1.9.0" + vega-time "^2.1.2" + vega-util "^1.17.2" + +vega-geo@~4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.2.tgz#da4a08ee39c9488bfc4fe6493779f584dd8bb412" + integrity sha512-unuV/UxUHf6UJu6GYxMZonC3SZlMfFXYLOkgEsRSvmsMPt3+CVv8FmG88dXNRUJUrdROrJepgecqx0jOwMSnGA== + 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.6" + vega-projection "^1.6.1" + vega-statistics "^1.9.0" + vega-util "^1.17.2" + +vega-hierarchy@~4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.2.tgz#e42938c42527b392b110b1e3bf89eaa456dba1b8" + integrity sha512-m+xDtT5092YPSnV0rdTLW+AWmoCb+A54JQ66MUJwiDBpKxvfKnTiQeuiWDU2YudjUoXZN9EBOcI6QHF8H2Lu2A== + dependencies: + d3-hierarchy "^3.1.2" + vega-dataflow "^5.7.6" + vega-util "^1.17.2" + +vega-label@~1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/vega-label/-/vega-label-1.3.0.tgz#21b3e5ef40e63f51ac987a449d183068c4961503" + integrity sha512-EfSFSCWAwVPsklM5g0gUEuohALgryuGC/SKMmsOH7dYT/bywmLBZhLVbrE+IHJAUauoGrMhYw1mqnXL/0giJBg== + dependencies: + vega-canvas "^1.2.7" + vega-dataflow "^5.7.6" + vega-scenegraph "^4.13.0" + vega-util "^1.17.2" + +vega-lite@^5.6.1: + version "5.21.0" + resolved "https://registry.npmjs.org/vega-lite/-/vega-lite-5.21.0.tgz#21ce8b905a02ba364b7b1d7ef471497ba3e12e93" + integrity sha512-hNxM9nuMqpI1vkUOhEx6ewEf23WWLmJxSFJ4TA86AW43ixJyqcLV+iSCO0NipuVTE0rlDcc2e8joSewWyOlEwA== + dependencies: + json-stringify-pretty-compact "~3.0.0" + tslib "~2.6.3" + vega-event-selector "~3.0.1" + vega-expression "~5.1.1" + vega-util "~1.17.2" + yargs "~17.7.2" + +vega-loader@^4.5.2, vega-loader@~4.5.2: + version "4.5.2" + resolved "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.2.tgz#7212f093c397b153f69f7e6cfef47817c17c5c01" + integrity sha512-ktIdGz3DRIS3XfTP9lJ6oMT5cKwC86nQkjUbXZbOtwXQFVNE2xVWBuH13GP6FKUZxg5hJCMtb5v/e/fwTvhKsQ== + dependencies: + d3-dsv "^3.0.1" + node-fetch "^2.6.7" + topojson-client "^3.1.0" + vega-format "^1.1.2" + vega-util "^1.17.2" + +vega-parser@~6.4.0: + version "6.4.0" + resolved "https://registry.npmjs.org/vega-parser/-/vega-parser-6.4.0.tgz#6a12f07f0f9178492a17842efe7e1f51a2d36bed" + integrity sha512-/hFIJs0yITxfvLIfhhcpUrcbKvu4UZYoMGmly5PSsbgo60oAsVQW8ZbX2Ji3iNFqZJh1ifoX/P0j+9wep1OISw== + dependencies: + vega-dataflow "^5.7.6" + vega-event-selector "^3.0.1" + vega-functions "^5.15.0" + vega-scale "^7.4.1" + vega-util "^1.17.2" + +vega-projection@^1.6.1, vega-projection@~1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.1.tgz#da687abc60f4a93bb888385beb23e0a1000f8b57" + integrity sha512-sqfnAAHumU7MWU1tQN3b6HNgKGF3legek0uLHhjLKcDJQxEc7kwcD18txFz2ffQks6d5j+AUhBiq4GARWf0DEQ== + dependencies: + d3-geo "^3.1.0" + d3-geo-projection "^4.0.0" + vega-scale "^7.4.1" + +vega-regression@~1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/vega-regression/-/vega-regression-1.3.0.tgz#3e68e234fa9460041fac082c6a3469c896d436a8" + integrity sha512-gxOQfmV7Ft/MYKpXDEo09WZyBuKOBqxqDRWay9KtfGq/E0Y4vbTPsWLv2cB1ToPJdKE6XSN6Re9tCIw5M/yMUg== + dependencies: + d3-array "^3.2.2" + vega-dataflow "^5.7.6" + vega-statistics "^1.9.0" + vega-util "^1.17.2" + +vega-runtime@^6.2.0, vega-runtime@~6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.2.0.tgz#10f435089fff11d8e1b49cb0cbab8041731e6f06" + integrity sha512-30UXbujWjKNd5aeP+oeHuwFmzuyVYlBj4aDy9+AjfWLECu8wJt4K01vwegcaGPdCWcPLVIv4Oa9Lob4mcXn5KQ== + dependencies: + vega-dataflow "^5.7.6" + vega-util "^1.17.2" + +vega-scale@^7.4.1, vega-scale@~7.4.1: + version "7.4.1" + resolved "https://registry.npmjs.org/vega-scale/-/vega-scale-7.4.1.tgz#2dcd3e39ebb00269b03a8be86e44c7b48c67442a" + integrity sha512-dArA28DbV/M92O2QvswnzCmQ4bq9WwLKUoyhqFYWCltmDwkmvX7yhqiFLFMWPItIm7mi4Qyoygby6r4DKd1X2A== + dependencies: + d3-array "^3.2.2" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + d3-scale-chromatic "^3.1.0" + vega-time "^2.1.2" + vega-util "^1.17.2" + +vega-scenegraph@^4.13.0, vega-scenegraph@~4.13.0: + version "4.13.0" + resolved "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.13.0.tgz#c4fa5c82773f6244a9ca8b01a44e380adf03fabd" + integrity sha512-nfl45XtuqB5CxyIZJ+bbJ+dofzosPCRlmF+eUQo+0J23NkNXsTzur+1krJDSdhcw0SOYs4sbYRoMz1cpuOM4+Q== + dependencies: + d3-path "^3.1.0" + d3-shape "^3.2.0" + vega-canvas "^1.2.7" + vega-loader "^4.5.2" + vega-scale "^7.4.1" + vega-util "^1.17.2" + +vega-selections@^5.4.2: + version "5.4.2" + resolved "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.2.tgz#cb4f41f5d4c0ee924ebf131b8dbd43e7885bcad4" + integrity sha512-99FUhYmg0jOJr2/K4TcEURmJRkuibrCDc8KBUX7qcQEITzrZ5R6a4QE+sarCvbb3hi8aA9GV2oyST6MQeA9mgQ== + dependencies: + d3-array "3.2.4" + vega-expression "^5.0.1" + vega-util "^1.17.1" + +vega-statistics@^1.7.9, vega-statistics@^1.9.0, vega-statistics@~1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz#7d6139cea496b22d60decfa6abd73346f70206f9" + integrity sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ== + dependencies: + d3-array "^3.2.2" + +vega-time@^2.1.2, vega-time@~2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/vega-time/-/vega-time-2.1.2.tgz#0c414e74780613d6d3234fb97f19b50c0ebd9f49" + integrity sha512-6rXc6JdDt8MnCRy6UzUCsa6EeFycPDmvioMddLfKw38OYCV8pRQC5nw44gyddOwXgUTJLiCtn/sp53P0iA542A== + dependencies: + d3-array "^3.2.2" + d3-time "^3.1.0" + vega-util "^1.17.2" + +vega-transforms@~4.12.0: + version "4.12.0" + resolved "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.12.0.tgz#6a69e0b67934b0c0a40a6f607fdb543bf749955e" + integrity sha512-bh/2Qbj85O70mjfLRgPKAsABArgSUP0k+GjmaY54zukIRxoGxKju+85nigeX/aR/INpEqNWif+5lL+NvmyWA5w== + dependencies: + d3-array "^3.2.2" + vega-dataflow "^5.7.6" + vega-statistics "^1.9.0" + vega-time "^2.1.2" + vega-util "^1.17.2" + +vega-typings@~1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/vega-typings/-/vega-typings-1.3.1.tgz#025a6031505794b44d9b6e2c49d4551b8918d4ae" + integrity sha512-j9Sdgmvowz09jkMgTFGVfiv7ycuRP/TQkdHRPXIYwt3RDgPQn7inyFcJ8C8ABFt4MiMWdjOwbneF6KWW8TRXIw== + dependencies: + "@types/geojson" "7946.0.4" + vega-event-selector "^3.0.1" + vega-expression "^5.1.1" + vega-util "^1.17.2" + +vega-util@^1.17.1, vega-util@^1.17.2, vega-util@~1.17.2: + version "1.17.2" + resolved "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz#f69aa09fd5d6110c19c4a0f0af9e35945b99987d" + integrity sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw== + +vega-view-transforms@~4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.6.0.tgz#829d56ca3c8116b0dded4ec0502f4ac70253de9a" + integrity sha512-z3z66aJTA3ZRo4oBY4iBXnn+A4KqBGZT/UrlKDbm+7Ec+Ip+hK2tF8Kmhp/WNcMsDZoUWFqLJgR2VgOgvJk9RA== + dependencies: + vega-dataflow "^5.7.6" + vega-scenegraph "^4.13.0" + vega-util "^1.17.2" + +vega-view@~5.13.0: + version "5.13.0" + resolved "https://registry.npmjs.org/vega-view/-/vega-view-5.13.0.tgz#8ea96da9fcdf42fe7c0e95fe6258933477524745" + integrity sha512-ZPAAQ3iYz6YrQjJoDT+0bcxJkXt9PKF5v4OO7Omw8PFhkIv++jFXeKlQTW1bBtyQ92dkdGGHv5lYY67Djqjf3A== + dependencies: + d3-array "^3.2.2" + d3-timer "^3.0.1" + vega-dataflow "^5.7.6" + vega-format "^1.1.2" + vega-functions "^5.15.0" + vega-runtime "^6.2.0" + vega-scenegraph "^4.13.0" + vega-util "^1.17.2" + +vega-voronoi@~4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.3.tgz#54c4bb96b9b94c3fa0160bee24695dcb9d583fe1" + integrity sha512-aYYYM+3UGqwsOx+TkVtF1IZfguy0H7AN79dR8H0nONRIc+vhk/lbnlkgwY2nSzEu0EZ4b5wZxeGoDBEVmdDEcg== + dependencies: + d3-delaunay "^6.0.2" + vega-dataflow "^5.7.6" + vega-util "^1.17.2" + +vega-wordcloud@~4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.5.tgz#789c9e67225c77f3f35a6fc052beec1c2bdc8b5e" + integrity sha512-p+qXU3cb9VeWzJ/HEdax0TX2mqDJcSbrCIfo2d/EalOXGkvfSLKobsmMQ8DxPbtVp0uhnpvfCGDyMJw+AzcI2A== + dependencies: + vega-canvas "^1.2.7" + vega-dataflow "^5.7.6" + vega-scale "^7.4.1" + vega-statistics "^1.9.0" + vega-util "^1.17.2" + +vega@^5.20.0: + version "5.30.0" + resolved "https://registry.npmjs.org/vega/-/vega-5.30.0.tgz#d12350c829878b481453ab28ce10855a954df06d" + integrity sha512-ZGoC8LdfEUV0LlXIuz7hup9jxuQYhSaWek2M7r9dEHAPbPrzSQvKXZ0BbsJbrarM100TGRpTVN/l1AFxCwDkWw== + dependencies: + vega-crossfilter "~4.1.2" + vega-dataflow "~5.7.6" + vega-encode "~4.10.1" + vega-event-selector "~3.0.1" + vega-expression "~5.1.1" + vega-force "~4.2.1" + vega-format "~1.1.2" + vega-functions "~5.15.0" + vega-geo "~4.4.2" + vega-hierarchy "~4.1.2" + vega-label "~1.3.0" + vega-loader "~4.5.2" + vega-parser "~6.4.0" + vega-projection "~1.6.1" + vega-regression "~1.3.0" + vega-runtime "~6.2.0" + vega-scale "~7.4.1" + vega-scenegraph "~4.13.0" + vega-statistics "~1.9.0" + vega-time "~2.1.2" + vega-transforms "~4.12.0" + vega-typings "~1.3.1" + vega-util "~1.17.2" + vega-view "~5.13.0" + vega-view-transforms "~4.6.0" + vega-voronoi "~4.2.3" + vega-wordcloud "~4.1.5" + +vscode-jsonrpc@8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz#f43dfa35fb51e763d17cd94dcca0c9458f35abf9" + integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA== + +vscode-jsonrpc@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== + +vscode-jsonrpc@^8.0.2: + version "8.2.1" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz#a322cc0f1d97f794ffd9c4cd2a898a0bde097f34" + integrity sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ== + +vscode-languageserver-protocol@^3.17.0: + version "3.17.5" + resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz#864a8b8f390835572f4e13bd9f8313d0e3ac4bea" + integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg== + dependencies: + vscode-jsonrpc "8.2.0" + vscode-languageserver-types "3.17.5" + +vscode-languageserver-types@3.17.5: + version "3.17.5" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" + integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== + +vscode-ws-jsonrpc@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-1.0.2.tgz#ead2efd66293f331ccc220222ae1aeca4bb5b2c1" + integrity sha512-09OpRC0RcqZs4DleJRgs+R+7gQkwb4tgvsL43lzVZwW4N5NO3H/9sLNeKPBt83k7WyA8qBZjrzM6X7tKFpFrjQ== + dependencies: + vscode-jsonrpc "^8.0.2" + +w3c-keyname@^2.2.4: + version "2.2.8" + resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" + integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +ws@^8.11.0: + version "8.18.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +y-protocols@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz#66dad8a95752623443e8e28c0e923682d2c0d495" + integrity sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q== + dependencies: + lib0 "^0.2.85" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@~17.7.2: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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" + +yarn-deduplicate@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/yarn-deduplicate/-/yarn-deduplicate-6.0.2.tgz#63498d2d4c3a8567e992a994ce0ab51aa5681f2e" + integrity sha512-Efx4XEj82BgbRJe5gvQbZmEO7pU5DgHgxohYZp98/+GwPqdU90RXtzvHirb7hGlde0sQqk5G3J3Woyjai8hVqA== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + commander "^10.0.1" + semver "^7.5.0" + tslib "^2.5.0" + +yjs@^13.5.40: + version "13.6.19" + resolved "https://registry.npmjs.org/yjs/-/yjs-13.6.19.tgz#66999f41254ab65be8c8e71bd767d124ad600909" + integrity sha512-GNKw4mEUn5yWU2QPHRx8jppxmCm9KzbBhB4qJLUJFiiYD0g/tDVgXQ7aPkyh01YO28kbs2J/BEbWBagjuWyejw== + dependencies: + lib0 "^0.2.86" From be9b9a5e0766020ae3238e11ab4dd4b3d7d6d34f Mon Sep 17 00:00:00 2001 From: Ignas Baranauskas Date: Fri, 20 Sep 2024 10:31:37 +0100 Subject: [PATCH 2/2] Test to cover the widgets functionality --- .../tests/widget_notebook_example.test.ts | 79 ++++++++++++++++++- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/ui-tests/tests/widget_notebook_example.test.ts b/ui-tests/tests/widget_notebook_example.test.ts index 11eff3193..798c2eb60 100644 --- a/ui-tests/tests/widget_notebook_example.test.ts +++ b/ui-tests/tests/widget_notebook_example.test.ts @@ -16,8 +16,6 @@ import { test } from "@jupyterlab/galata"; import { expect } from "@playwright/test"; import * as path from "path"; -test.setTimeout(460000); - test.describe("Visual Regression", () => { test.beforeEach(async ({ page, tmpPath }) => { await page.contents.uploadDirectory( @@ -27,7 +25,7 @@ test.describe("Visual Regression", () => { await page.filebrowser.openDirectory(tmpPath); }); - test("Run notebook and capture cell outputs", async ({ + test("Run notebook, capture cell outputs, and test widgets", async ({ page, tmpPath, }) => { @@ -60,5 +58,80 @@ test.describe("Visual Regression", () => { continue; } } + + const widgetCellIndex = 3; + + await waitForWidget(page, widgetCellIndex, 'input[type="checkbox"]'); + await waitForWidget(page, widgetCellIndex, 'button:has-text("Cluster Down")'); + await waitForWidget(page, widgetCellIndex, 'button:has-text("Cluster Up")'); + + await interactWithWidget(page, widgetCellIndex, 'input[type="checkbox"]', async (checkbox) => { + await checkbox.click(); + const isChecked = await checkbox.isChecked(); + expect(isChecked).toBe(true); + }); + + await interactWithWidget(page, widgetCellIndex, 'button:has-text("Cluster Down")', async (button) => { + await button.click(); + const clusterDownMessage = await page.waitForSelector('text=No instances found, nothing to be done.', { timeout: 5000 }); + expect(clusterDownMessage).not.toBeNull(); + }); + + await interactWithWidget(page, widgetCellIndex, 'button:has-text("Cluster Up")', async (button) => { + await button.click(); + + const successMessage = await page.waitForSelector('text=Ray Cluster: \'raytest\' has successfully been created', { timeout: 10000 }); + expect(successMessage).not.toBeNull(); + + const resourcesMessage = await page.waitForSelector('text=Waiting for requested resources to be set up...'); + expect(resourcesMessage).not.toBeNull(); + + const upAndRunningMessage = await page.waitForSelector('text=Requested cluster is up and running!'); + expect(upAndRunningMessage).not.toBeNull(); + + const dashboardReadyMessage = await page.waitForSelector('text=Dashboard is ready!'); + expect(dashboardReadyMessage).not.toBeNull(); + }); + + await runPreviousCell(page, cellCount, '(, True)'); + + await interactWithWidget(page, widgetCellIndex, 'button:has-text("Cluster Down")', async (button) => { + await button.click(); + const clusterDownMessage = await page.waitForSelector('text=Ray Cluster: \'raytest\' has successfully been deleted', { timeout: 5000 }); + expect(clusterDownMessage).not.toBeNull(); + }); + + await runPreviousCell(page, cellCount, '(, False)'); }); }); + +async function waitForWidget(page, cellIndex: number, widgetSelector: string, timeout = 5000) { + const widgetCell = await page.notebook.getCellOutput(cellIndex); + + if (widgetCell) { + await widgetCell.waitForSelector(widgetSelector, { timeout }); + } +} + +async function interactWithWidget(page, cellIndex: number, widgetSelector: string, action: (widget) => Promise) { + const widgetCell = await page.notebook.getCellOutput(cellIndex); + + if (widgetCell) { + const widget = await widgetCell.$(widgetSelector); + if (widget) { + await action(widget); + } + } +} + +async function runPreviousCell(page, cellCount, expectedMessage) { + const runSuccess = await page.notebook.runCell(cellCount - 1); expect(runSuccess).toBe(true); + const lastCellOutput = await page.notebook.getCellOutput(cellCount - 1); + const newOutput = await lastCellOutput.evaluate((output) => output.textContent); + + if (expectedMessage) { + expect(newOutput).toContain(expectedMessage); + } + + return lastCellOutput; +}