From 35b6290839fadd735590428c969d42f614a5cd9d Mon Sep 17 00:00:00 2001 From: Kevin Yue Date: Thu, 26 Dec 2024 21:35:55 +0800 Subject: [PATCH] refactor: upgrade tauri 2.0 --- .devcontainer/Dockerfile | 59 +- .github/workflows/build.yaml | 41 +- .github/workflows/publish.yaml | 24 +- .github/workflows/release.yaml | 8 +- .gitignore | 3 + Cargo.lock | 3341 ++++++----- Cargo.toml | 29 +- Makefile | 43 +- README.md | 20 +- apps/gpauth/Cargo.toml | 25 +- apps/gpauth/build.rs | 1 + apps/gpauth/src/auth_window.rs | 523 -- apps/gpauth/src/cli.rs | 212 +- apps/gpauth/src/main.rs | 3 +- apps/gpauth/src/webview_auth.rs | 41 + apps/gpauth/tauri.conf.json | 47 +- apps/gpclient/Cargo.toml | 8 +- apps/gpclient/src/cli.rs | 39 +- apps/gpclient/src/connect.rs | 26 +- apps/gpclient/src/disconnect.rs | 2 +- apps/gpclient/src/launch_gui.rs | 34 +- .../{icon-674efcbe.svg => icon-BlfaAlWe.svg} | 0 .../{index-11e7064a.css => main-B3YRsHQ2.css} | 0 .../gpgui-helper/dist/assets/main-CQPVXkdn.js | 193 + .../gpgui-helper/dist/assets/main-c159dd55.js | 188 - apps/gpgui-helper/dist/index.html | 5 +- apps/gpgui-helper/package.json | 42 +- apps/gpgui-helper/pnpm-lock.yaml | 4939 +++++++++-------- apps/gpgui-helper/src-tauri/Cargo.toml | 6 +- .../src-tauri/capabilities/default.json | 12 + apps/gpgui-helper/src-tauri/src/app.rs | 18 +- apps/gpgui-helper/src-tauri/src/cli.rs | 4 +- apps/gpgui-helper/src-tauri/src/updater.rs | 78 +- apps/gpgui-helper/src-tauri/tauri.conf.json | 45 +- apps/gpgui-helper/src/components/App/App.tsx | 6 +- apps/gpservice/src/cli.rs | 4 +- apps/gpservice/src/handlers.rs | 4 - apps/gpservice/src/routes.rs | 1 - crates/auth/Cargo.toml | 49 + crates/auth/LICENSE | 674 +++ crates/auth/src/authenticator.rs | 60 + crates/auth/src/browser_auth.rs | 5 + crates/auth/src/browser_auth/auth_server.rs | 57 + .../auth/src/browser_auth/browser_auth_ext.rs | 22 + .../src/browser_auth/browser_auth_impl.rs | 100 + crates/auth/src/lib.rs | 13 + crates/auth/src/webview_auth.rs | 9 + .../auth/src/webview_auth/auth_messenger.rs | 108 + crates/auth/src/webview_auth/auth_response.rs | 152 + crates/auth/src/webview_auth/auth_settings.rs | 25 + crates/auth/src/webview_auth/unix.rs | 136 + .../auth/src/webview_auth/webview_auth_ext.rs | 194 + crates/gpapi/Cargo.toml | 9 +- crates/gpapi/src/auth.rs | 76 +- crates/gpapi/src/clap/mod.rs | 27 + crates/gpapi/src/error.rs | 20 +- crates/gpapi/src/gateway/login.rs | 2 +- crates/gpapi/src/lib.rs | 1 + crates/gpapi/src/portal/config.rs | 2 +- crates/gpapi/src/portal/prelogin.rs | 4 +- crates/gpapi/src/process/auth_launcher.rs | 44 +- .../src/process/browser_authenticator.rs | 77 - crates/gpapi/src/process/mod.rs | 2 - crates/gpapi/src/service/event.rs | 2 - .../src/utils/{env_file.rs => env_utils.rs} | 18 + crates/gpapi/src/utils/mod.rs | 2 +- crates/gpapi/src/utils/window.rs | 32 +- packaging/deb/compat | 1 + packaging/deb/control.in | 11 +- packaging/deb/rules.in | 5 + packaging/pkgbuild/PKGBUILD.in | 4 +- .../rpm/globalprotect-openconnect.spec.in | 4 +- 72 files changed, 7111 insertions(+), 4910 deletions(-) delete mode 100644 apps/gpauth/src/auth_window.rs create mode 100644 apps/gpauth/src/webview_auth.rs rename apps/gpgui-helper/dist/assets/{icon-674efcbe.svg => icon-BlfaAlWe.svg} (100%) rename apps/gpgui-helper/dist/assets/{index-11e7064a.css => main-B3YRsHQ2.css} (100%) create mode 100644 apps/gpgui-helper/dist/assets/main-CQPVXkdn.js delete mode 100644 apps/gpgui-helper/dist/assets/main-c159dd55.js create mode 100644 apps/gpgui-helper/src-tauri/capabilities/default.json create mode 100644 crates/auth/Cargo.toml create mode 100644 crates/auth/LICENSE create mode 100644 crates/auth/src/authenticator.rs create mode 100644 crates/auth/src/browser_auth.rs create mode 100644 crates/auth/src/browser_auth/auth_server.rs create mode 100644 crates/auth/src/browser_auth/browser_auth_ext.rs create mode 100644 crates/auth/src/browser_auth/browser_auth_impl.rs create mode 100644 crates/auth/src/lib.rs create mode 100644 crates/auth/src/webview_auth.rs create mode 100644 crates/auth/src/webview_auth/auth_messenger.rs create mode 100644 crates/auth/src/webview_auth/auth_response.rs create mode 100644 crates/auth/src/webview_auth/auth_settings.rs create mode 100644 crates/auth/src/webview_auth/unix.rs create mode 100644 crates/auth/src/webview_auth/webview_auth_ext.rs delete mode 100644 crates/gpapi/src/process/browser_authenticator.rs rename crates/gpapi/src/utils/{env_file.rs => env_utils.rs} (63%) create mode 100644 packaging/deb/compat diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 419fc3d9..4e2c2600 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:22.04 ARG USERNAME=vscode ARG USER_UID=1000 @@ -7,8 +7,9 @@ ARG USER_GID=$USER_UID ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH \ - RUST_VERSION=1.75.0 + RUST_VERSION=1.80.0 +# Install common dependencies RUN set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends \ @@ -18,34 +19,50 @@ RUN set -eux; \ gnupg \ git \ less \ - software-properties-common \ - # Tauri dependencies - libwebkit2gtk-4.0-dev build-essential wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev; \ - # Install openconnect - add-apt-repository ppa:yuezk/globalprotect-openconnect; \ - apt-get update; \ - apt-get install -y openconnect libopenconnect-dev; \ - # Create a non-root user + software-properties-common + +# Create a non-root user +RUN set -eux; \ groupadd --gid $USER_GID $USERNAME; \ useradd --uid $USER_UID --gid $USER_GID -m $USERNAME; \ echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME; \ - chmod 0440 /etc/sudoers.d/$USERNAME; \ - # Install Node.js - mkdir -p /etc/apt/keyrings; \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list; \ - apt-get update; \ - apt-get install -y nodejs; \ - corepack enable; \ - # Install diff-so-fancy - npm install -g diff-so-fancy; \ - # Install Rust + chmod 0440 /etc/sudoers.d/$USERNAME + +# Install Rust +RUN set -eux; \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $RUST_VERSION; \ chown -R $USERNAME:$USERNAME $RUSTUP_HOME $CARGO_HOME; \ rustup --version; \ cargo --version; \ rustc --version +# Install Node.js +RUN set -eux; \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash -; \ + apt-get install -y nodejs; \ + corepack enable; \ + # Install diff-so-fancy + npm install -g diff-so-fancy + +# Install openconnect +RUN set -eux; \ + add-apt-repository ppa:yuezk/globalprotect-openconnect; \ + apt-get update; \ + apt-get install -y openconnect libopenconnect-dev + +# Tauri dependencies +RUN set -eux; \ + apt-get install -y \ + libwebkit2gtk-4.1-dev \ + build-essential \ + curl \ + wget \ + file \ + libxdo-dev \ + libssl-dev \ + libayatana-appindicator3-dev \ + librsvg2-dev + USER $USERNAME # Install Oh My Zsh diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index af438b69..2015a967 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -24,7 +24,8 @@ jobs: - name: Set up matrix id: set-matrix run: | - if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then + # Set the matrix to include arm64 if the ref is a tag or is the dev branch + if [[ "${{ github.ref }}" == "refs/tags/"* || "${{ github.ref }}" == "refs/heads/dev" ]]; then echo 'matrix=[{"runner": "ubuntu-latest", "arch": "amd64"}, {"runner": "arm64", "arch": "arm64"}]' >> $GITHUB_OUTPUT else echo 'matrix=[{"runner": "ubuntu-latest", "arch": "amd64"}]' >> $GITHUB_OUTPUT @@ -34,13 +35,13 @@ jobs: runs-on: ubuntu-latest needs: [setup-matrix] steps: - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - name: Prepare workspace run: rm -rf source && mkdir source - name: Checkout GlobalProtect-openconnect - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GH_PAT }} repository: yuezk/GlobalProtect-openconnect @@ -55,7 +56,7 @@ jobs: fi make tarball - name: Upload tarball - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact-source if-no-files-found: error @@ -79,7 +80,7 @@ jobs: rm -rf build-gp-${{ matrix.package }} mkdir -p build-gp-${{ matrix.package }} - name: Download tarball - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: artifact-source path: build-gp-${{ matrix.package }} @@ -87,18 +88,18 @@ jobs: run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - name: Build ${{ matrix.package }} package in Docker run: | - docker run --rm \ + docker run --pull=always --rm \ -v $(pwd)/build-gp-${{ matrix.package }}:/${{ matrix.package }} \ - yuezk/gpdev:${{ matrix.package }}-builder + yuezk/gpdev:${{ matrix.package }}-builder-tauri2 - name: Install ${{ matrix.package }} package in Docker run: | - docker run --rm \ + docker run --pull=always --rm \ -e GPGUI_INSTALLED=0 \ -v $(pwd)/build-gp-${{ matrix.package }}:/${{ matrix.package }} \ - yuezk/gpdev:${{ matrix.package }}-builder \ + yuezk/gpdev:${{ matrix.package }}-builder-tauri2 \ bash install.sh - name: Upload ${{ matrix.package }} package - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact-gp-${{ matrix.package }}-${{ matrix.os.arch }} if-no-files-found: error @@ -114,20 +115,20 @@ jobs: runs-on: ${{ matrix.os.runner }} name: build-gpgui (${{ matrix.os.arch }}) steps: - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - name: Prepare workspace run: rm -rf gpgui-source && mkdir gpgui-source - name: Checkout GlobalProtect-openconnect - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GH_PAT }} repository: yuezk/GlobalProtect-openconnect ref: ${{ github.ref }} path: gpgui-source/gp - name: Checkout gpgui@${{ github.ref_name }} - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GH_PAT }} repository: yuezk/gpgui @@ -141,15 +142,15 @@ jobs: run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - name: Build gpgui in Docker run: | - docker run --rm -v $(pwd)/gpgui-source:/gpgui yuezk/gpdev:gpgui-builder + docker run --pull=always --rm -v $(pwd)/gpgui-source:/gpgui yuezk/gpdev:gpgui-builder-tauri2 - name: Install gpgui in Docker run: | cd gpgui-source tar -xJf *.bin.tar.xz - docker run --rm -v $(pwd):/gpgui yuezk/gpdev:gpgui-builder \ + docker run --pull=always --rm -v $(pwd):/gpgui yuezk/gpdev:gpgui-builder-tauri2 \ bash -c "cd /gpgui/gpgui_*/ && ./gpgui --version" - name: Upload gpgui - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact-gpgui-${{ matrix.os.arch }} if-no-files-found: error @@ -170,7 +171,7 @@ jobs: run: rm -rf gh-release && mkdir gh-release - name: Checkout GlobalProtect-openconnect - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GH_PAT }} repository: yuezk/GlobalProtect-openconnect @@ -178,7 +179,7 @@ jobs: path: gh-release/gp - name: Download all artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: gh-release/gp/.build/artifacts diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index f24a6f3c..024d6d13 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -47,9 +47,9 @@ jobs: if: ${{ inputs.ppa }} runs-on: ubuntu-latest steps: - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - name: Prepare workspace run: rm -rf publish-ppa && mkdir publish-ppa - name: Download ${{ inputs.tag }} source code @@ -71,12 +71,20 @@ jobs: # Prepare the debian directory with custom files mkdir -p .build/debian - sed 's/@RUST@/rust-all(>=1.70)/g' packaging/deb/control.in > .build/debian/control - sed 's/@OFFLINE@/1/g' packaging/deb/rules.in > .build/debian/rules - cp packaging/deb/postrm .build/debian/postrm + + cp -v packaging/deb/control.in .build/debian/control + cp -v packaging/deb/rules.in .build/debian/rules + cp -v packaging/deb/compat .build/debian/compat + cp -v packaging/deb/postrm .build/debian/postrm + + sed -i "s/@RUST@/cargo-1.80/g" .build/debian/control + + sed -i "s/@OFFLINE@/1/g" .build/debian/rules + sed -i "s/@BUILD_GUI@/1/g" .build/deb/debian/rules + sed -i "s/@RUST_VERSION@/1.80/g" .build/deb/debian/rules - name: Publish to PPA - uses: yuezk/publish-ppa-package@v2 + uses: yuezk/publish-ppa-package@gp with: repository: "yuezk/globalprotect-openconnect" gpg_private_key: ${{ secrets.PPA_GPG_PRIVATE_KEY }} @@ -85,5 +93,7 @@ jobs: debian_dir: publish-ppa/globalprotect-openconnect-*/.build/debian deb_email: "k3vinyue@gmail.com" deb_fullname: "Kevin Yue" - extra_ppa: "yuezk/globalprotect-openconnect liushuyu-011/rust-bpo-1.75" + extra_ppa: "yuezk/globalprotect-openconnect liushuyu-011/rust-updates-1.80" + # Ubuntu 18.04 and 20.04 are excluded because tauri2 no longer supports them + excluded_series: "bionic focal" revision: ${{ inputs.revision }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index db288287..ddf72d76 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -109,20 +109,20 @@ jobs: run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - name: Build ${{ matrix.package }} package in Docker run: | - docker run --rm \ + docker run --pull=always --rm \ -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} \ -e INCLUDE_GUI=1 \ yuezk/gpdev:${{ matrix.package }}-builder-tauri2 - name: Install ${{ matrix.package }} package in Docker run: | - docker run --rm \ + docker run --pull=always --rm \ -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} \ yuezk/gpdev:${{ matrix.package }}-builder-tauri2 \ bash install.sh - name: Upload ${{ matrix.package }} package - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact-${{ matrix.os }}-${{ matrix.package }} if-no-files-found: error @@ -138,7 +138,7 @@ jobs: - name: Prepare workspace run: rm -rf gh-release && mkdir gh-release - name: Download artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: gh-release - name: Update release diff --git a/.gitignore b/.gitignore index e2741a91..2caa3e76 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ .cargo .build SNAPSHOT + +# Tauri generated files +gen diff --git a/Cargo.lock b/Cargo.lock index af0bca9a..851a9182 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,18 +10,18 @@ checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -35,9 +35,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -74,116 +74,148 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" + +[[package]] +name = "ascii" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "async-trait" -version = "0.1.77" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "atk" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" dependencies = [ "atk-sys", - "bitflags 1.3.2", "glib", "libc", ] [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auth" +version = "2.4.0" +dependencies = [ + "anyhow", + "gpapi", + "html-escape", + "log", + "open", + "regex", + "tauri", + "tiny_http", + "tokio", + "tokio-util", + "uuid", + "webbrowser", + "webkit2gtk", + "which", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.3" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09dbe0e490df5da9d69b36dca48a76635288a82f92eca90024883a56202026d" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", - "base64 0.21.5", + "base64 0.22.1", "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", - "hyper 1.1.0", + "hyper", "hyper-util", - "itoa 1.0.10", + "itoa 1.0.14", "matchit", "memchr", "mime", @@ -206,15 +238,15 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e87c8503f93e6d144ee5690907ba22db7ba79ab001a932ab99034f0fe836b3df" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -227,30 +259,24 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" @@ -269,6 +295,9 @@ name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] [[package]] name = "block" @@ -296,9 +325,9 @@ dependencies = [ [[package]] name = "brotli" -version = "3.4.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -307,35 +336,25 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.1" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -345,54 +364,87 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" dependencies = [ "serde", ] [[package]] name = "cairo-rs" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "cairo-sys-rs", "glib", "libc", - "thiserror", + "once_cell", + "thiserror 1.0.69", ] [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", - "system-deps 6.2.0", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] name = "cargo_toml" -version = "0.15.3" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.7.8", + "toml 0.8.2", ] [[package]] name = "cc" -version = "1.0.83" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" dependencies = [ - "libc", + "shlex", ] [[package]] @@ -414,18 +466,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-expr" -version = "0.15.6" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", "target-lexicon", @@ -437,6 +480,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chacha20" version = "0.9.1" @@ -463,17 +512,23 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] +[[package]] +name = "chunked_transfer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" + [[package]] name = "cipher" version = "0.4.4" @@ -487,9 +542,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.13" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -497,9 +552,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.12" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -509,69 +564,63 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cocoa" -version = "0.24.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", "cocoa-foundation", - "core-foundation 0.9.4", + "core-foundation 0.10.0", "core-graphics", - "foreign-types", + "foreign-types 0.5.0", "libc", "objc", ] [[package]] name = "cocoa-foundation" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", - "core-foundation 0.9.4", + "core-foundation 0.10.0", "core-graphics-types", "libc", "objc", ] -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -579,7 +628,7 @@ dependencies = [ [[package]] name = "common" -version = "2.3.9" +version = "2.4.0" dependencies = [ "is_executable", ] @@ -604,6 +653,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -632,86 +691,79 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.22.3" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", + "bitflags 2.6.0", + "core-foundation 0.10.0", "core-graphics-types", - "foreign-types", + "foreign-types 0.5.0", "libc", ] [[package]] name = "core-graphics-types" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", + "bitflags 2.6.0", + "core-foundation 0.10.0", "libc", ] [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.10" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.17" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.18" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" -dependencies = [ - "cfg-if", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" @@ -722,7 +774,7 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", + "mio 0.8.11", "parking_lot", "signal-hook", "signal-hook-mio", @@ -773,24 +825,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "ctor" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "darling" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -798,34 +850,34 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "data-encoding" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "deranged" @@ -839,15 +891,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.91", ] [[package]] @@ -870,13 +922,12 @@ dependencies = [ ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "cfg-if", - "dirs-sys-next", + "dirs-sys", ] [[package]] @@ -892,21 +943,44 @@ dependencies = [ ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dlopen2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" dependencies = [ + "dlopen2_derive", "libc", - "redox_users", + "once_cell", "winapi", ] [[package]] -name = "dispatch" -version = "0.2.0" +name = "dlopen2_derive" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] [[package]] name = "dns-lookup" @@ -921,12 +995,12 @@ dependencies = [ ] [[package]] -name = "document-features" -version = "0.2.8" +name = "dpi" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" dependencies = [ - "litrs", + "serde", ] [[package]] @@ -937,43 +1011,43 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dtoa-short" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" dependencies = [ "dtoa", ] [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "either" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "embed-resource" -version = "2.4.1" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bde55e389bea6a966bd467ad1ad7da0ae14546a5bc794d16d1e55e7fca44881" +checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379" dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.8.8", + "toml 0.8.2", "vswhom", - "winreg 0.51.0", + "winreg", ] [[package]] @@ -984,24 +1058,40 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_home" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + [[package]] name = "env_logger" -version = "0.10.1" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", + "env_filter", "humantime", - "is-terminal", "log", - "regex", - "termcolor", ] [[package]] @@ -1010,27 +1100,37 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "fastrand" -version = "2.0.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fdeflate" -version = "0.3.3" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209098dd6dfc4445aa6111f0e98653ac323eaa4dfd212c9ca3931bf9955c31bd" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] @@ -1047,21 +1147,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.52.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1079,7 +1179,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", ] [[package]] @@ -1088,6 +1209,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -1109,9 +1236,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1124,9 +1251,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1134,15 +1261,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1151,38 +1278,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1197,21 +1324,29 @@ dependencies = [ ] [[package]] -name = "fxhash" -version = "0.2.1" +name = "fuzzy-matcher" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" dependencies = [ - "byteorder", + "thread_local", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", ] [[package]] name = "gdk" -version = "0.15.4" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" dependencies = [ - "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", "gdk-sys", @@ -1223,35 +1358,35 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.15.11" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", "glib", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1261,47 +1396,48 @@ dependencies = [ "libc", "pango-sys", "pkg-config", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gdkwayland-sys" -version = "0.15.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" dependencies = [ "gdk-sys", "glib-sys", "gobject-sys", "libc", "pkg-config", - "system-deps 6.2.0", + "system-deps", ] [[package]] -name = "gdkx11-sys" -version = "0.15.1" +name = "gdkx11" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" dependencies = [ - "gdk-sys", - "glib-sys", + "gdk", + "gdkx11-sys", + "gio", + "glib", "libc", - "system-deps 6.2.0", "x11", ] [[package]] -name = "generator" -version = "0.7.5" +name = "gdkx11-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" dependencies = [ - "cc", + "gdk-sys", + "glib-sys", "libc", - "log", - "rustversion", - "windows 0.48.0", + "system-deps", + "x11", ] [[package]] @@ -1327,9 +1463,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1338,83 +1474,87 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "gio" -version = "0.15.12" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags 1.3.2", "futures-channel", "futures-core", "futures-io", + "futures-util", "gio-sys", "glib", "libc", "once_cell", - "thiserror", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", ] [[package]] name = "gio-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", "winapi", ] [[package]] name = "glib" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "futures-channel", "futures-core", "futures-executor", "futures-task", + "futures-util", + "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", + "memchr", "once_cell", "smallvec", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "glib-macros" -version = "0.15.13" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "anyhow", "heck 0.4.1", - "proc-macro-crate", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.91", ] [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] @@ -1423,42 +1563,28 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", -] - [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gpapi" -version = "2.3.9" +version = "2.4.0" dependencies = [ "anyhow", - "base64 0.21.5", + "base64 0.22.1", "chacha20poly1305", "clap", "dns-lookup", "log", "md5", - "open", "openssl", "pem", "redact-engine", @@ -1470,43 +1596,37 @@ dependencies = [ "serde_urlencoded", "sha256", "specta", - "specta-macros", "tauri", "tempfile", - "thiserror", + "thiserror 2.0.9", "tokio", "url", "urlencoding", "uzers", - "webbrowser", - "which", "whoami", ] [[package]] name = "gpauth" -version = "2.3.9" +version = "2.4.0" dependencies = [ "anyhow", + "auth", "clap", "compile-time", "env_logger", "gpapi", - "html-escape", "log", - "regex", "serde_json", "tauri", "tauri-build", "tempfile", "tokio", - "tokio-util", - "webkit2gtk", ] [[package]] name = "gpclient" -version = "2.3.9" +version = "2.4.0" dependencies = [ "anyhow", "clap", @@ -1528,7 +1648,7 @@ dependencies = [ [[package]] name = "gpgui-helper" -version = "2.3.9" +version = "2.4.0" dependencies = [ "anyhow", "clap", @@ -1546,7 +1666,7 @@ dependencies = [ [[package]] name = "gpservice" -version = "2.3.9" +version = "2.4.0" dependencies = [ "anyhow", "axum", @@ -1567,12 +1687,11 @@ dependencies = [ [[package]] name = "gtk" -version = "0.15.5" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" dependencies = [ "atk", - "bitflags 1.3.2", "cairo-rs", "field-offset", "futures-channel", @@ -1583,16 +1702,15 @@ dependencies = [ "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1603,55 +1721,35 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gtk3-macros" -version = "0.15.6" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" dependencies = [ - "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.91", ] [[package]] name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.11", - "indexmap 2.1.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", - "http 1.0.0", - "indexmap 2.1.0", + "http", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1666,18 +1764,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.3.3" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -1686,10 +1775,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.3.3" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" @@ -1731,71 +1820,43 @@ dependencies = [ [[package]] name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.10", -] - -[[package]] -name = "http" -version = "1.0.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", - "itoa 1.0.10", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.11", - "pin-project-lite", + "itoa 1.0.14", ] [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.0.0", + "http", ] [[package]] name = "http-body-util" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "pin-project-lite", ] -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1811,90 +1872,89 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "h2 0.3.26", - "http 0.2.11", - "http-body 0.4.6", + "h2", + "http", + "http-body", "httparse", "httpdate", - "itoa 1.0.10", + "itoa 1.0.14", "pin-project-lite", - "socket2", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] -name = "hyper" -version = "1.1.0" +name = "hyper-rustls" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ - "bytes", - "futures-channel", "futures-util", - "h2 0.4.4", - "http 1.0.0", - "http-body 1.0.0", - "httparse", - "httpdate", - "itoa 1.0.10", - "pin-project-lite", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", "tokio", + "tokio-rustls", + "tower-service", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper 0.14.28", + "http-body-util", + "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.2" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "hyper 1.1.0", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", + "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -1917,48 +1977,148 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] [[package]] -name = "idna" -version = "0.5.0" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "ignore" -version = "0.4.22" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "crossbeam-deque", - "globset", - "log", - "memchr", - "regex-automata 0.4.3", - "same-file", - "walkdir", - "winapi-util", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "image" -version = "0.24.7" +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1974,26 +2134,20 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.15.2", "serde", ] -[[package]] -name = "indoc" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" - [[package]] name = "infer" -version = "0.13.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" +checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] @@ -2009,34 +2163,35 @@ dependencies = [ [[package]] name = "inquire" -version = "0.6.2" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" +checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "crossterm", "dyn-clone", - "lazy_static", + "fuzzy-matcher", + "fxhash", "newline-converter", - "thiserror", + "once_cell", "unicode-segmentation", "unicode-width", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-docker" @@ -2047,17 +2202,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "is-terminal" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" -dependencies = [ - "hermit-abi", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "is-wsl" version = "0.4.0" @@ -2070,21 +2214,18 @@ dependencies = [ [[package]] name = "is_executable" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8" +checksum = "d4a1b5bad6f9072935961dfbf1cced2f3d129963d091b6f69f007fe04e758ae2" dependencies = [ "winapi", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" @@ -2094,15 +2235,15 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "javascriptcore-rs" -version = "0.16.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ "bitflags 1.3.2", "glib", @@ -2111,28 +2252,14 @@ dependencies = [ [[package]] name = "javascriptcore-rs-sys" -version = "0.4.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", + "system-deps", ] [[package]] @@ -2146,7 +2273,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -2159,23 +2286,45 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.66" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "json-patch" -version = "1.2.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" dependencies = [ + "jsonptr", "serde", "serde_json", - "thiserror", - "treediff", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.6.0", + "serde", + "unicode-segmentation", ] [[package]] @@ -2193,53 +2342,78 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] -name = "libredox" -version = "0.0.1" +name = "libloading" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall", + "cfg-if", + "winapi", ] [[package]] -name = "line-wrap" -version = "0.1.1" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "safemem", + "bitflags 2.6.0", + "libc", + "redox_syscall", ] [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] -name = "litrs" -version = "0.4.1" +name = "litemap" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -2247,24 +2421,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "loom" -version = "0.5.6" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lzma-sys" @@ -2306,15 +2465,6 @@ dependencies = [ "tendril", ] -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "matches" version = "0.1.10" @@ -2335,15 +2485,15 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -2356,11 +2506,11 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", "simd-adler32", ] @@ -2376,13 +2526,43 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "muda" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 1.0.69", + "windows-sys 0.59.0", +] + [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2396,15 +2576,17 @@ dependencies = [ [[package]] name = "ndk" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "jni-sys", + "log", "ndk-sys", "num_enum", - "thiserror", + "raw-window-handle", + "thiserror 1.0.69", ] [[package]] @@ -2415,24 +2597,24 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.3.0" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] [[package]] name = "new_debug_unreachable" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "newline-converter" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" +checksum = "47b6b097ecb1cbfed438542d16e84fd7ad9b0c76c8a65b7f9039212a3d14dc7f" dependencies = [ "unicode-segmentation", ] @@ -2452,81 +2634,40 @@ dependencies = [ "winapi", ] -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.91", ] [[package]] @@ -2536,7 +2677,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] [[package]] @@ -2544,6 +2684,9 @@ name = "objc-sys" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" +dependencies = [ + "cc", +] [[package]] name = "objc2" @@ -2555,6 +2698,82 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", +] + [[package]] name = "objc2-encode" version = "4.0.3" @@ -2574,49 +2793,136 @@ dependencies = [ ] [[package]] -name = "objc_exception" -version = "0.1.2" +name = "objc2-link-presentation" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "cc", + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] -name = "objc_id" -version = "0.1.1" +name = "objc2-metal" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "objc", + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.0.1" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90878fb664448b54c4e592455ad02831e23a3f7e157374a8b95654731aac7349" +checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c" dependencies = [ "is-wsl", "libc", @@ -2625,7 +2931,7 @@ dependencies = [ [[package]] name = "openconnect" -version = "2.3.9" +version = "2.4.0" dependencies = [ "cc", "common", @@ -2634,13 +2940,13 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -2655,7 +2961,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] @@ -2664,24 +2970,14 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-src" -version = "300.2.1+3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3" -dependencies = [ - "cc", -] - [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", - "openssl-src", "pkg-config", "vcpkg", ] @@ -2692,19 +2988,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "pango" -version = "0.15.10" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags 1.3.2", + "gio", "glib", "libc", "once_cell", @@ -2713,21 +3003,21 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2735,28 +3025,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pem" @@ -2878,7 +3162,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] @@ -2908,31 +3192,11 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -2942,19 +3206,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plist" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64 0.21.5", - "indexmap 2.1.0", - "line-wrap", + "base64 0.22.1", + "indexmap 2.7.0", "quick-xml", "serde", "time", @@ -2962,9 +3225,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.10" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -2992,9 +3255,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -3012,6 +3278,16 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3044,27 +3320,27 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -3129,7 +3405,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", ] [[package]] @@ -3152,15 +3428,15 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -3168,9 +3444,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -3192,84 +3468,72 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", - "http 0.2.11", - "http-body 0.4.6", - "hyper 0.14.28", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -3278,9 +3542,11 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -3291,63 +3557,108 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg 0.50.0", + "windows-registry", ] [[package]] -name = "roxmltree" -version = "0.18.1" +name = "ring" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ - "xmlparser", + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", ] +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] -name = "rustversion" -version = "1.0.14" +name = "rustls" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] [[package]] -name = "ryu" -version = "1.0.16" +name = "rustls-pemfile" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] [[package]] -name = "safemem" -version = "0.3.3" +name = "rustls-pki-types" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -3360,18 +3671,39 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] -name = "scoped-tls" -version = "1.0.1" +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.91", +] [[package]] name = "scopeguard" @@ -3381,11 +3713,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -3394,9 +3726,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" dependencies = [ "core-foundation-sys", "libc", @@ -3424,51 +3756,74 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.195" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-untagged" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", ] [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ - "itoa 1.0.10", + "itoa 1.0.14", + "memchr", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ - "itoa 1.0.10", + "itoa 1.0.14", "serde", ] @@ -3484,20 +3839,20 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -3509,23 +3864,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.10", + "itoa 1.0.14", "ryu", "serde", ] [[package]] name = "serde_with" -version = "3.4.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.1.0", + "indexmap 2.7.0", "serde", + "serde_derive", "serde_json", "serde_with_macros", "time", @@ -3533,14 +3889,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.4.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] @@ -3611,13 +3967,10 @@ dependencies = [ ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" @@ -3631,20 +3984,20 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", - "mio", + "mio 0.8.11", "signal-hook", ] [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -3672,92 +4025,101 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "soup2" -version = "0.2.1" +name = "softbuffer" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +dependencies = [ + "bytemuck", + "cfg_aliases", + "core-graphics", + "foreign-types 0.5.0", + "js-sys", + "log", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "wasm-bindgen", + "web-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" dependencies = [ - "bitflags 1.3.2", + "futures-channel", "gio", "glib", "libc", - "once_cell", - "soup2-sys", + "soup3-sys", ] [[package]] -name = "soup2-sys" -version = "0.2.0" +name = "soup3-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ - "bitflags 1.3.2", "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] name = "specta" -version = "2.0.0-rc.1" +version = "2.0.0-rc.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899e1de0122914c5573ca81ced566c5aaeebf2c363595ee3dfdaac58f33ea351" +checksum = "4ccbb212565d2dc177bc15ecb7b039d66c4490da892436a4eee5b394d620c9bc" dependencies = [ - "document-features", - "indoc", - "once_cell", - "paste", - "serde", - "serde_json", "specta-macros", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "specta-macros" -version = "2.0.0-rc.1" +version = "2.0.0-rc.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0de71d47f9076754480433ca4fdcbde756312b56e7991ac17f2cb2435897ed" +checksum = "68999d29816965eb9e5201f60aec02a76512139811661a7e8e653abc810b8f72" dependencies = [ "Inflector", - "itertools", "proc-macro2", "quote", - "syn 1.0.109", - "termcolor", + "syn 2.0.91", ] [[package]] -name = "stable_deref_trait" -version = "1.2.0" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] -name = "state" -version = "0.5.3" +name = "stable_deref_trait" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "string_cache" @@ -3787,15 +4149,26 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] [[package]] name = "syn" @@ -3810,9 +4183,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" dependencies = [ "proc-macro2", "quote", @@ -3821,41 +4194,54 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] [[package]] name = "sysinfo" -version = "0.29.11" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666" +checksum = "948512566b1895f93b1592c7574baeb2de842f224f2aab158799ecadb8ebbb46" dependencies = [ - "cfg-if", "core-foundation-sys", "libc", + "memchr", "ntapi", - "once_cell", "rayon", - "winapi", + "windows 0.57.0", ] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -3863,56 +4249,36 @@ dependencies = [ [[package]] name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.11", - "version-compare 0.0.11", -] - -[[package]] -name = "system-deps" -version = "6.2.0" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr 0.15.6", - "heck 0.4.1", + "cfg-expr", + "heck 0.5.0", "pkg-config", - "toml 0.8.8", - "version-compare 0.1.1", + "toml 0.8.2", + "version-compare", ] [[package]] name = "tao" -version = "0.16.5" +version = "0.30.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f5aefd6be4cd3ad3f047442242fd9f57cbfb3e565379f66b5e14749364fa4f" +checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da" dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "cc", + "bitflags 2.6.0", "cocoa", - "core-foundation 0.9.4", + "core-foundation 0.10.0", "core-graphics", "crossbeam-channel", "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", + "dlopen2", + "dpi", "gdkwayland-sys", "gdkx11-sys", - "gio", - "glib", - "glib-sys", "gtk", - "image", "instant", - "jni 0.20.0", + "jni", "lazy_static", "libc", "log", @@ -3922,34 +4288,33 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "png", "raw-window-handle", "scopeguard", - "serde", "tao-macros", "unicode-segmentation", - "uuid", - "windows 0.39.0", - "windows-implement", + "url", + "windows 0.58.0", + "windows-core 0.58.0", + "windows-version", "x11-dl", ] [[package]] name = "tao-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.91", ] [[package]] name = "tar" -version = "0.4.40" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -3958,83 +4323,89 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.13" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "1.5.4" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd27c04b9543776a972c86ccf70660b517ecabbeced9fb58d8b961a13ad129af" +checksum = "e545de0a2dfe296fa67db208266cd397c5a55ae782da77973ef4c4fac90e9f2c" dependencies = [ "anyhow", "bytes", - "cocoa", - "dirs-next", + "dirs", + "dunce", "embed_plist", - "encoding_rs", - "flate2", "futures-util", - "glib", + "getrandom 0.2.15", "glob", "gtk", - "heck 0.4.1", - "http 0.2.11", - "ignore", - "objc", - "once_cell", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", - "rand 0.8.5", + "plist", "raw-window-handle", "reqwest", - "semver", "serde", "serde_json", "serde_repr", "serialize-to-javascript", - "state", - "tar", + "swift-rs", + "tauri-build", "tauri-macros", "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "tempfile", - "thiserror", + "thiserror 2.0.9", "tokio", + "tray-icon", "url", - "uuid", + "urlpattern", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "window-vibrancy", + "windows 0.58.0", ] [[package]] name = "tauri-build" -version = "1.5.1" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9914a4715e0b75d9f387a285c7e26b5bbfeb1249ad9f842675a82481565c532" +checksum = "7bd2a4bcfaf5fb9f4be72520eefcb61ae565038f8ccba2a497d8c28f463b8c01" dependencies = [ "anyhow", "cargo_toml", - "dirs-next", - "heck 0.4.1", + "dirs", + "glob", + "heck 0.5.0", "json-patch", + "schemars", "semver", "serde", "serde_json", "tauri-utils", "tauri-winres", + "toml 0.8.2", "walkdir", ] [[package]] name = "tauri-codegen" -version = "1.4.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1554c5857f65dbc377cefb6b97c8ac77b1cb2a90d30d3448114d5d6b48a77fc" +checksum = "bf79faeecf301d3e969b1fae977039edb77a4c1f25cc0a961be298b54bff97cf" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "brotli", "ico", "json-patch", @@ -4046,80 +4417,87 @@ dependencies = [ "serde", "serde_json", "sha2", + "syn 2.0.91", "tauri-utils", - "thiserror", + "thiserror 2.0.9", "time", + "url", "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.4.3" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277abf361a3a6993ec16bcbb179de0d6518009b851090a01adfea12ac89fa875" +checksum = "c52027c8c5afb83166dacddc092ee8fff50772f9646d461d8c33ee887e447a03" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.91", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-runtime" -version = "0.14.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2d0652aa2891ff3e9caa2401405257ea29ab8372cce01f186a5825f1bd0e76" +checksum = "cce18d43f80d4aba3aa8a0c953bbe835f3d0f2370aca75e8dbb14bd4bab27958" dependencies = [ + "dpi", "gtk", - "http 0.2.11", - "http-range", - "rand 0.8.5", + "http", + "jni", "raw-window-handle", "serde", "serde_json", "tauri-utils", - "thiserror", + "thiserror 2.0.9", "url", - "uuid", - "webview2-com", - "windows 0.39.0", + "windows 0.58.0", ] [[package]] name = "tauri-runtime-wry" -version = "0.14.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cae61fbc731f690a4899681c9052dde6d05b159b44563ace8186fc1bfb7d158" +checksum = "9f442a38863e10129ffe2cec7bd09c2dcf8a098a3a27801a476a304d5bb991d2" dependencies = [ - "cocoa", "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", - "rand 0.8.5", "raw-window-handle", + "softbuffer", + "tao", "tauri-runtime", "tauri-utils", - "uuid", + "url", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "windows 0.58.0", "wry", ] [[package]] name = "tauri-utils" -version = "1.5.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece74810b1d3d44f29f732a7ae09a63183d63949bbdd59c61f8ed2a1b70150db" +checksum = "9271a88f99b4adea0dc71d0baca4505475a0bbd139fb135f62958721aaa8fe54" dependencies = [ "brotli", + "cargo_metadata", "ctor", "dunce", "glob", - "heck 0.4.1", "html5ever", + "http", "infer", "json-patch", "kuchikiki", @@ -4128,14 +4506,20 @@ dependencies = [ "phf 0.11.2", "proc-macro2", "quote", + "regex", + "schemars", "semver", "serde", + "serde-untagged", "serde_json", "serde_with", - "thiserror", + "swift-rs", + "thiserror 2.0.9", + "toml 0.8.2", "url", + "urlpattern", + "uuid", "walkdir", - "windows-version", ] [[package]] @@ -4150,15 +4534,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.9.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4173,45 +4557,56 @@ dependencies = [ ] [[package]] -name = "termcolor" -version = "1.4.0" +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "winapi-util", + "thiserror-impl 1.0.69", ] [[package]] -name = "thin-slice" -version = "0.1.1" +name = "thiserror" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl 2.0.9", +] [[package]] -name = "thiserror" -version = "1.0.56" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.91", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -4219,12 +4614,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", - "itoa 1.0.10", + "itoa 1.0.14", "num-conv", "powerfmt", "serde", @@ -4240,57 +4635,63 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] [[package]] -name = "tinyvec" -version = "1.6.0" +name = "tiny_http" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" dependencies = [ - "tinyvec_macros", + "ascii", + "chunked_transfer", + "httpdate", + "log", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] [[package]] name = "tokio" -version = "1.36.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.3", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", ] [[package]] @@ -4303,11 +4704,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-tungstenite" -version = "0.21.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", @@ -4317,25 +4728,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", ] [[package]] @@ -4352,21 +4753,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] @@ -4377,7 +4778,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -4386,11 +4787,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -4399,14 +4800,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -4415,85 +4816,55 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ - "log", "once_cell", - "tracing-core", ] [[package]] -name = "tracing-subscriber" -version = "0.3.18" +name = "tray-icon" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b" dependencies = [ - "matchers", - "nu-ansi-term", + "core-graphics", + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", + "png", + "serde", + "thiserror 1.0.69", + "windows-sys 0.59.0", ] [[package]] @@ -4504,23 +4875,28 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.21.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.0.0", + "http", "httparse", "log", "rand 0.8.5", "sha1", - "thiserror", - "url", + "thiserror 1.0.69", "utf-8", ] +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -4528,37 +4904,63 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "unicode-bidi" -version = "0.3.14" +name = "unic-char-property" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] [[package]] -name = "unicode-ident" -version = "1.0.12" +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] [[package]] -name = "unicode-normalization" -version = "0.1.22" +name = "unic-ucd-version" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" dependencies = [ - "tinyvec", + "unic-common", ] +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "universal-hash" @@ -4570,11 +4972,17 @@ dependencies = [ "subtle", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -4588,49 +4996,68 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + [[package]] name = "utf-8" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.6.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", + "serde", ] [[package]] name = "uzers" -version = "0.11.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d283dc7e8c901e79e32d077866eaf599156cbf427fffa8289aecc52c5c3f63" +checksum = "4df81ff504e7d82ad53e95ed1ad5b72103c11253f39238bcc0235b90768a97dd" dependencies = [ "libc", "log", ] -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - [[package]] name = "vcpkg" version = "0.2.15" @@ -4639,21 +5066,15 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - -[[package]] -name = "version-compare" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vswhom" @@ -4677,9 +5098,9 @@ dependencies = [ [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -4714,46 +5135,47 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.39" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4761,28 +5183,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.91", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" -version = "0.3.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -4793,9 +5215,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.66" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -4803,14 +5225,14 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5f07fb9bc8de2ddfe6b24a71a75430673fd679e568c48b52716cef1cfae923" +checksum = "ea9fe1ebb156110ff855242c1101df158b822487e4957b0556d9ffce9db0f535" dependencies = [ "block2", "core-foundation 0.10.0", "home", - "jni 0.21.1", + "jni", "log", "ndk-context", "objc2", @@ -4821,9 +5243,9 @@ dependencies = [ [[package]] name = "webkit2gtk" -version = "0.18.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" dependencies = [ "bitflags 1.3.2", "cairo-rs", @@ -4839,20 +5261,18 @@ dependencies = [ "javascriptcore-rs", "libc", "once_cell", - "soup2", + "soup3", "webkit2gtk-sys", ] [[package]] name = "webkit2gtk-sys" -version = "0.18.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" dependencies = [ - "atk-sys", "bitflags 1.3.2", "cairo-sys-rs", - "gdk-pixbuf-sys", "gdk-sys", "gio-sys", "glib-sys", @@ -4860,67 +5280,64 @@ dependencies = [ "gtk-sys", "javascriptcore-rs-sys", "libc", - "pango-sys", "pkg-config", - "soup2-sys", - "system-deps 6.2.0", + "soup3-sys", + "system-deps", ] [[package]] name = "webview2-com" -version = "0.19.1" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.39.0", - "windows-implement", + "windows 0.58.0", + "windows-core 0.58.0", + "windows-implement 0.58.0", + "windows-interface 0.58.0", ] [[package]] name = "webview2-com-macros" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.91", ] [[package]] name = "webview2-com-sys" -version = "0.19.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", + "thiserror 1.0.69", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "which" -version = "6.0.2" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d9c5ed668ee1f17edb3b627225343d210006a90bb1e3745ce1f30b1fb115075" +checksum = "fb4a9e33648339dc1642b0e36e21b3385e6148e289226f657c809dee59df5028" dependencies = [ "either", - "home", + "env_home", "rustix", "winsafe", ] [[package]] name = "whoami" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ "redox_syscall", "wasite", @@ -4945,11 +5362,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -4959,36 +5376,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.39.0" +name = "window-vibrancy" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" dependencies = [ - "windows-implement", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", ] [[package]] name = "windows" -version = "0.48.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" dependencies = [ - "windows-targets 0.48.5", + "windows-core 0.57.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows-bindgen" -version = "0.39.0" +name = "windows" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-metadata", - "windows-tokens", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -4997,24 +5415,116 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-implement" -version = "0.39.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ - "syn 1.0.109", - "windows-tokens", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] -name = "windows-metadata" -version = "0.39.0" +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] [[package]] name = "windows-sys" @@ -5040,7 +5550,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -5075,32 +5594,27 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - [[package]] name = "windows-version" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", ] [[package]] @@ -5117,15 +5631,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -5141,15 +5649,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -5165,15 +5667,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_i686_msvc" -version = "0.39.0" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -5189,15 +5691,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -5213,9 +5709,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -5231,15 +5727,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -5255,34 +5745,24 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.33" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7520bbdec7211caa7c4e682eb1fbe07abe20cee6756b6e00f537c82c11816aa" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "winreg" -version = "0.51.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if", "windows-sys 0.48.0", @@ -5294,42 +5774,59 @@ version = "0.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "wry" -version = "0.24.7" +version = "0.47.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad85d0e067359e409fcb88903c3eac817c392e5d638258abfb3da5ad8ba6fc4" +checksum = "61ce51277d65170f6379d8cda935c80e3c2d1f0ff712a123c8bddb11b31a4b73" dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", + "base64 0.22.1", + "block2", + "cookie", "crossbeam-channel", + "dpi", "dunce", - "gdk", - "gio", - "glib", + "gdkx11", "gtk", "html5ever", - "http 0.2.11", + "http", + "javascriptcore-rs", + "jni", "kuchikiki", "libc", - "log", - "objc", - "objc_id", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", "once_cell", - "serde", - "serde_json", + "percent-encoding", + "raw-window-handle", "sha2", - "soup2", - "tao", - "thiserror", + "soup3", + "tao-macros", + "thiserror 1.0.69", "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.39.0", - "windows-implement", + "windows 0.58.0", + "windows-core 0.58.0", + "windows-version", + "x11-dl", ] [[package]] @@ -5355,21 +5852,15 @@ dependencies = [ [[package]] name = "xattr" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914566e6413e7fa959cc394fb30e563ba80f3541fbd40816d4c05a0fc3f2a0f1" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys", "rustix", ] -[[package]] -name = "xmlparser" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" - [[package]] name = "xz2" version = "0.1.7" @@ -5379,8 +5870,96 @@ dependencies = [ "lzma-sys", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", + "synstructure", +] + [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] diff --git a/Cargo.toml b/Cargo.toml index 7032f386..6176945d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,8 +4,8 @@ resolver = "2" members = ["crates/*", "apps/gpclient", "apps/gpservice", "apps/gpauth", "apps/gpgui-helper/src-tauri"] [workspace.package] -rust-version = "1.70" -version = "2.3.9" +rust-version = "1.80" +version = "2.4.0" authors = ["Kevin Yue "] homepage = "https://github.com/yuezk/GlobalProtect-openconnect" edition = "2021" @@ -13,22 +13,22 @@ license = "GPL-3.0" [workspace.dependencies] anyhow = "1.0" -base64 = "0.21" -clap = { version = "4.4.2", features = ["derive"] } +base64 = "0.22" +clap = { version = "4", features = ["derive"] } ctrlc = "3.4" directories = "5.0" dns-lookup = "2.0.4" -env_logger = "0.10" +env_logger = "0.11" is_executable = "1.0" log = "0.4" regex = "1" -reqwest = { version = "0.11", features = ["native-tls-vendored", "json"] } +reqwest = { version = "0.12", features = ["native-tls", "json"] } openssl = "0.10" pem = "3" -roxmltree = "0.18" +roxmltree = "0.20" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -sysinfo = "0.29" +sysinfo = "0.33" tempfile = "3.8" tokio = { version = "1", features = ["full"] } tokio-util = "0.7" @@ -37,22 +37,19 @@ urlencoding = "2.1.3" axum = "0.7" futures = "0.3" futures-util = "0.3" -tokio-tungstenite = "0.20.1" -uzers = "0.11" +uzers = "0.12" whoami = "1" -thiserror = "1" +thiserror = "2" redact-engine = "0.1" compile-time = "0.2" serde_urlencoded = "0.7" md5="0.7" sha256="1" -which="6" +which="7" # Tauri dependencies -tauri = { version = "1.5" } -specta = "=2.0.0-rc.1" -specta-macros = "=2.0.0-rc.1" -rspc = { version = "1.0.0-rc.5", features = ["tauri"] } +tauri = { version = "2" } +specta = "=2.0.0-rc.20" [profile.release] opt-level = 'z' # Optimize for size diff --git a/Makefile b/Makefile index cd7593d1..ac1fe008 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ OFFLINE ?= 0 BUILD_FE ?= 1 INCLUDE_GUI ?= 0 CARGO ?= cargo +RUST_VERSION = 1.80 VERSION = $(shell $(CARGO) metadata --no-deps --format-version 1 | jq -r '.packages[0].version') REVISION ?= 1 @@ -13,6 +14,9 @@ PKG = $(PKG_NAME)-$(VERSION) SERIES ?= $(shell lsb_release -cs) PUBLISH ?= 0 +# Indicates whether to build the GUI components +BUILD_GUI ?= 1 + export DEBEMAIL = k3vinyue@gmail.com export DEBFULLNAME = Kevin Yue export SNAPSHOT = $(shell test -f SNAPSHOT && echo "true" || echo "false") @@ -42,7 +46,7 @@ clean-tarball: # Create a tarball, include the cargo dependencies if OFFLINE is set to 1 tarball: clean-tarball - if [ $(BUILD_FE) -eq 1 ]; then \ + if [ $(BUILD_GUI) -eq 1 ] && [ $(BUILD_FE) -eq 1 ]; then \ echo "Building frontend..."; \ cd apps/gpgui-helper && pnpm install && pnpm build; \ fi @@ -80,13 +84,13 @@ build: download-gui build-fe build-rs # Install and build the frontend # If OFFLINE is set to 1, skip it build-fe: - if [ $(OFFLINE) -eq 1 ] || [ $(BUILD_FE) -eq 0 ]; then \ - echo "Skipping frontend build (OFFLINE=1 or BUILD_FE=0)"; \ + if [ $(BUILD_GUI) -eq 0 ] || [ $(OFFLINE) -eq 1 ] || [ $(BUILD_FE) -eq 0 ]; then \ + echo "Skipping frontend build (BUILD_GUI=0 or OFFLINE=1 or BUILD_FE=0)"; \ else \ cd apps/gpgui-helper && pnpm install && pnpm build; \ fi - if [ ! -d apps/gpgui-helper/dist ]; then \ + if [ $(BUILD_GUI) -eq 1 ] && [ ! -d apps/gpgui-helper/dist ]; then \ echo "Error: frontend build failed"; \ exit 1; \ fi @@ -96,8 +100,13 @@ build-rs: tar -xJf vendor.tar.xz; \ fi - $(CARGO) build $(CARGO_BUILD_ARGS) -p gpclient -p gpservice -p gpauth - $(CARGO) build $(CARGO_BUILD_ARGS) -p gpgui-helper --features "tauri/custom-protocol" + # Only build the GUI components if BUILD_GUI is set to 1 + if [ $(BUILD_GUI) -eq 1 ]; then \ + $(CARGO) build $(CARGO_BUILD_ARGS) -p gpclient -p gpservice -p gpauth; \ + $(CARGO) build $(CARGO_BUILD_ARGS) -p gpgui-helper --features "tauri/custom-protocol"; \ + else \ + $(CARGO) build $(CARGO_BUILD_ARGS) -p gpclient -p gpservice -p gpauth --no-default-features; \ + fi clean: $(CARGO) clean @@ -111,7 +120,11 @@ install: install -Dm755 target/release/gpclient $(DESTDIR)/usr/bin/gpclient install -Dm755 target/release/gpauth $(DESTDIR)/usr/bin/gpauth install -Dm755 target/release/gpservice $(DESTDIR)/usr/bin/gpservice - install -Dm755 target/release/gpgui-helper $(DESTDIR)/usr/bin/gpgui-helper + + # Install the GUI components if BUILD_GUI is set to 1 + if [ $(BUILD_GUI) -eq 1 ]; then \ + install -Dm755 target/release/gpgui-helper $(DESTDIR)/usr/bin/gpgui-helper; \ + fi if [ -f .build/gpgui/gpgui_*/gpgui ]; then \ install -Dm755 .build/gpgui/gpgui_*/gpgui $(DESTDIR)/usr/bin/gpgui; \ @@ -154,13 +167,25 @@ init-debian: clean-debian tarball cp -f packaging/deb/control.in .build/deb/$(PKG)/debian/control cp -f packaging/deb/rules.in .build/deb/$(PKG)/debian/rules cp -f packaging/deb/postrm .build/deb/$(PKG)/debian/postrm + cp -f packaging/deb/compat .build/deb/$(PKG)/debian/compat sed -i "s/@OFFLINE@/$(OFFLINE)/g" .build/deb/$(PKG)/debian/rules + sed -i "s/@BUILD_GUI@/$(BUILD_GUI)/g" .build/deb/$(PKG)/debian/rules + sed -i "s/@RUST_VERSION@/$(RUST_VERSION)/g" .build/deb/$(PKG)/debian/rules + + # Remove the GUI dependencies if BUILD_GUI is set to 0 + if [ $(BUILD_GUI) -eq 0 ]; then \ + sed -i "/libxml2/d" .build/deb/$(PKG)/debian/control; \ + sed -i "/libsecret-1-0/d" .build/deb/$(PKG)/debian/control; \ + sed -i "/libayatana-appindicator3-1/d" .build/deb/$(PKG)/debian/control; \ + sed -i "/gnome-keyring/d" .build/deb/$(PKG)/debian/control; \ + sed -i "/libwebkit2gtk-4.1-dev/d" .build/deb/$(PKG)/debian/control; \ + fi rm -f .build/deb/$(PKG)/debian/changelog deb: init-debian - # Remove the rust build depdency from the control file + # Remove the rust build dependency from the control file sed -i "s/@RUST@//g" .build/deb/$(PKG)/debian/control cd .build/deb/$(PKG) && dch --create --distribution unstable --package $(PKG_NAME) --newversion $(VERSION)-$(REVISION) "Bugfix and improvements." @@ -174,7 +199,7 @@ check-ppa: # Usage: make ppa SERIES=focal OFFLINE=1 PUBLISH=1 ppa: check-ppa init-debian - sed -i "s/@RUST@/rust-all(>=1.70)/g" .build/deb/$(PKG)/debian/control + sed -i "s/@RUST@/cargo-1.80/g" .build/deb/$(PKG)/debian/control $(eval SERIES_VER = $(shell distro-info --series $(SERIES) -r | cut -d' ' -f1)) @echo "Building for $(SERIES) $(SERIES_VER)" diff --git a/README.md b/README.md index 46974449..92c1137b 100644 --- a/README.md +++ b/README.md @@ -70,12 +70,10 @@ The GUI version is also available after you installed it. You can launch it from ### Debian/Ubuntu based distributions -#### Install from PPA (Ubuntu 18.04 and later, except 24.04) +#### Install from PPA (Ubuntu > 18.04) ``` -sudo apt-get install gir1.2-gtk-3.0 gir1.2-webkit2-4.0 sudo add-apt-repository ppa:yuezk/globalprotect-openconnect -sudo apt-get update sudo apt-get install globalprotect-openconnect ``` @@ -83,18 +81,9 @@ sudo apt-get install globalprotect-openconnect > > For Linux Mint, you might need to import the GPG key with: `sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7937C393082992E5D6E4A60453FC26B43838D761` if you encountered an error `gpg: keyserver receive failed: General error`. -#### **Ubuntu 24.04 and later** - -The `libwebkit2gtk-4.0-37` package was [removed](https://bugs.launchpad.net/ubuntu/+source/webkit2gtk/+bug/2061914) from its repo. You can use the [`deb-install.sh`](./scripts/deb-install.sh) script to install the package: - -```bash -curl -o- https://raw.githubusercontent.com/yuezk/GlobalProtect-openconnect/main/scripts/deb-install.sh \ - | bash -s -- 2.3.9 -``` - #### **Ubuntu 18.04** -The latest package is not available in the PPA either, but you still needs to add the `ppa:yuezk/globalprotect-openconnect` repo beforehand to use the required `openconnect` package. Then you can follow the [Install from deb package](#install-from-deb-package) section to install the latest package. +The latest package is not available in the PPA, but you still needs to add the `ppa:yuezk/globalprotect-openconnect` repo beforehand to use the required `openconnect` package. Then you can follow the [Install from deb package](#install-from-deb-package) section to install the latest package. #### Install from deb package @@ -172,8 +161,8 @@ You can also build the client from source, steps are as follows: ### Prerequisites -- [Install Rust 1.75 or later](https://www.rust-lang.org/tools/install) -- Install Tauri dependencies: https://tauri.app/v1/guides/getting-started/prerequisites/#setting-up-linux +- [Install Rust 1.80 or later](https://www.rust-lang.org/tools/install) +- Install Tauri dependencies: https://tauri.app/start/prerequisites/ - Install `perl` and `jq` - Install `openconnect >= 8.20` and `libopenconnect-dev` (or `openconnect-devel` on RPM-based distributions) - Install `pkexec`, `gnome-keyring` (or `pam_kwallet` on KDE) @@ -210,6 +199,7 @@ The CLI version is always free, while the GUI version is paid. There are two tri - crate [gpapi](./crates/gpapi): [MIT](./crates/gpapi/LICENSE) - crate [openconnect](./crates/openconnect): [GPL-3.0](./crates/openconnect/LICENSE) - crate [common](./crates/common): [GPL-3.0](./crates/common/LICENSE) +- crate [auth](./crates/auth): [GPL-3.0](./crates/auth/LICENSE) - app [gpservice](./apps/gpservice): [GPL-3.0](./apps/gpservice/LICENSE) - app [gpclient](./apps/gpclient): [GPL-3.0](./apps/gpclient/LICENSE) - app [gpauth](./apps/gpauth): [GPL-3.0](./apps/gpauth/LICENSE) diff --git a/apps/gpauth/Cargo.toml b/apps/gpauth/Cargo.toml index 9a8acd00..3eb3e8dd 100644 --- a/apps/gpauth/Cargo.toml +++ b/apps/gpauth/Cargo.toml @@ -1,29 +1,32 @@ [package] name = "gpauth" +rust-version.workspace = true authors.workspace = true version.workspace = true edition.workspace = true license.workspace = true [build-dependencies] -tauri-build = { version = "1.5", features = [] } +tauri-build = { version = "2", features = [], optional = true } [dependencies] -gpapi = { path = "../../crates/gpapi", features = [ - "tauri", - "clap", - "browser-auth", -] } +gpapi = { path = "../../crates/gpapi", features = ["clap"] } + +auth = { path = "../../crates/auth", features = ["browser-auth"] } + +# Shared dependencies anyhow.workspace = true clap.workspace = true env_logger.workspace = true log.workspace = true -regex.workspace = true serde_json.workspace = true tokio.workspace = true -tokio-util.workspace = true tempfile.workspace = true -html-escape = "0.2.13" -webkit2gtk = "0.18.2" -tauri = { workspace = true, features = ["http-all"] } compile-time.workspace = true + +# webview auth dependencies +tauri = { workspace = true, optional = true } + +[features] +default = ["webview-auth"] +webview-auth = ["auth/webview-auth", "dep:tauri", "dep:tauri-build"] diff --git a/apps/gpauth/build.rs b/apps/gpauth/build.rs index 795b9b7c..280edd32 100644 --- a/apps/gpauth/build.rs +++ b/apps/gpauth/build.rs @@ -1,3 +1,4 @@ fn main() { + #[cfg(feature = "webview-auth")] tauri_build::build() } diff --git a/apps/gpauth/src/auth_window.rs b/apps/gpauth/src/auth_window.rs deleted file mode 100644 index c3261952..00000000 --- a/apps/gpauth/src/auth_window.rs +++ /dev/null @@ -1,523 +0,0 @@ -use std::{ - rc::Rc, - sync::Arc, - time::{Duration, Instant}, -}; - -use anyhow::bail; -use gpapi::{ - auth::SamlAuthData, - error::AuthDataParseError, - gp_params::GpParams, - portal::{prelogin, Prelogin}, - utils::{redact::redact_uri, window::WindowExt}, -}; -use log::{info, warn}; -use regex::Regex; -use tauri::{AppHandle, Window, WindowEvent, WindowUrl}; -use tokio::sync::{mpsc, oneshot, RwLock}; -use tokio_util::sync::CancellationToken; -use webkit2gtk::{ - gio::Cancellable, - glib::{GString, TimeSpan}, - LoadEvent, SettingsExt, TLSErrorsPolicy, URIResponse, URIResponseExt, WebContextExt, WebResource, WebResourceExt, - WebView, WebViewExt, WebsiteDataManagerExtManual, WebsiteDataTypes, -}; - -enum AuthDataError { - /// Failed to load page due to TLS error - TlsError, - /// 1. Found auth data in headers/body but it's invalid - /// 2. Loaded an empty page, failed to load page. etc. - Invalid, - /// No auth data found in headers/body - NotFound, -} - -type AuthResult = Result; - -pub(crate) struct AuthWindow<'a> { - app_handle: AppHandle, - server: &'a str, - saml_request: &'a str, - user_agent: &'a str, - gp_params: Option, - clean: bool, -} - -impl<'a> AuthWindow<'a> { - pub fn new(app_handle: AppHandle) -> Self { - Self { - app_handle, - server: "", - saml_request: "", - user_agent: "", - gp_params: None, - clean: false, - } - } - - pub fn server(mut self, server: &'a str) -> Self { - self.server = server; - self - } - - pub fn saml_request(mut self, saml_request: &'a str) -> Self { - self.saml_request = saml_request; - self - } - - pub fn user_agent(mut self, user_agent: &'a str) -> Self { - self.user_agent = user_agent; - self - } - - pub fn gp_params(mut self, gp_params: GpParams) -> Self { - self.gp_params.replace(gp_params); - self - } - - pub fn clean(mut self, clean: bool) -> Self { - self.clean = clean; - self - } - - pub async fn open(&self) -> anyhow::Result { - info!("Open auth window, user_agent: {}", self.user_agent); - - let window = Window::builder(&self.app_handle, "auth_window", WindowUrl::default()) - .title("GlobalProtect Login") - // .user_agent(self.user_agent) - .focused(true) - .visible(false) - .center() - .build()?; - - let window = Arc::new(window); - - let cancel_token = CancellationToken::new(); - let cancel_token_clone = cancel_token.clone(); - - window.on_window_event(move |event| { - if let WindowEvent::CloseRequested { .. } = event { - cancel_token_clone.cancel(); - } - }); - - let window_clone = Arc::clone(&window); - let timeout_secs = 15; - tokio::spawn(async move { - tokio::time::sleep(Duration::from_secs(timeout_secs)).await; - let visible = window_clone.is_visible().unwrap_or(false); - if !visible { - info!("Try to raise auth window after {} seconds", timeout_secs); - raise_window(&window_clone); - } - }); - - tokio::select! { - _ = cancel_token.cancelled() => { - bail!("Auth cancelled"); - } - saml_result = self.auth_loop(&window) => { - window.close()?; - saml_result - } - } - } - - async fn auth_loop(&self, window: &Arc) -> anyhow::Result { - let saml_request = self.saml_request.to_string(); - let (auth_result_tx, mut auth_result_rx) = mpsc::unbounded_channel::(); - let raise_window_cancel_token: Arc>> = Default::default(); - let gp_params = self.gp_params.as_ref().unwrap(); - let tls_err_policy = if gp_params.ignore_tls_errors() { - TLSErrorsPolicy::Ignore - } else { - TLSErrorsPolicy::Fail - }; - - if self.clean { - clear_webview_cookies(window).await?; - } - - let raise_window_cancel_token_clone = Arc::clone(&raise_window_cancel_token); - window.with_webview(move |wv| { - let wv = wv.inner(); - - if let Some(context) = wv.context() { - context.set_tls_errors_policy(tls_err_policy); - } - - if let Some(settings) = wv.settings() { - let ua = settings.user_agent().unwrap_or("".into()); - info!("Auth window user agent: {}", ua); - } - - // Load the initial SAML request - load_saml_request(&wv, &saml_request); - - let auth_result_tx_clone = auth_result_tx.clone(); - wv.connect_load_changed(move |wv, event| { - if event == LoadEvent::Started { - let Ok(mut cancel_token) = raise_window_cancel_token_clone.try_write() else { - return; - }; - - // Cancel the raise window task - if let Some(cancel_token) = cancel_token.take() { - cancel_token.cancel(); - } - return; - } - - if event != LoadEvent::Finished { - return; - } - - if let Some(main_resource) = wv.main_resource() { - let uri = main_resource.uri().unwrap_or("".into()); - - if uri.is_empty() { - warn!("Loaded an empty uri"); - send_auth_result(&auth_result_tx_clone, Err(AuthDataError::Invalid)); - return; - } - - info!("Loaded uri: {}", redact_uri(&uri)); - if uri.starts_with("globalprotectcallback:") { - return; - } - - read_auth_data(&main_resource, auth_result_tx_clone.clone()); - } - }); - - let auth_result_tx_clone = auth_result_tx.clone(); - wv.connect_load_failed_with_tls_errors(move |_wv, uri, cert, err| { - let redacted_uri = redact_uri(uri); - warn!( - "Failed to load uri: {} with error: {}, cert: {}", - redacted_uri, err, cert - ); - - send_auth_result(&auth_result_tx_clone, Err(AuthDataError::TlsError)); - true - }); - - wv.connect_load_failed(move |_wv, _event, uri, err| { - let redacted_uri = redact_uri(uri); - if !uri.starts_with("globalprotectcallback:") { - warn!("Failed to load uri: {} with error: {}", redacted_uri, err); - } - // NOTE: Don't send error here, since load_changed event will be triggered after this - // send_auth_result(&auth_result_tx, Err(AuthDataError::Invalid)); - // true to stop other handlers from being invoked for the event. false to propagate the event further. - true - }); - })?; - - let portal = self.server.to_string(); - - loop { - if let Some(auth_result) = auth_result_rx.recv().await { - match auth_result { - Ok(auth_data) => return Ok(auth_data), - Err(AuthDataError::TlsError) => bail!("TLS error: certificate verify failed"), - Err(AuthDataError::NotFound) => { - info!("No auth data found, it may not be the /SAML20/SP/ACS endpoint"); - - // The user may need to interact with the auth window, raise it in 3 seconds - if !window.is_visible().unwrap_or(false) { - let window = Arc::clone(window); - let cancel_token = CancellationToken::new(); - - raise_window_cancel_token.write().await.replace(cancel_token.clone()); - - tokio::spawn(async move { - let delay_secs = 1; - - info!("Raise window in {} second(s)", delay_secs); - tokio::select! { - _ = tokio::time::sleep(Duration::from_secs(delay_secs)) => { - raise_window(&window); - } - _ = cancel_token.cancelled() => { - info!("Raise window cancelled"); - } - } - }); - } - } - Err(AuthDataError::Invalid) => { - info!("Got invalid auth data, retrying..."); - - window.with_webview(|wv| { - let wv = wv.inner(); - wv.run_javascript(r#" - var loading = document.createElement("div"); - loading.innerHTML = '
Got invalid token, retrying...
'; - loading.style = "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.85); z-index: 99999;"; - document.body.appendChild(loading); - "#, - Cancellable::NONE, - |_| info!("Injected loading element successfully"), - ); - })?; - - let saml_request = portal_prelogin(&portal, gp_params).await?; - window.with_webview(move |wv| { - let wv = wv.inner(); - load_saml_request(&wv, &saml_request); - })?; - } - } - } - } - } -} - -fn raise_window(window: &Arc) { - let visible = window.is_visible().unwrap_or(false); - if !visible { - if let Err(err) = window.raise() { - warn!("Failed to raise window: {}", err); - } - } -} - -pub async fn portal_prelogin(portal: &str, gp_params: &GpParams) -> anyhow::Result { - match prelogin(portal, gp_params).await? { - Prelogin::Saml(prelogin) => Ok(prelogin.saml_request().to_string()), - Prelogin::Standard(_) => bail!("Received non-SAML prelogin response"), - } -} - -fn send_auth_result(auth_result_tx: &mpsc::UnboundedSender, auth_result: AuthResult) { - if let Err(err) = auth_result_tx.send(auth_result) { - warn!("Failed to send auth event: {}", err); - } -} - -fn load_saml_request(wv: &Rc, saml_request: &str) { - if saml_request.starts_with("http") { - info!("Load the SAML request as URI..."); - wv.load_uri(saml_request); - } else { - info!("Load the SAML request as HTML..."); - wv.load_html(saml_request, None); - } -} - -fn read_auth_data_from_headers(response: &URIResponse) -> AuthResult { - response.http_headers().map_or_else( - || { - info!("No headers found in response"); - Err(AuthDataError::NotFound) - }, - |mut headers| match headers.get("saml-auth-status") { - Some(status) if status == "1" => { - let username = headers.get("saml-username").map(GString::into); - let prelogin_cookie = headers.get("prelogin-cookie").map(GString::into); - let portal_userauthcookie = headers.get("portal-userauthcookie").map(GString::into); - - if SamlAuthData::check(&username, &prelogin_cookie, &portal_userauthcookie) { - return Ok(SamlAuthData::new( - username.unwrap(), - prelogin_cookie, - portal_userauthcookie, - )); - } - - info!("Found invalid auth data in headers"); - Err(AuthDataError::Invalid) - } - Some(status) => { - info!("Found invalid SAML status: {} in headers", status); - Err(AuthDataError::Invalid) - } - None => { - info!("No saml-auth-status header found"); - Err(AuthDataError::NotFound) - } - }, - ) -} - -fn read_auth_data_from_body(main_resource: &WebResource, callback: F) -where - F: FnOnce(Result) + Send + 'static, -{ - main_resource.data(Cancellable::NONE, |data| match data { - Ok(data) => { - let html = String::from_utf8_lossy(&data); - callback(read_auth_data_from_html(&html)); - } - Err(err) => { - info!("Failed to read response body: {}", err); - callback(Err(AuthDataParseError::Invalid)) - } - }); -} - -fn read_auth_data_from_html(html: &str) -> Result { - if html.contains("Temporarily Unavailable") { - info!("Found 'Temporarily Unavailable' in HTML, auth failed"); - return Err(AuthDataParseError::Invalid); - } - - SamlAuthData::from_html(html).or_else(|err| { - if let Some(gpcallback) = extract_gpcallback(html) { - info!("Found gpcallback from html..."); - SamlAuthData::from_gpcallback(&gpcallback) - } else { - Err(err) - } - }) -} - -fn extract_gpcallback(html: &str) -> Option { - let re = Regex::new(r#"globalprotectcallback:[^"]+"#).unwrap(); - re.captures(html) - .and_then(|captures| captures.get(0)) - .map(|m| html_escape::decode_html_entities(m.as_str()).to_string()) -} - -fn read_auth_data(main_resource: &WebResource, auth_result_tx: mpsc::UnboundedSender) { - let Some(response) = main_resource.response() else { - info!("No response found in main resource"); - send_auth_result(&auth_result_tx, Err(AuthDataError::Invalid)); - return; - }; - - info!("Trying to read auth data from response headers..."); - - match read_auth_data_from_headers(&response) { - Ok(auth_data) => { - info!("Got auth data from headers"); - send_auth_result(&auth_result_tx, Ok(auth_data)); - } - Err(AuthDataError::Invalid) => { - info!("Found invalid auth data in headers, trying to read from body..."); - read_auth_data_from_body(main_resource, move |auth_result| { - // Since we have already found invalid auth data in headers, which means this could be the `/SAML20/SP/ACS` endpoint - // any error result from body should be considered as invalid, and trigger a retry - let auth_result = auth_result.map_err(|err| { - info!("Failed to read auth data from body: {}", err); - AuthDataError::Invalid - }); - send_auth_result(&auth_result_tx, auth_result); - }); - } - Err(AuthDataError::NotFound) => { - info!("No auth data found in headers, trying to read from body..."); - - let is_acs_endpoint = main_resource.uri().map_or(false, |uri| uri.contains("/SAML20/SP/ACS")); - - read_auth_data_from_body(main_resource, move |auth_result| { - // If the endpoint is `/SAML20/SP/ACS` and no auth data found in body, it should be considered as invalid - let auth_result = auth_result.map_err(|err| { - info!("Failed to read auth data from body: {}", err); - - if !is_acs_endpoint && matches!(err, AuthDataParseError::NotFound) { - AuthDataError::NotFound - } else { - AuthDataError::Invalid - } - }); - - send_auth_result(&auth_result_tx, auth_result) - }); - } - Err(AuthDataError::TlsError) => { - // NOTE: This is unreachable - info!("TLS error found in headers, trying to read from body..."); - send_auth_result(&auth_result_tx, Err(AuthDataError::TlsError)); - } - } -} - -pub(crate) async fn clear_webview_cookies(window: &Window) -> anyhow::Result<()> { - let (tx, rx) = oneshot::channel::>(); - - window.with_webview(|wv| { - let send_result = move |result: Result<(), String>| { - if let Err(err) = tx.send(result) { - info!("Failed to send result: {:?}", err); - } - }; - - let wv = wv.inner(); - let context = match wv.context() { - Some(context) => context, - None => { - send_result(Err("No webview context found".into())); - return; - } - }; - let data_manager = match context.website_data_manager() { - Some(manager) => manager, - None => { - send_result(Err("No data manager found".into())); - return; - } - }; - - let now = Instant::now(); - data_manager.clear( - WebsiteDataTypes::COOKIES, - TimeSpan(0), - Cancellable::NONE, - move |result| match result { - Err(err) => { - send_result(Err(err.to_string())); - } - Ok(_) => { - info!("Cookies cleared in {} ms", now.elapsed().as_millis()); - send_result(Ok(())); - } - }, - ); - })?; - - rx.await?.map_err(|err| anyhow::anyhow!(err)) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn extract_gpcallback_some() { - let html = r#" - - - "#; - - assert_eq!( - extract_gpcallback(html).as_deref(), - Some("globalprotectcallback:PGh0bWw+PCEtLSA8c") - ); - } - - #[test] - fn extract_gpcallback_cas() { - let html = r#" - - "#; - - assert_eq!( - extract_gpcallback(html).as_deref(), - Some("globalprotectcallback:cas-as=1&un=xyz@email.com&token=very_long_string") - ); - } - - #[test] - fn extract_gpcallback_none() { - let html = r#" - - "#; - - assert_eq!(extract_gpcallback(html), None); - } -} diff --git a/apps/gpauth/src/cli.rs b/apps/gpauth/src/cli.rs index bf94362b..939773e2 100644 --- a/apps/gpauth/src/cli.rs +++ b/apps/gpauth/src/cli.rs @@ -1,21 +1,17 @@ -use std::{env::temp_dir, fs, os::unix::fs::PermissionsExt}; +use std::borrow::Cow; +use auth::{auth_prelogin, Authenticator, BrowserAuthenticator}; use clap::Parser; use gpapi::{ auth::{SamlAuthData, SamlAuthResult}, - clap::args::Os, + clap::{args::Os, handle_error, Args}, gp_params::{ClientOs, GpParams}, - process::browser_authenticator::BrowserAuthenticator, utils::{normalize_server, openssl}, GP_USER_AGENT, }; use log::{info, LevelFilter}; use serde_json::json; -use tauri::{App, AppHandle, RunEvent}; use tempfile::NamedTempFile; -use tokio::{io::AsyncReadExt, net::TcpListener}; - -use crate::auth_window::{portal_prelogin, AuthWindow}; const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), " (", compile_time::date_str!(), ")"); @@ -37,7 +33,7 @@ const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), " (", compile_time::dat See 'gpauth -h' for more information. " )] -struct Cli { +pub(crate) struct Cli { #[arg(help = "The portal server to authenticate")] server: String, @@ -56,18 +52,13 @@ struct Cli { #[arg(long)] os_version: Option, - #[arg(long, help = "The HiDPI mode, useful for high-resolution screens")] - hidpi: bool, - #[arg(long, help = "Get around the OpenSSL `unsafe legacy renegotiation` error")] fix_openssl: bool, #[arg(long, help = "Ignore TLS errors")] ignore_tls_errors: bool, - #[arg(long, help = "Clean the cache of the embedded browser")] - clean: bool, - + #[cfg(feature = "webview-auth")] #[arg(long, help = "Use the default browser for authentication")] default_browser: bool, @@ -76,85 +67,82 @@ struct Cli { help = "The browser to use for authentication, e.g., `default`, `firefox`, `chrome`, `chromium`, or the path to the browser executable" )] browser: Option, -} -impl Cli { - async fn run(&mut self) -> anyhow::Result<()> { - if self.ignore_tls_errors { - info!("TLS errors will be ignored"); - } - - let mut openssl_conf = self.prepare_env()?; - - self.server = normalize_server(&self.server)?; - let gp_params = self.build_gp_params(); + #[cfg(feature = "webview-auth")] + #[arg(long, help = "The HiDPI mode, useful for high-resolution screens")] + hidpi: bool, - // Get the initial SAML request - let saml_request = match self.saml_request { - Some(ref saml_request) => saml_request.clone(), - None => portal_prelogin(&self.server, &gp_params).await?, - }; + #[cfg(feature = "webview-auth")] + #[arg(long, help = "Clean the cache of the embedded browser")] + pub clean: bool, +} - let browser_auth = if let Some(browser) = &self.browser { - Some(BrowserAuthenticator::new_with_browser(&saml_request, browser)) - } else if self.default_browser { - Some(BrowserAuthenticator::new(&saml_request)) - } else { - None - }; +impl Args for Cli { + fn fix_openssl(&self) -> bool { + self.fix_openssl + } - if let Some(browser_auth) = browser_auth { - browser_auth.authenticate()?; + fn ignore_tls_errors(&self) -> bool { + self.ignore_tls_errors + } +} - info!("Please continue the authentication process in the default browser"); +impl Cli { + fn prepare_env(&self) -> anyhow::Result> { + #[cfg(feature = "webview-auth")] + gpapi::utils::env_utils::patch_gui_runtime_env(self.hidpi); - let auth_result = match wait_auth_data().await { - Ok(auth_data) => SamlAuthResult::Success(auth_data), - Err(err) => SamlAuthResult::Failure(format!("{}", err)), - }; + if self.fix_openssl { + info!("Fixing OpenSSL environment"); + let file = openssl::fix_openssl_env()?; - info!("Authentication completed"); + return Ok(Some(file)); + } - println!("{}", json!(auth_result)); + Ok(None) + } - return Ok(()); + async fn run(&self) -> anyhow::Result<()> { + if self.ignore_tls_errors { + info!("TLS errors will be ignored"); } - self.saml_request.replace(saml_request); - - let app = create_app(self.clone())?; + let openssl_conf = self.prepare_env()?; - app.run(move |_app_handle, event| { - if let RunEvent::Exit = event { - if let Some(file) = openssl_conf.take() { - if let Err(err) = file.close() { - info!("Error closing OpenSSL config file: {}", err); - } - } - } - }); + let server = normalize_server(&self.server)?; + let server: &'static str = Box::leak(server.into_boxed_str()); + let gp_params: &'static GpParams = Box::leak(Box::new(self.build_gp_params())); - Ok(()) - } + let auth_request = match self.saml_request.as_deref() { + Some(auth_request) => Cow::Borrowed(auth_request), + None => Cow::Owned(auth_prelogin(server, gp_params).await?), + }; - fn prepare_env(&self) -> anyhow::Result> { - std::env::set_var("WEBKIT_DISABLE_COMPOSITING_MODE", "1"); + let auth_request: &'static str = Box::leak(auth_request.into_owned().into_boxed_str()); + let authenticator = Authenticator::new(&server, gp_params).with_auth_request(&auth_request); - if self.hidpi { - info!("Setting GDK_SCALE=2 and GDK_DPI_SCALE=0.5"); + #[cfg(feature = "webview-auth")] + let browser = self + .browser + .as_deref() + .or_else(|| self.default_browser.then_some("default")); - std::env::set_var("GDK_SCALE", "2"); - std::env::set_var("GDK_DPI_SCALE", "0.5"); - } + #[cfg(not(feature = "webview-auth"))] + let browser = self.browser.as_deref().or(Some("default")); - if self.fix_openssl { - info!("Fixing OpenSSL environment"); - let file = openssl::fix_openssl_env()?; + if browser.is_some() { + let auth_result = authenticator.browser_authenticate(browser).await; + print_auth_result(auth_result); - return Ok(Some(file)); + // explicitly drop openssl_conf to avoid the unused variable warning + drop(openssl_conf); + return Ok(()); } - Ok(None) + #[cfg(feature = "webview-auth")] + crate::webview_auth::authenticate(&self, authenticator, openssl_conf)?; + + Ok(()) } fn build_gp_params(&self) -> GpParams { @@ -168,37 +156,6 @@ impl Cli { gp_params } - - async fn saml_auth(&self, app_handle: AppHandle) -> anyhow::Result { - let auth_window = AuthWindow::new(app_handle) - .server(&self.server) - .user_agent(&self.user_agent) - .gp_params(self.build_gp_params()) - .saml_request(self.saml_request.as_ref().unwrap()) - .clean(self.clean); - - auth_window.open().await - } -} - -fn create_app(cli: Cli) -> anyhow::Result { - let app = tauri::Builder::default() - .setup(|app| { - let app_handle = app.handle(); - - tauri::async_runtime::spawn(async move { - let auth_result = match cli.saml_auth(app_handle.clone()).await { - Ok(auth_data) => SamlAuthResult::Success(auth_data), - Err(err) => SamlAuthResult::Failure(format!("{}", err)), - }; - - println!("{}", json!(auth_result)); - }); - Ok(()) - }) - .build(tauri::generate_context!())?; - - Ok(app) } fn init_logger() { @@ -206,53 +163,22 @@ fn init_logger() { } pub async fn run() { - let mut cli = Cli::parse(); + let cli = Cli::parse(); init_logger(); info!("gpauth started: {}", VERSION); if let Err(err) = cli.run().await { - eprintln!("\nError: {}", err); - - if err.to_string().contains("unsafe legacy renegotiation") && !cli.fix_openssl { - eprintln!("\nRe-run it with the `--fix-openssl` option to work around this issue, e.g.:\n"); - // Print the command - let args = std::env::args().collect::>(); - eprintln!("{} --fix-openssl {}\n", args[0], args[1..].join(" ")); - } - + handle_error(err, &cli); std::process::exit(1); } } -async fn wait_auth_data() -> anyhow::Result { - // Start a local server to receive the browser authentication data - let listener = TcpListener::bind("127.0.0.1:0").await?; - let port = listener.local_addr()?.port(); - let port_file = temp_dir().join("gpcallback.port"); - - // Write the port to a file - fs::write(&port_file, port.to_string())?; - fs::set_permissions(&port_file, fs::Permissions::from_mode(0o600))?; - - // Remove the previous log file - let callback_log = temp_dir().join("gpcallback.log"); - let _ = fs::remove_file(&callback_log); - - info!("Listening authentication data on port {}", port); - info!( - "If it hangs, please check the logs at `{}` for more information", - callback_log.display() - ); - let (mut socket, _) = listener.accept().await?; - - info!("Received the browser authentication data from the socket"); - let mut data = String::new(); - socket.read_to_string(&mut data).await?; - - // Remove the port file - fs::remove_file(&port_file)?; +pub fn print_auth_result(auth_result: anyhow::Result) { + let auth_result = match auth_result { + Ok(auth_data) => SamlAuthResult::Success(auth_data), + Err(err) => SamlAuthResult::Failure(format!("{}", err)), + }; - let auth_data = SamlAuthData::from_gpcallback(&data)?; - Ok(auth_data) + println!("{}", json!(auth_result)); } diff --git a/apps/gpauth/src/main.rs b/apps/gpauth/src/main.rs index 74f86ec2..29246ad4 100644 --- a/apps/gpauth/src/main.rs +++ b/apps/gpauth/src/main.rs @@ -1,7 +1,8 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -mod auth_window; mod cli; +#[cfg(feature = "webview-auth")] +mod webview_auth; #[tokio::main] async fn main() { diff --git a/apps/gpauth/src/webview_auth.rs b/apps/gpauth/src/webview_auth.rs new file mode 100644 index 00000000..61c24060 --- /dev/null +++ b/apps/gpauth/src/webview_auth.rs @@ -0,0 +1,41 @@ +use auth::{Authenticator, WebviewAuthenticator}; +use log::info; +use tauri::RunEvent; +use tempfile::NamedTempFile; + +use crate::cli::{print_auth_result, Cli}; + +pub fn authenticate( + cli: &Cli, + authenticator: Authenticator<'static>, + mut openssl_conf: Option, +) -> anyhow::Result<()> { + let authenticator = authenticator.with_clean(cli.clean); + + tauri::Builder::default() + .setup(move |app| { + let app_handle = app.handle().clone(); + + tauri::async_runtime::spawn(async move { + let auth_result = authenticator.webview_authenticate(&app_handle).await; + print_auth_result(auth_result); + + // Ensure the app exits after the authentication process + app_handle.exit(0); + }); + + Ok(()) + }) + .build(tauri::generate_context!())? + .run(move |_app_handle, event| { + if let RunEvent::Exit = event { + if let Some(file) = openssl_conf.take() { + if let Err(err) = file.close() { + info!("Error closing OpenSSL config file: {}", err); + } + } + } + }); + + Ok(()) +} diff --git a/apps/gpauth/tauri.conf.json b/apps/gpauth/tauri.conf.json index 5eab86d8..f446cb7a 100644 --- a/apps/gpauth/tauri.conf.json +++ b/apps/gpauth/tauri.conf.json @@ -1,47 +1,16 @@ { - "$schema": "https://cdn.jsdelivr.net/gh/tauri-apps/tauri@tauri-v1.5.0/tooling/cli/schema.json", + "$schema": "https://cdn.jsdelivr.net/gh/tauri-apps/tauri@tauri-v2.1.1/crates/tauri-cli/config.schema.json", "build": { - "distDir": [ - "index.html" - ], - "devPath": [ - "index.html" - ], + "frontendDist": ["index.html"], "beforeDevCommand": "", - "beforeBuildCommand": "", - "withGlobalTauri": false + "beforeBuildCommand": "" }, - "package": { - "productName": "gpauth", - "version": "0.0.0" - }, - "tauri": { - "allowlist": { - "all": false, - "http": { - "all": true, - "request": true, - "scope": [ - "http://*", - "https://*" - ] - } - }, - "bundle": { - "active": true, - "targets": "deb", - "identifier": "com.yuezk.gpauth", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ] - }, + "identifier": "com.yuezk.gpauth", + "productName": "gpauth", + "app": { + "withGlobalTauri": false, "security": { "csp": null - }, - "windows": [] + } } } diff --git a/apps/gpclient/Cargo.toml b/apps/gpclient/Cargo.toml index b2594bd9..1dc414e1 100644 --- a/apps/gpclient/Cargo.toml +++ b/apps/gpclient/Cargo.toml @@ -1,5 +1,6 @@ [package] name = "gpclient" +rust-version.workspace = true authors.workspace = true version.workspace = true edition.workspace = true @@ -9,10 +10,11 @@ license.workspace = true common = { path = "../../crates/common" } gpapi = { path = "../../crates/gpapi", features = ["clap"] } openconnect = { path = "../../crates/openconnect" } + anyhow.workspace = true clap.workspace = true env_logger.workspace = true -inquire = "0.6.2" +inquire = "0.7" log.workspace = true tokio.workspace = true sysinfo.workspace = true @@ -22,3 +24,7 @@ tempfile.workspace = true reqwest.workspace = true directories = "5.0" compile-time.workspace = true + +[features] +default = ["webview-auth"] +webview-auth = ["gpapi/webview-auth"] diff --git a/apps/gpclient/src/cli.rs b/apps/gpclient/src/cli.rs index d4c55ce7..005373bb 100644 --- a/apps/gpclient/src/cli.rs +++ b/apps/gpclient/src/cli.rs @@ -1,7 +1,10 @@ use std::{env::temp_dir, fs::File}; use clap::{Parser, Subcommand}; -use gpapi::utils::openssl; +use gpapi::{ + clap::{handle_error, Args}, + utils::openssl, +}; use log::{info, LevelFilter}; use tempfile::NamedTempFile; @@ -50,12 +53,25 @@ struct Cli { #[command(subcommand)] command: CliCommand, - #[arg(long, help = "Uses extended compatibility mode for OpenSSL operations to support a broader range of systems and formats.")] + #[arg( + long, + help = "Uses extended compatibility mode for OpenSSL operations to support a broader range of systems and formats." + )] fix_openssl: bool, #[arg(long, help = "Ignore the TLS errors")] ignore_tls_errors: bool, } +impl Args for Cli { + fn fix_openssl(&self) -> bool { + self.fix_openssl + } + + fn ignore_tls_errors(&self) -> bool { + self.ignore_tls_errors + } +} + impl Cli { fn fix_openssl(&self) -> anyhow::Result> { if self.fix_openssl { @@ -113,24 +129,7 @@ pub(crate) async fn run() { info!("gpclient started: {}", VERSION); if let Err(err) = cli.run().await { - eprintln!("\nError: {}", err); - - let err = err.to_string(); - - if err.contains("unsafe legacy renegotiation") && !cli.fix_openssl { - eprintln!("\nRe-run it with the `--fix-openssl` option to work around this issue, e.g.:\n"); - // Print the command - let args = std::env::args().collect::>(); - eprintln!("{} --fix-openssl {}\n", args[0], args[1..].join(" ")); - } - - if err.contains("certificate verify failed") && !cli.ignore_tls_errors { - eprintln!("\nRe-run it with the `--ignore-tls-errors` option to ignore the certificate error, e.g.:\n"); - // Print the command - let args = std::env::args().collect::>(); - eprintln!("{} --ignore-tls-errors {}\n", args[0], args[1..].join(" ")); - } - + handle_error(err, &cli); std::process::exit(1); } } diff --git a/apps/gpclient/src/connect.rs b/apps/gpclient/src/connect.rs index 15c24707..0a0ed9a4 100644 --- a/apps/gpclient/src/connect.rs +++ b/apps/gpclient/src/connect.rs @@ -93,12 +93,15 @@ pub(crate) struct ConnectArgs { #[arg(long, help = "Disable DTLS and ESP")] no_dtls: bool, + #[cfg(feature = "webview-auth")] #[arg(long, help = "The HiDPI mode, useful for high-resolution screens")] hidpi: bool, + #[cfg(feature = "webview-auth")] #[arg(long, help = "Do not reuse the remembered authentication cookie")] clean: bool, + #[cfg(feature = "webview-auth")] #[arg(long, help = "Use the default browser to authenticate")] default_browser: bool, @@ -151,6 +154,7 @@ impl<'a> ConnectHandler<'a> { } pub(crate) async fn handle(&self) -> anyhow::Result<()> { + #[cfg(feature = "webview-auth")] if self.args.default_browser && self.args.browser.is_some() { bail!("Cannot use `--default-browser` and `--browser` options at the same time"); } @@ -343,28 +347,34 @@ impl<'a> ConnectHandler<'a> { match prelogin { Prelogin::Saml(prelogin) => { - let use_default_browser = prelogin.support_default_browser() && self.args.default_browser; let browser = if prelogin.support_default_browser() { self.args.browser.as_deref() + } else if !cfg!(feature = "webview-auth") { + bail!("The server does not support authentication via the default browser and the gpclient is not built with the `webview-auth` feature"); } else { None }; - let cred = SamlAuthLauncher::new(&self.args.server) + let os_version = self.args.os_version(); + let auth_launcher = SamlAuthLauncher::new(&self.args.server) .gateway(is_gateway) .saml_request(prelogin.saml_request()) .user_agent(&self.args.user_agent) .os(self.args.os.as_str()) - .os_version(Some(&self.args.os_version())) - .hidpi(self.args.hidpi) + .os_version(Some(&os_version)) .fix_openssl(self.shared_args.fix_openssl) .ignore_tls_errors(self.shared_args.ignore_tls_errors) + .browser(browser); + + #[cfg(feature = "webview-auth")] + let use_default_browser = prelogin.support_default_browser() && self.args.default_browser; + #[cfg(feature = "webview-auth")] + let auth_launcher = auth_launcher + .hidpi(self.args.hidpi) .clean(self.args.clean) - .default_browser(use_default_browser) - .browser(browser) - .launch() - .await?; + .default_browser(use_default_browser); + let cred = auth_launcher.launch().await?; Ok(cred) } diff --git a/apps/gpclient/src/disconnect.rs b/apps/gpclient/src/disconnect.rs index 7318d61a..b1678fbb 100644 --- a/apps/gpclient/src/disconnect.rs +++ b/apps/gpclient/src/disconnect.rs @@ -1,7 +1,7 @@ use crate::GP_CLIENT_LOCK_FILE; use log::{info, warn}; use std::fs; -use sysinfo::{Pid, ProcessExt, Signal, System, SystemExt}; +use sysinfo::{Pid, Signal, System}; pub(crate) struct DisconnectHandler; diff --git a/apps/gpclient/src/launch_gui.rs b/apps/gpclient/src/launch_gui.rs index 8cb6069d..fd5e8aae 100644 --- a/apps/gpclient/src/launch_gui.rs +++ b/apps/gpclient/src/launch_gui.rs @@ -4,7 +4,8 @@ use clap::Args; use directories::ProjectDirs; use gpapi::{ process::service_launcher::ServiceLauncher, - utils::{endpoint::http_endpoint, env_file, shutdown_signal}, + utils::{endpoint::http_endpoint, env_utils, shutdown_signal}, + GP_CALLBACK_PORT_FILENAME, }; use log::info; use tokio::io::AsyncWriteExt; @@ -62,7 +63,7 @@ impl<'a> LaunchGuiHandler<'a> { extra_envs.insert("GP_LOG_FILE".into(), log_file_path.clone()); // Persist the environment variables to a file - let env_file = env_file::persist_env_vars(Some(extra_envs))?; + let env_file = env_utils::persist_env_vars(Some(extra_envs))?; let env_file = env_file.into_temp_path(); let env_file_path = env_file.to_string_lossy().to_string(); @@ -80,42 +81,17 @@ impl<'a> LaunchGuiHandler<'a> { } async fn feed_auth_data(auth_data: &str) -> anyhow::Result<()> { - let (res_gui, res_cli) = tokio::join!(feed_auth_data_gui(auth_data), feed_auth_data_cli(auth_data)); - if let Err(err) = res_gui { - info!("Failed to feed auth data to the GUI: {}", err); - } - - if let Err(err) = res_cli { + if let Err(err) = feed_auth_data_cli(auth_data).await { info!("Failed to feed auth data to the CLI: {}", err); } - // Cleanup the temporary file - let html_file = temp_dir().join("gpauth.html"); - if let Err(err) = std::fs::remove_file(&html_file) { - info!("Failed to remove {}: {}", html_file.display(), err); - } - - Ok(()) -} - -async fn feed_auth_data_gui(auth_data: &str) -> anyhow::Result<()> { - info!("Feeding auth data to the GUI"); - let service_endpoint = http_endpoint().await?; - - reqwest::Client::default() - .post(format!("{}/auth-data", service_endpoint)) - .body(auth_data.to_string()) - .send() - .await? - .error_for_status()?; - Ok(()) } async fn feed_auth_data_cli(auth_data: &str) -> anyhow::Result<()> { info!("Feeding auth data to the CLI"); - let port_file = temp_dir().join("gpcallback.port"); + let port_file = temp_dir().join(GP_CALLBACK_PORT_FILENAME); let port = tokio::fs::read_to_string(port_file).await?; let mut stream = tokio::net::TcpStream::connect(format!("127.0.0.1:{}", port.trim())).await?; diff --git a/apps/gpgui-helper/dist/assets/icon-674efcbe.svg b/apps/gpgui-helper/dist/assets/icon-BlfaAlWe.svg similarity index 100% rename from apps/gpgui-helper/dist/assets/icon-674efcbe.svg rename to apps/gpgui-helper/dist/assets/icon-BlfaAlWe.svg diff --git a/apps/gpgui-helper/dist/assets/index-11e7064a.css b/apps/gpgui-helper/dist/assets/main-B3YRsHQ2.css similarity index 100% rename from apps/gpgui-helper/dist/assets/index-11e7064a.css rename to apps/gpgui-helper/dist/assets/main-B3YRsHQ2.css diff --git a/apps/gpgui-helper/dist/assets/main-CQPVXkdn.js b/apps/gpgui-helper/dist/assets/main-CQPVXkdn.js new file mode 100644 index 00000000..8b662d61 --- /dev/null +++ b/apps/gpgui-helper/dist/assets/main-CQPVXkdn.js @@ -0,0 +1,193 @@ +var zg=Object.defineProperty;var wg=(l,i,c)=>i in l?zg(l,i,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[i]=c;var Ni=(l,i,c)=>wg(l,typeof i!="symbol"?i+"":i,c);function Rg(l,i){for(var c=0;co[s]})}}}return Object.freeze(Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}))}(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const d of s)if(d.type==="childList")for(const m of d.addedNodes)m.tagName==="LINK"&&m.rel==="modulepreload"&&o(m)}).observe(document,{childList:!0,subtree:!0});function c(s){const d={};return s.integrity&&(d.integrity=s.integrity),s.referrerPolicy&&(d.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?d.credentials="include":s.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function o(s){if(s.ep)return;s.ep=!0;const d=c(s);fetch(s.href,d)}})();function Mg(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var Jo={exports:{}},Ui={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var wh;function Dg(){if(wh)return Ui;wh=1;var l=Symbol.for("react.transitional.element"),i=Symbol.for("react.fragment");function c(o,s,d){var m=null;if(d!==void 0&&(m=""+d),s.key!==void 0&&(m=""+s.key),"key"in s){d={};for(var b in s)b!=="key"&&(d[b]=s[b])}else d=s;return s=d.ref,{$$typeof:l,type:o,key:m,ref:s!==void 0?s:null,props:d}}return Ui.Fragment=i,Ui.jsx=c,Ui.jsxs=c,Ui}var Rh;function Bg(){return Rh||(Rh=1,Jo.exports=Dg()),Jo.exports}var rt=Bg(),Fo={exports:{}},Hi={},Po={exports:{}},Io={};/** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Mh;function Ng(){return Mh||(Mh=1,function(l){function i(G,it){var tt=G.length;G.push(it);t:for(;0>>1,S=G[ot];if(0>>1;ots(lt,tt))Js(bt,lt)?(G[ot]=bt,G[J]=tt,ot=J):(G[ot]=lt,G[at]=tt,ot=at);else if(Js(bt,tt))G[ot]=bt,G[J]=tt,ot=J;else break t}}return it}function s(G,it){var tt=G.sortIndex-it.sortIndex;return tt!==0?tt:G.id-it.id}if(l.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;l.unstable_now=function(){return d.now()}}else{var m=Date,b=m.now();l.unstable_now=function(){return m.now()-b}}var v=[],p=[],C=1,_=null,w=3,j=!1,B=!1,U=!1,X=typeof setTimeout=="function"?setTimeout:null,Q=typeof clearTimeout=="function"?clearTimeout:null,F=typeof setImmediate<"u"?setImmediate:null;function V(G){for(var it=c(p);it!==null;){if(it.callback===null)o(p);else if(it.startTime<=G)o(p),it.sortIndex=it.expirationTime,i(v,it);else break;it=c(p)}}function L(G){if(U=!1,V(G),!B)if(c(v)!==null)B=!0,St();else{var it=c(p);it!==null&&_t(L,it.startTime-G)}}var O=!1,$=-1,W=5,gt=-1;function K(){return!(l.unstable_now()-gtG&&K());){var ot=_.callback;if(typeof ot=="function"){_.callback=null,w=_.priorityLevel;var S=ot(_.expirationTime<=G);if(G=l.unstable_now(),typeof S=="function"){_.callback=S,V(G),it=!0;break e}_===c(v)&&o(v),V(G)}else o(v);_=c(v)}if(_!==null)it=!0;else{var q=c(p);q!==null&&_t(L,q.startTime-G),it=!1}}break t}finally{_=null,w=tt,j=!1}it=void 0}}finally{it?Y():O=!1}}}var Y;if(typeof F=="function")Y=function(){F(y)};else if(typeof MessageChannel<"u"){var et=new MessageChannel,ct=et.port2;et.port1.onmessage=y,Y=function(){ct.postMessage(null)}}else Y=function(){X(y,0)};function St(){O||(O=!0,Y())}function _t(G,it){$=X(function(){G(l.unstable_now())},it)}l.unstable_IdlePriority=5,l.unstable_ImmediatePriority=1,l.unstable_LowPriority=4,l.unstable_NormalPriority=3,l.unstable_Profiling=null,l.unstable_UserBlockingPriority=2,l.unstable_cancelCallback=function(G){G.callback=null},l.unstable_continueExecution=function(){B||j||(B=!0,St())},l.unstable_forceFrameRate=function(G){0>G||125ot?(G.sortIndex=tt,i(p,G),c(v)===null&&G===c(p)&&(U?(Q($),$=-1):U=!0,_t(L,tt-ot))):(G.sortIndex=S,i(v,G),B||j||(B=!0,St())),G},l.unstable_shouldYield=K,l.unstable_wrapCallback=function(G){var it=w;return function(){var tt=w;w=it;try{return G.apply(this,arguments)}finally{w=tt}}}}(Io)),Io}var Dh;function Ug(){return Dh||(Dh=1,Po.exports=Ng()),Po.exports}var ts={exports:{}},ht={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Bh;function Hg(){if(Bh)return ht;Bh=1;var l=Symbol.for("react.transitional.element"),i=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),m=Symbol.for("react.context"),b=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),C=Symbol.for("react.lazy"),_=Symbol.iterator;function w(S){return S===null||typeof S!="object"?null:(S=_&&S[_]||S["@@iterator"],typeof S=="function"?S:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B=Object.assign,U={};function X(S,q,at){this.props=S,this.context=q,this.refs=U,this.updater=at||j}X.prototype.isReactComponent={},X.prototype.setState=function(S,q){if(typeof S!="object"&&typeof S!="function"&&S!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,S,q,"setState")},X.prototype.forceUpdate=function(S){this.updater.enqueueForceUpdate(this,S,"forceUpdate")};function Q(){}Q.prototype=X.prototype;function F(S,q,at){this.props=S,this.context=q,this.refs=U,this.updater=at||j}var V=F.prototype=new Q;V.constructor=F,B(V,X.prototype),V.isPureReactComponent=!0;var L=Array.isArray,O={H:null,A:null,T:null,S:null},$=Object.prototype.hasOwnProperty;function W(S,q,at,lt,J,bt){return at=bt.ref,{$$typeof:l,type:S,key:q,ref:at!==void 0?at:null,props:bt}}function gt(S,q){return W(S.type,q,void 0,void 0,void 0,S.props)}function K(S){return typeof S=="object"&&S!==null&&S.$$typeof===l}function y(S){var q={"=":"=0",":":"=2"};return"$"+S.replace(/[=:]/g,function(at){return q[at]})}var Y=/\/+/g;function et(S,q){return typeof S=="object"&&S!==null&&S.key!=null?y(""+S.key):q.toString(36)}function ct(){}function St(S){switch(S.status){case"fulfilled":return S.value;case"rejected":throw S.reason;default:switch(typeof S.status=="string"?S.then(ct,ct):(S.status="pending",S.then(function(q){S.status==="pending"&&(S.status="fulfilled",S.value=q)},function(q){S.status==="pending"&&(S.status="rejected",S.reason=q)})),S.status){case"fulfilled":return S.value;case"rejected":throw S.reason}}throw S}function _t(S,q,at,lt,J){var bt=typeof S;(bt==="undefined"||bt==="boolean")&&(S=null);var ft=!1;if(S===null)ft=!0;else switch(bt){case"bigint":case"string":case"number":ft=!0;break;case"object":switch(S.$$typeof){case l:case i:ft=!0;break;case C:return ft=S._init,_t(ft(S._payload),q,at,lt,J)}}if(ft)return J=J(S),ft=lt===""?"."+et(S,0):lt,L(J)?(at="",ft!=null&&(at=ft.replace(Y,"$&/")+"/"),_t(J,q,at,"",function(Yt){return Yt})):J!=null&&(K(J)&&(J=gt(J,at+(J.key==null||S&&S.key===J.key?"":(""+J.key).replace(Y,"$&/")+"/")+ft)),q.push(J)),1;ft=0;var ie=lt===""?".":lt+":";if(L(S))for(var At=0;At"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l)}catch(i){console.error(i)}}return l(),es.exports=jg(),es.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var jh;function Lg(){if(jh)return Hi;jh=1;var l=Ug(),i=_s(),c=qg();function o(t){var e="https://react.dev/errors/"+t;if(1)":-1u||g[a]!==A[u]){var D=` +`+g[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{St=!1,Error.prepareStackTrace=n}return(n=t?t.displayName||t.name:"")?ct(n):""}function G(t){switch(t.tag){case 26:case 27:case 5:return ct(t.type);case 16:return ct("Lazy");case 13:return ct("Suspense");case 19:return ct("SuspenseList");case 0:case 15:return t=_t(t.type,!1),t;case 11:return t=_t(t.type.render,!1),t;case 1:return t=_t(t.type,!0),t;default:return""}}function it(t){try{var e="";do e+=G(t),t=t.return;while(t);return e}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}function tt(t){var e=t,n=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e=t,e.flags&4098&&(n=e.return),t=e.return;while(t)}return e.tag===3?n:null}function ot(t){if(t.tag===13){var e=t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e.dehydrated}return null}function S(t){if(tt(t)!==t)throw Error(o(188))}function q(t){var e=t.alternate;if(!e){if(e=tt(t),e===null)throw Error(o(188));return e!==t?null:t}for(var n=t,a=e;;){var u=n.return;if(u===null)break;var r=u.alternate;if(r===null){if(a=u.return,a!==null){n=a;continue}break}if(u.child===r.child){for(r=u.child;r;){if(r===n)return S(u),t;if(r===a)return S(u),e;r=r.sibling}throw Error(o(188))}if(n.return!==a.return)n=u,a=r;else{for(var f=!1,h=u.child;h;){if(h===n){f=!0,n=u,a=r;break}if(h===a){f=!0,a=u,n=r;break}h=h.sibling}if(!f){for(h=r.child;h;){if(h===n){f=!0,n=r,a=u;break}if(h===a){f=!0,a=r,n=u;break}h=h.sibling}if(!f)throw Error(o(189))}}if(n.alternate!==a)throw Error(o(190))}if(n.tag!==3)throw Error(o(188));return n.stateNode.current===n?t:e}function at(t){var e=t.tag;if(e===5||e===26||e===27||e===6)return t;for(t=t.child;t!==null;){if(e=at(t),e!==null)return e;t=t.sibling}return null}var lt=Array.isArray,J=c.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,bt={pending:!1,data:null,method:null,action:null},ft=[],ie=-1;function At(t){return{current:t}}function Yt(t){0>ie||(t.current=ft[ie],ft[ie]=null,ie--)}function Nt(t,e){ie++,ft[ie]=t.current,t.current=e}var De=At(null),oa=At(null),tn=At(null),Un=At(null);function Ha(t,e){switch(Nt(tn,e),Nt(oa,t),Nt(De,null),t=e.nodeType,t){case 9:case 11:e=(e=e.documentElement)&&(e=e.namespaceURI)?lh(e):0;break;default:if(t=t===8?e.parentNode:e,e=t.tagName,t=t.namespaceURI)t=lh(t),e=ih(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}Yt(De),Nt(De,e)}function Hn(){Yt(De),Yt(oa),Yt(tn)}function jn(t){t.memoizedState!==null&&Nt(Un,t);var e=De.current,n=ih(e,t.type);e!==n&&(Nt(oa,t),Nt(De,n))}function en(t){oa.current===t&&(Yt(De),Yt(oa)),Un.current===t&&(Yt(Un),wi._currentValue=bt)}var Hl=Object.prototype.hasOwnProperty,ja=l.unstable_scheduleCallback,jl=l.unstable_cancelCallback,dt=l.unstable_shouldYield,ry=l.unstable_requestPaint,nn=l.unstable_now,cy=l.unstable_getCurrentPriorityLevel,Qs=l.unstable_ImmediatePriority,Zs=l.unstable_UserBlockingPriority,tu=l.unstable_NormalPriority,oy=l.unstable_LowPriority,Ks=l.unstable_IdlePriority,sy=l.log,fy=l.unstable_setDisableYieldValue,ql=null,Te=null;function dy(t){if(Te&&typeof Te.onCommitFiberRoot=="function")try{Te.onCommitFiberRoot(ql,t,void 0,(t.current.flags&128)===128)}catch{}}function qn(t){if(typeof sy=="function"&&fy(t),Te&&typeof Te.setStrictMode=="function")try{Te.setStrictMode(ql,t)}catch{}}var Ae=Math.clz32?Math.clz32:yy,hy=Math.log,my=Math.LN2;function yy(t){return t>>>=0,t===0?32:31-(hy(t)/my|0)|0}var eu=128,nu=4194304;function sa(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function au(t,e){var n=t.pendingLanes;if(n===0)return 0;var a=0,u=t.suspendedLanes,r=t.pingedLanes,f=t.warmLanes;t=t.finishedLanes!==0;var h=n&134217727;return h!==0?(n=h&~u,n!==0?a=sa(n):(r&=h,r!==0?a=sa(r):t||(f=h&~f,f!==0&&(a=sa(f))))):(h=n&~u,h!==0?a=sa(h):r!==0?a=sa(r):t||(f=n&~f,f!==0&&(a=sa(f)))),a===0?0:e!==0&&e!==a&&!(e&u)&&(u=a&-a,f=e&-e,u>=f||u===32&&(f&4194176)!==0)?e:a}function Ll(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function py(t,e){switch(t){case 1:case 2:case 4:case 8:return e+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ws(){var t=eu;return eu<<=1,!(eu&4194176)&&(eu=128),t}function Js(){var t=nu;return nu<<=1,!(nu&62914560)&&(nu=4194304),t}function $r(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function Gl(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function gy(t,e,n,a,u,r){var f=t.pendingLanes;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=n,t.entangledLanes&=n,t.errorRecoveryDisabledLanes&=n,t.shellSuspendCounter=0;var h=t.entanglements,g=t.expirationTimes,A=t.hiddenUpdates;for(n=f&~n;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ty=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),lf={},uf={};function Ay(t){return Hl.call(uf,t)?!0:Hl.call(lf,t)?!1:Ty.test(t)?uf[t]=!0:(lf[t]=!0,!1)}function lu(t,e,n){if(Ay(e))if(n===null)t.removeAttribute(e);else{switch(typeof n){case"undefined":case"function":case"symbol":t.removeAttribute(e);return;case"boolean":var a=e.toLowerCase().slice(0,5);if(a!=="data-"&&a!=="aria-"){t.removeAttribute(e);return}}t.setAttribute(e,""+n)}}function iu(t,e,n){if(n===null)t.removeAttribute(e);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(e);return}t.setAttribute(e,""+n)}}function yn(t,e,n,a){if(a===null)t.removeAttribute(n);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(n);return}t.setAttributeNS(e,n,""+a)}}function Be(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function rf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function Ey(t){var e=rf(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var u=n.get,r=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(f){a=""+f,r.call(this,f)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(f){a=""+f},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function uu(t){t._valueTracker||(t._valueTracker=Ey(t))}function cf(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),a="";return t&&(a=rf(t)?t.checked?"true":"false":t.value),t=a,t!==n?(e.setValue(t),!0):!1}function ru(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var xy=/[\n"\\]/g;function Ne(t){return t.replace(xy,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Zr(t,e,n,a,u,r,f,h){t.name="",f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.type=f:t.removeAttribute("type"),e!=null?f==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+Be(e)):t.value!==""+Be(e)&&(t.value=""+Be(e)):f!=="submit"&&f!=="reset"||t.removeAttribute("value"),e!=null?Kr(t,f,Be(e)):n!=null?Kr(t,f,Be(n)):a!=null&&t.removeAttribute("value"),u==null&&r!=null&&(t.defaultChecked=!!r),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"?t.name=""+Be(h):t.removeAttribute("name")}function of(t,e,n,a,u,r,f,h){if(r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(t.type=r),e!=null||n!=null){if(!(r!=="submit"&&r!=="reset"||e!=null))return;n=n!=null?""+Be(n):"",e=e!=null?""+Be(e):n,h||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=h?t.checked:!!a,t.defaultChecked=!!a,f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"&&(t.name=f)}function Kr(t,e,n){e==="number"&&ru(t.ownerDocument)===t||t.defaultValue===""+n||(t.defaultValue=""+n)}function Va(t,e,n,a){if(t=t.options,e){e={};for(var u=0;u=Zl),Af=" ",Ef=!1;function xf(t,e){switch(t){case"keyup":return Py.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function _f(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Qa=!1;function tp(t,e){switch(t){case"compositionend":return _f(e);case"keypress":return e.which!==32?null:(Ef=!0,Af);case"textInput":return t=e.data,t===Af&&Ef?null:t;default:return null}}function ep(t,e){if(Qa)return t==="compositionend"||!ic&&xf(t,e)?(t=pf(),ou=tc=Gn=null,Qa=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=a}t:{for(;n;){if(n.nextSibling){n=n.nextSibling;break t}n=n.parentNode}n=void 0}n=Bf(n)}}function Uf(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Uf(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Hf(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=ru(t.document);e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=ru(t.document)}return e}function cc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function op(t,e){var n=Hf(e);e=t.focusedElem;var a=t.selectionRange;if(n!==e&&e&&e.ownerDocument&&Uf(e.ownerDocument.documentElement,e)){if(a!==null&&cc(e)){if(t=a.start,n=a.end,n===void 0&&(n=t),"selectionStart"in e)e.selectionStart=t,e.selectionEnd=Math.min(n,e.value.length);else if(n=(t=e.ownerDocument||document)&&t.defaultView||window,n.getSelection){n=n.getSelection();var u=e.textContent.length,r=Math.min(a.start,u);a=a.end===void 0?r:Math.min(a.end,u),!n.extend&&r>a&&(u=a,a=r,r=u),u=Nf(e,r);var f=Nf(e,a);u&&f&&(n.rangeCount!==1||n.anchorNode!==u.node||n.anchorOffset!==u.offset||n.focusNode!==f.node||n.focusOffset!==f.offset)&&(t=t.createRange(),t.setStart(u.node,u.offset),n.removeAllRanges(),r>a?(n.addRange(t),n.extend(f.node,f.offset)):(t.setEnd(f.node,f.offset),n.addRange(t)))}}for(t=[],n=e;n=n.parentNode;)n.nodeType===1&&t.push({element:n,left:n.scrollLeft,top:n.scrollTop});for(typeof e.focus=="function"&&e.focus(),e=0;e=document.documentMode,Za=null,oc=null,Fl=null,sc=!1;function jf(t,e,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;sc||Za==null||Za!==ru(a)||(a=Za,"selectionStart"in a&&cc(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Fl&&Jl(Fl,a)||(Fl=a,a=Ju(oc,"onSelect"),0>=f,u-=f,pn=1<<32-Ae(e)+u|n<ut?(le=nt,nt=null):le=nt.sibling;var xt=z(E,nt,x[ut],N);if(xt===null){nt===null&&(nt=le);break}t&&nt&&xt.alternate===null&&e(E,nt),T=r(xt,T,ut),yt===null?P=xt:yt.sibling=xt,yt=xt,nt=le}if(ut===x.length)return n(E,nt),Et&&ga(E,ut),P;if(nt===null){for(;utut?(le=nt,nt=null):le=nt.sibling;var ua=z(E,nt,xt.value,N);if(ua===null){nt===null&&(nt=le);break}t&&nt&&ua.alternate===null&&e(E,nt),T=r(ua,T,ut),yt===null?P=ua:yt.sibling=ua,yt=ua,nt=le}if(xt.done)return n(E,nt),Et&&ga(E,ut),P;if(nt===null){for(;!xt.done;ut++,xt=x.next())xt=H(E,xt.value,N),xt!==null&&(T=r(xt,T,ut),yt===null?P=xt:yt.sibling=xt,yt=xt);return Et&&ga(E,ut),P}for(nt=a(nt);!xt.done;ut++,xt=x.next())xt=M(nt,E,ut,xt.value,N),xt!==null&&(t&&xt.alternate!==null&&nt.delete(xt.key===null?ut:xt.key),T=r(xt,T,ut),yt===null?P=xt:yt.sibling=xt,yt=xt);return t&&nt.forEach(function(Cg){return e(E,Cg)}),Et&&ga(E,ut),P}function $t(E,T,x,N){if(typeof x=="object"&&x!==null&&x.type===v&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case m:t:{for(var P=x.key;T!==null;){if(T.key===P){if(P=x.type,P===v){if(T.tag===7){n(E,T.sibling),N=u(T,x.props.children),N.return=E,E=N;break t}}else if(T.elementType===P||typeof P=="object"&&P!==null&&P.$$typeof===F&&td(P)===T.type){n(E,T.sibling),N=u(T,x.props),li(N,x),N.return=E,E=N;break t}n(E,T);break}else e(E,T);T=T.sibling}x.type===v?(N=za(x.props.children,E.mode,N,x.key),N.return=E,E=N):(N=Gu(x.type,x.key,x.props,null,E.mode,N),li(N,x),N.return=E,E=N)}return f(E);case b:t:{for(P=x.key;T!==null;){if(T.key===P)if(T.tag===4&&T.stateNode.containerInfo===x.containerInfo&&T.stateNode.implementation===x.implementation){n(E,T.sibling),N=u(T,x.children||[]),N.return=E,E=N;break t}else{n(E,T);break}else e(E,T);T=T.sibling}N=ho(x,E.mode,N),N.return=E,E=N}return f(E);case F:return P=x._init,x=P(x._payload),$t(E,T,x,N)}if(lt(x))return I(E,T,x,N);if($(x)){if(P=$(x),typeof P!="function")throw Error(o(150));return x=P.call(x),st(E,T,x,N)}if(typeof x.then=="function")return $t(E,T,Tu(x),N);if(x.$$typeof===j)return $t(E,T,ju(E,x),N);Au(E,x)}return typeof x=="string"&&x!==""||typeof x=="number"||typeof x=="bigint"?(x=""+x,T!==null&&T.tag===6?(n(E,T.sibling),N=u(T,x),N.return=E,E=N):(n(E,T),N=fo(x,E.mode,N),N.return=E,E=N),f(E)):n(E,T)}return function(E,T,x,N){try{ai=0;var P=$t(E,T,x,N);return Ia=null,P}catch(nt){if(nt===ei)throw nt;var yt=Ve(29,nt,null,E.mode);return yt.lanes=N,yt.return=E,yt}finally{}}}var va=ed(!0),nd=ed(!1),tl=At(null),Eu=At(0);function ad(t,e){t=zn,Nt(Eu,t),Nt(tl,e),zn=t|e.baseLanes}function bc(){Nt(Eu,zn),Nt(tl,tl.current)}function vc(){zn=Eu.current,Yt(tl),Yt(Eu)}var Le=At(null),ln=null;function Vn(t){var e=t.alternate;Nt(It,It.current&1),Nt(Le,t),ln===null&&(e===null||tl.current!==null||e.memoizedState!==null)&&(ln=t)}function ld(t){if(t.tag===22){if(Nt(It,It.current),Nt(Le,t),ln===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(ln=t)}}else Xn()}function Xn(){Nt(It,It.current),Nt(Le,Le.current)}function bn(t){Yt(Le),ln===t&&(ln=null),Yt(It)}var It=At(0);function xu(t){for(var e=t;e!==null;){if(e.tag===13){var n=e.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var mp=typeof AbortController<"u"?AbortController:function(){var t=[],e=this.signal={aborted:!1,addEventListener:function(n,a){t.push(a)}};this.abort=function(){e.aborted=!0,t.forEach(function(n){return n()})}},yp=l.unstable_scheduleCallback,pp=l.unstable_NormalPriority,te={$$typeof:j,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Sc(){return{controller:new mp,data:new Map,refCount:0}}function ii(t){t.refCount--,t.refCount===0&&yp(pp,function(){t.controller.abort()})}var ui=null,Tc=0,el=0,nl=null;function gp(t,e){if(ui===null){var n=ui=[];Tc=0,el=zo(),nl={status:"pending",value:void 0,then:function(a){n.push(a)}}}return Tc++,e.then(id,id),e}function id(){if(--Tc===0&&ui!==null){nl!==null&&(nl.status="fulfilled");var t=ui;ui=null,el=0,nl=null;for(var e=0;er?r:8;var f=K.T,h={};K.T=h,qc(t,!1,e,n);try{var g=u(),A=K.S;if(A!==null&&A(h,g),g!==null&&typeof g=="object"&&typeof g.then=="function"){var D=bp(g,a);oi(t,e,D,Ce(t))}else oi(t,e,a,Ce(t))}catch(H){oi(t,e,{then:function(){},status:"rejected",reason:H},Ce())}finally{J.p=r,K.T=f}}function Ep(){}function Hc(t,e,n,a){if(t.tag!==5)throw Error(o(476));var u=Hd(t).queue;Ud(t,u,e,bt,n===null?Ep:function(){return jd(t),n(a)})}function Hd(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:bt,baseState:bt,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:vn,lastRenderedState:bt},next:null};var n={};return e.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:vn,lastRenderedState:n},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function jd(t){var e=Hd(t).next.queue;oi(t,e,{},Ce())}function jc(){return fe(wi)}function qd(){return Jt().memoizedState}function Ld(){return Jt().memoizedState}function xp(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var n=Ce();t=Kn(n);var a=Wn(e,t,n);a!==null&&(ye(a,e,n),di(a,e,n)),e={cache:Sc()},t.payload=e;return}e=e.return}}function _p(t,e,n){var a=Ce();n={lane:a,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Bu(t)?Yd(e,n):(n=hc(t,e,n,a),n!==null&&(ye(n,t,a),Vd(n,e,a)))}function Gd(t,e,n){var a=Ce();oi(t,e,n,a)}function oi(t,e,n,a){var u={lane:a,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Bu(t))Yd(e,u);else{var r=t.alternate;if(t.lanes===0&&(r===null||r.lanes===0)&&(r=e.lastRenderedReducer,r!==null))try{var f=e.lastRenderedState,h=r(f,n);if(u.hasEagerState=!0,u.eagerState=h,Ee(h,f))return pu(t,e,u,0),Ut===null&&yu(),!1}catch{}finally{}if(n=hc(t,e,u,a),n!==null)return ye(n,t,a),Vd(n,e,a),!0}return!1}function qc(t,e,n,a){if(a={lane:2,revertLane:zo(),action:a,hasEagerState:!1,eagerState:null,next:null},Bu(t)){if(e)throw Error(o(479))}else e=hc(t,n,a,2),e!==null&&ye(e,t,2)}function Bu(t){var e=t.alternate;return t===mt||e!==null&&e===mt}function Yd(t,e){al=Ou=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Vd(t,e,n){if(n&4194176){var a=e.lanes;a&=t.pendingLanes,n|=a,e.lanes=n,Ps(t,n)}}var un={readContext:fe,use:wu,useCallback:Zt,useContext:Zt,useEffect:Zt,useImperativeHandle:Zt,useLayoutEffect:Zt,useInsertionEffect:Zt,useMemo:Zt,useReducer:Zt,useRef:Zt,useState:Zt,useDebugValue:Zt,useDeferredValue:Zt,useTransition:Zt,useSyncExternalStore:Zt,useId:Zt};un.useCacheRefresh=Zt,un.useMemoCache=Zt,un.useHostTransitionStatus=Zt,un.useFormState=Zt,un.useActionState=Zt,un.useOptimistic=Zt;var Aa={readContext:fe,use:wu,useCallback:function(t,e){return ve().memoizedState=[t,e===void 0?null:e],t},useContext:fe,useEffect:Cd,useImperativeHandle:function(t,e,n){n=n!=null?n.concat([t]):null,Mu(4194308,4,Rd.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Mu(4194308,4,t,e)},useInsertionEffect:function(t,e){Mu(4,2,t,e)},useMemo:function(t,e){var n=ve();e=e===void 0?null:e;var a=t();if(Ta){qn(!0);try{t()}finally{qn(!1)}}return n.memoizedState=[a,e],a},useReducer:function(t,e,n){var a=ve();if(n!==void 0){var u=n(e);if(Ta){qn(!0);try{n(e)}finally{qn(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=_p.bind(null,mt,t),[a.memoizedState,t]},useRef:function(t){var e=ve();return t={current:t},e.memoizedState=t},useState:function(t){t=Mc(t);var e=t.queue,n=Gd.bind(null,mt,e);return e.dispatch=n,[t.memoizedState,n]},useDebugValue:Nc,useDeferredValue:function(t,e){var n=ve();return Uc(n,t,e)},useTransition:function(){var t=Mc(!1);return t=Ud.bind(null,mt,t.queue,!0,!1),ve().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,n){var a=mt,u=ve();if(Et){if(n===void 0)throw Error(o(407));n=n()}else{if(n=e(),Ut===null)throw Error(o(349));Tt&60||fd(a,e,n)}u.memoizedState=n;var r={value:n,getSnapshot:e};return u.queue=r,Cd(hd.bind(null,a,r,t),[t]),a.flags|=2048,il(9,dd.bind(null,a,r,n,e),{destroy:void 0},null),n},useId:function(){var t=ve(),e=Ut.identifierPrefix;if(Et){var n=gn,a=pn;n=(a&~(1<<32-Ae(a)-1)).toString(32)+n,e=":"+e+"R"+n,n=Cu++,0 title"))),ce(r,a,n),r[se]=t,ee(r),a=r;break t;case"link":var f=yh("link","href",u).get(a+(n.href||""));if(f){for(var h=0;h<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof a.is=="string"?u.createElement("select",{is:a.is}):u.createElement("select"),a.multiple?t.multiple=!0:a.size&&(t.size=a.size);break;default:t=typeof a.is=="string"?u.createElement(n,{is:a.is}):u.createElement(n)}}t[se]=e,t[ge]=a;t:for(u=e.child;u!==null;){if(u.tag===5||u.tag===6)t.appendChild(u.stateNode);else if(u.tag!==4&&u.tag!==27&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===e)break t;for(;u.sibling===null;){if(u.return===null||u.return===e)break t;u=u.return}u.sibling.return=u.return,u=u.sibling}e.stateNode=t;t:switch(ce(t,n,a),n){case"button":case"input":case"select":case"textarea":t=!!a.autoFocus;break t;case"img":t=!0;break t;default:t=!1}t&&On(e)}}return Lt(e),e.flags&=-16777217,null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&On(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(o(166));if(t=tn.current,Pl(e)){if(t=e.stateNode,n=e.memoizedProps,a=null,u=me,u!==null)switch(u.tag){case 27:case 5:a=u.memoizedProps}t[se]=e,t=!!(t.nodeValue===n||a!==null&&a.suppressHydrationWarning===!0||ah(t.nodeValue,n)),t||ba(e)}else t=Pu(t).createTextNode(a),t[se]=e,e.stateNode=t}return Lt(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(u=Pl(e),a!==null&&a.dehydrated!==null){if(t===null){if(!u)throw Error(o(318));if(u=e.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(o(317));u[se]=e}else Il(),!(e.flags&128)&&(e.memoizedState=null),e.flags|=4;Lt(e),u=!1}else Je!==null&&(To(Je),Je=null),u=!0;if(!u)return e.flags&256?(bn(e),e):(bn(e),null)}if(bn(e),e.flags&128)return e.lanes=n,e;if(n=a!==null,t=t!==null&&t.memoizedState!==null,n){a=e.child,u=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(u=a.alternate.memoizedState.cachePool.pool);var r=null;a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(r=a.memoizedState.cachePool.pool),r!==u&&(a.flags|=2048)}return n!==t&&n&&(e.child.flags|=8192),Yu(e,e.updateQueue),Lt(e),null;case 4:return Hn(),t===null&&Do(e.stateNode.containerInfo),Lt(e),null;case 10:return An(e.type),Lt(e),null;case 19:if(Yt(It),u=e.memoizedState,u===null)return Lt(e),null;if(a=(e.flags&128)!==0,r=u.rendering,r===null)if(a)vi(u,!1);else{if(Xt!==0||t!==null&&t.flags&128)for(t=e.child;t!==null;){if(r=xu(t),r!==null){for(e.flags|=128,vi(u,!1),t=r.updateQueue,e.updateQueue=t,Yu(e,t),e.subtreeFlags=0,t=n,n=e.child;n!==null;)M0(n,t),n=n.sibling;return Nt(It,It.current&1|2),e.child}t=t.sibling}u.tail!==null&&nn()>Vu&&(e.flags|=128,a=!0,vi(u,!1),e.lanes=4194304)}else{if(!a)if(t=xu(r),t!==null){if(e.flags|=128,a=!0,t=t.updateQueue,e.updateQueue=t,Yu(e,t),vi(u,!0),u.tail===null&&u.tailMode==="hidden"&&!r.alternate&&!Et)return Lt(e),null}else 2*nn()-u.renderingStartTime>Vu&&n!==536870912&&(e.flags|=128,a=!0,vi(u,!1),e.lanes=4194304);u.isBackwards?(r.sibling=e.child,e.child=r):(t=u.last,t!==null?t.sibling=r:e.child=r,u.last=r)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=nn(),e.sibling=null,t=It.current,Nt(It,a?t&1|2:t&1),e):(Lt(e),null);case 22:case 23:return bn(e),vc(),a=e.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(e.flags|=8192):a&&(e.flags|=8192),a?n&536870912&&!(e.flags&128)&&(Lt(e),e.subtreeFlags&6&&(e.flags|=8192)):Lt(e),n=e.updateQueue,n!==null&&Yu(e,n.retryQueue),n=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),a=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),a!==n&&(e.flags|=2048),t!==null&&Yt(Sa),null;case 24:return n=null,t!==null&&(n=t.memoizedState.cache),e.memoizedState.cache!==n&&(e.flags|=2048),An(te),Lt(e),null;case 25:return null}throw Error(o(156,e.tag))}function Dp(t,e){switch(yc(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return An(te),Hn(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return en(e),null;case 13:if(bn(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(o(340));Il()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return Yt(It),null;case 4:return Hn(),null;case 10:return An(e.type),null;case 22:case 23:return bn(e),vc(),t!==null&&Yt(Sa),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return An(te),null;case 25:return null;default:return null}}function N0(t,e){switch(yc(e),e.tag){case 3:An(te),Hn();break;case 26:case 27:case 5:en(e);break;case 4:Hn();break;case 13:bn(e);break;case 19:Yt(It);break;case 10:An(e.type);break;case 22:case 23:bn(e),vc(),t!==null&&Yt(Sa);break;case 24:An(te)}}var Bp={getCacheForType:function(t){var e=fe(te),n=e.data.get(t);return n===void 0&&(n=t(),e.data.set(t,n)),n}},Np=typeof WeakMap=="function"?WeakMap:Map,Gt=0,Ut=null,pt=null,Tt=0,Ht=0,Oe=null,Cn=!1,ol=!1,mo=!1,zn=0,Xt=0,ta=0,wa=0,yo=0,Xe=0,sl=0,Si=null,rn=null,po=!1,go=0,Vu=1/0,Xu=null,ea=null,$u=!1,Ra=null,Ti=0,bo=0,vo=null,Ai=0,So=null;function Ce(){if(Gt&2&&Tt!==0)return Tt&-Tt;if(K.T!==null){var t=el;return t!==0?t:zo()}return tf()}function U0(){Xe===0&&(Xe=!(Tt&536870912)||Et?Ws():536870912);var t=Le.current;return t!==null&&(t.flags|=32),Xe}function ye(t,e,n){(t===Ut&&Ht===2||t.cancelPendingCommit!==null)&&(fl(t,0),wn(t,Tt,Xe,!1)),Gl(t,n),(!(Gt&2)||t!==Ut)&&(t===Ut&&(!(Gt&2)&&(wa|=n),Xt===4&&wn(t,Tt,Xe,!1)),cn(t))}function H0(t,e,n){if(Gt&6)throw Error(o(327));var a=!n&&(e&60)===0&&(e&t.expiredLanes)===0||Ll(t,e),u=a?jp(t,e):xo(t,e,!0),r=a;do{if(u===0){ol&&!a&&wn(t,e,0,!1);break}else if(u===6)wn(t,e,0,!Cn);else{if(n=t.current.alternate,r&&!Up(n)){u=xo(t,e,!1),r=!1;continue}if(u===2){if(r=e,t.errorRecoveryDisabledLanes&r)var f=0;else f=t.pendingLanes&-536870913,f=f!==0?f:f&536870912?536870912:0;if(f!==0){e=f;t:{var h=t;u=Si;var g=h.current.memoizedState.isDehydrated;if(g&&(fl(h,f).flags|=256),f=xo(h,f,!1),f!==2){if(mo&&!g){h.errorRecoveryDisabledLanes|=r,wa|=r,u=4;break t}r=rn,rn=u,r!==null&&To(r)}u=f}if(r=!1,u!==2)continue}}if(u===1){fl(t,0),wn(t,e,0,!0);break}t:{switch(a=t,u){case 0:case 1:throw Error(o(345));case 4:if((e&4194176)===e){wn(a,e,Xe,!Cn);break t}break;case 2:rn=null;break;case 3:case 5:break;default:throw Error(o(329))}if(a.finishedWork=n,a.finishedLanes=e,(e&62914560)===e&&(r=go+300-nn(),10n?32:n,K.T=null,Ra===null)var r=!1;else{n=vo,vo=null;var f=Ra,h=Ti;if(Ra=null,Ti=0,Gt&6)throw Error(o(331));var g=Gt;if(Gt|=4,w0(f.current),O0(f,f.current,h,n),Gt=g,Ei(0,!1),Te&&typeof Te.onPostCommitFiberRoot=="function")try{Te.onPostCommitFiberRoot(ql,f)}catch{}r=!0}return r}finally{J.p=u,K.T=a,k0(t,e)}}return!1}function Q0(t,e,n){e=He(n,e),e=Yc(t.stateNode,e,2),t=Wn(t,e,2),t!==null&&(Gl(t,2),cn(t))}function Mt(t,e,n){if(t.tag===3)Q0(t,t,n);else for(;e!==null;){if(e.tag===3){Q0(e,t,n);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(ea===null||!ea.has(a))){t=He(n,t),n=Wd(2),a=Wn(e,n,2),a!==null&&(Jd(n,a,e,t),Gl(a,2),cn(a));break}}e=e.return}}function _o(t,e,n){var a=t.pingCache;if(a===null){a=t.pingCache=new Np;var u=new Set;a.set(e,u)}else u=a.get(e),u===void 0&&(u=new Set,a.set(e,u));u.has(n)||(mo=!0,u.add(n),t=Gp.bind(null,t,e,n),e.then(t,t))}function Gp(t,e,n){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&n,t.warmLanes&=~n,Ut===t&&(Tt&n)===n&&(Xt===4||Xt===3&&(Tt&62914560)===Tt&&300>nn()-go?!(Gt&2)&&fl(t,0):yo|=n,sl===Tt&&(sl=0)),cn(t)}function Z0(t,e){e===0&&(e=Js()),t=Yn(t,e),t!==null&&(Gl(t,e),cn(t))}function Yp(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),Z0(t,n)}function Vp(t,e){var n=0;switch(t.tag){case 13:var a=t.stateNode,u=t.memoizedState;u!==null&&(n=u.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(o(314))}a!==null&&a.delete(e),Z0(t,n)}function Xp(t,e){return ja(t,e)}var Zu=null,ml=null,Oo=!1,Ku=!1,Co=!1,Ma=0;function cn(t){t!==ml&&t.next===null&&(ml===null?Zu=ml=t:ml=ml.next=t),Ku=!0,Oo||(Oo=!0,kp($p))}function Ei(t,e){if(!Co&&Ku){Co=!0;do for(var n=!1,a=Zu;a!==null;){if(t!==0){var u=a.pendingLanes;if(u===0)var r=0;else{var f=a.suspendedLanes,h=a.pingedLanes;r=(1<<31-Ae(42|t)+1)-1,r&=u&~(f&~h),r=r&201326677?r&201326677|1:r?r|2:0}r!==0&&(n=!0,J0(a,r))}else r=Tt,r=au(a,a===Ut?r:0),!(r&3)||Ll(a,r)||(n=!0,J0(a,r));a=a.next}while(n);Co=!1}}function $p(){Ku=Oo=!1;var t=0;Ma!==0&&(Ip()&&(t=Ma),Ma=0);for(var e=nn(),n=null,a=Zu;a!==null;){var u=a.next,r=K0(a,e);r===0?(a.next=null,n===null?Zu=u:n.next=u,u===null&&(ml=n)):(n=a,(t!==0||r&3)&&(Ku=!0)),a=u}Ei(t)}function K0(t,e){for(var n=t.suspendedLanes,a=t.pingedLanes,u=t.expirationTimes,r=t.pendingLanes&-62914561;0"u"?null:document;function fh(t,e,n){var a=pl;if(a&&typeof e=="string"&&e){var u=Ne(e);u='link[rel="'+t+'"][href="'+u+'"]',typeof n=="string"&&(u+='[crossorigin="'+n+'"]'),sh.has(u)||(sh.add(u),t={rel:t,crossOrigin:n,href:e},a.querySelector(u)===null&&(e=a.createElement("link"),ce(e,"link",t),ee(e),a.head.appendChild(e)))}}function rg(t){Rn.D(t),fh("dns-prefetch",t,null)}function cg(t,e){Rn.C(t,e),fh("preconnect",t,e)}function og(t,e,n){Rn.L(t,e,n);var a=pl;if(a&&t&&e){var u='link[rel="preload"][as="'+Ne(e)+'"]';e==="image"&&n&&n.imageSrcSet?(u+='[imagesrcset="'+Ne(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(u+='[imagesizes="'+Ne(n.imageSizes)+'"]')):u+='[href="'+Ne(t)+'"]';var r=u;switch(e){case"style":r=gl(t);break;case"script":r=bl(t)}$e.has(r)||(t=y({rel:"preload",href:e==="image"&&n&&n.imageSrcSet?void 0:t,as:e},n),$e.set(r,t),a.querySelector(u)!==null||e==="style"&&a.querySelector(Oi(r))||e==="script"&&a.querySelector(Ci(r))||(e=a.createElement("link"),ce(e,"link",t),ee(e),a.head.appendChild(e)))}}function sg(t,e){Rn.m(t,e);var n=pl;if(n&&t){var a=e&&typeof e.as=="string"?e.as:"script",u='link[rel="modulepreload"][as="'+Ne(a)+'"][href="'+Ne(t)+'"]',r=u;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":r=bl(t)}if(!$e.has(r)&&(t=y({rel:"modulepreload",href:t},e),$e.set(r,t),n.querySelector(u)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Ci(r)))return}a=n.createElement("link"),ce(a,"link",t),ee(a),n.head.appendChild(a)}}}function fg(t,e,n){Rn.S(t,e,n);var a=pl;if(a&&t){var u=Ga(a).hoistableStyles,r=gl(t);e=e||"default";var f=u.get(r);if(!f){var h={loading:0,preload:null};if(f=a.querySelector(Oi(r)))h.loading=5;else{t=y({rel:"stylesheet",href:t,"data-precedence":e},n),(n=$e.get(r))&&Yo(t,n);var g=f=a.createElement("link");ee(g),ce(g,"link",t),g._p=new Promise(function(A,D){g.onload=A,g.onerror=D}),g.addEventListener("load",function(){h.loading|=1}),g.addEventListener("error",function(){h.loading|=2}),h.loading|=4,tr(f,e,a)}f={type:"stylesheet",instance:f,count:1,state:h},u.set(r,f)}}}function dg(t,e){Rn.X(t,e);var n=pl;if(n&&t){var a=Ga(n).hoistableScripts,u=bl(t),r=a.get(u);r||(r=n.querySelector(Ci(u)),r||(t=y({src:t,async:!0},e),(e=$e.get(u))&&Vo(t,e),r=n.createElement("script"),ee(r),ce(r,"link",t),n.head.appendChild(r)),r={type:"script",instance:r,count:1,state:null},a.set(u,r))}}function hg(t,e){Rn.M(t,e);var n=pl;if(n&&t){var a=Ga(n).hoistableScripts,u=bl(t),r=a.get(u);r||(r=n.querySelector(Ci(u)),r||(t=y({src:t,async:!0,type:"module"},e),(e=$e.get(u))&&Vo(t,e),r=n.createElement("script"),ee(r),ce(r,"link",t),n.head.appendChild(r)),r={type:"script",instance:r,count:1,state:null},a.set(u,r))}}function dh(t,e,n,a){var u=(u=tn.current)?Iu(u):null;if(!u)throw Error(o(446));switch(t){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(e=gl(n.href),n=Ga(u).hoistableStyles,a=n.get(e),a||(a={type:"style",instance:null,count:0,state:null},n.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){t=gl(n.href);var r=Ga(u).hoistableStyles,f=r.get(t);if(f||(u=u.ownerDocument||u,f={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},r.set(t,f),(r=u.querySelector(Oi(t)))&&!r._p&&(f.instance=r,f.state.loading=5),$e.has(t)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},$e.set(t,n),r||mg(u,t,n,f.state))),e&&a===null)throw Error(o(528,""));return f}if(e&&a!==null)throw Error(o(529,""));return null;case"script":return e=n.async,n=n.src,typeof n=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=bl(n),n=Ga(u).hoistableScripts,a=n.get(e),a||(a={type:"script",instance:null,count:0,state:null},n.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,t))}}function gl(t){return'href="'+Ne(t)+'"'}function Oi(t){return'link[rel="stylesheet"]['+t+"]"}function hh(t){return y({},t,{"data-precedence":t.precedence,precedence:null})}function mg(t,e,n,a){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?a.loading=1:(e=t.createElement("link"),a.preload=e,e.addEventListener("load",function(){return a.loading|=1}),e.addEventListener("error",function(){return a.loading|=2}),ce(e,"link",n),ee(e),t.head.appendChild(e))}function bl(t){return'[src="'+Ne(t)+'"]'}function Ci(t){return"script[async]"+t}function mh(t,e,n){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+Ne(n.href)+'"]');if(a)return e.instance=a,ee(a),a;var u=y({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),ee(a),ce(a,"style",u),tr(a,n.precedence,t),e.instance=a;case"stylesheet":u=gl(n.href);var r=t.querySelector(Oi(u));if(r)return e.state.loading|=4,e.instance=r,ee(r),r;a=hh(n),(u=$e.get(u))&&Yo(a,u),r=(t.ownerDocument||t).createElement("link"),ee(r);var f=r;return f._p=new Promise(function(h,g){f.onload=h,f.onerror=g}),ce(r,"link",a),e.state.loading|=4,tr(r,n.precedence,t),e.instance=r;case"script":return r=bl(n.src),(u=t.querySelector(Ci(r)))?(e.instance=u,ee(u),u):(a=n,(u=$e.get(r))&&(a=y({},n),Vo(a,u)),t=t.ownerDocument||t,u=t.createElement("script"),ee(u),ce(u,"link",a),t.head.appendChild(u),e.instance=u);case"void":return null;default:throw Error(o(443,e.type))}else e.type==="stylesheet"&&!(e.state.loading&4)&&(a=e.instance,e.state.loading|=4,tr(a,n.precedence,t));return e.instance}function tr(t,e,n){for(var a=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=a.length?a[a.length-1]:null,r=u,f=0;f title"):null)}function yg(t,e,n){if(n===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function gh(t){return!(t.type==="stylesheet"&&!(t.state.loading&3))}var zi=null;function pg(){}function gg(t,e,n){if(zi===null)throw Error(o(475));var a=zi;if(e.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&!(e.state.loading&4)){if(e.instance===null){var u=gl(n.href),r=t.querySelector(Oi(u));if(r){t=r._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(a.count++,a=nr.bind(a),t.then(a,a)),e.state.loading|=4,e.instance=r,ee(r);return}r=t.ownerDocument||t,n=hh(n),(u=$e.get(u))&&Yo(n,u),r=r.createElement("link"),ee(r);var f=r;f._p=new Promise(function(h,g){f.onload=h,f.onerror=g}),ce(r,"link",n),e.instance=r}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(e,t),(t=e.state.preload)&&!(e.state.loading&3)&&(a.count++,e=nr.bind(a),t.addEventListener("load",e),t.addEventListener("error",e))}}function bg(){if(zi===null)throw Error(o(475));var t=zi;return t.stylesheets&&t.count===0&&Xo(t,t.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l)}catch(i){console.error(i)}}return l(),Fo.exports=Lg(),Fo.exports}var Yg=Gg();const $i={black:"#000",white:"#fff"},vl={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Sl={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},Tl={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},Al={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},El={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},ji={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},Vg={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"};function Ba(l,...i){const c=new URL(`https://mui.com/production-error/?code=${l}`);return i.forEach(o=>c.searchParams.append("args[]",o)),`Minified MUI error #${l}; visit ${c} for the full message.`}const Os="$$material";function Er(){return Er=Object.assign?Object.assign.bind():function(l){for(var i=1;i0?oe(Ml,--Se):0,Rl--,Pt===10&&(Rl=1,wr--),Pt}function Re(){return Pt=Se2||Qi(Pt)>3?"":" "}function a1(l,i){for(;--i&&Re()&&!(Pt<48||Pt>102||Pt>57&&Pt<65||Pt>70&&Pt<97););return Ki(l,yr()+(i<6&&hn()==32&&Re()==32))}function fs(l){for(;Re();)switch(Pt){case l:return Se;case 34:case 39:l!==34&&l!==39&&fs(Pt);break;case 40:l===41&&fs(l);break;case 92:Re();break}return Se}function l1(l,i){for(;Re()&&l+Pt!==57;)if(l+Pt===84&&hn()===47)break;return"/*"+Ki(i,Se-1)+"*"+zr(l===47?l:Re())}function i1(l){for(;!Qi(hn());)Re();return Ki(l,Se)}function u1(l){return xm(gr("",null,null,null,[""],l=Em(l),0,[0],l))}function gr(l,i,c,o,s,d,m,b,v){for(var p=0,C=0,_=m,w=0,j=0,B=0,U=1,X=1,Q=1,F=0,V="",L=s,O=d,$=o,W=V;X;)switch(B=F,F=Re()){case 40:if(B!=108&&oe(W,_-1)==58){ss(W+=Ct(pr(F),"&","&\f"),"&\f")!=-1&&(Q=-1);break}case 34:case 39:case 91:W+=pr(F);break;case 9:case 10:case 13:case 32:W+=n1(B);break;case 92:W+=a1(yr()-1,7);continue;case 47:switch(hn()){case 42:case 47:fr(r1(l1(Re(),yr()),i,c),v);break;default:W+="/"}break;case 123*U:b[p++]=sn(W)*Q;case 125*U:case 59:case 0:switch(F){case 0:case 125:X=0;case 59+C:Q==-1&&(W=Ct(W,/\f/g,"")),j>0&&sn(W)-_&&fr(j>32?Yh(W+";",o,c,_-1):Yh(Ct(W," ","")+";",o,c,_-2),v);break;case 59:W+=";";default:if(fr($=Gh(W,i,c,p,C,s,b,V,L=[],O=[],_),d),F===123)if(C===0)gr(W,i,$,$,L,d,_,b,O);else switch(w===99&&oe(W,3)===110?100:w){case 100:case 108:case 109:case 115:gr(l,$,$,o&&fr(Gh(l,$,$,0,0,s,b,V,s,L=[],_),O),s,O,_,b,o?L:O);break;default:gr(W,$,$,$,[""],O,0,b,O)}}p=C=j=0,U=Q=1,V=W="",_=m;break;case 58:_=1+sn(W),j=B;default:if(U<1){if(F==123)--U;else if(F==125&&U++==0&&e1()==125)continue}switch(W+=zr(F),F*U){case 38:Q=C>0?1:(W+="\f",-1);break;case 44:b[p++]=(sn(W)-1)*Q,Q=1;break;case 64:hn()===45&&(W+=pr(Re())),w=hn(),C=_=sn(V=W+=i1(yr())),F++;break;case 45:B===45&&sn(W)==2&&(U=0)}}return d}function Gh(l,i,c,o,s,d,m,b,v,p,C){for(var _=s-1,w=s===0?d:[""],j=ws(w),B=0,U=0,X=0;B0?w[Q]+" "+F:Ct(F,/&\f/g,w[Q])))&&(v[X++]=V);return Rr(l,i,c,s===0?Cs:b,v,p,C)}function r1(l,i,c){return Rr(l,i,c,vm,zr(t1()),ki(l,2,-2),0)}function Yh(l,i,c,o){return Rr(l,i,c,zs,ki(l,0,o),ki(l,o+1,-1),o)}function zl(l,i){for(var c="",o=ws(l),s=0;s6)switch(oe(l,i+1)){case 109:if(oe(l,i+4)!==45)break;case 102:return Ct(l,/(.+:)(.+)-([^]+)/,"$1"+Ot+"$2-$3$1"+xr+(oe(l,i+3)==108?"$3":"$2-$3"))+l;case 115:return~ss(l,"stretch")?Om(Ct(l,"stretch","fill-available"),i)+l:l}break;case 4949:if(oe(l,i+1)!==115)break;case 6444:switch(oe(l,sn(l)-3-(~ss(l,"!important")&&10))){case 107:return Ct(l,":",":"+Ot)+l;case 101:return Ct(l,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ot+(oe(l,14)===45?"inline-":"")+"box$3$1"+Ot+"$2$3$1"+he+"$2box$3")+l}break;case 5936:switch(oe(l,i+11)){case 114:return Ot+l+he+Ct(l,/[svh]\w+-[tblr]{2}/,"tb")+l;case 108:return Ot+l+he+Ct(l,/[svh]\w+-[tblr]{2}/,"tb-rl")+l;case 45:return Ot+l+he+Ct(l,/[svh]\w+-[tblr]{2}/,"lr")+l}return Ot+l+he+l+l}return l}var p1=function(i,c,o,s){if(i.length>-1&&!i.return)switch(i.type){case zs:i.return=Om(i.value,i.length);break;case Sm:return zl([qi(i,{value:Ct(i.value,"@","@"+Ot)})],s);case Cs:if(i.length)return Ig(i.props,function(d){switch(Pg(d,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return zl([qi(i,{props:[Ct(d,/:(read-\w+)/,":"+xr+"$1")]})],s);case"::placeholder":return zl([qi(i,{props:[Ct(d,/:(plac\w+)/,":"+Ot+"input-$1")]}),qi(i,{props:[Ct(d,/:(plac\w+)/,":"+xr+"$1")]}),qi(i,{props:[Ct(d,/:(plac\w+)/,he+"input-$1")]})],s)}return""})}},g1=[p1],b1=function(i){var c=i.key;if(c==="css"){var o=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(o,function(U){var X=U.getAttribute("data-emotion");X.indexOf(" ")!==-1&&(document.head.appendChild(U),U.setAttribute("data-s",""))})}var s=i.stylisPlugins||g1,d={},m,b=[];m=i.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+c+' "]'),function(U){for(var X=U.getAttribute("data-emotion").split(" "),Q=1;Q=4;++o,s-=4)c=l.charCodeAt(o)&255|(l.charCodeAt(++o)&255)<<8|(l.charCodeAt(++o)&255)<<16|(l.charCodeAt(++o)&255)<<24,c=(c&65535)*1540483477+((c>>>16)*59797<<16),c^=c>>>24,i=(c&65535)*1540483477+((c>>>16)*59797<<16)^(i&65535)*1540483477+((i>>>16)*59797<<16);switch(s){case 3:i^=(l.charCodeAt(o+2)&255)<<16;case 2:i^=(l.charCodeAt(o+1)&255)<<8;case 1:i^=l.charCodeAt(o)&255,i=(i&65535)*1540483477+((i>>>16)*59797<<16)}return i^=i>>>13,i=(i&65535)*1540483477+((i>>>16)*59797<<16),((i^i>>>15)>>>0).toString(36)}var x1={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},_1=/[A-Z]|^ms/g,O1=/_EMO_([^_]+?)_([^]*?)_EMO_/g,zm=function(i){return i.charCodeAt(1)===45},Qh=function(i){return i!=null&&typeof i!="boolean"},ls=_m(function(l){return zm(l)?l:l.replace(_1,"-$&").toLowerCase()}),Zh=function(i,c){switch(i){case"animation":case"animationName":if(typeof c=="string")return c.replace(O1,function(o,s,d){return fn={name:s,styles:d,next:fn},s})}return x1[i]!==1&&!zm(i)&&typeof c=="number"&&c!==0?c+"px":c};function Zi(l,i,c){if(c==null)return"";var o=c;if(o.__emotion_styles!==void 0)return o;switch(typeof c){case"boolean":return"";case"object":{var s=c;if(s.anim===1)return fn={name:s.name,styles:s.styles,next:fn},s.name;var d=c;if(d.styles!==void 0){var m=d.next;if(m!==void 0)for(;m!==void 0;)fn={name:m.name,styles:m.styles,next:fn},m=m.next;var b=d.styles+";";return b}return C1(l,i,c)}case"function":{if(l!==void 0){var v=fn,p=c(l);return fn=v,Zi(l,i,p)}break}}var C=c;if(i==null)return C;var _=i[C];return _!==void 0?_:C}function C1(l,i,c){var o="";if(Array.isArray(c))for(var s=0;s96?q1:L1},Fh=function(i,c,o){var s;if(c){var d=c.shouldForwardProp;s=i.__emotion_forwardProp&&d?function(m){return i.__emotion_forwardProp(m)&&d(m)}:d}return typeof s!="function"&&o&&(s=i.__emotion_forwardProp),s},G1=function(i){var c=i.cache,o=i.serialized,s=i.isStringTag;return Rs(c,o,s),Rm(function(){return Ms(c,o,s)}),null},Y1=function l(i,c){var o=i.__emotion_real===i,s=o&&i.__emotion_base||i,d,m;c!==void 0&&(d=c.label,m=c.target);var b=Fh(i,c,o),v=b||Jh(s),p=!v("as");return function(){var C=arguments,_=o&&i.__emotion_styles!==void 0?i.__emotion_styles.slice(0):[];if(d!==void 0&&_.push("label:"+d+";"),C[0]==null||C[0].raw===void 0)_.push.apply(_,C);else{var w=C[0];_.push(w[0]);for(var j=C.length,B=1;Bi(X1(s)?c:s):i;return rt.jsx(U1,{styles:o})}/** + * @mui/styled-engine v6.3.0 + * + * @license MIT + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */function Dm(l,i){return hs(l,i)}function k1(l,i){Array.isArray(l.__emotion_styles)&&(l.__emotion_styles=i(l.__emotion_styles))}const Ph=[];function Ih(l){return Ph[0]=l,Wi(Ph)}function dn(l){if(typeof l!="object"||l===null)return!1;const i=Object.getPrototypeOf(l);return(i===null||i===Object.prototype||Object.getPrototypeOf(i)===null)&&!(Symbol.toStringTag in l)&&!(Symbol.iterator in l)}function Bm(l){if(k.isValidElement(l)||!dn(l))return l;const i={};return Object.keys(l).forEach(c=>{i[c]=Bm(l[c])}),i}function Me(l,i,c={clone:!0}){const o=c.clone?{...l}:l;return dn(l)&&dn(i)&&Object.keys(i).forEach(s=>{k.isValidElement(i[s])?o[s]=i[s]:dn(i[s])&&Object.prototype.hasOwnProperty.call(l,s)&&dn(l[s])?o[s]=Me(l[s],i[s],c):c.clone?o[s]=dn(i[s])?Bm(i[s]):i[s]:o[s]=i[s]}),o}const Q1=l=>{const i=Object.keys(l).map(c=>({key:c,val:l[c]}))||[];return i.sort((c,o)=>c.val-o.val),i.reduce((c,o)=>({...c,[o.key]:o.val}),{})};function Z1(l){const{values:i={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:c="px",step:o=5,...s}=l,d=Q1(i),m=Object.keys(d);function b(w){return`@media (min-width:${typeof i[w]=="number"?i[w]:w}${c})`}function v(w){return`@media (max-width:${(typeof i[w]=="number"?i[w]:w)-o/100}${c})`}function p(w,j){const B=m.indexOf(j);return`@media (min-width:${typeof i[w]=="number"?i[w]:w}${c}) and (max-width:${(B!==-1&&typeof i[m[B]]=="number"?i[m[B]]:j)-o/100}${c})`}function C(w){return m.indexOf(w)+1o.startsWith("@container")).sort((o,s)=>{var m,b;const d=/min-width:\s*([0-9.]+)/;return+(((m=o.match(d))==null?void 0:m[1])||0)-+(((b=s.match(d))==null?void 0:b[1])||0)});return c.length?c.reduce((o,s)=>{const d=i[s];return delete o[s],o[s]=d,o},{...i}):i}function W1(l,i){return i==="@"||i.startsWith("@")&&(l.some(c=>i.startsWith(`@${c}`))||!!i.match(/^@\d/))}function J1(l,i){const c=i.match(/^@([^/]+)?\/?(.+)?$/);if(!c)return null;const[,o,s]=c,d=Number.isNaN(+o)?o||0:+o;return l.containerQueries(s).up(d)}function F1(l){const i=(d,m)=>d.replace("@media",m?`@container ${m}`:"@container");function c(d,m){d.up=(...b)=>i(l.breakpoints.up(...b),m),d.down=(...b)=>i(l.breakpoints.down(...b),m),d.between=(...b)=>i(l.breakpoints.between(...b),m),d.only=(...b)=>i(l.breakpoints.only(...b),m),d.not=(...b)=>{const v=i(l.breakpoints.not(...b),m);return v.includes("not all and")?v.replace("not all and ","").replace("min-width:","width<").replace("max-width:","width>").replace("and","or"):v}}const o={},s=d=>(c(o,d),o);return c(s),{...l,containerQueries:s}}const P1={borderRadius:4};function Yi(l,i){return i?Me(l,i,{clone:!1}):l}const Br={xs:0,sm:600,md:900,lg:1200,xl:1536},tm={keys:["xs","sm","md","lg","xl"],up:l=>`@media (min-width:${Br[l]}px)`},I1={containerQueries:l=>({up:i=>{let c=typeof i=="number"?i:Br[i]||i;return typeof c=="number"&&(c=`${c}px`),l?`@container ${l} (min-width:${c})`:`@container (min-width:${c})`}})};function Nn(l,i,c){const o=l.theme||{};if(Array.isArray(i)){const d=o.breakpoints||tm;return i.reduce((m,b,v)=>(m[d.up(d.keys[v])]=c(i[v]),m),{})}if(typeof i=="object"){const d=o.breakpoints||tm;return Object.keys(i).reduce((m,b)=>{if(W1(d.keys,b)){const v=J1(o.containerQueries?o:I1,b);v&&(m[v]=c(i[b],b))}else if(Object.keys(d.values||Br).includes(b)){const v=d.up(b);m[v]=c(i[b],b)}else{const v=b;m[v]=i[v]}return m},{})}return c(i)}function tb(l={}){var c;return((c=l.keys)==null?void 0:c.reduce((o,s)=>{const d=l.up(s);return o[d]={},o},{}))||{}}function eb(l,i){return l.reduce((c,o)=>{const s=c[o];return(!s||Object.keys(s).length===0)&&delete c[o],c},i)}function jt(l){if(typeof l!="string")throw new Error(Ba(7));return l.charAt(0).toUpperCase()+l.slice(1)}function Nr(l,i,c=!0){if(!i||typeof i!="string")return null;if(l&&l.vars&&c){const o=`vars.${i}`.split(".").reduce((s,d)=>s&&s[d]?s[d]:null,l);if(o!=null)return o}return i.split(".").reduce((o,s)=>o&&o[s]!=null?o[s]:null,l)}function _r(l,i,c,o=c){let s;return typeof l=="function"?s=l(c):Array.isArray(l)?s=l[c]||o:s=Nr(l,c)||o,i&&(s=i(s,o,l)),s}function Kt(l){const{prop:i,cssProperty:c=l.prop,themeKey:o,transform:s}=l,d=m=>{if(m[i]==null)return null;const b=m[i],v=m.theme,p=Nr(v,o)||{};return Nn(m,b,_=>{let w=_r(p,s,_);return _===w&&typeof _=="string"&&(w=_r(p,s,`${i}${_==="default"?"":jt(_)}`,_)),c===!1?w:{[c]:w}})};return d.propTypes={},d.filterProps=[i],d}function nb(l){const i={};return c=>(i[c]===void 0&&(i[c]=l(c)),i[c])}const ab={m:"margin",p:"padding"},lb={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},em={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},ib=nb(l=>{if(l.length>2)if(em[l])l=em[l];else return[l];const[i,c]=l.split(""),o=ab[i],s=lb[c]||"";return Array.isArray(s)?s.map(d=>o+d):[o+s]}),Ns=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],Us=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"];[...Ns,...Us];function Ji(l,i,c,o){const s=Nr(l,i,!0)??c;return typeof s=="number"||typeof s=="string"?d=>typeof d=="string"?d:typeof s=="string"?`calc(${d} * ${s})`:s*d:Array.isArray(s)?d=>{if(typeof d=="string")return d;const m=Math.abs(d),b=s[m];return d>=0?b:typeof b=="number"?-b:`-${b}`}:typeof s=="function"?s:()=>{}}function Hs(l){return Ji(l,"spacing",8)}function Fi(l,i){return typeof i=="string"||i==null?i:l(i)}function ub(l,i){return c=>l.reduce((o,s)=>(o[s]=Fi(i,c),o),{})}function rb(l,i,c,o){if(!i.includes(c))return null;const s=ib(c),d=ub(s,o),m=l[c];return Nn(l,m,d)}function Nm(l,i){const c=Hs(l.theme);return Object.keys(l).map(o=>rb(l,i,o,c)).reduce(Yi,{})}function kt(l){return Nm(l,Ns)}kt.propTypes={};kt.filterProps=Ns;function Qt(l){return Nm(l,Us)}Qt.propTypes={};Qt.filterProps=Us;function Um(l=8,i=Hs({spacing:l})){if(l.mui)return l;const c=(...o)=>(o.length===0?[1]:o).map(d=>{const m=i(d);return typeof m=="number"?`${m}px`:m}).join(" ");return c.mui=!0,c}function Ur(...l){const i=l.reduce((o,s)=>(s.filterProps.forEach(d=>{o[d]=s}),o),{}),c=o=>Object.keys(o).reduce((s,d)=>i[d]?Yi(s,i[d](o)):s,{});return c.propTypes={},c.filterProps=l.reduce((o,s)=>o.concat(s.filterProps),[]),c}function Qe(l){return typeof l!="number"?l:`${l}px solid`}function Ke(l,i){return Kt({prop:l,themeKey:"borders",transform:i})}const cb=Ke("border",Qe),ob=Ke("borderTop",Qe),sb=Ke("borderRight",Qe),fb=Ke("borderBottom",Qe),db=Ke("borderLeft",Qe),hb=Ke("borderColor"),mb=Ke("borderTopColor"),yb=Ke("borderRightColor"),pb=Ke("borderBottomColor"),gb=Ke("borderLeftColor"),bb=Ke("outline",Qe),vb=Ke("outlineColor"),Hr=l=>{if(l.borderRadius!==void 0&&l.borderRadius!==null){const i=Ji(l.theme,"shape.borderRadius",4),c=o=>({borderRadius:Fi(i,o)});return Nn(l,l.borderRadius,c)}return null};Hr.propTypes={};Hr.filterProps=["borderRadius"];Ur(cb,ob,sb,fb,db,hb,mb,yb,pb,gb,Hr,bb,vb);const jr=l=>{if(l.gap!==void 0&&l.gap!==null){const i=Ji(l.theme,"spacing",8),c=o=>({gap:Fi(i,o)});return Nn(l,l.gap,c)}return null};jr.propTypes={};jr.filterProps=["gap"];const qr=l=>{if(l.columnGap!==void 0&&l.columnGap!==null){const i=Ji(l.theme,"spacing",8),c=o=>({columnGap:Fi(i,o)});return Nn(l,l.columnGap,c)}return null};qr.propTypes={};qr.filterProps=["columnGap"];const Lr=l=>{if(l.rowGap!==void 0&&l.rowGap!==null){const i=Ji(l.theme,"spacing",8),c=o=>({rowGap:Fi(i,o)});return Nn(l,l.rowGap,c)}return null};Lr.propTypes={};Lr.filterProps=["rowGap"];const Sb=Kt({prop:"gridColumn"}),Tb=Kt({prop:"gridRow"}),Ab=Kt({prop:"gridAutoFlow"}),Eb=Kt({prop:"gridAutoColumns"}),xb=Kt({prop:"gridAutoRows"}),_b=Kt({prop:"gridTemplateColumns"}),Ob=Kt({prop:"gridTemplateRows"}),Cb=Kt({prop:"gridTemplateAreas"}),zb=Kt({prop:"gridArea"});Ur(jr,qr,Lr,Sb,Tb,Ab,Eb,xb,_b,Ob,Cb,zb);function wl(l,i){return i==="grey"?i:l}const wb=Kt({prop:"color",themeKey:"palette",transform:wl}),Rb=Kt({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:wl}),Mb=Kt({prop:"backgroundColor",themeKey:"palette",transform:wl});Ur(wb,Rb,Mb);function we(l){return l<=1&&l!==0?`${l*100}%`:l}const Db=Kt({prop:"width",transform:we}),js=l=>{if(l.maxWidth!==void 0&&l.maxWidth!==null){const i=c=>{var s,d,m,b,v;const o=((m=(d=(s=l.theme)==null?void 0:s.breakpoints)==null?void 0:d.values)==null?void 0:m[c])||Br[c];return o?((v=(b=l.theme)==null?void 0:b.breakpoints)==null?void 0:v.unit)!=="px"?{maxWidth:`${o}${l.theme.breakpoints.unit}`}:{maxWidth:o}:{maxWidth:we(c)}};return Nn(l,l.maxWidth,i)}return null};js.filterProps=["maxWidth"];const Bb=Kt({prop:"minWidth",transform:we}),Nb=Kt({prop:"height",transform:we}),Ub=Kt({prop:"maxHeight",transform:we}),Hb=Kt({prop:"minHeight",transform:we});Kt({prop:"size",cssProperty:"width",transform:we});Kt({prop:"size",cssProperty:"height",transform:we});const jb=Kt({prop:"boxSizing"});Ur(Db,js,Bb,Nb,Ub,Hb,jb);const Pi={border:{themeKey:"borders",transform:Qe},borderTop:{themeKey:"borders",transform:Qe},borderRight:{themeKey:"borders",transform:Qe},borderBottom:{themeKey:"borders",transform:Qe},borderLeft:{themeKey:"borders",transform:Qe},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:Qe},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:Hr},color:{themeKey:"palette",transform:wl},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:wl},backgroundColor:{themeKey:"palette",transform:wl},p:{style:Qt},pt:{style:Qt},pr:{style:Qt},pb:{style:Qt},pl:{style:Qt},px:{style:Qt},py:{style:Qt},padding:{style:Qt},paddingTop:{style:Qt},paddingRight:{style:Qt},paddingBottom:{style:Qt},paddingLeft:{style:Qt},paddingX:{style:Qt},paddingY:{style:Qt},paddingInline:{style:Qt},paddingInlineStart:{style:Qt},paddingInlineEnd:{style:Qt},paddingBlock:{style:Qt},paddingBlockStart:{style:Qt},paddingBlockEnd:{style:Qt},m:{style:kt},mt:{style:kt},mr:{style:kt},mb:{style:kt},ml:{style:kt},mx:{style:kt},my:{style:kt},margin:{style:kt},marginTop:{style:kt},marginRight:{style:kt},marginBottom:{style:kt},marginLeft:{style:kt},marginX:{style:kt},marginY:{style:kt},marginInline:{style:kt},marginInlineStart:{style:kt},marginInlineEnd:{style:kt},marginBlock:{style:kt},marginBlockStart:{style:kt},marginBlockEnd:{style:kt},displayPrint:{cssProperty:!1,transform:l=>({"@media print":{display:l}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:jr},rowGap:{style:Lr},columnGap:{style:qr},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:we},maxWidth:{style:js},minWidth:{transform:we},height:{transform:we},maxHeight:{transform:we},minHeight:{transform:we},boxSizing:{},font:{themeKey:"font"},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}};function qb(...l){const i=l.reduce((o,s)=>o.concat(Object.keys(s)),[]),c=new Set(i);return l.every(o=>c.size===Object.keys(o).length)}function Lb(l,i){return typeof l=="function"?l(i):l}function Gb(){function l(c,o,s,d){const m={[c]:o,theme:s},b=d[c];if(!b)return{[c]:o};const{cssProperty:v=c,themeKey:p,transform:C,style:_}=b;if(o==null)return null;if(p==="typography"&&o==="inherit")return{[c]:o};const w=Nr(s,p)||{};return _?_(m):Nn(m,o,B=>{let U=_r(w,C,B);return B===U&&typeof B=="string"&&(U=_r(w,C,`${c}${B==="default"?"":jt(B)}`,B)),v===!1?U:{[v]:U}})}function i(c){const{sx:o,theme:s={}}=c||{};if(!o)return null;const d=s.unstable_sxConfig??Pi;function m(b){let v=b;if(typeof b=="function")v=b(s);else if(typeof b!="object")return b;if(!v)return null;const p=tb(s.breakpoints),C=Object.keys(p);let _=p;return Object.keys(v).forEach(w=>{const j=Lb(v[w],s);if(j!=null)if(typeof j=="object")if(d[w])_=Yi(_,l(w,j,s,d));else{const B=Nn({theme:s},j,U=>({[w]:U}));qb(B,j)?_[w]=i({sx:j,theme:s}):_=Yi(_,B)}else _=Yi(_,l(w,j,s,d))}),K1(s,eb(C,_))}return Array.isArray(o)?o.map(m):m(o)}return i}const Na=Gb();Na.filterProps=["sx"];function Yb(l,i){var o;const c=this;if(c.vars){if(!((o=c.colorSchemes)!=null&&o[l])||typeof c.getColorSchemeSelector!="function")return{};let s=c.getColorSchemeSelector(l);return s==="&"?i:((s.includes("data-")||s.includes("."))&&(s=`*:where(${s.replace(/\s*&$/,"")}) &`),{[s]:i})}return c.palette.mode===l?i:{}}function qs(l={},...i){const{breakpoints:c={},palette:o={},spacing:s,shape:d={},...m}=l,b=Z1(c),v=Um(s);let p=Me({breakpoints:b,direction:"ltr",components:{},palette:{mode:"light",...o},spacing:v,shape:{...P1,...d}},m);return p=F1(p),p.applyStyles=Yb,p=i.reduce((C,_)=>Me(C,_),p),p.unstable_sxConfig={...Pi,...m==null?void 0:m.unstable_sxConfig},p.unstable_sx=function(_){return Na({sx:_,theme:this})},p}function Vb(l){return Object.keys(l).length===0}function Xb(l=null){const i=k.useContext(Mr);return!i||Vb(i)?l:i}const $b=qs();function Hm(l=$b){return Xb(l)}function kb({styles:l,themeId:i,defaultTheme:c={}}){const o=Hm(c),s=typeof l=="function"?l(i&&o[i]||o):l;return rt.jsx($1,{styles:s})}const Qb=l=>{var o;const i={systemProps:{},otherProps:{}},c=((o=l==null?void 0:l.theme)==null?void 0:o.unstable_sxConfig)??Pi;return Object.keys(l).forEach(s=>{c[s]?i.systemProps[s]=l[s]:i.otherProps[s]=l[s]}),i};function jm(l){const{sx:i,...c}=l,{systemProps:o,otherProps:s}=Qb(c);let d;return Array.isArray(i)?d=[o,...i]:typeof i=="function"?d=(...m)=>{const b=i(...m);return dn(b)?{...o,...b}:o}:d={...o,...i},{...s,sx:d}}const nm=l=>l,Zb=()=>{let l=nm;return{configure(i){l=i},generate(i){return l(i)},reset(){l=nm}}},qm=Zb();function Lm(l){var i,c,o="";if(typeof l=="string"||typeof l=="number")o+=l;else if(typeof l=="object")if(Array.isArray(l)){var s=l.length;for(i=0;ib!=="theme"&&b!=="sx"&&b!=="as"})(Na);return k.forwardRef(function(v,p){const C=Hm(c),{className:_,component:w="div",...j}=jm(v);return rt.jsx(d,{as:w,ref:p,className:pe(_,s?s(o):o),theme:i&&C[i]||C,...j})})}const Wb={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function Ii(l,i,c="Mui"){const o=Wb[i];return o?`${c}-${o}`:`${qm.generate(l)}-${i}`}function Bl(l,i,c="Mui"){const o={};return i.forEach(s=>{o[s]=Ii(l,s,c)}),o}function Gm(l){const{variants:i,...c}=l,o={variants:i,style:Ih(c),isProcessed:!0};return o.style===c||i&&i.forEach(s=>{typeof s.style!="function"&&(s.style=Ih(s.style))}),o}const Jb=qs();function is(l){return l!=="ownerState"&&l!=="theme"&&l!=="sx"&&l!=="as"}function Fb(l){return l?(i,c)=>c[l]:null}function Pb(l,i,c){l.theme=ev(l.theme)?c:l.theme[i]||l.theme}function br(l,i){const c=typeof i=="function"?i(l):i;if(Array.isArray(c))return c.flatMap(o=>br(l,o));if(Array.isArray(c==null?void 0:c.variants)){let o;if(c.isProcessed)o=c.style;else{const{variants:s,...d}=c;o=d}return Ym(l,c.variants,[o])}return c!=null&&c.isProcessed?c.style:c}function Ym(l,i,c=[]){var s;let o;t:for(let d=0;d{k1(b,O=>O.filter($=>$!==Na));const{name:p,slot:C,skipVariantsResolver:_,skipSx:w,overridesResolver:j=Fb(av(C)),...B}=v,U=_!==void 0?_:C&&C!=="Root"&&C!=="root"||!1,X=w||!1;let Q=is;C==="Root"||C==="root"?Q=o:C?Q=s:nv(b)&&(Q=void 0);const F=Dm(b,{shouldForwardProp:Q,label:tv(),...B}),V=O=>{if(typeof O=="function"&&O.__emotion_real!==O)return function(W){return br(W,O)};if(dn(O)){const $=Gm(O);return $.variants?function(gt){return br(gt,$)}:$.style}return O},L=(...O)=>{const $=[],W=O.map(V),gt=[];if($.push(d),p&&j&>.push(function(et){var G,it;const St=(it=(G=et.theme.components)==null?void 0:G[p])==null?void 0:it.styleOverrides;if(!St)return null;const _t={};for(const tt in St)_t[tt]=br(et,St[tt]);return j(et,_t)}),p&&!U&>.push(function(et){var _t,G;const ct=et.theme,St=(G=(_t=ct==null?void 0:ct.components)==null?void 0:_t[p])==null?void 0:G.variants;return St?Ym(et,St):null}),X||gt.push(Na),Array.isArray(W[0])){const Y=W.shift(),et=new Array($.length).fill(""),ct=new Array(gt.length).fill("");let St;St=[...et,...Y,...ct],St.raw=[...et,...Y.raw,...ct],$.unshift(St)}const K=[...$,...W,...gt],y=F(...K);return b.muiName&&(y.muiName=b.muiName),y};return F.withConfig&&(L.withConfig=F.withConfig),L}}function tv(l,i){return void 0}function ev(l){for(const i in l)return!1;return!0}function nv(l){return typeof l=="string"&&l.charCodeAt(0)>96}function av(l){return l&&l.charAt(0).toLowerCase()+l.slice(1)}function Or(l,i){const c={...i};for(const o in l)if(Object.prototype.hasOwnProperty.call(l,o)){const s=o;if(s==="components"||s==="slots")c[s]={...l[s],...c[s]};else if(s==="componentsProps"||s==="slotProps"){const d=l[s],m=i[s];if(!m)c[s]=d||{};else if(!d)c[s]=m;else{c[s]={...m};for(const b in d)if(Object.prototype.hasOwnProperty.call(d,b)){const v=b;c[s][v]=Or(d[v],m[v])}}}else c[s]===void 0&&(c[s]=l[s])}return c}const lv=typeof window<"u"?k.useLayoutEffect:k.useEffect;function iv(l,i=Number.MIN_SAFE_INTEGER,c=Number.MAX_SAFE_INTEGER){return Math.max(i,Math.min(l,c))}function Ls(l,i=0,c=1){return iv(l,i,c)}function uv(l){l=l.slice(1);const i=new RegExp(`.{1,${l.length>=6?2:1}}`,"g");let c=l.match(i);return c&&c[0].length===1&&(c=c.map(o=>o+o)),c?`rgb${c.length===4?"a":""}(${c.map((o,s)=>s<3?parseInt(o,16):Math.round(parseInt(o,16)/255*1e3)/1e3).join(", ")})`:""}function ca(l){if(l.type)return l;if(l.charAt(0)==="#")return ca(uv(l));const i=l.indexOf("("),c=l.substring(0,i);if(!["rgb","rgba","hsl","hsla","color"].includes(c))throw new Error(Ba(9,l));let o=l.substring(i+1,l.length-1),s;if(c==="color"){if(o=o.split(" "),s=o.shift(),o.length===4&&o[3].charAt(0)==="/"&&(o[3]=o[3].slice(1)),!["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].includes(s))throw new Error(Ba(10,s))}else o=o.split(",");return o=o.map(d=>parseFloat(d)),{type:c,values:o,colorSpace:s}}const rv=l=>{const i=ca(l);return i.values.slice(0,3).map((c,o)=>i.type.includes("hsl")&&o!==0?`${c}%`:c).join(" ")},Li=(l,i)=>{try{return rv(l)}catch{return l}};function Gr(l){const{type:i,colorSpace:c}=l;let{values:o}=l;return i.includes("rgb")?o=o.map((s,d)=>d<3?parseInt(s,10):s):i.includes("hsl")&&(o[1]=`${o[1]}%`,o[2]=`${o[2]}%`),i.includes("color")?o=`${c} ${o.join(" ")}`:o=`${o.join(", ")}`,`${i}(${o})`}function Vm(l){l=ca(l);const{values:i}=l,c=i[0],o=i[1]/100,s=i[2]/100,d=o*Math.min(s,1-s),m=(p,C=(p+c/30)%12)=>s-d*Math.max(Math.min(C-3,9-C,1),-1);let b="rgb";const v=[Math.round(m(0)*255),Math.round(m(8)*255),Math.round(m(4)*255)];return l.type==="hsla"&&(b+="a",v.push(i[3])),Gr({type:b,values:v})}function ms(l){l=ca(l);let i=l.type==="hsl"||l.type==="hsla"?ca(Vm(l)).values:l.values;return i=i.map(c=>(l.type!=="color"&&(c/=255),c<=.03928?c/12.92:((c+.055)/1.055)**2.4)),Number((.2126*i[0]+.7152*i[1]+.0722*i[2]).toFixed(3))}function cv(l,i){const c=ms(l),o=ms(i);return(Math.max(c,o)+.05)/(Math.min(c,o)+.05)}function Ol(l,i){return l=ca(l),i=Ls(i),(l.type==="rgb"||l.type==="hsl")&&(l.type+="a"),l.type==="color"?l.values[3]=`/${i}`:l.values[3]=i,Gr(l)}function dr(l,i,c){try{return Ol(l,i)}catch{return l}}function Yr(l,i){if(l=ca(l),i=Ls(i),l.type.includes("hsl"))l.values[2]*=1-i;else if(l.type.includes("rgb")||l.type.includes("color"))for(let c=0;c<3;c+=1)l.values[c]*=1-i;return Gr(l)}function Dt(l,i,c){try{return Yr(l,i)}catch{return l}}function Vr(l,i){if(l=ca(l),i=Ls(i),l.type.includes("hsl"))l.values[2]+=(100-l.values[2])*i;else if(l.type.includes("rgb"))for(let c=0;c<3;c+=1)l.values[c]+=(255-l.values[c])*i;else if(l.type.includes("color"))for(let c=0;c<3;c+=1)l.values[c]+=(1-l.values[c])*i;return Gr(l)}function Bt(l,i,c){try{return Vr(l,i)}catch{return l}}function ov(l,i=.15){return ms(l)>.5?Yr(l,i):Vr(l,i)}function hr(l,i,c){try{return ov(l,i)}catch{return l}}function sv(l,i){typeof l=="function"?l(i):l&&(l.current=i)}function vr(l){const i=k.useRef(l);return lv(()=>{i.current=l}),k.useRef((...c)=>(0,i.current)(...c)).current}function am(...l){return k.useMemo(()=>l.every(i=>i==null)?null:i=>{l.forEach(c=>{sv(c,i)})},l)}const lm={};function Xm(l,i){const c=k.useRef(lm);return c.current===lm&&(c.current=l(i)),c}const fv=[];function dv(l){k.useEffect(l,fv)}class Gs{constructor(){Ni(this,"currentId",null);Ni(this,"clear",()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)});Ni(this,"disposeEffect",()=>this.clear)}static create(){return new Gs}start(i,c){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,c()},i)}}function hv(){const l=Xm(Gs.create).current;return dv(l.disposeEffect),l}function im(l){try{return l.matches(":focus-visible")}catch{}return!1}function Xr(l,i,c=void 0){const o={};for(const s in l){const d=l[s];let m="",b=!0;for(let v=0;vk.useContext(mv)??!1,pv=k.createContext(void 0);function gv(l){const{theme:i,name:c,props:o}=l;if(!i||!i.components||!i.components[c])return o;const s=i.components[c];return s.defaultProps?Or(s.defaultProps,o):!s.styleOverrides&&!s.variants?Or(s,o):o}function bv({props:l,name:i}){const c=k.useContext(pv);return gv({props:l,name:i,theme:{components:c}})}const um={theme:void 0};function vv(l){let i,c;return function(s){let d=i;return(d===void 0||s.theme!==c)&&(um.theme=s.theme,d=Gm(l(um)),i=d,c=s.theme),d}}function Sv(l=""){function i(...o){if(!o.length)return"";const s=o[0];return typeof s=="string"&&!s.match(/(#|\(|\)|(-?(\d*\.)?\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\d*\.)?\d+)$|(\d+ \d+ \d+)/)?`, var(--${l?`${l}-`:""}${s}${i(...o.slice(1))})`:`, ${s}`}return(o,...s)=>`var(--${l?`${l}-`:""}${o}${i(...s)})`}const rm=(l,i,c,o=[])=>{let s=l;i.forEach((d,m)=>{m===i.length-1?Array.isArray(s)?s[Number(d)]=c:s&&typeof s=="object"&&(s[d]=c):s&&typeof s=="object"&&(s[d]||(s[d]=o.includes(d)?[]:{}),s=s[d])})},Tv=(l,i,c)=>{function o(s,d=[],m=[]){Object.entries(s).forEach(([b,v])=>{(!c||!c([...d,b]))&&v!=null&&(typeof v=="object"&&Object.keys(v).length>0?o(v,[...d,b],Array.isArray(v)?[...m,b]:m):i([...d,b],v,m))})}o(l)},Av=(l,i)=>typeof i=="number"?["lineHeight","fontWeight","opacity","zIndex"].some(o=>l.includes(o))||l[l.length-1].toLowerCase().includes("opacity")?i:`${i}px`:i;function us(l,i){const{prefix:c,shouldSkipGeneratingVar:o}=i||{},s={},d={},m={};return Tv(l,(b,v,p)=>{if((typeof v=="string"||typeof v=="number")&&(!o||!o(b,v))){const C=`--${c?`${c}-`:""}${b.join("-")}`,_=Av(b,v);Object.assign(s,{[C]:_}),rm(d,b,`var(${C})`,p),rm(m,b,`var(${C}, ${_})`,p)}},b=>b[0]==="vars"),{css:s,vars:d,varsWithDefaults:m}}function Ev(l,i={}){const{getSelector:c=X,disableCssColorScheme:o,colorSchemeSelector:s}=i,{colorSchemes:d={},components:m,defaultColorScheme:b="light",...v}=l,{vars:p,css:C,varsWithDefaults:_}=us(v,i);let w=_;const j={},{[b]:B,...U}=d;if(Object.entries(U||{}).forEach(([V,L])=>{const{vars:O,css:$,varsWithDefaults:W}=us(L,i);w=Me(w,W),j[V]={css:$,vars:O}}),B){const{css:V,vars:L,varsWithDefaults:O}=us(B,i);w=Me(w,O),j[b]={css:V,vars:L}}function X(V,L){var $,W;let O=s;if(s==="class"&&(O=".%s"),s==="data"&&(O="[data-%s]"),s!=null&&s.startsWith("data-")&&!s.includes("%s")&&(O=`[${s}="%s"]`),V){if(O==="media")return l.defaultColorScheme===V?":root":{[`@media (prefers-color-scheme: ${((W=($=d[V])==null?void 0:$.palette)==null?void 0:W.mode)||V})`]:{":root":L}};if(O)return l.defaultColorScheme===V?`:root, ${O.replace("%s",String(V))}`:O.replace("%s",String(V))}return":root"}return{vars:w,generateThemeVars:()=>{let V={...p};return Object.entries(j).forEach(([,{vars:L}])=>{V=Me(V,L)}),V},generateStyleSheets:()=>{var gt,K;const V=[],L=l.defaultColorScheme||"light";function O(y,Y){Object.keys(Y).length&&V.push(typeof y=="string"?{[y]:{...Y}}:y)}O(c(void 0,{...C}),C);const{[L]:$,...W}=j;if($){const{css:y}=$,Y=(K=(gt=d[L])==null?void 0:gt.palette)==null?void 0:K.mode,et=!o&&Y?{colorScheme:Y,...y}:{...y};O(c(L,{...et}),et)}return Object.entries(W).forEach(([y,{css:Y}])=>{var St,_t;const et=(_t=(St=d[y])==null?void 0:St.palette)==null?void 0:_t.mode,ct=!o&&et?{colorScheme:et,...Y}:{...Y};O(c(y,{...ct}),ct)}),V}}}function xv(l){return function(c){return l==="media"?`@media (prefers-color-scheme: ${c})`:l?l.startsWith("data-")&&!l.includes("%s")?`[${l}="${c}"] &`:l==="class"?`.${c} &`:l==="data"?`[data-${c}] &`:`${l.replace("%s",c)} &`:"&"}}function $m(){return{text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:$i.white,default:$i.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}}}const _v=$m();function km(){return{text:{primary:$i.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:$i.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}}}const cm=km();function om(l,i,c,o){const s=o.light||o,d=o.dark||o*1.5;l[i]||(l.hasOwnProperty(c)?l[i]=l[c]:i==="light"?l.light=Vr(l.main,s):i==="dark"&&(l.dark=Yr(l.main,d)))}function Ov(l="light"){return l==="dark"?{main:Tl[200],light:Tl[50],dark:Tl[400]}:{main:Tl[700],light:Tl[400],dark:Tl[800]}}function Cv(l="light"){return l==="dark"?{main:Sl[200],light:Sl[50],dark:Sl[400]}:{main:Sl[500],light:Sl[300],dark:Sl[700]}}function zv(l="light"){return l==="dark"?{main:vl[500],light:vl[300],dark:vl[700]}:{main:vl[700],light:vl[400],dark:vl[800]}}function wv(l="light"){return l==="dark"?{main:Al[400],light:Al[300],dark:Al[700]}:{main:Al[700],light:Al[500],dark:Al[900]}}function Rv(l="light"){return l==="dark"?{main:El[400],light:El[300],dark:El[700]}:{main:El[800],light:El[500],dark:El[900]}}function Mv(l="light"){return l==="dark"?{main:ji[400],light:ji[300],dark:ji[700]}:{main:"#ed6c02",light:ji[500],dark:ji[900]}}function Ys(l){const{mode:i="light",contrastThreshold:c=3,tonalOffset:o=.2,...s}=l,d=l.primary||Ov(i),m=l.secondary||Cv(i),b=l.error||zv(i),v=l.info||wv(i),p=l.success||Rv(i),C=l.warning||Mv(i);function _(U){return cv(U,cm.text.primary)>=c?cm.text.primary:_v.text.primary}const w=({color:U,name:X,mainShade:Q=500,lightShade:F=300,darkShade:V=700})=>{if(U={...U},!U.main&&U[Q]&&(U.main=U[Q]),!U.hasOwnProperty("main"))throw new Error(Ba(11,X?` (${X})`:"",Q));if(typeof U.main!="string")throw new Error(Ba(12,X?` (${X})`:"",JSON.stringify(U.main)));return om(U,"light",F,o),om(U,"dark",V,o),U.contrastText||(U.contrastText=_(U.main)),U};let j;return i==="light"?j=$m():i==="dark"&&(j=km()),Me({common:{...$i},mode:i,primary:w({color:d,name:"primary"}),secondary:w({color:m,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:w({color:b,name:"error"}),warning:w({color:C,name:"warning"}),info:w({color:v,name:"info"}),success:w({color:p,name:"success"}),grey:Vg,contrastThreshold:c,getContrastText:_,augmentColor:w,tonalOffset:o,...j},s)}function Dv(l){const i={};return Object.entries(l).forEach(o=>{const[s,d]=o;typeof d=="object"&&(i[s]=`${d.fontStyle?`${d.fontStyle} `:""}${d.fontVariant?`${d.fontVariant} `:""}${d.fontWeight?`${d.fontWeight} `:""}${d.fontStretch?`${d.fontStretch} `:""}${d.fontSize||""}${d.lineHeight?`/${d.lineHeight} `:""}${d.fontFamily||""}`)}),i}function Bv(l,i){return{toolbar:{minHeight:56,[l.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[l.up("sm")]:{minHeight:64}},...i}}function Nv(l){return Math.round(l*1e5)/1e5}const sm={textTransform:"uppercase"},fm='"Roboto", "Helvetica", "Arial", sans-serif';function Uv(l,i){const{fontFamily:c=fm,fontSize:o=14,fontWeightLight:s=300,fontWeightRegular:d=400,fontWeightMedium:m=500,fontWeightBold:b=700,htmlFontSize:v=16,allVariants:p,pxToRem:C,..._}=typeof i=="function"?i(l):i,w=o/14,j=C||(X=>`${X/v*w}rem`),B=(X,Q,F,V,L)=>({fontFamily:c,fontWeight:X,fontSize:j(Q),lineHeight:F,...c===fm?{letterSpacing:`${Nv(V/Q)}em`}:{},...L,...p}),U={h1:B(s,96,1.167,-1.5),h2:B(s,60,1.2,-.5),h3:B(d,48,1.167,0),h4:B(d,34,1.235,.25),h5:B(d,24,1.334,0),h6:B(m,20,1.6,.15),subtitle1:B(d,16,1.75,.15),subtitle2:B(m,14,1.57,.1),body1:B(d,16,1.5,.15),body2:B(d,14,1.43,.15),button:B(m,14,1.75,.4,sm),caption:B(d,12,1.66,.4),overline:B(d,12,2.66,1,sm),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return Me({htmlFontSize:v,pxToRem:j,fontFamily:c,fontSize:o,fontWeightLight:s,fontWeightRegular:d,fontWeightMedium:m,fontWeightBold:b,...U},_,{clone:!1})}const Hv=.2,jv=.14,qv=.12;function qt(...l){return[`${l[0]}px ${l[1]}px ${l[2]}px ${l[3]}px rgba(0,0,0,${Hv})`,`${l[4]}px ${l[5]}px ${l[6]}px ${l[7]}px rgba(0,0,0,${jv})`,`${l[8]}px ${l[9]}px ${l[10]}px ${l[11]}px rgba(0,0,0,${qv})`].join(",")}const Lv=["none",qt(0,2,1,-1,0,1,1,0,0,1,3,0),qt(0,3,1,-2,0,2,2,0,0,1,5,0),qt(0,3,3,-2,0,3,4,0,0,1,8,0),qt(0,2,4,-1,0,4,5,0,0,1,10,0),qt(0,3,5,-1,0,5,8,0,0,1,14,0),qt(0,3,5,-1,0,6,10,0,0,1,18,0),qt(0,4,5,-2,0,7,10,1,0,2,16,1),qt(0,5,5,-3,0,8,10,1,0,3,14,2),qt(0,5,6,-3,0,9,12,1,0,3,16,2),qt(0,6,6,-3,0,10,14,1,0,4,18,3),qt(0,6,7,-4,0,11,15,1,0,4,20,3),qt(0,7,8,-4,0,12,17,2,0,5,22,4),qt(0,7,8,-4,0,13,19,2,0,5,24,4),qt(0,7,9,-4,0,14,21,2,0,5,26,4),qt(0,8,9,-5,0,15,22,2,0,6,28,5),qt(0,8,10,-5,0,16,24,2,0,6,30,5),qt(0,8,11,-5,0,17,26,2,0,6,32,5),qt(0,9,11,-5,0,18,28,2,0,7,34,6),qt(0,9,12,-6,0,19,29,2,0,7,36,6),qt(0,10,13,-6,0,20,31,3,0,8,38,7),qt(0,10,13,-6,0,21,33,3,0,8,40,7),qt(0,10,14,-6,0,22,35,3,0,8,42,7),qt(0,11,14,-7,0,23,36,3,0,9,44,8),qt(0,11,15,-7,0,24,38,3,0,9,46,8)],Gv={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},Yv={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function dm(l){return`${Math.round(l)}ms`}function Vv(l){if(!l)return 0;const i=l/36;return Math.min(Math.round((4+15*i**.25+i/5)*10),3e3)}function Xv(l){const i={...Gv,...l.easing},c={...Yv,...l.duration};return{getAutoHeightDuration:Vv,create:(s=["all"],d={})=>{const{duration:m=c.standard,easing:b=i.easeInOut,delay:v=0,...p}=d;return(Array.isArray(s)?s:[s]).map(C=>`${C} ${typeof m=="string"?m:dm(m)} ${b} ${typeof v=="string"?v:dm(v)}`).join(",")},...l,easing:i,duration:c}}const $v={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500};function kv(l){return dn(l)||typeof l>"u"||typeof l=="string"||typeof l=="boolean"||typeof l=="number"||Array.isArray(l)}function Qm(l={}){const i={...l};function c(o){const s=Object.entries(o);for(let d=0;dMe(j,B),w),w.unstable_sxConfig={...Pi,...p==null?void 0:p.unstable_sxConfig},w.unstable_sx=function(B){return Na({sx:B,theme:this})},w.toRuntimeSource=Qm,w}function Qv(l){let i;return l<1?i=5.11916*l**2:i=4.5*Math.log(l+1)+2,Math.round(i*10)/1e3}const Zv=[...Array(25)].map((l,i)=>{if(i===0)return"none";const c=Qv(i);return`linear-gradient(rgba(255 255 255 / ${c}), rgba(255 255 255 / ${c}))`});function Zm(l){return{inputPlaceholder:l==="dark"?.5:.42,inputUnderline:l==="dark"?.7:.42,switchTrackDisabled:l==="dark"?.2:.12,switchTrack:l==="dark"?.3:.38}}function Km(l){return l==="dark"?Zv:[]}function Kv(l){const{palette:i={mode:"light"},opacity:c,overlays:o,...s}=l,d=Ys(i);return{palette:d,opacity:{...Zm(d.mode),...c},overlays:o||Km(d.mode),...s}}function Wv(l){var i;return!!l[0].match(/(cssVarPrefix|colorSchemeSelector|rootSelector|typography|mixins|breakpoints|direction|transitions)/)||!!l[0].match(/sxConfig$/)||l[0]==="palette"&&!!((i=l[1])!=null&&i.match(/(mode|contrastThreshold|tonalOffset)/))}const Jv=l=>[...[...Array(25)].map((i,c)=>`--${l?`${l}-`:""}overlays-${c}`),`--${l?`${l}-`:""}palette-AppBar-darkBg`,`--${l?`${l}-`:""}palette-AppBar-darkColor`],Fv=l=>(i,c)=>{const o=l.rootSelector||":root",s=l.colorSchemeSelector;let d=s;if(s==="class"&&(d=".%s"),s==="data"&&(d="[data-%s]"),s!=null&&s.startsWith("data-")&&!s.includes("%s")&&(d=`[${s}="%s"]`),l.defaultColorScheme===i){if(i==="dark"){const m={};return Jv(l.cssVarPrefix).forEach(b=>{m[b]=c[b],delete c[b]}),d==="media"?{[o]:c,"@media (prefers-color-scheme: dark)":{[o]:m}}:d?{[d.replace("%s",i)]:m,[`${o}, ${d.replace("%s",i)}`]:c}:{[o]:{...c,...m}}}if(d&&d!=="media")return`${o}, ${d.replace("%s",String(i))}`}else if(i){if(d==="media")return{[`@media (prefers-color-scheme: ${String(i)})`]:{[o]:c}};if(d)return d.replace("%s",String(i))}return o};function Pv(l,i){i.forEach(c=>{l[c]||(l[c]={})})}function R(l,i,c){!l[i]&&c&&(l[i]=c)}function Gi(l){return typeof l!="string"||!l.startsWith("hsl")?l:Vm(l)}function Mn(l,i){`${i}Channel`in l||(l[`${i}Channel`]=Li(Gi(l[i])))}function Iv(l){return typeof l=="number"?`${l}px`:typeof l=="string"||typeof l=="function"||Array.isArray(l)?l:"8px"}const on=l=>{try{return l()}catch{}},tS=(l="mui")=>Sv(l);function rs(l,i,c,o){if(!i)return;i=i===!0?{}:i;const s=o==="dark"?"dark":"light";if(!c){l[o]=Kv({...i,palette:{mode:s,...i==null?void 0:i.palette}});return}const{palette:d,...m}=ys({...c,palette:{mode:s,...i==null?void 0:i.palette}});return l[o]={...i,palette:d,opacity:{...Zm(s),...i==null?void 0:i.opacity},overlays:(i==null?void 0:i.overlays)||Km(s)},m}function eS(l={},...i){const{colorSchemes:c={light:!0},defaultColorScheme:o,disableCssColorScheme:s=!1,cssVarPrefix:d="mui",shouldSkipGeneratingVar:m=Wv,colorSchemeSelector:b=c.light&&c.dark?"media":void 0,rootSelector:v=":root",...p}=l,C=Object.keys(c)[0],_=o||(c.light&&C!=="light"?"light":C),w=tS(d),{[_]:j,light:B,dark:U,...X}=c,Q={...X};let F=j;if((_==="dark"&&!("dark"in c)||_==="light"&&!("light"in c))&&(F=!0),!F)throw new Error(Ba(21,_));const V=rs(Q,F,p,_);B&&!Q.light&&rs(Q,B,void 0,"light"),U&&!Q.dark&&rs(Q,U,void 0,"dark");let L={defaultColorScheme:_,...V,cssVarPrefix:d,colorSchemeSelector:b,rootSelector:v,getCssVar:w,colorSchemes:Q,font:{...Dv(V.typography),...V.font},spacing:Iv(p.spacing)};Object.keys(L.colorSchemes).forEach(K=>{const y=L.colorSchemes[K].palette,Y=et=>{const ct=et.split("-"),St=ct[1],_t=ct[2];return w(et,y[St][_t])};if(y.mode==="light"&&(R(y.common,"background","#fff"),R(y.common,"onBackground","#000")),y.mode==="dark"&&(R(y.common,"background","#000"),R(y.common,"onBackground","#fff")),Pv(y,["Alert","AppBar","Avatar","Button","Chip","FilledInput","LinearProgress","Skeleton","Slider","SnackbarContent","SpeedDialAction","StepConnector","StepContent","Switch","TableCell","Tooltip"]),y.mode==="light"){R(y.Alert,"errorColor",Dt(y.error.light,.6)),R(y.Alert,"infoColor",Dt(y.info.light,.6)),R(y.Alert,"successColor",Dt(y.success.light,.6)),R(y.Alert,"warningColor",Dt(y.warning.light,.6)),R(y.Alert,"errorFilledBg",Y("palette-error-main")),R(y.Alert,"infoFilledBg",Y("palette-info-main")),R(y.Alert,"successFilledBg",Y("palette-success-main")),R(y.Alert,"warningFilledBg",Y("palette-warning-main")),R(y.Alert,"errorFilledColor",on(()=>y.getContrastText(y.error.main))),R(y.Alert,"infoFilledColor",on(()=>y.getContrastText(y.info.main))),R(y.Alert,"successFilledColor",on(()=>y.getContrastText(y.success.main))),R(y.Alert,"warningFilledColor",on(()=>y.getContrastText(y.warning.main))),R(y.Alert,"errorStandardBg",Bt(y.error.light,.9)),R(y.Alert,"infoStandardBg",Bt(y.info.light,.9)),R(y.Alert,"successStandardBg",Bt(y.success.light,.9)),R(y.Alert,"warningStandardBg",Bt(y.warning.light,.9)),R(y.Alert,"errorIconColor",Y("palette-error-main")),R(y.Alert,"infoIconColor",Y("palette-info-main")),R(y.Alert,"successIconColor",Y("palette-success-main")),R(y.Alert,"warningIconColor",Y("palette-warning-main")),R(y.AppBar,"defaultBg",Y("palette-grey-100")),R(y.Avatar,"defaultBg",Y("palette-grey-400")),R(y.Button,"inheritContainedBg",Y("palette-grey-300")),R(y.Button,"inheritContainedHoverBg",Y("palette-grey-A100")),R(y.Chip,"defaultBorder",Y("palette-grey-400")),R(y.Chip,"defaultAvatarColor",Y("palette-grey-700")),R(y.Chip,"defaultIconColor",Y("palette-grey-700")),R(y.FilledInput,"bg","rgba(0, 0, 0, 0.06)"),R(y.FilledInput,"hoverBg","rgba(0, 0, 0, 0.09)"),R(y.FilledInput,"disabledBg","rgba(0, 0, 0, 0.12)"),R(y.LinearProgress,"primaryBg",Bt(y.primary.main,.62)),R(y.LinearProgress,"secondaryBg",Bt(y.secondary.main,.62)),R(y.LinearProgress,"errorBg",Bt(y.error.main,.62)),R(y.LinearProgress,"infoBg",Bt(y.info.main,.62)),R(y.LinearProgress,"successBg",Bt(y.success.main,.62)),R(y.LinearProgress,"warningBg",Bt(y.warning.main,.62)),R(y.Skeleton,"bg",`rgba(${Y("palette-text-primaryChannel")} / 0.11)`),R(y.Slider,"primaryTrack",Bt(y.primary.main,.62)),R(y.Slider,"secondaryTrack",Bt(y.secondary.main,.62)),R(y.Slider,"errorTrack",Bt(y.error.main,.62)),R(y.Slider,"infoTrack",Bt(y.info.main,.62)),R(y.Slider,"successTrack",Bt(y.success.main,.62)),R(y.Slider,"warningTrack",Bt(y.warning.main,.62));const et=hr(y.background.default,.8);R(y.SnackbarContent,"bg",et),R(y.SnackbarContent,"color",on(()=>y.getContrastText(et))),R(y.SpeedDialAction,"fabHoverBg",hr(y.background.paper,.15)),R(y.StepConnector,"border",Y("palette-grey-400")),R(y.StepContent,"border",Y("palette-grey-400")),R(y.Switch,"defaultColor",Y("palette-common-white")),R(y.Switch,"defaultDisabledColor",Y("palette-grey-100")),R(y.Switch,"primaryDisabledColor",Bt(y.primary.main,.62)),R(y.Switch,"secondaryDisabledColor",Bt(y.secondary.main,.62)),R(y.Switch,"errorDisabledColor",Bt(y.error.main,.62)),R(y.Switch,"infoDisabledColor",Bt(y.info.main,.62)),R(y.Switch,"successDisabledColor",Bt(y.success.main,.62)),R(y.Switch,"warningDisabledColor",Bt(y.warning.main,.62)),R(y.TableCell,"border",Bt(dr(y.divider,1),.88)),R(y.Tooltip,"bg",dr(y.grey[700],.92))}if(y.mode==="dark"){R(y.Alert,"errorColor",Bt(y.error.light,.6)),R(y.Alert,"infoColor",Bt(y.info.light,.6)),R(y.Alert,"successColor",Bt(y.success.light,.6)),R(y.Alert,"warningColor",Bt(y.warning.light,.6)),R(y.Alert,"errorFilledBg",Y("palette-error-dark")),R(y.Alert,"infoFilledBg",Y("palette-info-dark")),R(y.Alert,"successFilledBg",Y("palette-success-dark")),R(y.Alert,"warningFilledBg",Y("palette-warning-dark")),R(y.Alert,"errorFilledColor",on(()=>y.getContrastText(y.error.dark))),R(y.Alert,"infoFilledColor",on(()=>y.getContrastText(y.info.dark))),R(y.Alert,"successFilledColor",on(()=>y.getContrastText(y.success.dark))),R(y.Alert,"warningFilledColor",on(()=>y.getContrastText(y.warning.dark))),R(y.Alert,"errorStandardBg",Dt(y.error.light,.9)),R(y.Alert,"infoStandardBg",Dt(y.info.light,.9)),R(y.Alert,"successStandardBg",Dt(y.success.light,.9)),R(y.Alert,"warningStandardBg",Dt(y.warning.light,.9)),R(y.Alert,"errorIconColor",Y("palette-error-main")),R(y.Alert,"infoIconColor",Y("palette-info-main")),R(y.Alert,"successIconColor",Y("palette-success-main")),R(y.Alert,"warningIconColor",Y("palette-warning-main")),R(y.AppBar,"defaultBg",Y("palette-grey-900")),R(y.AppBar,"darkBg",Y("palette-background-paper")),R(y.AppBar,"darkColor",Y("palette-text-primary")),R(y.Avatar,"defaultBg",Y("palette-grey-600")),R(y.Button,"inheritContainedBg",Y("palette-grey-800")),R(y.Button,"inheritContainedHoverBg",Y("palette-grey-700")),R(y.Chip,"defaultBorder",Y("palette-grey-700")),R(y.Chip,"defaultAvatarColor",Y("palette-grey-300")),R(y.Chip,"defaultIconColor",Y("palette-grey-300")),R(y.FilledInput,"bg","rgba(255, 255, 255, 0.09)"),R(y.FilledInput,"hoverBg","rgba(255, 255, 255, 0.13)"),R(y.FilledInput,"disabledBg","rgba(255, 255, 255, 0.12)"),R(y.LinearProgress,"primaryBg",Dt(y.primary.main,.5)),R(y.LinearProgress,"secondaryBg",Dt(y.secondary.main,.5)),R(y.LinearProgress,"errorBg",Dt(y.error.main,.5)),R(y.LinearProgress,"infoBg",Dt(y.info.main,.5)),R(y.LinearProgress,"successBg",Dt(y.success.main,.5)),R(y.LinearProgress,"warningBg",Dt(y.warning.main,.5)),R(y.Skeleton,"bg",`rgba(${Y("palette-text-primaryChannel")} / 0.13)`),R(y.Slider,"primaryTrack",Dt(y.primary.main,.5)),R(y.Slider,"secondaryTrack",Dt(y.secondary.main,.5)),R(y.Slider,"errorTrack",Dt(y.error.main,.5)),R(y.Slider,"infoTrack",Dt(y.info.main,.5)),R(y.Slider,"successTrack",Dt(y.success.main,.5)),R(y.Slider,"warningTrack",Dt(y.warning.main,.5));const et=hr(y.background.default,.98);R(y.SnackbarContent,"bg",et),R(y.SnackbarContent,"color",on(()=>y.getContrastText(et))),R(y.SpeedDialAction,"fabHoverBg",hr(y.background.paper,.15)),R(y.StepConnector,"border",Y("palette-grey-600")),R(y.StepContent,"border",Y("palette-grey-600")),R(y.Switch,"defaultColor",Y("palette-grey-300")),R(y.Switch,"defaultDisabledColor",Y("palette-grey-600")),R(y.Switch,"primaryDisabledColor",Dt(y.primary.main,.55)),R(y.Switch,"secondaryDisabledColor",Dt(y.secondary.main,.55)),R(y.Switch,"errorDisabledColor",Dt(y.error.main,.55)),R(y.Switch,"infoDisabledColor",Dt(y.info.main,.55)),R(y.Switch,"successDisabledColor",Dt(y.success.main,.55)),R(y.Switch,"warningDisabledColor",Dt(y.warning.main,.55)),R(y.TableCell,"border",Dt(dr(y.divider,1),.68)),R(y.Tooltip,"bg",dr(y.grey[700],.92))}Mn(y.background,"default"),Mn(y.background,"paper"),Mn(y.common,"background"),Mn(y.common,"onBackground"),Mn(y,"divider"),Object.keys(y).forEach(et=>{const ct=y[et];et!=="tonalOffset"&&ct&&typeof ct=="object"&&(ct.main&&R(y[et],"mainChannel",Li(Gi(ct.main))),ct.light&&R(y[et],"lightChannel",Li(Gi(ct.light))),ct.dark&&R(y[et],"darkChannel",Li(Gi(ct.dark))),ct.contrastText&&R(y[et],"contrastTextChannel",Li(Gi(ct.contrastText))),et==="text"&&(Mn(y[et],"primary"),Mn(y[et],"secondary")),et==="action"&&(ct.active&&Mn(y[et],"active"),ct.selected&&Mn(y[et],"selected")))})}),L=i.reduce((K,y)=>Me(K,y),L);const O={prefix:d,disableCssColorScheme:s,shouldSkipGeneratingVar:m,getSelector:Fv(L)},{vars:$,generateThemeVars:W,generateStyleSheets:gt}=Ev(L,O);return L.vars=$,Object.entries(L.colorSchemes[L.defaultColorScheme]).forEach(([K,y])=>{L[K]=y}),L.generateThemeVars=W,L.generateStyleSheets=gt,L.generateSpacing=function(){return Um(p.spacing,Hs(this))},L.getColorSchemeSelector=xv(b),L.spacing=L.generateSpacing(),L.shouldSkipGeneratingVar=m,L.unstable_sxConfig={...Pi,...p==null?void 0:p.unstable_sxConfig},L.unstable_sx=function(y){return Na({sx:y,theme:this})},L.toRuntimeSource=Qm,L}function hm(l,i,c){l.colorSchemes&&c&&(l.colorSchemes[i]={...c!==!0&&c,palette:Ys({...c===!0?{}:c.palette,mode:i})})}function Wm(l={},...i){const{palette:c,cssVariables:o=!1,colorSchemes:s=c?void 0:{light:!0},defaultColorScheme:d=c==null?void 0:c.mode,...m}=l,b=d||"light",v=s==null?void 0:s[b],p={...s,...c?{[b]:{...typeof v!="boolean"&&v,palette:c}}:void 0};if(o===!1){if(!("colorSchemes"in l))return ys(l,...i);let C=c;"palette"in l||p[b]&&(p[b]!==!0?C=p[b].palette:b==="dark"&&(C={mode:"dark"}));const _=ys({...l,palette:C},...i);return _.defaultColorScheme=b,_.colorSchemes=p,_.palette.mode==="light"&&(_.colorSchemes.light={...p.light!==!0&&p.light,palette:_.palette},hm(_,"dark",p.dark)),_.palette.mode==="dark"&&(_.colorSchemes.dark={...p.dark!==!0&&p.dark,palette:_.palette},hm(_,"light",p.light)),_}return!c&&!("light"in p)&&b==="light"&&(p.light=!0),eS({...m,colorSchemes:p,defaultColorScheme:b,...typeof o!="boolean"&&o},...i)}const Jm=Wm();function nS(l){return l!=="ownerState"&&l!=="theme"&&l!=="sx"&&l!=="as"}const Fm=l=>nS(l)&&l!=="classes",Ie=Ib({themeId:Os,defaultTheme:Jm,rootShouldForwardProp:Fm});function aS(l){return rt.jsx(kb,{...l,defaultTheme:Jm,themeId:Os})}function Pm(l){return function(c){return rt.jsx(aS,{styles:typeof l=="function"?o=>l({theme:o,...c}):l})}}function lS(){return jm}const Nl=vv;function Ul(l){return bv(l)}function iS(l,i){if(l==null)return{};var c={};for(var o in l)if({}.hasOwnProperty.call(l,o)){if(i.includes(o))continue;c[o]=l[o]}return c}function ps(l,i){return ps=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,o){return c.__proto__=o,c},ps(l,i)}function uS(l,i){l.prototype=Object.create(i.prototype),l.prototype.constructor=l,ps(l,i)}const mm=Cl.createContext(null);function rS(l){if(l===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return l}function Vs(l,i){var c=function(d){return i&&k.isValidElement(d)?i(d):d},o=Object.create(null);return l&&k.Children.map(l,function(s){return s}).forEach(function(s){o[s.key]=c(s)}),o}function cS(l,i){l=l||{},i=i||{};function c(C){return C in i?i[C]:l[C]}var o=Object.create(null),s=[];for(var d in l)d in i?s.length&&(o[d]=s,s=[]):s.push(d);var m,b={};for(var v in i){if(o[v])for(m=0;m{this.shouldMount&&!this.didMount&&this.ref.current!==null&&(this.didMount=!0,this.mounted.resolve())});this.ref={current:null},this.mounted=null,this.didMount=!1,this.shouldMount=!1,this.setShouldMount=null}static create(){return new Cr}static use(){const i=Xm(Cr.create).current,[c,o]=k.useState(!1);return i.shouldMount=c,i.setShouldMount=o,k.useEffect(i.mountEffect,[c]),i}mount(){return this.mounted||(this.mounted=mS(),this.shouldMount=!0,this.setShouldMount(this.shouldMount)),this.mounted}start(...i){this.mount().then(()=>{var c;return(c=this.ref.current)==null?void 0:c.start(...i)})}stop(...i){this.mount().then(()=>{var c;return(c=this.ref.current)==null?void 0:c.stop(...i)})}pulsate(...i){this.mount().then(()=>{var c;return(c=this.ref.current)==null?void 0:c.pulsate(...i)})}}function hS(){return Cr.use()}function mS(){let l,i;const c=new Promise((o,s)=>{l=o,i=s});return c.resolve=l,c.reject=i,c}function yS(l){const{className:i,classes:c,pulsate:o=!1,rippleX:s,rippleY:d,rippleSize:m,in:b,onExited:v,timeout:p}=l,[C,_]=k.useState(!1),w=pe(i,c.ripple,c.rippleVisible,o&&c.ripplePulsate),j={width:m,height:m,top:-(m/2)+d,left:-(m/2)+s},B=pe(c.child,C&&c.childLeaving,o&&c.childPulsate);return!b&&!C&&_(!0),k.useEffect(()=>{if(!b&&v!=null){const U=setTimeout(v,p);return()=>{clearTimeout(U)}}},[v,b,p]),rt.jsx("span",{className:w,style:j,children:rt.jsx("span",{className:B})})}const ke=Bl("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),gs=550,pS=80,gS=Dl` + 0% { + transform: scale(0); + opacity: 0.1; + } + + 100% { + transform: scale(1); + opacity: 0.3; + } +`,bS=Dl` + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +`,vS=Dl` + 0% { + transform: scale(1); + } + + 50% { + transform: scale(0.92); + } + + 100% { + transform: scale(1); + } +`,SS=Ie("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),TS=Ie(yS,{name:"MuiTouchRipple",slot:"Ripple"})` + opacity: 0; + position: absolute; + + &.${ke.rippleVisible} { + opacity: 0.3; + transform: scale(1); + animation-name: ${gS}; + animation-duration: ${gs}ms; + animation-timing-function: ${({theme:l})=>l.transitions.easing.easeInOut}; + } + + &.${ke.ripplePulsate} { + animation-duration: ${({theme:l})=>l.transitions.duration.shorter}ms; + } + + & .${ke.child} { + opacity: 1; + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: currentColor; + } + + & .${ke.childLeaving} { + opacity: 0; + animation-name: ${bS}; + animation-duration: ${gs}ms; + animation-timing-function: ${({theme:l})=>l.transitions.easing.easeInOut}; + } + + & .${ke.childPulsate} { + position: absolute; + /* @noflip */ + left: 0px; + top: 0; + animation-name: ${vS}; + animation-duration: 2500ms; + animation-timing-function: ${({theme:l})=>l.transitions.easing.easeInOut}; + animation-iteration-count: infinite; + animation-delay: 200ms; + } +`,AS=k.forwardRef(function(i,c){const o=Ul({props:i,name:"MuiTouchRipple"}),{center:s=!1,classes:d={},className:m,...b}=o,[v,p]=k.useState([]),C=k.useRef(0),_=k.useRef(null);k.useEffect(()=>{_.current&&(_.current(),_.current=null)},[v]);const w=k.useRef(!1),j=hv(),B=k.useRef(null),U=k.useRef(null),X=k.useCallback(L=>{const{pulsate:O,rippleX:$,rippleY:W,rippleSize:gt,cb:K}=L;p(y=>[...y,rt.jsx(TS,{classes:{ripple:pe(d.ripple,ke.ripple),rippleVisible:pe(d.rippleVisible,ke.rippleVisible),ripplePulsate:pe(d.ripplePulsate,ke.ripplePulsate),child:pe(d.child,ke.child),childLeaving:pe(d.childLeaving,ke.childLeaving),childPulsate:pe(d.childPulsate,ke.childPulsate)},timeout:gs,pulsate:O,rippleX:$,rippleY:W,rippleSize:gt},C.current)]),C.current+=1,_.current=K},[d]),Q=k.useCallback((L={},O={},$=()=>{})=>{const{pulsate:W=!1,center:gt=s||O.pulsate,fakeElement:K=!1}=O;if((L==null?void 0:L.type)==="mousedown"&&w.current){w.current=!1;return}(L==null?void 0:L.type)==="touchstart"&&(w.current=!0);const y=K?null:U.current,Y=y?y.getBoundingClientRect():{width:0,height:0,left:0,top:0};let et,ct,St;if(gt||L===void 0||L.clientX===0&&L.clientY===0||!L.clientX&&!L.touches)et=Math.round(Y.width/2),ct=Math.round(Y.height/2);else{const{clientX:_t,clientY:G}=L.touches&&L.touches.length>0?L.touches[0]:L;et=Math.round(_t-Y.left),ct=Math.round(G-Y.top)}if(gt)St=Math.sqrt((2*Y.width**2+Y.height**2)/3),St%2===0&&(St+=1);else{const _t=Math.max(Math.abs((y?y.clientWidth:0)-et),et)*2+2,G=Math.max(Math.abs((y?y.clientHeight:0)-ct),ct)*2+2;St=Math.sqrt(_t**2+G**2)}L!=null&&L.touches?B.current===null&&(B.current=()=>{X({pulsate:W,rippleX:et,rippleY:ct,rippleSize:St,cb:$})},j.start(pS,()=>{B.current&&(B.current(),B.current=null)})):X({pulsate:W,rippleX:et,rippleY:ct,rippleSize:St,cb:$})},[s,X,j]),F=k.useCallback(()=>{Q({},{pulsate:!0})},[Q]),V=k.useCallback((L,O)=>{if(j.clear(),(L==null?void 0:L.type)==="touchend"&&B.current){B.current(),B.current=null,j.start(0,()=>{V(L,O)});return}B.current=null,p($=>$.length>0?$.slice(1):$),_.current=O},[j]);return k.useImperativeHandle(c,()=>({pulsate:F,start:Q,stop:V}),[F,Q,V]),rt.jsx(SS,{className:pe(ke.root,d.root,m),ref:U,...b,children:rt.jsx(Xs,{component:null,exit:!0,children:v})})});function ES(l){return Ii("MuiButtonBase",l)}const xS=Bl("MuiButtonBase",["root","disabled","focusVisible"]),_S=l=>{const{disabled:i,focusVisible:c,focusVisibleClassName:o,classes:s}=l,m=Xr({root:["root",i&&"disabled",c&&"focusVisible"]},ES,s);return c&&o&&(m.root+=` ${o}`),m},OS=Ie("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(l,i)=>i.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${xS.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),CS=k.forwardRef(function(i,c){const o=Ul({props:i,name:"MuiButtonBase"}),{action:s,centerRipple:d=!1,children:m,className:b,component:v="button",disabled:p=!1,disableRipple:C=!1,disableTouchRipple:_=!1,focusRipple:w=!1,focusVisibleClassName:j,LinkComponent:B="a",onBlur:U,onClick:X,onContextMenu:Q,onDragLeave:F,onFocus:V,onFocusVisible:L,onKeyDown:O,onKeyUp:$,onMouseDown:W,onMouseLeave:gt,onMouseUp:K,onTouchEnd:y,onTouchMove:Y,onTouchStart:et,tabIndex:ct=0,TouchRippleProps:St,touchRippleRef:_t,type:G,...it}=o,tt=k.useRef(null),ot=hS(),S=am(ot.ref,_t),[q,at]=k.useState(!1);p&&q&&at(!1),k.useImperativeHandle(s,()=>({focusVisible:()=>{at(!0),tt.current.focus()}}),[]);const lt=ot.shouldMount&&!C&&!p;k.useEffect(()=>{q&&w&&!C&&ot.pulsate()},[C,w,q,ot]);const J=Dn(ot,"start",W,_),bt=Dn(ot,"stop",Q,_),ft=Dn(ot,"stop",F,_),ie=Dn(ot,"stop",K,_),At=Dn(ot,"stop",dt=>{q&&dt.preventDefault(),gt&>(dt)},_),Yt=Dn(ot,"start",et,_),Nt=Dn(ot,"stop",y,_),De=Dn(ot,"stop",Y,_),oa=Dn(ot,"stop",dt=>{im(dt.target)||at(!1),U&&U(dt)},!1),tn=vr(dt=>{tt.current||(tt.current=dt.currentTarget),im(dt.target)&&(at(!0),L&&L(dt)),V&&V(dt)}),Un=()=>{const dt=tt.current;return v&&v!=="button"&&!(dt.tagName==="A"&&dt.href)},Ha=vr(dt=>{w&&!dt.repeat&&q&&dt.key===" "&&ot.stop(dt,()=>{ot.start(dt)}),dt.target===dt.currentTarget&&Un()&&dt.key===" "&&dt.preventDefault(),O&&O(dt),dt.target===dt.currentTarget&&Un()&&dt.key==="Enter"&&!p&&(dt.preventDefault(),X&&X(dt))}),Hn=vr(dt=>{w&&dt.key===" "&&q&&!dt.defaultPrevented&&ot.stop(dt,()=>{ot.pulsate(dt)}),$&&$(dt),X&&dt.target===dt.currentTarget&&Un()&&dt.key===" "&&!dt.defaultPrevented&&X(dt)});let jn=v;jn==="button"&&(it.href||it.to)&&(jn=B);const en={};jn==="button"?(en.type=G===void 0?"button":G,en.disabled=p):(!it.href&&!it.to&&(en.role="button"),p&&(en["aria-disabled"]=p));const Hl=am(c,tt),ja={...o,centerRipple:d,component:v,disabled:p,disableRipple:C,disableTouchRipple:_,focusRipple:w,tabIndex:ct,focusVisible:q},jl=_S(ja);return rt.jsxs(OS,{as:jn,className:pe(jl.root,b),ownerState:ja,onBlur:oa,onClick:X,onContextMenu:bt,onFocus:tn,onKeyDown:Ha,onKeyUp:Hn,onMouseDown:J,onMouseLeave:At,onMouseUp:ie,onDragLeave:ft,onTouchEnd:Nt,onTouchMove:De,onTouchStart:Yt,ref:Hl,tabIndex:p?-1:ct,type:G,...en,...it,children:[m,lt?rt.jsx(AS,{ref:S,center:d,...St}):null]})});function Dn(l,i,c,o=!1){return vr(s=>(c&&c(s),o||l[i](s),!0))}function zS(l){return typeof l.main=="string"}function wS(l,i=[]){if(!zS(l))return!1;for(const c of i)if(!l.hasOwnProperty(c)||typeof l[c]!="string")return!1;return!0}function Ua(l=[]){return([,i])=>i&&wS(i,l)}function RS(l){return Ii("MuiTypography",l)}Bl("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);const MS={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},DS=lS(),BS=l=>{const{align:i,gutterBottom:c,noWrap:o,paragraph:s,variant:d,classes:m}=l,b={root:["root",d,l.align!=="inherit"&&`align${jt(i)}`,c&&"gutterBottom",o&&"noWrap",s&&"paragraph"]};return Xr(b,RS,m)},NS=Ie("span",{name:"MuiTypography",slot:"Root",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.root,c.variant&&i[c.variant],c.align!=="inherit"&&i[`align${jt(c.align)}`],c.noWrap&&i.noWrap,c.gutterBottom&&i.gutterBottom,c.paragraph&&i.paragraph]}})(Nl(({theme:l})=>{var i;return{margin:0,variants:[{props:{variant:"inherit"},style:{font:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}},...Object.entries(l.typography).filter(([c,o])=>c!=="inherit"&&o&&typeof o=="object").map(([c,o])=>({props:{variant:c},style:o})),...Object.entries(l.palette).filter(Ua()).map(([c])=>({props:{color:c},style:{color:(l.vars||l).palette[c].main}})),...Object.entries(((i=l.palette)==null?void 0:i.text)||{}).filter(([,c])=>typeof c=="string").map(([c])=>({props:{color:`text${jt(c)}`},style:{color:(l.vars||l).palette.text[c]}})),{props:({ownerState:c})=>c.align!=="inherit",style:{textAlign:"var(--Typography-textAlign)"}},{props:({ownerState:c})=>c.noWrap,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},{props:({ownerState:c})=>c.gutterBottom,style:{marginBottom:"0.35em"}},{props:({ownerState:c})=>c.paragraph,style:{marginBottom:16}}]}})),ym={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},$s=k.forwardRef(function(i,c){const{color:o,...s}=Ul({props:i,name:"MuiTypography"}),d=!MS[o],m=DS({...s,...d&&{color:o}}),{align:b="inherit",className:v,component:p,gutterBottom:C=!1,noWrap:_=!1,paragraph:w=!1,variant:j="body1",variantMapping:B=ym,...U}=m,X={...m,align:b,color:o,className:v,component:p,gutterBottom:C,noWrap:_,paragraph:w,variant:j,variantMapping:B},Q=p||(w?"p":B[j]||ym[j])||"span",F=BS(X);return rt.jsx(NS,{as:Q,ref:c,className:pe(F.root,v),...U,ownerState:X,style:{...b!=="inherit"&&{"--Typography-textAlign":b},...U.style}})}),US=Bl("MuiBox",["root"]),HS=Wm(),Bn=Kb({themeId:Os,defaultTheme:HS,defaultClassName:US.root,generateClassName:qm.generate});function jS(l){return Ii("MuiButton",l)}const xl=Bl("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","colorPrimary","colorSecondary","colorSuccess","colorError","colorInfo","colorWarning","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","icon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),qS=k.createContext({}),LS=k.createContext(void 0),GS=l=>{const{color:i,disableElevation:c,fullWidth:o,size:s,variant:d,classes:m}=l,b={root:["root",d,`${d}${jt(i)}`,`size${jt(s)}`,`${d}Size${jt(s)}`,`color${jt(i)}`,c&&"disableElevation",o&&"fullWidth"],label:["label"],startIcon:["icon","startIcon",`iconSize${jt(s)}`],endIcon:["icon","endIcon",`iconSize${jt(s)}`]},v=Xr(b,jS,m);return{...m,...v}},Im=[{props:{size:"small"},style:{"& > *:nth-of-type(1)":{fontSize:18}}},{props:{size:"medium"},style:{"& > *:nth-of-type(1)":{fontSize:20}}},{props:{size:"large"},style:{"& > *:nth-of-type(1)":{fontSize:22}}}],YS=Ie(CS,{shouldForwardProp:l=>Fm(l)||l==="classes",name:"MuiButton",slot:"Root",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.root,i[c.variant],i[`${c.variant}${jt(c.color)}`],i[`size${jt(c.size)}`],i[`${c.variant}Size${jt(c.size)}`],c.color==="inherit"&&i.colorInherit,c.disableElevation&&i.disableElevation,c.fullWidth&&i.fullWidth]}})(Nl(({theme:l})=>{const i=l.palette.mode==="light"?l.palette.grey[300]:l.palette.grey[800],c=l.palette.mode==="light"?l.palette.grey.A100:l.palette.grey[700];return{...l.typography.button,minWidth:64,padding:"6px 16px",border:0,borderRadius:(l.vars||l).shape.borderRadius,transition:l.transitions.create(["background-color","box-shadow","border-color","color"],{duration:l.transitions.duration.short}),"&:hover":{textDecoration:"none"},[`&.${xl.disabled}`]:{color:(l.vars||l).palette.action.disabled},variants:[{props:{variant:"contained"},style:{color:"var(--variant-containedColor)",backgroundColor:"var(--variant-containedBg)",boxShadow:(l.vars||l).shadows[2],"&:hover":{boxShadow:(l.vars||l).shadows[4],"@media (hover: none)":{boxShadow:(l.vars||l).shadows[2]}},"&:active":{boxShadow:(l.vars||l).shadows[8]},[`&.${xl.focusVisible}`]:{boxShadow:(l.vars||l).shadows[6]},[`&.${xl.disabled}`]:{color:(l.vars||l).palette.action.disabled,boxShadow:(l.vars||l).shadows[0],backgroundColor:(l.vars||l).palette.action.disabledBackground}}},{props:{variant:"outlined"},style:{padding:"5px 15px",border:"1px solid currentColor",borderColor:"var(--variant-outlinedBorder, currentColor)",backgroundColor:"var(--variant-outlinedBg)",color:"var(--variant-outlinedColor)",[`&.${xl.disabled}`]:{border:`1px solid ${(l.vars||l).palette.action.disabledBackground}`}}},{props:{variant:"text"},style:{padding:"6px 8px",color:"var(--variant-textColor)",backgroundColor:"var(--variant-textBg)"}},...Object.entries(l.palette).filter(Ua()).map(([o])=>({props:{color:o},style:{"--variant-textColor":(l.vars||l).palette[o].main,"--variant-outlinedColor":(l.vars||l).palette[o].main,"--variant-outlinedBorder":l.vars?`rgba(${l.vars.palette[o].mainChannel} / 0.5)`:Ol(l.palette[o].main,.5),"--variant-containedColor":(l.vars||l).palette[o].contrastText,"--variant-containedBg":(l.vars||l).palette[o].main,"@media (hover: hover)":{"&:hover":{"--variant-containedBg":(l.vars||l).palette[o].dark,"--variant-textBg":l.vars?`rgba(${l.vars.palette[o].mainChannel} / ${l.vars.palette.action.hoverOpacity})`:Ol(l.palette[o].main,l.palette.action.hoverOpacity),"--variant-outlinedBorder":(l.vars||l).palette[o].main,"--variant-outlinedBg":l.vars?`rgba(${l.vars.palette[o].mainChannel} / ${l.vars.palette.action.hoverOpacity})`:Ol(l.palette[o].main,l.palette.action.hoverOpacity)}}}})),{props:{color:"inherit"},style:{color:"inherit",borderColor:"currentColor","--variant-containedBg":l.vars?l.vars.palette.Button.inheritContainedBg:i,"@media (hover: hover)":{"&:hover":{"--variant-containedBg":l.vars?l.vars.palette.Button.inheritContainedHoverBg:c,"--variant-textBg":l.vars?`rgba(${l.vars.palette.text.primaryChannel} / ${l.vars.palette.action.hoverOpacity})`:Ol(l.palette.text.primary,l.palette.action.hoverOpacity),"--variant-outlinedBg":l.vars?`rgba(${l.vars.palette.text.primaryChannel} / ${l.vars.palette.action.hoverOpacity})`:Ol(l.palette.text.primary,l.palette.action.hoverOpacity)}}}},{props:{size:"small",variant:"text"},style:{padding:"4px 5px",fontSize:l.typography.pxToRem(13)}},{props:{size:"large",variant:"text"},style:{padding:"8px 11px",fontSize:l.typography.pxToRem(15)}},{props:{size:"small",variant:"outlined"},style:{padding:"3px 9px",fontSize:l.typography.pxToRem(13)}},{props:{size:"large",variant:"outlined"},style:{padding:"7px 21px",fontSize:l.typography.pxToRem(15)}},{props:{size:"small",variant:"contained"},style:{padding:"4px 10px",fontSize:l.typography.pxToRem(13)}},{props:{size:"large",variant:"contained"},style:{padding:"8px 22px",fontSize:l.typography.pxToRem(15)}},{props:{disableElevation:!0},style:{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${xl.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${xl.disabled}`]:{boxShadow:"none"}}},{props:{fullWidth:!0},style:{width:"100%"}}]}})),VS=Ie("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.startIcon,i[`iconSize${jt(c.size)}`]]}})({display:"inherit",marginRight:8,marginLeft:-4,variants:[{props:{size:"small"},style:{marginLeft:-2}},...Im]}),XS=Ie("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.endIcon,i[`iconSize${jt(c.size)}`]]}})({display:"inherit",marginRight:-4,marginLeft:8,variants:[{props:{size:"small"},style:{marginRight:-2}},...Im]}),$S=k.forwardRef(function(i,c){const o=k.useContext(qS),s=k.useContext(LS),d=Or(o,i),m=Ul({props:d,name:"MuiButton"}),{children:b,color:v="primary",component:p="button",className:C,disabled:_=!1,disableElevation:w=!1,disableFocusRipple:j=!1,endIcon:B,focusVisibleClassName:U,fullWidth:X=!1,size:Q="medium",startIcon:F,type:V,variant:L="text",...O}=m,$={...m,color:v,component:p,disabled:_,disableElevation:w,disableFocusRipple:j,fullWidth:X,size:Q,type:V,variant:L},W=GS($),gt=F&&rt.jsx(VS,{className:W.startIcon,ownerState:$,children:F}),K=B&&rt.jsx(XS,{className:W.endIcon,ownerState:$,children:B}),y=s||"";return rt.jsxs(YS,{ownerState:$,className:pe(o.className,W.root,C,y),component:p,disabled:_,focusRipple:!j,focusVisibleClassName:pe(W.focusVisible,U),ref:c,type:V,...O,classes:W,children:[gt,b,K]})}),bs=typeof Pm({})=="function",kS=(l,i)=>({WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",boxSizing:"border-box",WebkitTextSizeAdjust:"100%",...i&&!l.vars&&{colorScheme:l.palette.mode}}),QS=l=>({color:(l.vars||l).palette.text.primary,...l.typography.body1,backgroundColor:(l.vars||l).palette.background.default,"@media print":{backgroundColor:(l.vars||l).palette.common.white}}),ty=(l,i=!1)=>{var d,m;const c={};i&&l.colorSchemes&&typeof l.getColorSchemeSelector=="function"&&Object.entries(l.colorSchemes).forEach(([b,v])=>{var C,_;const p=l.getColorSchemeSelector(b);p.startsWith("@")?c[p]={":root":{colorScheme:(C=v.palette)==null?void 0:C.mode}}:c[p.replace(/\s*&/,"")]={colorScheme:(_=v.palette)==null?void 0:_.mode}});let o={html:kS(l,i),"*, *::before, *::after":{boxSizing:"inherit"},"strong, b":{fontWeight:l.typography.fontWeightBold},body:{margin:0,...QS(l),"&::backdrop":{backgroundColor:(l.vars||l).palette.background.default}},...c};const s=(m=(d=l.components)==null?void 0:d.MuiCssBaseline)==null?void 0:m.styleOverrides;return s&&(o=[o,s]),o},Sr="mui-ecs",ZS=l=>{const i=ty(l,!1),c=Array.isArray(i)?i[0]:i;return!l.vars&&c&&(c.html[`:root:has(${Sr})`]={colorScheme:l.palette.mode}),l.colorSchemes&&Object.entries(l.colorSchemes).forEach(([o,s])=>{var m,b;const d=l.getColorSchemeSelector(o);d.startsWith("@")?c[d]={[`:root:not(:has(.${Sr}))`]:{colorScheme:(m=s.palette)==null?void 0:m.mode}}:c[d.replace(/\s*&/,"")]={[`&:not(:has(.${Sr}))`]:{colorScheme:(b=s.palette)==null?void 0:b.mode}}}),i},KS=Pm(bs?({theme:l,enableColorScheme:i})=>ty(l,i):({theme:l})=>ZS(l));function WS(l){const i=Ul({props:l,name:"MuiCssBaseline"}),{children:c,enableColorScheme:o=!1}=i;return rt.jsxs(k.Fragment,{children:[bs&&rt.jsx(KS,{enableColorScheme:o}),!bs&&!o&&rt.jsx("span",{className:Sr,style:{display:"none"}}),c]})}function JS(l){return Ii("MuiLinearProgress",l)}Bl("MuiLinearProgress",["root","colorPrimary","colorSecondary","determinate","indeterminate","buffer","query","dashed","dashedColorPrimary","dashedColorSecondary","bar","barColorPrimary","barColorSecondary","bar1Indeterminate","bar1Determinate","bar1Buffer","bar2Indeterminate","bar2Buffer"]);const vs=4,Ss=Dl` + 0% { + left: -35%; + right: 100%; + } + + 60% { + left: 100%; + right: -90%; + } + + 100% { + left: 100%; + right: -90%; + } +`,FS=typeof Ss!="string"?Dr` + animation: ${Ss} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + `:null,Ts=Dl` + 0% { + left: -200%; + right: 100%; + } + + 60% { + left: 107%; + right: -8%; + } + + 100% { + left: 107%; + right: -8%; + } +`,PS=typeof Ts!="string"?Dr` + animation: ${Ts} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite; + `:null,As=Dl` + 0% { + opacity: 1; + background-position: 0 -23px; + } + + 60% { + opacity: 0; + background-position: 0 -23px; + } + + 100% { + opacity: 1; + background-position: -200px -23px; + } +`,IS=typeof As!="string"?Dr` + animation: ${As} 3s infinite linear; + `:null,t2=l=>{const{classes:i,variant:c,color:o}=l,s={root:["root",`color${jt(o)}`,c],dashed:["dashed",`dashedColor${jt(o)}`],bar1:["bar",`barColor${jt(o)}`,(c==="indeterminate"||c==="query")&&"bar1Indeterminate",c==="determinate"&&"bar1Determinate",c==="buffer"&&"bar1Buffer"],bar2:["bar",c!=="buffer"&&`barColor${jt(o)}`,c==="buffer"&&`color${jt(o)}`,(c==="indeterminate"||c==="query")&&"bar2Indeterminate",c==="buffer"&&"bar2Buffer"]};return Xr(s,JS,i)},ks=(l,i)=>l.vars?l.vars.palette.LinearProgress[`${i}Bg`]:l.palette.mode==="light"?Vr(l.palette[i].main,.62):Yr(l.palette[i].main,.5),e2=Ie("span",{name:"MuiLinearProgress",slot:"Root",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.root,i[`color${jt(c.color)}`],i[c.variant]]}})(Nl(({theme:l})=>({position:"relative",overflow:"hidden",display:"block",height:4,zIndex:0,"@media print":{colorAdjust:"exact"},variants:[...Object.entries(l.palette).filter(Ua()).map(([i])=>({props:{color:i},style:{backgroundColor:ks(l,i)}})),{props:({ownerState:i})=>i.color==="inherit"&&i.variant!=="buffer",style:{"&::before":{content:'""',position:"absolute",left:0,top:0,right:0,bottom:0,backgroundColor:"currentColor",opacity:.3}}},{props:{variant:"buffer"},style:{backgroundColor:"transparent"}},{props:{variant:"query"},style:{transform:"rotate(180deg)"}}]}))),n2=Ie("span",{name:"MuiLinearProgress",slot:"Dashed",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.dashed,i[`dashedColor${jt(c.color)}`]]}})(Nl(({theme:l})=>({position:"absolute",marginTop:0,height:"100%",width:"100%",backgroundSize:"10px 10px",backgroundPosition:"0 -23px",variants:[{props:{color:"inherit"},style:{opacity:.3,backgroundImage:"radial-gradient(currentColor 0%, currentColor 16%, transparent 42%)"}},...Object.entries(l.palette).filter(Ua()).map(([i])=>{const c=ks(l,i);return{props:{color:i},style:{backgroundImage:`radial-gradient(${c} 0%, ${c} 16%, transparent 42%)`}}})]})),IS||{animation:`${As} 3s infinite linear`}),a2=Ie("span",{name:"MuiLinearProgress",slot:"Bar1",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.bar,i[`barColor${jt(c.color)}`],(c.variant==="indeterminate"||c.variant==="query")&&i.bar1Indeterminate,c.variant==="determinate"&&i.bar1Determinate,c.variant==="buffer"&&i.bar1Buffer]}})(Nl(({theme:l})=>({width:"100%",position:"absolute",left:0,bottom:0,top:0,transition:"transform 0.2s linear",transformOrigin:"left",variants:[{props:{color:"inherit"},style:{backgroundColor:"currentColor"}},...Object.entries(l.palette).filter(Ua()).map(([i])=>({props:{color:i},style:{backgroundColor:(l.vars||l).palette[i].main}})),{props:{variant:"determinate"},style:{transition:`transform .${vs}s linear`}},{props:{variant:"buffer"},style:{zIndex:1,transition:`transform .${vs}s linear`}},{props:({ownerState:i})=>i.variant==="indeterminate"||i.variant==="query",style:{width:"auto"}},{props:({ownerState:i})=>i.variant==="indeterminate"||i.variant==="query",style:FS||{animation:`${Ss} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite`}}]}))),l2=Ie("span",{name:"MuiLinearProgress",slot:"Bar2",overridesResolver:(l,i)=>{const{ownerState:c}=l;return[i.bar,i[`barColor${jt(c.color)}`],(c.variant==="indeterminate"||c.variant==="query")&&i.bar2Indeterminate,c.variant==="buffer"&&i.bar2Buffer]}})(Nl(({theme:l})=>({width:"100%",position:"absolute",left:0,bottom:0,top:0,transition:"transform 0.2s linear",transformOrigin:"left",variants:[...Object.entries(l.palette).filter(Ua()).map(([i])=>({props:{color:i},style:{"--LinearProgressBar2-barColor":(l.vars||l).palette[i].main}})),{props:({ownerState:i})=>i.variant!=="buffer"&&i.color!=="inherit",style:{backgroundColor:"var(--LinearProgressBar2-barColor, currentColor)"}},{props:({ownerState:i})=>i.variant!=="buffer"&&i.color==="inherit",style:{backgroundColor:"currentColor"}},{props:{color:"inherit"},style:{opacity:.3}},...Object.entries(l.palette).filter(Ua()).map(([i])=>({props:{color:i,variant:"buffer"},style:{backgroundColor:ks(l,i),transition:`transform .${vs}s linear`}})),{props:({ownerState:i})=>i.variant==="indeterminate"||i.variant==="query",style:{width:"auto"}},{props:({ownerState:i})=>i.variant==="indeterminate"||i.variant==="query",style:PS||{animation:`${Ts} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite`}}]}))),i2=k.forwardRef(function(i,c){const o=Ul({props:i,name:"MuiLinearProgress"}),{className:s,color:d="primary",value:m,valueBuffer:b,variant:v="indeterminate",...p}=o,C={...o,color:d,variant:v},_=t2(C),w=yv(),j={},B={bar1:{},bar2:{}};if((v==="determinate"||v==="buffer")&&m!==void 0){j["aria-valuenow"]=Math.round(m),j["aria-valuemin"]=0,j["aria-valuemax"]=100;let U=m-100;w&&(U=-U),B.bar1.transform=`translateX(${U}%)`}if(v==="buffer"&&b!==void 0){let U=(b||0)-100;w&&(U=-U),B.bar2.transform=`translateX(${U}%)`}return rt.jsxs(e2,{className:pe(_.root,s),ownerState:C,role:"progressbar",...j,ref:c,...p,children:[v==="buffer"?rt.jsx(n2,{className:_.dashed,ownerState:C}):null,rt.jsx(a2,{className:_.bar1,ownerState:C,style:B.bar1}),v==="determinate"?null:rt.jsx(l2,{className:_.bar2,ownerState:C,style:B.bar2})]})});function u2(l,i,c,o){if(c==="a"&&!o)throw new TypeError("Private accessor was defined without a getter");if(typeof i=="function"?l!==i||!o:!i.has(l))throw new TypeError("Cannot read private member from an object whose class did not declare it");return c==="m"?o:c==="a"?o.call(l):o?o.value:i.get(l)}function r2(l,i,c,o,s){if(typeof i=="function"?l!==i||!s:!i.has(l))throw new TypeError("Cannot write private member to an object whose class did not declare it");return i.set(l,c),c}var Tr;const Ze="__TAURI_TO_IPC_KEY__";function c2(l,i=!1){return window.__TAURI_INTERNALS__.transformCallback(l,i)}async function Z(l,i={},c){return window.__TAURI_INTERNALS__.invoke(l,i,c)}class o2{get rid(){return u2(this,Tr,"f")}constructor(i){Tr.set(this,void 0),r2(this,Tr,i)}async close(){return Z("plugin:resources|close",{rid:this.rid})}}Tr=new WeakMap;class ey{constructor(...i){this.type="Logical",i.length===1?"Logical"in i[0]?(this.width=i[0].Logical.width,this.height=i[0].Logical.height):(this.width=i[0].width,this.height=i[0].height):(this.width=i[0],this.height=i[1])}toPhysical(i){return new Vi(this.width*i,this.height*i)}[Ze](){return{width:this.width,height:this.height}}toJSON(){return this[Ze]()}}class Vi{constructor(...i){this.type="Physical",i.length===1?"Physical"in i[0]?(this.width=i[0].Physical.width,this.height=i[0].Physical.height):(this.width=i[0].width,this.height=i[0].height):(this.width=i[0],this.height=i[1])}toLogical(i){return new ey(this.width/i,this.height/i)}[Ze](){return{width:this.width,height:this.height}}toJSON(){return this[Ze]()}}class _l{constructor(i){this.size=i}toLogical(i){return this.size instanceof ey?this.size:this.size.toLogical(i)}toPhysical(i){return this.size instanceof Vi?this.size:this.size.toPhysical(i)}[Ze](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[Ze]()}}class ny{constructor(...i){this.type="Logical",i.length===1?"Logical"in i[0]?(this.x=i[0].Logical.x,this.y=i[0].Logical.y):(this.x=i[0].x,this.y=i[0].y):(this.x=i[0],this.y=i[1])}toPhysical(i){return new ra(this.x*i,this.y*i)}[Ze](){return{x:this.x,y:this.y}}toJSON(){return this[Ze]()}}class ra{constructor(...i){this.type="Physical",i.length===1?"Physical"in i[0]?(this.x=i[0].Physical.x,this.y=i[0].Physical.y):(this.x=i[0].x,this.y=i[0].y):(this.x=i[0],this.y=i[1])}toLogical(i){return new ny(this.x/i,this.y/i)}[Ze](){return{x:this.x,y:this.y}}toJSON(){return this[Ze]()}}class mr{constructor(i){this.position=i}toLogical(i){return this.position instanceof ny?this.position:this.position.toLogical(i)}toPhysical(i){return this.position instanceof ra?this.position:this.position.toPhysical(i)}[Ze](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[Ze]()}}var ze;(function(l){l.WINDOW_RESIZED="tauri://resize",l.WINDOW_MOVED="tauri://move",l.WINDOW_CLOSE_REQUESTED="tauri://close-requested",l.WINDOW_DESTROYED="tauri://destroyed",l.WINDOW_FOCUS="tauri://focus",l.WINDOW_BLUR="tauri://blur",l.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",l.WINDOW_THEME_CHANGED="tauri://theme-changed",l.WINDOW_CREATED="tauri://window-created",l.WEBVIEW_CREATED="tauri://webview-created",l.DRAG_ENTER="tauri://drag-enter",l.DRAG_OVER="tauri://drag-over",l.DRAG_DROP="tauri://drag-drop",l.DRAG_LEAVE="tauri://drag-leave"})(ze||(ze={}));async function ay(l,i){await Z("plugin:event|unlisten",{event:l,eventId:i})}async function ly(l,i,c){var o;const s=typeof(c==null?void 0:c.target)=="string"?{kind:"AnyLabel",label:c.target}:(o=c==null?void 0:c.target)!==null&&o!==void 0?o:{kind:"Any"};return Z("plugin:event|listen",{event:l,target:s,handler:c2(i)}).then(d=>async()=>ay(l,d))}async function s2(l,i,c){return ly(l,o=>{ay(l,o.id),i(o)},c)}async function f2(l,i){await Z("plugin:event|emit",{event:l,payload:i})}async function d2(l,i,c){await Z("plugin:event|emit_to",{target:typeof l=="string"?{kind:"AnyLabel",label:l}:l,event:i,payload:c})}class Xi extends o2{constructor(i){super(i)}static async new(i,c,o){return Z("plugin:image|new",{rgba:Es(i),width:c,height:o}).then(s=>new Xi(s))}static async fromBytes(i){return Z("plugin:image|from_bytes",{bytes:Es(i)}).then(c=>new Xi(c))}static async fromPath(i){return Z("plugin:image|from_path",{path:i}).then(c=>new Xi(c))}async rgba(){return Z("plugin:image|rgba",{rid:this.rid}).then(i=>new Uint8Array(i))}async size(){return Z("plugin:image|size",{rid:this.rid})}}function Es(l){return l==null?null:typeof l=="string"?l:l instanceof Xi?l.rid:l}var xs;(function(l){l[l.Critical=1]="Critical",l[l.Informational=2]="Informational"})(xs||(xs={}));class h2{constructor(i){this._preventDefault=!1,this.event=i.event,this.id=i.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var pm;(function(l){l.None="none",l.Normal="normal",l.Indeterminate="indeterminate",l.Paused="paused",l.Error="error"})(pm||(pm={}));function iy(){return new uy(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function cs(){return Z("plugin:window|get_all_windows").then(l=>l.map(i=>new uy(i,{skip:!0})))}const os=["tauri://created","tauri://error"];class uy{constructor(i,c={}){var o;this.label=i,this.listeners=Object.create(null),c!=null&&c.skip||Z("plugin:window|create",{options:{...c,parent:typeof c.parent=="string"?c.parent:(o=c.parent)===null||o===void 0?void 0:o.label,label:i}}).then(async()=>this.emit("tauri://created")).catch(async s=>this.emit("tauri://error",s))}static async getByLabel(i){var c;return(c=(await cs()).find(o=>o.label===i))!==null&&c!==void 0?c:null}static getCurrent(){return iy()}static async getAll(){return cs()}static async getFocusedWindow(){for(const i of await cs())if(await i.isFocused())return i;return null}async listen(i,c){return this._handleTauriEvent(i,c)?()=>{const o=this.listeners[i];o.splice(o.indexOf(c),1)}:ly(i,c,{target:{kind:"Window",label:this.label}})}async once(i,c){return this._handleTauriEvent(i,c)?()=>{const o=this.listeners[i];o.splice(o.indexOf(c),1)}:s2(i,c,{target:{kind:"Window",label:this.label}})}async emit(i,c){if(os.includes(i)){for(const o of this.listeners[i]||[])o({event:i,id:-1,payload:c});return}return f2(i,c)}async emitTo(i,c,o){if(os.includes(c)){for(const s of this.listeners[c]||[])s({event:c,id:-1,payload:o});return}return d2(i,c,o)}_handleTauriEvent(i,c){return os.includes(i)?(i in this.listeners?this.listeners[i].push(c):this.listeners[i]=[c],!0):!1}async scaleFactor(){return Z("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return Z("plugin:window|inner_position",{label:this.label}).then(i=>new ra(i))}async outerPosition(){return Z("plugin:window|outer_position",{label:this.label}).then(i=>new ra(i))}async innerSize(){return Z("plugin:window|inner_size",{label:this.label}).then(i=>new Vi(i))}async outerSize(){return Z("plugin:window|outer_size",{label:this.label}).then(i=>new Vi(i))}async isFullscreen(){return Z("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return Z("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return Z("plugin:window|is_maximized",{label:this.label})}async isFocused(){return Z("plugin:window|is_focused",{label:this.label})}async isDecorated(){return Z("plugin:window|is_decorated",{label:this.label})}async isResizable(){return Z("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return Z("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return Z("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return Z("plugin:window|is_closable",{label:this.label})}async isVisible(){return Z("plugin:window|is_visible",{label:this.label})}async title(){return Z("plugin:window|title",{label:this.label})}async theme(){return Z("plugin:window|theme",{label:this.label})}async center(){return Z("plugin:window|center",{label:this.label})}async requestUserAttention(i){let c=null;return i&&(i===xs.Critical?c={type:"Critical"}:c={type:"Informational"}),Z("plugin:window|request_user_attention",{label:this.label,value:c})}async setResizable(i){return Z("plugin:window|set_resizable",{label:this.label,value:i})}async setEnabled(i){return Z("plugin:window|set_enabled",{label:this.label,value:i})}async isEnabled(){return Z("plugin:window|is_enabled",{label:this.label})}async setMaximizable(i){return Z("plugin:window|set_maximizable",{label:this.label,value:i})}async setMinimizable(i){return Z("plugin:window|set_minimizable",{label:this.label,value:i})}async setClosable(i){return Z("plugin:window|set_closable",{label:this.label,value:i})}async setTitle(i){return Z("plugin:window|set_title",{label:this.label,value:i})}async maximize(){return Z("plugin:window|maximize",{label:this.label})}async unmaximize(){return Z("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return Z("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return Z("plugin:window|minimize",{label:this.label})}async unminimize(){return Z("plugin:window|unminimize",{label:this.label})}async show(){return Z("plugin:window|show",{label:this.label})}async hide(){return Z("plugin:window|hide",{label:this.label})}async close(){return Z("plugin:window|close",{label:this.label})}async destroy(){return Z("plugin:window|destroy",{label:this.label})}async setDecorations(i){return Z("plugin:window|set_decorations",{label:this.label,value:i})}async setShadow(i){return Z("plugin:window|set_shadow",{label:this.label,value:i})}async setEffects(i){return Z("plugin:window|set_effects",{label:this.label,value:i})}async clearEffects(){return Z("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(i){return Z("plugin:window|set_always_on_top",{label:this.label,value:i})}async setAlwaysOnBottom(i){return Z("plugin:window|set_always_on_bottom",{label:this.label,value:i})}async setContentProtected(i){return Z("plugin:window|set_content_protected",{label:this.label,value:i})}async setSize(i){return Z("plugin:window|set_size",{label:this.label,value:i instanceof _l?i:new _l(i)})}async setMinSize(i){return Z("plugin:window|set_min_size",{label:this.label,value:i instanceof _l?i:i?new _l(i):null})}async setMaxSize(i){return Z("plugin:window|set_max_size",{label:this.label,value:i instanceof _l?i:i?new _l(i):null})}async setSizeConstraints(i){function c(o){return o?{Logical:o}:null}return Z("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:c(i==null?void 0:i.minWidth),minHeight:c(i==null?void 0:i.minHeight),maxWidth:c(i==null?void 0:i.maxWidth),maxHeight:c(i==null?void 0:i.maxHeight)}})}async setPosition(i){return Z("plugin:window|set_position",{label:this.label,value:i instanceof mr?i:new mr(i)})}async setFullscreen(i){return Z("plugin:window|set_fullscreen",{label:this.label,value:i})}async setFocus(){return Z("plugin:window|set_focus",{label:this.label})}async setIcon(i){return Z("plugin:window|set_icon",{label:this.label,value:Es(i)})}async setSkipTaskbar(i){return Z("plugin:window|set_skip_taskbar",{label:this.label,value:i})}async setCursorGrab(i){return Z("plugin:window|set_cursor_grab",{label:this.label,value:i})}async setCursorVisible(i){return Z("plugin:window|set_cursor_visible",{label:this.label,value:i})}async setCursorIcon(i){return Z("plugin:window|set_cursor_icon",{label:this.label,value:i})}async setBackgroundColor(i){return Z("plugin:window|set_background_color",{color:i})}async setCursorPosition(i){return Z("plugin:window|set_cursor_position",{label:this.label,value:i instanceof mr?i:new mr(i)})}async setIgnoreCursorEvents(i){return Z("plugin:window|set_ignore_cursor_events",{label:this.label,value:i})}async startDragging(){return Z("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(i){return Z("plugin:window|start_resize_dragging",{label:this.label,value:i})}async setProgressBar(i){return Z("plugin:window|set_progress_bar",{label:this.label,value:i})}async setVisibleOnAllWorkspaces(i){return Z("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:i})}async setTitleBarStyle(i){return Z("plugin:window|set_title_bar_style",{label:this.label,value:i})}async setTheme(i){return Z("plugin:window|set_theme",{label:this.label,value:i})}async onResized(i){return this.listen(ze.WINDOW_RESIZED,c=>{c.payload=new Vi(c.payload),i(c)})}async onMoved(i){return this.listen(ze.WINDOW_MOVED,c=>{c.payload=new ra(c.payload),i(c)})}async onCloseRequested(i){return this.listen(ze.WINDOW_CLOSE_REQUESTED,async c=>{const o=new h2(c);await i(o),o.isPreventDefault()||await this.destroy()})}async onDragDropEvent(i){const c=await this.listen(ze.DRAG_ENTER,m=>{i({...m,payload:{type:"enter",paths:m.payload.paths,position:new ra(m.payload.position)}})}),o=await this.listen(ze.DRAG_OVER,m=>{i({...m,payload:{type:"over",position:new ra(m.payload.position)}})}),s=await this.listen(ze.DRAG_DROP,m=>{i({...m,payload:{type:"drop",paths:m.payload.paths,position:new ra(m.payload.position)}})}),d=await this.listen(ze.DRAG_LEAVE,m=>{i({...m,payload:{type:"leave"}})});return()=>{c(),s(),o(),d()}}async onFocusChanged(i){const c=await this.listen(ze.WINDOW_FOCUS,s=>{i({...s,payload:!0})}),o=await this.listen(ze.WINDOW_BLUR,s=>{i({...s,payload:!1})});return()=>{c(),o()}}async onScaleChanged(i){return this.listen(ze.WINDOW_SCALE_FACTOR_CHANGED,i)}async onThemeChanged(i){return this.listen(ze.WINDOW_THEME_CHANGED,i)}}var gm;(function(l){l.AppearanceBased="appearanceBased",l.Light="light",l.Dark="dark",l.MediumLight="mediumLight",l.UltraDark="ultraDark",l.Titlebar="titlebar",l.Selection="selection",l.Menu="menu",l.Popover="popover",l.Sidebar="sidebar",l.HeaderView="headerView",l.Sheet="sheet",l.WindowBackground="windowBackground",l.HudWindow="hudWindow",l.FullScreenUI="fullScreenUI",l.Tooltip="tooltip",l.ContentBackground="contentBackground",l.UnderWindowBackground="underWindowBackground",l.UnderPageBackground="underPageBackground",l.Mica="mica",l.Blur="blur",l.Acrylic="acrylic",l.Tabbed="tabbed",l.TabbedDark="tabbedDark",l.TabbedLight="tabbedLight"})(gm||(gm={}));var bm;(function(l){l.FollowsWindowActiveState="followsWindowActiveState",l.Active="active",l.Inactive="inactive"})(bm||(bm={}));const m2="/assets/icon-BlfaAlWe.svg",Ar=iy();function y2(){const[l,i]=k.useState(null);return k.useEffect(()=>{const c=Ar.listen("app://update-progress",o=>{i(o.payload)});return()=>{c.then(o=>o())}},[]),l}function p2(){const[l,i]=k.useState(!1);k.useEffect(()=>{Ar.emit("app://update");const o=Ar.listen("app://update-error",()=>{i(!0)});return()=>{o.then(s=>s())}},[]);const c=()=>{i(!1),Ar.emit("app://update")};return rt.jsxs(rt.Fragment,{children:[rt.jsx(WS,{}),rt.jsx(Bn,{sx:{position:"absolute",inset:0},display:"flex",alignItems:"center",px:2,"data-tauri-drag-region":!0,children:rt.jsxs(Bn,{display:"flex",alignItems:"center",flex:"1","data-tauri-drag-region":!0,children:[rt.jsx(Bn,{component:"img",src:m2,alt:"logo",sx:{width:"4rem",height:"4rem"},"data-tauri-drag-region":!0}),rt.jsx(Bn,{flex:1,ml:2,children:l?rt.jsx(b2,{onRetry:c}):rt.jsx(g2,{})})]})})]})}function g2(){const l=y2();return rt.jsxs(rt.Fragment,{children:[rt.jsx($s,{variant:"h1",fontSize:"1rem","data-tauri-drag-region":!0,children:"Updating the GUI components..."}),rt.jsx(Bn,{mt:1,children:rt.jsx(v2,{value:l})})]})}function b2({onRetry:l}){return rt.jsxs(rt.Fragment,{children:[rt.jsx($s,{variant:"h1",fontSize:"1rem","data-tauri-drag-region":!0,children:"Failed to update the GUI components."}),rt.jsx(Bn,{mt:1,"data-tauri-drag-region":!0,children:rt.jsx($S,{variant:"contained",color:"primary",size:"small",onClick:l,sx:{textTransform:"none"},children:"Retry"})})]})}function v2(l){const{value:i}=l;return rt.jsxs(Bn,{sx:{display:"flex",alignItems:"center"},children:[rt.jsx(Bn,{flex:"1",children:rt.jsx(i2,{variant:i===null?"indeterminate":"determinate",value:i??0,sx:{py:1.2,".MuiLinearProgress-bar":{transition:"none"}}})}),i!==null&&rt.jsx(Bn,{sx:{minWidth:35,textAlign:"right",ml:1},children:rt.jsx($s,{variant:"body2",color:"text.secondary",children:`${Math.round(i)}%`})})]})}const S2=Yg.createRoot(document.getElementById("root"));S2.render(rt.jsx(p2,{})); diff --git a/apps/gpgui-helper/dist/assets/main-c159dd55.js b/apps/gpgui-helper/dist/assets/main-c159dd55.js deleted file mode 100644 index d34e949f..00000000 --- a/apps/gpgui-helper/dist/assets/main-c159dd55.js +++ /dev/null @@ -1,188 +0,0 @@ -function dh(e,t){for(var n=0;nr[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();function ph(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function sn(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}),n}var jf={exports:{}},Bi={},Ff={exports:{}},D={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var yo=Symbol.for("react.element"),mh=Symbol.for("react.portal"),hh=Symbol.for("react.fragment"),yh=Symbol.for("react.strict_mode"),gh=Symbol.for("react.profiler"),vh=Symbol.for("react.provider"),wh=Symbol.for("react.context"),xh=Symbol.for("react.forward_ref"),Sh=Symbol.for("react.suspense"),kh=Symbol.for("react.memo"),_h=Symbol.for("react.lazy"),Uu=Symbol.iterator;function Ch(e){return e===null||typeof e!="object"?null:(e=Uu&&e[Uu]||e["@@iterator"],typeof e=="function"?e:null)}var Wf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Bf=Object.assign,Uf={};function fr(e,t,n){this.props=e,this.context=t,this.refs=Uf,this.updater=n||Wf}fr.prototype.isReactComponent={};fr.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};fr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Vf(){}Vf.prototype=fr.prototype;function _s(e,t,n){this.props=e,this.context=t,this.refs=Uf,this.updater=n||Wf}var Cs=_s.prototype=new Vf;Cs.constructor=_s;Bf(Cs,fr.prototype);Cs.isPureReactComponent=!0;var Vu=Array.isArray,Hf=Object.prototype.hasOwnProperty,Es={current:null},Kf={key:!0,ref:!0,__self:!0,__source:!0};function Qf(e,t,n){var r,o={},i=null,l=null;if(t!=null)for(r in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(i=""+t.key),t)Hf.call(t,r)&&!Kf.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(a===1)o.children=n;else if(1>>1,ue=E[Z];if(0>>1;Zo(Bt,N))cto(Rn,Bt)?(E[Z]=Rn,E[ct]=N,Z=ct):(E[Z]=Bt,E[Te]=N,Z=Te);else if(cto(Rn,N))E[Z]=Rn,E[ct]=N,Z=ct;else break e}}return z}function o(E,z){var N=E.sortIndex-z.sortIndex;return N!==0?N:E.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var l=Date,a=l.now();e.unstable_now=function(){return l.now()-a}}var s=[],u=[],p=1,m=null,d=3,v=!1,g=!1,y=!1,$=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(E){for(var z=n(u);z!==null;){if(z.callback===null)r(u);else if(z.startTime<=E)r(u),z.sortIndex=z.expirationTime,t(s,z);else break;z=n(u)}}function w(E){if(y=!1,h(E),!g)if(n(s)!==null)g=!0,$e(x);else{var z=n(u);z!==null&&Tt(w,z.startTime-E)}}function x(E,z){g=!1,y&&(y=!1,f(P),P=-1),v=!0;var N=d;try{for(h(z),m=n(s);m!==null&&(!(m.expirationTime>z)||E&&!W());){var Z=m.callback;if(typeof Z=="function"){m.callback=null,d=m.priorityLevel;var ue=Z(m.expirationTime<=z);z=e.unstable_now(),typeof ue=="function"?m.callback=ue:m===n(s)&&r(s),h(z)}else r(s);m=n(s)}if(m!==null)var Tn=!0;else{var Te=n(u);Te!==null&&Tt(w,Te.startTime-z),Tn=!1}return Tn}finally{m=null,d=N,v=!1}}var k=!1,S=null,P=-1,I=5,O=-1;function W(){return!(e.unstable_now()-OE||125Z?(E.sortIndex=N,t(u,E),n(s)===null&&E===n(u)&&(y?(f(P),P=-1):y=!0,Tt(w,N-Z))):(E.sortIndex=ue,t(s,E),g||v||(g=!0,$e(x))),E},e.unstable_shouldYield=W,e.unstable_wrapCallback=function(E){var z=d;return function(){var N=d;d=z;try{return E.apply(this,arguments)}finally{d=N}}}})(Zf);qf.exports=Zf;var Lh=qf.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ih=C,Qe=Lh;function _(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),va=Object.prototype.hasOwnProperty,Dh=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Qu={},Gu={};function Ah(e){return va.call(Gu,e)?!0:va.call(Qu,e)?!1:Dh.test(e)?Gu[e]=!0:(Qu[e]=!0,!1)}function jh(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Fh(e,t,n,r){if(t===null||typeof t>"u"||jh(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ze(e,t,n,r,o,i,l){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=l}var xe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xe[e]=new ze(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xe[t]=new ze(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xe[e]=new ze(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xe[e]=new ze(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xe[e]=new ze(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xe[e]=new ze(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xe[e]=new ze(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xe[e]=new ze(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xe[e]=new ze(e,5,!1,e.toLowerCase(),null,!1,!1)});var $s=/[\-:]([a-z])/g;function Ts(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace($s,Ts);xe[t]=new ze(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace($s,Ts);xe[t]=new ze(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace($s,Ts);xe[t]=new ze(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xe[e]=new ze(e,1,!1,e.toLowerCase(),null,!1,!1)});xe.xlinkHref=new ze("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xe[e]=new ze(e,1,!1,e.toLowerCase(),null,!0,!0)});function Rs(e,t,n,r){var o=xe.hasOwnProperty(t)?xe[t]:null;(o!==null?o.type!==0:r||!(2a||o[l]!==i[a]){var s=` -`+o[l].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=l&&0<=a);break}}}finally{Ul=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Mr(e):""}function Wh(e){switch(e.tag){case 5:return Mr(e.type);case 16:return Mr("Lazy");case 13:return Mr("Suspense");case 19:return Mr("SuspenseList");case 0:case 2:case 15:return e=Vl(e.type,!1),e;case 11:return e=Vl(e.type.render,!1),e;case 1:return e=Vl(e.type,!0),e;default:return""}}function ka(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case An:return"Fragment";case Dn:return"Portal";case wa:return"Profiler";case Os:return"StrictMode";case xa:return"Suspense";case Sa:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case td:return(e.displayName||"Context")+".Consumer";case ed:return(e._context.displayName||"Context")+".Provider";case Ms:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case bs:return t=e.displayName||null,t!==null?t:ka(e.type)||"Memo";case Vt:t=e._payload,e=e._init;try{return ka(e(t))}catch{}}return null}function Bh(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ka(t);case 8:return t===Os?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ln(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function rd(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Uh(e){var t=rd(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(l){r=""+l,i.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(l){r=""+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Mo(e){e._valueTracker||(e._valueTracker=Uh(e))}function od(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=rd(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function mi(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function _a(e,t){var n=t.checked;return te({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Xu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ln(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function id(e,t){t=t.checked,t!=null&&Rs(e,"checked",t,!1)}function Ca(e,t){id(e,t);var n=ln(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Ea(e,t.type,n):t.hasOwnProperty("defaultValue")&&Ea(e,t.type,ln(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function qu(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Ea(e,t,n){(t!=="number"||mi(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var br=Array.isArray;function Yn(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=bo.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Kr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Lr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Vh=["Webkit","ms","Moz","O"];Object.keys(Lr).forEach(function(e){Vh.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Lr[t]=Lr[e]})});function ud(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Lr.hasOwnProperty(e)&&Lr[e]?(""+t).trim():t+"px"}function cd(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=ud(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var Hh=te({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ta(e,t){if(t){if(Hh[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(_(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(_(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(_(61))}if(t.style!=null&&typeof t.style!="object")throw Error(_(62))}}function Ra(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Oa=null;function zs(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ma=null,Xn=null,qn=null;function ec(e){if(e=wo(e)){if(typeof Ma!="function")throw Error(_(280));var t=e.stateNode;t&&(t=Qi(t),Ma(e.stateNode,e.type,t))}}function fd(e){Xn?qn?qn.push(e):qn=[e]:Xn=e}function dd(){if(Xn){var e=Xn,t=qn;if(qn=Xn=null,ec(e),t)for(e=0;e>>=0,e===0?32:31-(n0(e)/r0|0)|0}var zo=64,No=4194304;function zr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function vi(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,l=n&268435455;if(l!==0){var a=l&~o;a!==0?r=zr(a):(i&=l,i!==0&&(r=zr(i)))}else l=n&~o,l!==0?r=zr(l):i!==0&&(r=zr(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function go(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ht(t),e[t]=n}function a0(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Dr),uc=String.fromCharCode(32),cc=!1;function bd(e,t){switch(e){case"keyup":return L0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zd(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var jn=!1;function D0(e,t){switch(e){case"compositionend":return zd(t);case"keypress":return t.which!==32?null:(cc=!0,uc);case"textInput":return e=t.data,e===uc&&cc?null:e;default:return null}}function A0(e,t){if(jn)return e==="compositionend"||!Ws&&bd(e,t)?(e=Od(),ei=As=Yt=null,jn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=mc(n)}}function Dd(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Dd(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ad(){for(var e=window,t=mi();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=mi(e.document)}return t}function Bs(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Q0(e){var t=Ad(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Dd(n.ownerDocument.documentElement,n)){if(r!==null&&Bs(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=hc(n,i);var l=hc(n,r);o&&l&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==l.node||e.focusOffset!==l.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(l.node,l.offset)):(t.setEnd(l.node,l.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Fn=null,Da=null,jr=null,Aa=!1;function yc(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Aa||Fn==null||Fn!==mi(r)||(r=Fn,"selectionStart"in r&&Bs(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),jr&&Zr(jr,r)||(jr=r,r=Si(Da,"onSelect"),0Un||(e.current=Va[Un],Va[Un]=null,Un--)}function K(e,t){Un++,Va[Un]=e.current,e.current=t}var an={},Pe=cn(an),Ie=cn(!1),xn=an;function or(e,t){var n=e.type.contextTypes;if(!n)return an;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function De(e){return e=e.childContextTypes,e!=null}function _i(){Y(Ie),Y(Pe)}function _c(e,t,n){if(Pe.current!==an)throw Error(_(168));K(Pe,t),K(Ie,n)}function Qd(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(_(108,Bh(e)||"Unknown",o));return te({},n,r)}function Ci(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||an,xn=Pe.current,K(Pe,e),K(Ie,Ie.current),!0}function Cc(e,t,n){var r=e.stateNode;if(!r)throw Error(_(169));n?(e=Qd(e,t,xn),r.__reactInternalMemoizedMergedChildContext=e,Y(Ie),Y(Pe),K(Pe,e)):Y(Ie),K(Ie,n)}var Mt=null,Gi=!1,oa=!1;function Gd(e){Mt===null?Mt=[e]:Mt.push(e)}function iy(e){Gi=!0,Gd(e)}function fn(){if(!oa&&Mt!==null){oa=!0;var e=0,t=B;try{var n=Mt;for(B=1;e>=l,o-=l,bt=1<<32-ht(t)+o|n<P?(I=S,S=null):I=S.sibling;var O=d(f,S,h[P],w);if(O===null){S===null&&(S=I);break}e&&S&&O.alternate===null&&t(f,S),c=i(O,c,P),k===null?x=O:k.sibling=O,k=O,S=I}if(P===h.length)return n(f,S),q&&dn(f,P),x;if(S===null){for(;PP?(I=S,S=null):I=S.sibling;var W=d(f,S,O.value,w);if(W===null){S===null&&(S=I);break}e&&S&&W.alternate===null&&t(f,S),c=i(W,c,P),k===null?x=W:k.sibling=W,k=W,S=I}if(O.done)return n(f,S),q&&dn(f,P),x;if(S===null){for(;!O.done;P++,O=h.next())O=m(f,O.value,w),O!==null&&(c=i(O,c,P),k===null?x=O:k.sibling=O,k=O);return q&&dn(f,P),x}for(S=r(f,S);!O.done;P++,O=h.next())O=v(S,f,P,O.value,w),O!==null&&(e&&O.alternate!==null&&S.delete(O.key===null?P:O.key),c=i(O,c,P),k===null?x=O:k.sibling=O,k=O);return e&&S.forEach(function(H){return t(f,H)}),q&&dn(f,P),x}function $(f,c,h,w){if(typeof h=="object"&&h!==null&&h.type===An&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Oo:e:{for(var x=h.key,k=c;k!==null;){if(k.key===x){if(x=h.type,x===An){if(k.tag===7){n(f,k.sibling),c=o(k,h.props.children),c.return=f,f=c;break e}}else if(k.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===Vt&&$c(x)===k.type){n(f,k.sibling),c=o(k,h.props),c.ref=Pr(f,k,h),c.return=f,f=c;break e}n(f,k);break}else t(f,k);k=k.sibling}h.type===An?(c=wn(h.props.children,f.mode,w,h.key),c.return=f,f=c):(w=si(h.type,h.key,h.props,null,f.mode,w),w.ref=Pr(f,c,h),w.return=f,f=w)}return l(f);case Dn:e:{for(k=h.key;c!==null;){if(c.key===k)if(c.tag===4&&c.stateNode.containerInfo===h.containerInfo&&c.stateNode.implementation===h.implementation){n(f,c.sibling),c=o(c,h.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=da(h,f.mode,w),c.return=f,f=c}return l(f);case Vt:return k=h._init,$(f,c,k(h._payload),w)}if(br(h))return g(f,c,h,w);if(Sr(h))return y(f,c,h,w);Wo(f,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,c!==null&&c.tag===6?(n(f,c.sibling),c=o(c,h),c.return=f,f=c):(n(f,c),c=fa(h,f.mode,w),c.return=f,f=c),l(f)):n(f,c)}return $}var lr=Zd(!0),Jd=Zd(!1),$i=cn(null),Ti=null,Kn=null,Ks=null;function Qs(){Ks=Kn=Ti=null}function Gs(e){var t=$i.current;Y($i),e._currentValue=t}function Qa(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Jn(e,t){Ti=e,Ks=Kn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Le=!0),e.firstContext=null)}function ot(e){var t=e._currentValue;if(Ks!==e)if(e={context:e,memoizedValue:t,next:null},Kn===null){if(Ti===null)throw Error(_(308));Kn=e,Ti.dependencies={lanes:0,firstContext:e}}else Kn=Kn.next=e;return t}var hn=null;function Ys(e){hn===null?hn=[e]:hn.push(e)}function ep(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,Ys(t)):(n.next=o.next,o.next=n),t.interleaved=n,At(e,r)}function At(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ht=!1;function Xs(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function tp(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Lt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function tn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,A&2){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,At(e,n)}return o=r.interleaved,o===null?(t.next=t,Ys(r)):(t.next=o.next,o.next=t),r.interleaved=t,At(e,n)}function ni(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Ls(e,n)}}function Tc(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var l={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=l:i=i.next=l,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Ri(e,t,n,r){var o=e.updateQueue;Ht=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,a=o.shared.pending;if(a!==null){o.shared.pending=null;var s=a,u=s.next;s.next=null,l===null?i=u:l.next=u,l=s;var p=e.alternate;p!==null&&(p=p.updateQueue,a=p.lastBaseUpdate,a!==l&&(a===null?p.firstBaseUpdate=u:a.next=u,p.lastBaseUpdate=s))}if(i!==null){var m=o.baseState;l=0,p=u=s=null,a=i;do{var d=a.lane,v=a.eventTime;if((r&d)===d){p!==null&&(p=p.next={eventTime:v,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var g=e,y=a;switch(d=t,v=n,y.tag){case 1:if(g=y.payload,typeof g=="function"){m=g.call(v,m,d);break e}m=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=y.payload,d=typeof g=="function"?g.call(v,m,d):g,d==null)break e;m=te({},m,d);break e;case 2:Ht=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,d=o.effects,d===null?o.effects=[a]:d.push(a))}else v={eventTime:v,lane:d,tag:a.tag,payload:a.payload,callback:a.callback,next:null},p===null?(u=p=v,s=m):p=p.next=v,l|=d;if(a=a.next,a===null){if(a=o.shared.pending,a===null)break;d=a,a=d.next,d.next=null,o.lastBaseUpdate=d,o.shared.pending=null}}while(1);if(p===null&&(s=m),o.baseState=s,o.firstBaseUpdate=u,o.lastBaseUpdate=p,t=o.shared.interleaved,t!==null){o=t;do l|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);_n|=l,e.lanes=l,e.memoizedState=m}}function Rc(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=la.transition;la.transition={};try{e(!1),t()}finally{B=n,la.transition=r}}function vp(){return it().memoizedState}function uy(e,t,n){var r=rn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},wp(e))xp(t,n);else if(n=ep(e,t,n,r),n!==null){var o=Me();yt(n,e,r,o),Sp(n,t,r)}}function cy(e,t,n){var r=rn(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(wp(e))xp(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,a=i(l,n);if(o.hasEagerState=!0,o.eagerState=a,gt(a,l)){var s=t.interleaved;s===null?(o.next=o,Ys(t)):(o.next=s.next,s.next=o),t.interleaved=o;return}}catch{}finally{}n=ep(e,t,o,r),n!==null&&(o=Me(),yt(n,e,r,o),Sp(n,t,r))}}function wp(e){var t=e.alternate;return e===ee||t!==null&&t===ee}function xp(e,t){Fr=Mi=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Sp(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Ls(e,n)}}var bi={readContext:ot,useCallback:ke,useContext:ke,useEffect:ke,useImperativeHandle:ke,useInsertionEffect:ke,useLayoutEffect:ke,useMemo:ke,useReducer:ke,useRef:ke,useState:ke,useDebugValue:ke,useDeferredValue:ke,useTransition:ke,useMutableSource:ke,useSyncExternalStore:ke,useId:ke,unstable_isNewReconciler:!1},fy={readContext:ot,useCallback:function(e,t){return xt().memoizedState=[e,t===void 0?null:t],e},useContext:ot,useEffect:Mc,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,oi(4194308,4,pp.bind(null,t,e),n)},useLayoutEffect:function(e,t){return oi(4194308,4,e,t)},useInsertionEffect:function(e,t){return oi(4,2,e,t)},useMemo:function(e,t){var n=xt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=xt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=uy.bind(null,ee,e),[r.memoizedState,e]},useRef:function(e){var t=xt();return e={current:e},t.memoizedState=e},useState:Oc,useDebugValue:ou,useDeferredValue:function(e){return xt().memoizedState=e},useTransition:function(){var e=Oc(!1),t=e[0];return e=sy.bind(null,e[1]),xt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ee,o=xt();if(q){if(n===void 0)throw Error(_(407));n=n()}else{if(n=t(),he===null)throw Error(_(349));kn&30||ip(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Mc(ap.bind(null,r,i,e),[e]),r.flags|=2048,lo(9,lp.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=xt(),t=he.identifierPrefix;if(q){var n=zt,r=bt;n=(r&~(1<<32-ht(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=oo++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),n==="select"&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[_t]=t,e[to]=r,Mp(e,t,!1,!1),t.stateNode=e;e:{switch(l=Ra(n,r),n){case"dialog":Q("cancel",e),Q("close",e),o=r;break;case"iframe":case"object":case"embed":Q("load",e),o=r;break;case"video":case"audio":for(o=0;our&&(t.flags|=128,r=!0,$r(i,!1),t.lanes=4194304)}else{if(!r)if(e=Oi(l),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),$r(i,!0),i.tail===null&&i.tailMode==="hidden"&&!l.alternate&&!q)return _e(t),null}else 2*ie()-i.renderingStartTime>ur&&n!==1073741824&&(t.flags|=128,r=!0,$r(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(n=i.last,n!==null?n.sibling=l:t.child=l,i.last=l)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=ie(),t.sibling=null,n=J.current,K(J,r?n&1|2:n&1),t):(_e(t),null);case 22:case 23:return cu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Be&1073741824&&(_e(t),t.subtreeFlags&6&&(t.flags|=8192)):_e(t),null;case 24:return null;case 25:return null}throw Error(_(156,t.tag))}function wy(e,t){switch(Vs(t),t.tag){case 1:return De(t.type)&&_i(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ar(),Y(Ie),Y(Pe),Js(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Zs(t),null;case 13:if(Y(J),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(_(340));ir()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Y(J),null;case 4:return ar(),null;case 10:return Gs(t.type._context),null;case 22:case 23:return cu(),null;case 24:return null;default:return null}}var Uo=!1,Ee=!1,xy=typeof WeakSet=="function"?WeakSet:Set,T=null;function Qn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){oe(e,t,r)}else n.current=null}function ns(e,t,n){try{n()}catch(r){oe(e,t,r)}}var Bc=!1;function Sy(e,t){if(ja=wi,e=Ad(),Bs(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var l=0,a=-1,s=-1,u=0,p=0,m=e,d=null;t:for(;;){for(var v;m!==n||o!==0&&m.nodeType!==3||(a=l+o),m!==i||r!==0&&m.nodeType!==3||(s=l+r),m.nodeType===3&&(l+=m.nodeValue.length),(v=m.firstChild)!==null;)d=m,m=v;for(;;){if(m===e)break t;if(d===n&&++u===o&&(a=l),d===i&&++p===r&&(s=l),(v=m.nextSibling)!==null)break;m=d,d=m.parentNode}m=v}n=a===-1||s===-1?null:{start:a,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(Fa={focusedElem:e,selectionRange:n},wi=!1,T=t;T!==null;)if(t=T,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,T=e;else for(;T!==null;){t=T;try{var g=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var y=g.memoizedProps,$=g.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?y:dt(t.type,y),$);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var h=t.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(_(163))}}catch(w){oe(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,T=e;break}T=t.return}return g=Bc,Bc=!1,g}function Wr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&ns(t,n,i)}o=o.next}while(o!==r)}}function qi(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function rs(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Np(e){var t=e.alternate;t!==null&&(e.alternate=null,Np(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[_t],delete t[to],delete t[Ua],delete t[ry],delete t[oy])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Lp(e){return e.tag===5||e.tag===3||e.tag===4}function Uc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Lp(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function os(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ki));else if(r!==4&&(e=e.child,e!==null))for(os(e,t,n),e=e.sibling;e!==null;)os(e,t,n),e=e.sibling}function is(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(is(e,t,n),e=e.sibling;e!==null;)is(e,t,n),e=e.sibling}var ge=null,pt=!1;function Ut(e,t,n){for(n=n.child;n!==null;)Ip(e,t,n),n=n.sibling}function Ip(e,t,n){if(Ct&&typeof Ct.onCommitFiberUnmount=="function")try{Ct.onCommitFiberUnmount(Ui,n)}catch{}switch(n.tag){case 5:Ee||Qn(n,t);case 6:var r=ge,o=pt;ge=null,Ut(e,t,n),ge=r,pt=o,ge!==null&&(pt?(e=ge,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ge.removeChild(n.stateNode));break;case 18:ge!==null&&(pt?(e=ge,n=n.stateNode,e.nodeType===8?ra(e.parentNode,n):e.nodeType===1&&ra(e,n),Xr(e)):ra(ge,n.stateNode));break;case 4:r=ge,o=pt,ge=n.stateNode.containerInfo,pt=!0,Ut(e,t,n),ge=r,pt=o;break;case 0:case 11:case 14:case 15:if(!Ee&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,l=i.destroy;i=i.tag,l!==void 0&&(i&2||i&4)&&ns(n,t,l),o=o.next}while(o!==r)}Ut(e,t,n);break;case 1:if(!Ee&&(Qn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){oe(n,t,a)}Ut(e,t,n);break;case 21:Ut(e,t,n);break;case 22:n.mode&1?(Ee=(r=Ee)||n.memoizedState!==null,Ut(e,t,n),Ee=r):Ut(e,t,n);break;default:Ut(e,t,n)}}function Vc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new xy),t.forEach(function(r){var o=Oy.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function ft(e,t){var n=t.deletions;if(n!==null)for(var r=0;ro&&(o=l),r&=~i}if(r=o,r=ie()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_y(r/1960))-r,10e?16:e,Xt===null)var r=!1;else{if(e=Xt,Xt=null,Li=0,A&6)throw Error(_(331));var o=A;for(A|=4,T=e.current;T!==null;){var i=T,l=i.child;if(T.flags&16){var a=i.deletions;if(a!==null){for(var s=0;sie()-su?vn(e,0):au|=n),Ae(e,t)}function Vp(e,t){t===0&&(e.mode&1?(t=No,No<<=1,!(No&130023424)&&(No=4194304)):t=1);var n=Me();e=At(e,t),e!==null&&(go(e,t,n),Ae(e,n))}function Ry(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Vp(e,n)}function Oy(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(_(314))}r!==null&&r.delete(t),Vp(e,n)}var Hp;Hp=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ie.current)Le=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Le=!1,gy(e,t,n);Le=!!(e.flags&131072)}else Le=!1,q&&t.flags&1048576&&Yd(t,Pi,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;ii(e,t),e=t.pendingProps;var o=or(t,Pe.current);Jn(t,n),o=tu(null,t,r,e,o,n);var i=nu();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,De(r)?(i=!0,Ci(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Xs(t),o.updater=Xi,t.stateNode=o,o._reactInternals=t,Ya(t,r,e,n),t=Za(null,t,r,!0,i,n)):(t.tag=0,q&&i&&Us(t),Re(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(ii(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=by(r),e=dt(r,e),o){case 0:t=qa(null,t,r,e,n);break e;case 1:t=jc(null,t,r,e,n);break e;case 11:t=Dc(null,t,r,e,n);break e;case 14:t=Ac(null,t,r,dt(r.type,e),n);break e}throw Error(_(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:dt(r,o),qa(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:dt(r,o),jc(e,t,r,o,n);case 3:e:{if(Tp(t),e===null)throw Error(_(387));r=t.pendingProps,i=t.memoizedState,o=i.element,tp(e,t),Ri(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=sr(Error(_(423)),t),t=Fc(e,t,r,n,o);break e}else if(r!==o){o=sr(Error(_(424)),t),t=Fc(e,t,r,n,o);break e}else for(Ve=en(t.stateNode.containerInfo.firstChild),He=t,q=!0,mt=null,n=Jd(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ir(),r===o){t=jt(e,t,n);break e}Re(e,t,r,n)}t=t.child}return t;case 5:return np(t),e===null&&Ka(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,l=o.children,Wa(r,o)?l=null:i!==null&&Wa(r,i)&&(t.flags|=32),$p(e,t),Re(e,t,l,n),t.child;case 6:return e===null&&Ka(t),null;case 13:return Rp(e,t,n);case 4:return qs(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=lr(t,null,r,n):Re(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:dt(r,o),Dc(e,t,r,o,n);case 7:return Re(e,t,t.pendingProps,n),t.child;case 8:return Re(e,t,t.pendingProps.children,n),t.child;case 12:return Re(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,K($i,r._currentValue),r._currentValue=l,i!==null)if(gt(i.value,l)){if(i.children===o.children&&!Ie.current){t=jt(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var a=i.dependencies;if(a!==null){l=i.child;for(var s=a.firstContext;s!==null;){if(s.context===r){if(i.tag===1){s=Lt(-1,n&-n),s.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var p=u.pending;p===null?s.next=s:(s.next=p.next,p.next=s),u.pending=s}}i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),Qa(i.return,n,t),a.lanes|=n;break}s=s.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error(_(341));l.lanes|=n,a=l.alternate,a!==null&&(a.lanes|=n),Qa(l,n,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}Re(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Jn(t,n),o=ot(o),r=r(o),t.flags|=1,Re(e,t,r,n),t.child;case 14:return r=t.type,o=dt(r,t.pendingProps),o=dt(r.type,o),Ac(e,t,r,o,n);case 15:return Ep(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:dt(r,o),ii(e,t),t.tag=1,De(r)?(e=!0,Ci(t)):e=!1,Jn(t,n),kp(t,r,o),Ya(t,r,o,n),Za(null,t,r,!0,e,n);case 19:return Op(e,t,n);case 22:return Pp(e,t,n)}throw Error(_(156,t.tag))};function Kp(e,t){return wd(e,t)}function My(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function nt(e,t,n,r){return new My(e,t,n,r)}function du(e){return e=e.prototype,!(!e||!e.isReactComponent)}function by(e){if(typeof e=="function")return du(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ms)return 11;if(e===bs)return 14}return 2}function on(e,t){var n=e.alternate;return n===null?(n=nt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function si(e,t,n,r,o,i){var l=2;if(r=e,typeof e=="function")du(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case An:return wn(n.children,o,i,t);case Os:l=8,o|=8;break;case wa:return e=nt(12,n,t,o|2),e.elementType=wa,e.lanes=i,e;case xa:return e=nt(13,n,t,o),e.elementType=xa,e.lanes=i,e;case Sa:return e=nt(19,n,t,o),e.elementType=Sa,e.lanes=i,e;case nd:return Ji(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ed:l=10;break e;case td:l=9;break e;case Ms:l=11;break e;case bs:l=14;break e;case Vt:l=16,r=null;break e}throw Error(_(130,e==null?e:typeof e,""))}return t=nt(l,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function wn(e,t,n,r){return e=nt(7,e,r,t),e.lanes=n,e}function Ji(e,t,n,r){return e=nt(22,e,r,t),e.elementType=nd,e.lanes=n,e.stateNode={isHidden:!1},e}function fa(e,t,n){return e=nt(6,e,null,t),e.lanes=n,e}function da(e,t,n){return t=nt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zy(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Kl(0),this.expirationTimes=Kl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Kl(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function pu(e,t,n,r,o,i,l,a,s){return e=new zy(e,t,n,a,s),t===1?(t=1,i===!0&&(t|=8)):t=0,i=nt(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Xs(i),e}function Ny(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Xp)}catch(e){console.error(e)}}Xp(),Xf.exports=Ge;var jy=Xf.exports,qp,Zc=jy;qp=Zc.createRoot,Zc.hydrateRoot;const Fy={black:"#000",white:"#fff"},so=Fy,Wy={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Mn=Wy,By={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},bn=By,Uy={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},zn=Uy,Vy={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},Nn=Vy,Hy={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},Ln=Hy,Ky={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},Rr=Ky,Qy={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},Gy=Qy;function uo(e){let t="https://mui.com/production-error/?code="+e;for(let n=1;n0?ve(mr,--je):0,cr--,ce===10&&(cr=1,il--),ce}function Ke(){return ce=je2||fo(ce)>3?"":" "}function dg(e,t){for(;--t&&Ke()&&!(ce<48||ce>102||ce>57&&ce<65||ce>70&&ce<97););return So(e,ui()+(t<6&&Pt()==32&&Ke()==32))}function fs(e){for(;Ke();)switch(ce){case e:return je;case 34:case 39:e!==34&&e!==39&&fs(ce);break;case 40:e===41&&fs(e);break;case 92:Ke();break}return je}function pg(e,t){for(;Ke()&&e+ce!==47+10;)if(e+ce===42+42&&Pt()===47)break;return"/*"+So(t,je-1)+"*"+ol(e===47?e:Ke())}function mg(e){for(;!fo(Pt());)Ke();return So(e,je)}function hg(e){return om(fi("",null,null,null,[""],e=rm(e),0,[0],e))}function fi(e,t,n,r,o,i,l,a,s){for(var u=0,p=0,m=l,d=0,v=0,g=0,y=1,$=1,f=1,c=0,h="",w=o,x=i,k=r,S=h;$;)switch(g=c,c=Ke()){case 40:if(g!=108&&ve(S,m-1)==58){cs(S+=F(ci(c),"&","&\f"),"&\f")!=-1&&(f=-1);break}case 34:case 39:case 91:S+=ci(c);break;case 9:case 10:case 13:case 32:S+=fg(g);break;case 92:S+=dg(ui()-1,7);continue;case 47:switch(Pt()){case 42:case 47:Ko(yg(pg(Ke(),ui()),t,n),s);break;default:S+="/"}break;case 123*y:a[u++]=St(S)*f;case 125*y:case 59:case 0:switch(c){case 0:case 125:$=0;case 59+p:f==-1&&(S=F(S,/\f/g,"")),v>0&&St(S)-m&&Ko(v>32?ef(S+";",r,n,m-1):ef(F(S," ","")+";",r,n,m-2),s);break;case 59:S+=";";default:if(Ko(k=Jc(S,t,n,u,p,o,a,h,w=[],x=[],m),i),c===123)if(p===0)fi(S,t,k,k,w,i,m,a,x);else switch(d===99&&ve(S,3)===110?100:d){case 100:case 108:case 109:case 115:fi(e,k,k,r&&Ko(Jc(e,k,k,0,0,o,a,h,o,w=[],m),x),o,x,m,a,r?w:x);break;default:fi(S,k,k,k,[""],x,0,a,x)}}u=p=v=0,y=f=1,h=S="",m=l;break;case 58:m=1+St(S),v=g;default:if(y<1){if(c==123)--y;else if(c==125&&y++==0&&cg()==125)continue}switch(S+=ol(c),c*y){case 38:f=p>0?1:(S+="\f",-1);break;case 44:a[u++]=(St(S)-1)*f,f=1;break;case 64:Pt()===45&&(S+=ci(Ke())),d=Pt(),p=m=St(h=S+=mg(ui())),c++;break;case 45:g===45&&St(S)==2&&(y=0)}}return i}function Jc(e,t,n,r,o,i,l,a,s,u,p){for(var m=o-1,d=o===0?i:[""],v=xu(d),g=0,y=0,$=0;g0?d[f]+" "+c:F(c,/&\f/g,d[f])))&&(s[$++]=h);return ll(e,t,n,o===0?vu:a,s,u,p)}function yg(e,t,n){return ll(e,t,n,Jp,ol(ug()),co(e,2,-2),0)}function ef(e,t,n,r){return ll(e,t,n,wu,co(e,0,r),co(e,r+1,-1),r)}function tr(e,t){for(var n="",r=xu(e),o=0;o6)switch(ve(e,t+1)){case 109:if(ve(e,t+4)!==45)break;case 102:return F(e,/(.+:)(.+)-([^]+)/,"$1"+j+"$2-$3$1"+Ai+(ve(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~cs(e,"stretch")?im(F(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(ve(e,t+1)!==115)break;case 6444:switch(ve(e,St(e)-3-(~cs(e,"!important")&&10))){case 107:return F(e,":",":"+j)+e;case 101:return F(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+j+(ve(e,14)===45?"inline-":"")+"box$3$1"+j+"$2$3$1"+Ce+"$2box$3")+e}break;case 5936:switch(ve(e,t+11)){case 114:return j+e+Ce+F(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return j+e+Ce+F(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return j+e+Ce+F(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return j+e+Ce+e+e}return e}var Eg=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case wu:t.return=im(t.value,t.length);break;case em:return tr([Or(t,{value:F(t.value,"@","@"+j)})],o);case vu:if(t.length)return sg(t.props,function(i){switch(ag(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return tr([Or(t,{props:[F(i,/:(read-\w+)/,":"+Ai+"$1")]})],o);case"::placeholder":return tr([Or(t,{props:[F(i,/:(plac\w+)/,":"+j+"input-$1")]}),Or(t,{props:[F(i,/:(plac\w+)/,":"+Ai+"$1")]}),Or(t,{props:[F(i,/:(plac\w+)/,Ce+"input-$1")]})],o)}return""})}},Pg=[Eg],lm=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(y){var $=y.getAttribute("data-emotion");$.indexOf(" ")!==-1&&(document.head.appendChild(y),y.setAttribute("data-s",""))})}var o=t.stylisPlugins||Pg,i={},l,a=[];l=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(y){for(var $=y.getAttribute("data-emotion").split(" "),f=1;f<$.length;f++)i[$[f]]=!0;a.push(y)});var s,u=[_g,Cg];{var p,m=[gg,wg(function(y){p.insert(y)})],d=vg(u.concat(o,m)),v=function($){return tr(hg($),d)};s=function($,f,c,h){p=c,v($?$+"{"+f.styles+"}":f.styles),h&&(g.inserted[f.name]=!0)}}var g={key:n,sheet:new tg({key:n,container:l,nonce:t.nonce,speedy:t.speedy,prepend:t.prepend,insertionPoint:t.insertionPoint}),nonce:t.nonce,inserted:i,registered:{},insert:s};return g.sheet.hydrate(a),g},am={exports:{}},U={};/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var ye=typeof Symbol=="function"&&Symbol.for,Su=ye?Symbol.for("react.element"):60103,ku=ye?Symbol.for("react.portal"):60106,al=ye?Symbol.for("react.fragment"):60107,sl=ye?Symbol.for("react.strict_mode"):60108,ul=ye?Symbol.for("react.profiler"):60114,cl=ye?Symbol.for("react.provider"):60109,fl=ye?Symbol.for("react.context"):60110,_u=ye?Symbol.for("react.async_mode"):60111,dl=ye?Symbol.for("react.concurrent_mode"):60111,pl=ye?Symbol.for("react.forward_ref"):60112,ml=ye?Symbol.for("react.suspense"):60113,$g=ye?Symbol.for("react.suspense_list"):60120,hl=ye?Symbol.for("react.memo"):60115,yl=ye?Symbol.for("react.lazy"):60116,Tg=ye?Symbol.for("react.block"):60121,Rg=ye?Symbol.for("react.fundamental"):60117,Og=ye?Symbol.for("react.responder"):60118,Mg=ye?Symbol.for("react.scope"):60119;function Xe(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case Su:switch(e=e.type,e){case _u:case dl:case al:case ul:case sl:case ml:return e;default:switch(e=e&&e.$$typeof,e){case fl:case pl:case yl:case hl:case cl:return e;default:return t}}case ku:return t}}}function sm(e){return Xe(e)===dl}U.AsyncMode=_u;U.ConcurrentMode=dl;U.ContextConsumer=fl;U.ContextProvider=cl;U.Element=Su;U.ForwardRef=pl;U.Fragment=al;U.Lazy=yl;U.Memo=hl;U.Portal=ku;U.Profiler=ul;U.StrictMode=sl;U.Suspense=ml;U.isAsyncMode=function(e){return sm(e)||Xe(e)===_u};U.isConcurrentMode=sm;U.isContextConsumer=function(e){return Xe(e)===fl};U.isContextProvider=function(e){return Xe(e)===cl};U.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===Su};U.isForwardRef=function(e){return Xe(e)===pl};U.isFragment=function(e){return Xe(e)===al};U.isLazy=function(e){return Xe(e)===yl};U.isMemo=function(e){return Xe(e)===hl};U.isPortal=function(e){return Xe(e)===ku};U.isProfiler=function(e){return Xe(e)===ul};U.isStrictMode=function(e){return Xe(e)===sl};U.isSuspense=function(e){return Xe(e)===ml};U.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===al||e===dl||e===ul||e===sl||e===ml||e===$g||typeof e=="object"&&e!==null&&(e.$$typeof===yl||e.$$typeof===hl||e.$$typeof===cl||e.$$typeof===fl||e.$$typeof===pl||e.$$typeof===Rg||e.$$typeof===Og||e.$$typeof===Mg||e.$$typeof===Tg)};U.typeOf=Xe;am.exports=U;var bg=am.exports,um=bg,zg={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Ng={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},cm={};cm[um.ForwardRef]=zg;cm[um.Memo]=Ng;var Lg=!0;function Ig(e,t,n){var r="";return n.split(" ").forEach(function(o){e[o]!==void 0?t.push(e[o]+";"):r+=o+" "}),r}var fm=function(t,n,r){var o=t.key+"-"+n.name;(r===!1||Lg===!1)&&t.registered[o]===void 0&&(t.registered[o]=n.styles)},dm=function(t,n,r){fm(t,n,r);var o=t.key+"-"+n.name;if(t.inserted[n.name]===void 0){var i=n;do t.insert(n===i?"."+o:"",i,t.sheet,!0),i=i.next;while(i!==void 0)}};function Dg(e){for(var t=0,n,r=0,o=e.length;o>=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Ag={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},jg=!1,Fg=/[A-Z]|^ms/g,Wg=/_EMO_([^_]+?)_([^]*?)_EMO_/g,pm=function(t){return t.charCodeAt(1)===45},nf=function(t){return t!=null&&typeof t!="boolean"},pa=Zp(function(e){return pm(e)?e:e.replace(Fg,"-$&").toLowerCase()}),rf=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(Wg,function(r,o,i){return kt={name:o,styles:i,next:kt},o})}return Ag[t]!==1&&!pm(t)&&typeof n=="number"&&n!==0?n+"px":n},Bg="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function po(e,t,n){if(n==null)return"";var r=n;if(r.__emotion_styles!==void 0)return r;switch(typeof n){case"boolean":return"";case"object":{var o=n;if(o.anim===1)return kt={name:o.name,styles:o.styles,next:kt},o.name;var i=n;if(i.styles!==void 0){var l=i.next;if(l!==void 0)for(;l!==void 0;)kt={name:l.name,styles:l.styles,next:kt},l=l.next;var a=i.styles+";";return a}return Ug(e,t,n)}case"function":{if(e!==void 0){var s=kt,u=n(e);return kt=s,po(e,t,u)}break}}var p=n;if(t==null)return p;var m=t[p];return m!==void 0?m:p}function Ug(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o96?Gg:Yg},sf=function(t,n,r){var o;if(n){var i=n.shouldForwardProp;o=t.__emotion_forwardProp&&i?function(l){return t.__emotion_forwardProp(l)&&i(l)}:i}return typeof o!="function"&&r&&(o=t.__emotion_forwardProp),o},Xg=!1,qg=function(t){var n=t.cache,r=t.serialized,o=t.isStringTag;return fm(n,r,o),Hg(function(){return dm(n,r,o)}),null},Zg=function e(t,n){var r=t.__emotion_real===t,o=r&&t.__emotion_base||t,i,l;n!==void 0&&(i=n.label,l=n.target);var a=sf(t,n,r),s=a||af(o),u=!s("as");return function(){var p=arguments,m=r&&t.__emotion_styles!==void 0?t.__emotion_styles.slice(0):[];if(i!==void 0&&m.push("label:"+i+";"),p[0]==null||p[0].raw===void 0)m.push.apply(m,p);else{m.push(p[0][0]);for(var d=p.length,v=1;vt(t1(o)?n:o):t;return b.jsx(Qg,{styles:r})}/** - * @mui/styled-engine v5.16.6 - * - * @license MIT - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function vm(e,t){return ds(e,t)}const n1=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))},r1=Object.freeze(Object.defineProperty({__proto__:null,GlobalStyles:gm,StyledEngineProvider:e1,ThemeContext:gl,css:ko,default:vm,internal_processStyles:n1,keyframes:$n},Symbol.toStringTag,{value:"Module"}));function Gt(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function wm(e){if(!Gt(e))return e;const t={};return Object.keys(e).forEach(n=>{t[n]=wm(e[n])}),t}function $t(e,t,n={clone:!0}){const r=n.clone?R({},e):e;return Gt(e)&&Gt(t)&&Object.keys(t).forEach(o=>{Gt(t[o])&&Object.prototype.hasOwnProperty.call(e,o)&&Gt(e[o])?r[o]=$t(e[o],t[o],n):n.clone?r[o]=Gt(t[o])?wm(t[o]):t[o]:r[o]=t[o]}),r}const o1=Object.freeze(Object.defineProperty({__proto__:null,default:$t,isPlainObject:Gt},Symbol.toStringTag,{value:"Module"})),i1=["values","unit","step"],l1=e=>{const t=Object.keys(e).map(n=>({key:n,val:e[n]}))||[];return t.sort((n,r)=>n.val-r.val),t.reduce((n,r)=>R({},n,{[r.key]:r.val}),{})};function xm(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:n="px",step:r=5}=e,o=Fe(e,i1),i=l1(t),l=Object.keys(i);function a(d){return`@media (min-width:${typeof t[d]=="number"?t[d]:d}${n})`}function s(d){return`@media (max-width:${(typeof t[d]=="number"?t[d]:d)-r/100}${n})`}function u(d,v){const g=l.indexOf(v);return`@media (min-width:${typeof t[d]=="number"?t[d]:d}${n}) and (max-width:${(g!==-1&&typeof t[l[g]]=="number"?t[l[g]]:v)-r/100}${n})`}function p(d){return l.indexOf(d)+1`@media (min-width:${Eu[e]}px)`};function Ft(e,t,n){const r=e.theme||{};if(Array.isArray(t)){const i=r.breakpoints||uf;return t.reduce((l,a,s)=>(l[i.up(i.keys[s])]=n(t[s]),l),{})}if(typeof t=="object"){const i=r.breakpoints||uf;return Object.keys(t).reduce((l,a)=>{if(Object.keys(i.values||Eu).indexOf(a)!==-1){const s=i.up(a);l[s]=n(t[a],a)}else{const s=a;l[s]=t[s]}return l},{})}return n(t)}function u1(e={}){var t;return((t=e.keys)==null?void 0:t.reduce((r,o)=>{const i=e.up(o);return r[i]={},r},{}))||{}}function c1(e,t){return e.reduce((n,r)=>{const o=n[r];return(!o||Object.keys(o).length===0)&&delete n[r],n},t)}function G(e){if(typeof e!="string")throw new Error(uo(7));return e.charAt(0).toUpperCase()+e.slice(1)}const f1=Object.freeze(Object.defineProperty({__proto__:null,default:G},Symbol.toStringTag,{value:"Module"}));function vl(e,t,n=!0){if(!t||typeof t!="string")return null;if(e&&e.vars&&n){const r=`vars.${t}`.split(".").reduce((o,i)=>o&&o[i]?o[i]:null,e);if(r!=null)return r}return t.split(".").reduce((r,o)=>r&&r[o]!=null?r[o]:null,e)}function ji(e,t,n,r=n){let o;return typeof e=="function"?o=e(n):Array.isArray(e)?o=e[n]||r:o=vl(e,n)||r,t&&(o=t(o,r,e)),o}function le(e){const{prop:t,cssProperty:n=e.prop,themeKey:r,transform:o}=e,i=l=>{if(l[t]==null)return null;const a=l[t],s=l.theme,u=vl(s,r)||{};return Ft(l,a,m=>{let d=ji(u,o,m);return m===d&&typeof m=="string"&&(d=ji(u,o,`${t}${m==="default"?"":G(m)}`,m)),n===!1?d:{[n]:d}})};return i.propTypes={},i.filterProps=[t],i}function d1(e){const t={};return n=>(t[n]===void 0&&(t[n]=e(n)),t[n])}const p1={m:"margin",p:"padding"},m1={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},cf={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},h1=d1(e=>{if(e.length>2)if(cf[e])e=cf[e];else return[e];const[t,n]=e.split(""),r=p1[t],o=m1[n]||"";return Array.isArray(o)?o.map(i=>r+i):[r+o]}),Pu=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],$u=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"];[...Pu,...$u];function _o(e,t,n,r){var o;const i=(o=vl(e,t,!1))!=null?o:n;return typeof i=="number"?l=>typeof l=="string"?l:i*l:Array.isArray(i)?l=>typeof l=="string"?l:i[l]:typeof i=="function"?i:()=>{}}function Sm(e){return _o(e,"spacing",8)}function Co(e,t){if(typeof t=="string"||t==null)return t;const n=Math.abs(t),r=e(n);return t>=0?r:typeof r=="number"?-r:`-${r}`}function y1(e,t){return n=>e.reduce((r,o)=>(r[o]=Co(t,n),r),{})}function g1(e,t,n,r){if(t.indexOf(n)===-1)return null;const o=h1(n),i=y1(o,r),l=e[n];return Ft(e,l,i)}function km(e,t){const n=Sm(e.theme);return Object.keys(e).map(r=>g1(e,t,r,n)).reduce(Vr,{})}function ne(e){return km(e,Pu)}ne.propTypes={};ne.filterProps=Pu;function re(e){return km(e,$u)}re.propTypes={};re.filterProps=$u;function v1(e=8){if(e.mui)return e;const t=Sm({spacing:e}),n=(...r)=>(r.length===0?[1]:r).map(i=>{const l=t(i);return typeof l=="number"?`${l}px`:l}).join(" ");return n.mui=!0,n}function wl(...e){const t=e.reduce((r,o)=>(o.filterProps.forEach(i=>{r[i]=o}),r),{}),n=r=>Object.keys(r).reduce((o,i)=>t[i]?Vr(o,t[i](r)):o,{});return n.propTypes={},n.filterProps=e.reduce((r,o)=>r.concat(o.filterProps),[]),n}function tt(e){return typeof e!="number"?e:`${e}px solid`}function at(e,t){return le({prop:e,themeKey:"borders",transform:t})}const w1=at("border",tt),x1=at("borderTop",tt),S1=at("borderRight",tt),k1=at("borderBottom",tt),_1=at("borderLeft",tt),C1=at("borderColor"),E1=at("borderTopColor"),P1=at("borderRightColor"),$1=at("borderBottomColor"),T1=at("borderLeftColor"),R1=at("outline",tt),O1=at("outlineColor"),xl=e=>{if(e.borderRadius!==void 0&&e.borderRadius!==null){const t=_o(e.theme,"shape.borderRadius",4),n=r=>({borderRadius:Co(t,r)});return Ft(e,e.borderRadius,n)}return null};xl.propTypes={};xl.filterProps=["borderRadius"];wl(w1,x1,S1,k1,_1,C1,E1,P1,$1,T1,xl,R1,O1);const Sl=e=>{if(e.gap!==void 0&&e.gap!==null){const t=_o(e.theme,"spacing",8),n=r=>({gap:Co(t,r)});return Ft(e,e.gap,n)}return null};Sl.propTypes={};Sl.filterProps=["gap"];const kl=e=>{if(e.columnGap!==void 0&&e.columnGap!==null){const t=_o(e.theme,"spacing",8),n=r=>({columnGap:Co(t,r)});return Ft(e,e.columnGap,n)}return null};kl.propTypes={};kl.filterProps=["columnGap"];const _l=e=>{if(e.rowGap!==void 0&&e.rowGap!==null){const t=_o(e.theme,"spacing",8),n=r=>({rowGap:Co(t,r)});return Ft(e,e.rowGap,n)}return null};_l.propTypes={};_l.filterProps=["rowGap"];const M1=le({prop:"gridColumn"}),b1=le({prop:"gridRow"}),z1=le({prop:"gridAutoFlow"}),N1=le({prop:"gridAutoColumns"}),L1=le({prop:"gridAutoRows"}),I1=le({prop:"gridTemplateColumns"}),D1=le({prop:"gridTemplateRows"}),A1=le({prop:"gridTemplateAreas"}),j1=le({prop:"gridArea"});wl(Sl,kl,_l,M1,b1,z1,N1,L1,I1,D1,A1,j1);function nr(e,t){return t==="grey"?t:e}const F1=le({prop:"color",themeKey:"palette",transform:nr}),W1=le({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:nr}),B1=le({prop:"backgroundColor",themeKey:"palette",transform:nr});wl(F1,W1,B1);function Ue(e){return e<=1&&e!==0?`${e*100}%`:e}const U1=le({prop:"width",transform:Ue}),Tu=e=>{if(e.maxWidth!==void 0&&e.maxWidth!==null){const t=n=>{var r,o;const i=((r=e.theme)==null||(r=r.breakpoints)==null||(r=r.values)==null?void 0:r[n])||Eu[n];return i?((o=e.theme)==null||(o=o.breakpoints)==null?void 0:o.unit)!=="px"?{maxWidth:`${i}${e.theme.breakpoints.unit}`}:{maxWidth:i}:{maxWidth:Ue(n)}};return Ft(e,e.maxWidth,t)}return null};Tu.filterProps=["maxWidth"];const V1=le({prop:"minWidth",transform:Ue}),H1=le({prop:"height",transform:Ue}),K1=le({prop:"maxHeight",transform:Ue}),Q1=le({prop:"minHeight",transform:Ue});le({prop:"size",cssProperty:"width",transform:Ue});le({prop:"size",cssProperty:"height",transform:Ue});const G1=le({prop:"boxSizing"});wl(U1,Tu,V1,H1,K1,Q1,G1);const Y1={border:{themeKey:"borders",transform:tt},borderTop:{themeKey:"borders",transform:tt},borderRight:{themeKey:"borders",transform:tt},borderBottom:{themeKey:"borders",transform:tt},borderLeft:{themeKey:"borders",transform:tt},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:tt},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:xl},color:{themeKey:"palette",transform:nr},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:nr},backgroundColor:{themeKey:"palette",transform:nr},p:{style:re},pt:{style:re},pr:{style:re},pb:{style:re},pl:{style:re},px:{style:re},py:{style:re},padding:{style:re},paddingTop:{style:re},paddingRight:{style:re},paddingBottom:{style:re},paddingLeft:{style:re},paddingX:{style:re},paddingY:{style:re},paddingInline:{style:re},paddingInlineStart:{style:re},paddingInlineEnd:{style:re},paddingBlock:{style:re},paddingBlockStart:{style:re},paddingBlockEnd:{style:re},m:{style:ne},mt:{style:ne},mr:{style:ne},mb:{style:ne},ml:{style:ne},mx:{style:ne},my:{style:ne},margin:{style:ne},marginTop:{style:ne},marginRight:{style:ne},marginBottom:{style:ne},marginLeft:{style:ne},marginX:{style:ne},marginY:{style:ne},marginInline:{style:ne},marginInlineStart:{style:ne},marginInlineEnd:{style:ne},marginBlock:{style:ne},marginBlockStart:{style:ne},marginBlockEnd:{style:ne},displayPrint:{cssProperty:!1,transform:e=>({"@media print":{display:e}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:Sl},rowGap:{style:_l},columnGap:{style:kl},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:Ue},maxWidth:{style:Tu},minWidth:{transform:Ue},height:{transform:Ue},maxHeight:{transform:Ue},minHeight:{transform:Ue},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},Eo=Y1;function X1(...e){const t=e.reduce((r,o)=>r.concat(Object.keys(o)),[]),n=new Set(t);return e.every(r=>n.size===Object.keys(r).length)}function q1(e,t){return typeof e=="function"?e(t):e}function _m(){function e(n,r,o,i){const l={[n]:r,theme:o},a=i[n];if(!a)return{[n]:r};const{cssProperty:s=n,themeKey:u,transform:p,style:m}=a;if(r==null)return null;if(u==="typography"&&r==="inherit")return{[n]:r};const d=vl(o,u)||{};return m?m(l):Ft(l,r,g=>{let y=ji(d,p,g);return g===y&&typeof g=="string"&&(y=ji(d,p,`${n}${g==="default"?"":G(g)}`,g)),s===!1?y:{[s]:y}})}function t(n){var r;const{sx:o,theme:i={}}=n||{};if(!o)return null;const l=(r=i.unstable_sxConfig)!=null?r:Eo;function a(s){let u=s;if(typeof s=="function")u=s(i);else if(typeof s!="object")return s;if(!u)return null;const p=u1(i.breakpoints),m=Object.keys(p);let d=p;return Object.keys(u).forEach(v=>{const g=q1(u[v],i);if(g!=null)if(typeof g=="object")if(l[v])d=Vr(d,e(v,g,i,l));else{const y=Ft({theme:i},g,$=>({[v]:$}));X1(y,g)?d[v]=t({sx:g,theme:i}):d=Vr(d,y)}else d=Vr(d,e(v,g,i,l))}),c1(m,d)}return Array.isArray(o)?o.map(a):a(o)}return t}const Cm=_m();Cm.filterProps=["sx"];const Cl=Cm;function Em(e,t){const n=this;return n.vars&&typeof n.getColorSchemeSelector=="function"?{[n.getColorSchemeSelector(e).replace(/(\[[^\]]+\])/,"*:where($1)")]:t}:n.palette.mode===e?t:{}}const Z1=["breakpoints","palette","spacing","shape"];function Ru(e={},...t){const{breakpoints:n={},palette:r={},spacing:o,shape:i={}}=e,l=Fe(e,Z1),a=xm(n),s=v1(o);let u=$t({breakpoints:a,direction:"ltr",components:{},palette:R({mode:"light"},r),spacing:s,shape:R({},s1,i)},l);return u.applyStyles=Em,u=t.reduce((p,m)=>$t(p,m),u),u.unstable_sxConfig=R({},Eo,l==null?void 0:l.unstable_sxConfig),u.unstable_sx=function(m){return Cl({sx:m,theme:this})},u}const J1=Object.freeze(Object.defineProperty({__proto__:null,default:Ru,private_createBreakpoints:xm,unstable_applyStyles:Em},Symbol.toStringTag,{value:"Module"}));function ev(e){return Object.keys(e).length===0}function tv(e=null){const t=C.useContext(gl);return!t||ev(t)?e:t}const nv=Ru();function Pm(e=nv){return tv(e)}function rv({styles:e,themeId:t,defaultTheme:n={}}){const r=Pm(n),o=typeof e=="function"?e(t&&r[t]||r):e;return b.jsx(gm,{styles:o})}const ov=["sx"],iv=e=>{var t,n;const r={systemProps:{},otherProps:{}},o=(t=e==null||(n=e.theme)==null?void 0:n.unstable_sxConfig)!=null?t:Eo;return Object.keys(e).forEach(i=>{o[i]?r.systemProps[i]=e[i]:r.otherProps[i]=e[i]}),r};function Ou(e){const{sx:t}=e,n=Fe(e,ov),{systemProps:r,otherProps:o}=iv(n);let i;return Array.isArray(t)?i=[r,...t]:typeof t=="function"?i=(...l)=>{const a=t(...l);return Gt(a)?R({},r,a):r}:i=R({},r,t),R({},o,{sx:i})}const lv=Object.freeze(Object.defineProperty({__proto__:null,default:Cl,extendSxProp:Ou,unstable_createStyleFunctionSx:_m,unstable_defaultSxConfig:Eo},Symbol.toStringTag,{value:"Module"})),ff=e=>e,av=()=>{let e=ff;return{configure(t){e=t},generate(t){return e(t)},reset(){e=ff}}},sv=av(),$m=sv;function Tm(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;ta!=="theme"&&a!=="sx"&&a!=="as"})(Cl);return C.forwardRef(function(s,u){const p=Pm(n),m=Ou(s),{className:d,component:v="div"}=m,g=Fe(m,uv);return b.jsx(i,R({as:v,ref:u,className:Oe(d,o?o(r):r),theme:t&&p[t]||p},g))})}const fv={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function Po(e,t,n="Mui"){const r=fv[t];return r?`${n}-${r}`:`${$m.generate(e)}-${t}`}function hr(e,t,n="Mui"){const r={};return t.forEach(o=>{r[o]=Po(e,o,n)}),r}var Rm={exports:{}},V={};/** - * @license React - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Mu=Symbol.for("react.element"),bu=Symbol.for("react.portal"),El=Symbol.for("react.fragment"),Pl=Symbol.for("react.strict_mode"),$l=Symbol.for("react.profiler"),Tl=Symbol.for("react.provider"),Rl=Symbol.for("react.context"),dv=Symbol.for("react.server_context"),Ol=Symbol.for("react.forward_ref"),Ml=Symbol.for("react.suspense"),bl=Symbol.for("react.suspense_list"),zl=Symbol.for("react.memo"),Nl=Symbol.for("react.lazy"),pv=Symbol.for("react.offscreen"),Om;Om=Symbol.for("react.module.reference");function st(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case Mu:switch(e=e.type,e){case El:case $l:case Pl:case Ml:case bl:return e;default:switch(e=e&&e.$$typeof,e){case dv:case Rl:case Ol:case Nl:case zl:case Tl:return e;default:return t}}case bu:return t}}}V.ContextConsumer=Rl;V.ContextProvider=Tl;V.Element=Mu;V.ForwardRef=Ol;V.Fragment=El;V.Lazy=Nl;V.Memo=zl;V.Portal=bu;V.Profiler=$l;V.StrictMode=Pl;V.Suspense=Ml;V.SuspenseList=bl;V.isAsyncMode=function(){return!1};V.isConcurrentMode=function(){return!1};V.isContextConsumer=function(e){return st(e)===Rl};V.isContextProvider=function(e){return st(e)===Tl};V.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===Mu};V.isForwardRef=function(e){return st(e)===Ol};V.isFragment=function(e){return st(e)===El};V.isLazy=function(e){return st(e)===Nl};V.isMemo=function(e){return st(e)===zl};V.isPortal=function(e){return st(e)===bu};V.isProfiler=function(e){return st(e)===$l};V.isStrictMode=function(e){return st(e)===Pl};V.isSuspense=function(e){return st(e)===Ml};V.isSuspenseList=function(e){return st(e)===bl};V.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===El||e===$l||e===Pl||e===Ml||e===bl||e===pv||typeof e=="object"&&e!==null&&(e.$$typeof===Nl||e.$$typeof===zl||e.$$typeof===Tl||e.$$typeof===Rl||e.$$typeof===Ol||e.$$typeof===Om||e.getModuleId!==void 0)};V.typeOf=st;Rm.exports=V;var df=Rm.exports;const mv=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function Mm(e){const t=`${e}`.match(mv);return t&&t[1]||""}function bm(e,t=""){return e.displayName||e.name||Mm(e)||t}function pf(e,t,n){const r=bm(t);return e.displayName||(r!==""?`${n}(${r})`:n)}function hv(e){if(e!=null){if(typeof e=="string")return e;if(typeof e=="function")return bm(e,"Component");if(typeof e=="object")switch(e.$$typeof){case df.ForwardRef:return pf(e,e.render,"ForwardRef");case df.Memo:return pf(e,e.type,"memo");default:return}}}const yv=Object.freeze(Object.defineProperty({__proto__:null,default:hv,getFunctionName:Mm},Symbol.toStringTag,{value:"Module"}));function Fi(e,t){const n=R({},t);return Object.keys(e).forEach(r=>{if(r.toString().match(/^(components|slots)$/))n[r]=R({},e[r],n[r]);else if(r.toString().match(/^(componentsProps|slotProps)$/)){const o=e[r]||{},i=t[r];n[r]={},!i||!Object.keys(i)?n[r]=o:!o||!Object.keys(o)?n[r]=i:(n[r]=R({},i),Object.keys(o).forEach(l=>{n[r][l]=Fi(o[l],i[l])}))}else n[r]===void 0&&(n[r]=e[r])}),n}const gv=typeof window<"u"?C.useLayoutEffect:C.useEffect,vv=gv;function wv(e,t=Number.MIN_SAFE_INTEGER,n=Number.MAX_SAFE_INTEGER){return Math.max(t,Math.min(e,n))}const xv=Object.freeze(Object.defineProperty({__proto__:null,default:wv},Symbol.toStringTag,{value:"Module"}));function Sv(e,t){typeof e=="function"?e(t):e&&(e.current=t)}function Qo(e){const t=C.useRef(e);return vv(()=>{t.current=e}),C.useRef((...n)=>(0,t.current)(...n)).current}function mf(...e){return C.useMemo(()=>e.every(t=>t==null)?null:t=>{e.forEach(n=>{Sv(n,t)})},e)}const hf={};function kv(e,t){const n=C.useRef(hf);return n.current===hf&&(n.current=e(t)),n}const _v=[];function Cv(e){C.useEffect(e,_v)}class Ll{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new Ll}start(t,n){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,n()},t)}}function Ev(){const e=kv(Ll.create).current;return Cv(e.disposeEffect),e}let Il=!0,ms=!1;const Pv=new Ll,$v={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function Tv(e){const{type:t,tagName:n}=e;return!!(n==="INPUT"&&$v[t]&&!e.readOnly||n==="TEXTAREA"&&!e.readOnly||e.isContentEditable)}function Rv(e){e.metaKey||e.altKey||e.ctrlKey||(Il=!0)}function ma(){Il=!1}function Ov(){this.visibilityState==="hidden"&&ms&&(Il=!0)}function Mv(e){e.addEventListener("keydown",Rv,!0),e.addEventListener("mousedown",ma,!0),e.addEventListener("pointerdown",ma,!0),e.addEventListener("touchstart",ma,!0),e.addEventListener("visibilitychange",Ov,!0)}function bv(e){const{target:t}=e;try{return t.matches(":focus-visible")}catch{}return Il||Tv(t)}function zv(){const e=C.useCallback(o=>{o!=null&&Mv(o.ownerDocument)},[]),t=C.useRef(!1);function n(){return t.current?(ms=!0,Pv.start(100,()=>{ms=!1}),t.current=!1,!0):!1}function r(o){return bv(o)?(t.current=!0,!0):!1}return{isFocusVisibleRef:t,onFocus:r,onBlur:n,ref:e}}function Dl(e,t,n=void 0){const r={};return Object.keys(e).forEach(o=>{r[o]=e[o].reduce((i,l)=>{if(l){const a=t(l);a!==""&&i.push(a),n&&n[l]&&i.push(n[l])}return i},[]).join(" ")}),r}const Nv=C.createContext(),Lv=()=>{const e=C.useContext(Nv);return e??!1},Iv=C.createContext(void 0);function Dv(e){const{theme:t,name:n,props:r}=e;if(!t||!t.components||!t.components[n])return r;const o=t.components[n];return o.defaultProps?Fi(o.defaultProps,r):!o.styleOverrides&&!o.variants?Fi(o,r):r}function Av({props:e,name:t}){const n=C.useContext(Iv);return Dv({props:e,name:t,theme:{components:n}})}function jv(e,t){return R({toolbar:{minHeight:56,[e.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[e.up("sm")]:{minHeight:64}}},t)}var ae={},zm={exports:{}};(function(e){function t(n){return n&&n.__esModule?n:{default:n}}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(zm);var Nm=zm.exports;const Fv=sn(Yy),Wv=sn(xv);var Lm=Nm;Object.defineProperty(ae,"__esModule",{value:!0});var Go=ae.alpha=Wm;ae.blend=Zv;ae.colorChannel=void 0;var Im=ae.darken=Nu;ae.decomposeColor=lt;ae.emphasize=Bm;var Bv=ae.getContrastRatio=Qv;ae.getLuminance=Wi;ae.hexToRgb=Am;ae.hslToRgb=Fm;var Dm=ae.lighten=Lu;ae.private_safeAlpha=Gv;ae.private_safeColorChannel=void 0;ae.private_safeDarken=Yv;ae.private_safeEmphasize=qv;ae.private_safeLighten=Xv;ae.recomposeColor=yr;ae.rgbToHex=Kv;var yf=Lm(Fv),Uv=Lm(Wv);function zu(e,t=0,n=1){return(0,Uv.default)(e,t,n)}function Am(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let n=e.match(t);return n&&n[0].length===1&&(n=n.map(r=>r+r)),n?`rgb${n.length===4?"a":""}(${n.map((r,o)=>o<3?parseInt(r,16):Math.round(parseInt(r,16)/255*1e3)/1e3).join(", ")})`:""}function Vv(e){const t=e.toString(16);return t.length===1?`0${t}`:t}function lt(e){if(e.type)return e;if(e.charAt(0)==="#")return lt(Am(e));const t=e.indexOf("("),n=e.substring(0,t);if(["rgb","rgba","hsl","hsla","color"].indexOf(n)===-1)throw new Error((0,yf.default)(9,e));let r=e.substring(t+1,e.length-1),o;if(n==="color"){if(r=r.split(" "),o=r.shift(),r.length===4&&r[3].charAt(0)==="/"&&(r[3]=r[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o)===-1)throw new Error((0,yf.default)(10,o))}else r=r.split(",");return r=r.map(i=>parseFloat(i)),{type:n,values:r,colorSpace:o}}const jm=e=>{const t=lt(e);return t.values.slice(0,3).map((n,r)=>t.type.indexOf("hsl")!==-1&&r!==0?`${n}%`:n).join(" ")};ae.colorChannel=jm;const Hv=(e,t)=>{try{return jm(e)}catch{return e}};ae.private_safeColorChannel=Hv;function yr(e){const{type:t,colorSpace:n}=e;let{values:r}=e;return t.indexOf("rgb")!==-1?r=r.map((o,i)=>i<3?parseInt(o,10):o):t.indexOf("hsl")!==-1&&(r[1]=`${r[1]}%`,r[2]=`${r[2]}%`),t.indexOf("color")!==-1?r=`${n} ${r.join(" ")}`:r=`${r.join(", ")}`,`${t}(${r})`}function Kv(e){if(e.indexOf("#")===0)return e;const{values:t}=lt(e);return`#${t.map((n,r)=>Vv(r===3?Math.round(255*n):n)).join("")}`}function Fm(e){e=lt(e);const{values:t}=e,n=t[0],r=t[1]/100,o=t[2]/100,i=r*Math.min(o,1-o),l=(u,p=(u+n/30)%12)=>o-i*Math.max(Math.min(p-3,9-p,1),-1);let a="rgb";const s=[Math.round(l(0)*255),Math.round(l(8)*255),Math.round(l(4)*255)];return e.type==="hsla"&&(a+="a",s.push(t[3])),yr({type:a,values:s})}function Wi(e){e=lt(e);let t=e.type==="hsl"||e.type==="hsla"?lt(Fm(e)).values:e.values;return t=t.map(n=>(e.type!=="color"&&(n/=255),n<=.03928?n/12.92:((n+.055)/1.055)**2.4)),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function Qv(e,t){const n=Wi(e),r=Wi(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function Wm(e,t){return e=lt(e),t=zu(t),(e.type==="rgb"||e.type==="hsl")&&(e.type+="a"),e.type==="color"?e.values[3]=`/${t}`:e.values[3]=t,yr(e)}function Gv(e,t,n){try{return Wm(e,t)}catch{return e}}function Nu(e,t){if(e=lt(e),t=zu(t),e.type.indexOf("hsl")!==-1)e.values[2]*=1-t;else if(e.type.indexOf("rgb")!==-1||e.type.indexOf("color")!==-1)for(let n=0;n<3;n+=1)e.values[n]*=1-t;return yr(e)}function Yv(e,t,n){try{return Nu(e,t)}catch{return e}}function Lu(e,t){if(e=lt(e),t=zu(t),e.type.indexOf("hsl")!==-1)e.values[2]+=(100-e.values[2])*t;else if(e.type.indexOf("rgb")!==-1)for(let n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(e.type.indexOf("color")!==-1)for(let n=0;n<3;n+=1)e.values[n]+=(1-e.values[n])*t;return yr(e)}function Xv(e,t,n){try{return Lu(e,t)}catch{return e}}function Bm(e,t=.15){return Wi(e)>.5?Nu(e,t):Lu(e,t)}function qv(e,t,n){try{return Bm(e,t)}catch{return e}}function Zv(e,t,n,r=1){const o=(s,u)=>Math.round((s**(1/r)*(1-n)+u**(1/r)*n)**r),i=lt(e),l=lt(t),a=[o(i.values[0],l.values[0]),o(i.values[1],l.values[1]),o(i.values[2],l.values[2])];return yr({type:"rgb",values:a})}const Jv=["mode","contrastThreshold","tonalOffset"],gf={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:so.white,default:so.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},ha={text:{primary:so.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:so.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function vf(e,t,n,r){const o=r.light||r,i=r.dark||r*1.5;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:t==="light"?e.light=Dm(e.main,o):t==="dark"&&(e.dark=Im(e.main,i)))}function ew(e="light"){return e==="dark"?{main:zn[200],light:zn[50],dark:zn[400]}:{main:zn[700],light:zn[400],dark:zn[800]}}function tw(e="light"){return e==="dark"?{main:bn[200],light:bn[50],dark:bn[400]}:{main:bn[500],light:bn[300],dark:bn[700]}}function nw(e="light"){return e==="dark"?{main:Mn[500],light:Mn[300],dark:Mn[700]}:{main:Mn[700],light:Mn[400],dark:Mn[800]}}function rw(e="light"){return e==="dark"?{main:Nn[400],light:Nn[300],dark:Nn[700]}:{main:Nn[700],light:Nn[500],dark:Nn[900]}}function ow(e="light"){return e==="dark"?{main:Ln[400],light:Ln[300],dark:Ln[700]}:{main:Ln[800],light:Ln[500],dark:Ln[900]}}function iw(e="light"){return e==="dark"?{main:Rr[400],light:Rr[300],dark:Rr[700]}:{main:"#ed6c02",light:Rr[500],dark:Rr[900]}}function lw(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:r=.2}=e,o=Fe(e,Jv),i=e.primary||ew(t),l=e.secondary||tw(t),a=e.error||nw(t),s=e.info||rw(t),u=e.success||ow(t),p=e.warning||iw(t);function m(y){return Bv(y,ha.text.primary)>=n?ha.text.primary:gf.text.primary}const d=({color:y,name:$,mainShade:f=500,lightShade:c=300,darkShade:h=700})=>{if(y=R({},y),!y.main&&y[f]&&(y.main=y[f]),!y.hasOwnProperty("main"))throw new Error(uo(11,$?` (${$})`:"",f));if(typeof y.main!="string")throw new Error(uo(12,$?` (${$})`:"",JSON.stringify(y.main)));return vf(y,"light",c,r),vf(y,"dark",h,r),y.contrastText||(y.contrastText=m(y.main)),y},v={dark:ha,light:gf};return $t(R({common:R({},so),mode:t,primary:d({color:i,name:"primary"}),secondary:d({color:l,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:d({color:a,name:"error"}),warning:d({color:p,name:"warning"}),info:d({color:s,name:"info"}),success:d({color:u,name:"success"}),grey:Gy,contrastThreshold:n,getContrastText:m,augmentColor:d,tonalOffset:r},v[t]),o)}const aw=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function sw(e){return Math.round(e*1e5)/1e5}const wf={textTransform:"uppercase"},xf='"Roboto", "Helvetica", "Arial", sans-serif';function uw(e,t){const n=typeof t=="function"?t(e):t,{fontFamily:r=xf,fontSize:o=14,fontWeightLight:i=300,fontWeightRegular:l=400,fontWeightMedium:a=500,fontWeightBold:s=700,htmlFontSize:u=16,allVariants:p,pxToRem:m}=n,d=Fe(n,aw),v=o/14,g=m||(f=>`${f/u*v}rem`),y=(f,c,h,w,x)=>R({fontFamily:r,fontWeight:f,fontSize:g(c),lineHeight:h},r===xf?{letterSpacing:`${sw(w/c)}em`}:{},x,p),$={h1:y(i,96,1.167,-1.5),h2:y(i,60,1.2,-.5),h3:y(l,48,1.167,0),h4:y(l,34,1.235,.25),h5:y(l,24,1.334,0),h6:y(a,20,1.6,.15),subtitle1:y(l,16,1.75,.15),subtitle2:y(a,14,1.57,.1),body1:y(l,16,1.5,.15),body2:y(l,14,1.43,.15),button:y(a,14,1.75,.4,wf),caption:y(l,12,1.66,.4),overline:y(l,12,2.66,1,wf),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return $t(R({htmlFontSize:u,pxToRem:g,fontFamily:r,fontSize:o,fontWeightLight:i,fontWeightRegular:l,fontWeightMedium:a,fontWeightBold:s},$),d,{clone:!1})}const cw=.2,fw=.14,dw=.12;function X(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,${cw})`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,${fw})`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,${dw})`].join(",")}const pw=["none",X(0,2,1,-1,0,1,1,0,0,1,3,0),X(0,3,1,-2,0,2,2,0,0,1,5,0),X(0,3,3,-2,0,3,4,0,0,1,8,0),X(0,2,4,-1,0,4,5,0,0,1,10,0),X(0,3,5,-1,0,5,8,0,0,1,14,0),X(0,3,5,-1,0,6,10,0,0,1,18,0),X(0,4,5,-2,0,7,10,1,0,2,16,1),X(0,5,5,-3,0,8,10,1,0,3,14,2),X(0,5,6,-3,0,9,12,1,0,3,16,2),X(0,6,6,-3,0,10,14,1,0,4,18,3),X(0,6,7,-4,0,11,15,1,0,4,20,3),X(0,7,8,-4,0,12,17,2,0,5,22,4),X(0,7,8,-4,0,13,19,2,0,5,24,4),X(0,7,9,-4,0,14,21,2,0,5,26,4),X(0,8,9,-5,0,15,22,2,0,6,28,5),X(0,8,10,-5,0,16,24,2,0,6,30,5),X(0,8,11,-5,0,17,26,2,0,6,32,5),X(0,9,11,-5,0,18,28,2,0,7,34,6),X(0,9,12,-6,0,19,29,2,0,7,36,6),X(0,10,13,-6,0,20,31,3,0,8,38,7),X(0,10,13,-6,0,21,33,3,0,8,40,7),X(0,10,14,-6,0,22,35,3,0,8,42,7),X(0,11,14,-7,0,23,36,3,0,9,44,8),X(0,11,15,-7,0,24,38,3,0,9,46,8)],mw=pw,hw=["duration","easing","delay"],yw={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},gw={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function Sf(e){return`${Math.round(e)}ms`}function vw(e){if(!e)return 0;const t=e/36;return Math.round((4+15*t**.25+t/5)*10)}function ww(e){const t=R({},yw,e.easing),n=R({},gw,e.duration);return R({getAutoHeightDuration:vw,create:(o=["all"],i={})=>{const{duration:l=n.standard,easing:a=t.easeInOut,delay:s=0}=i;return Fe(i,hw),(Array.isArray(o)?o:[o]).map(u=>`${u} ${typeof l=="string"?l:Sf(l)} ${a} ${typeof s=="string"?s:Sf(s)}`).join(",")}},e,{easing:t,duration:n})}const xw={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},Sw=xw,kw=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function Um(e={},...t){const{mixins:n={},palette:r={},transitions:o={},typography:i={}}=e,l=Fe(e,kw);if(e.vars)throw new Error(uo(18));const a=lw(r),s=Ru(e);let u=$t(s,{mixins:jv(s.breakpoints,n),palette:a,shadows:mw.slice(),typography:uw(a,i),transitions:ww(o),zIndex:R({},Sw)});return u=$t(u,l),u=t.reduce((p,m)=>$t(p,m),u),u.unstable_sxConfig=R({},Eo,l==null?void 0:l.unstable_sxConfig),u.unstable_sx=function(m){return Cl({sx:m,theme:this})},u}const _w=Um(),Vm=_w;var $o={},ya={exports:{}},kf;function Cw(){return kf||(kf=1,function(e){function t(){return e.exports=t=Object.assign?Object.assign.bind():function(n){for(var r=1;r96}function di(e){return e!=="ownerState"&&e!=="theme"&&e!=="sx"&&e!=="as"}const Bw=$o.systemDefaultTheme=(0,Nw.default)(),Uw=e=>e&&e.charAt(0).toLowerCase()+e.slice(1);function Yo({defaultTheme:e,theme:t,themeId:n}){return Fw(t)?e:t[n]||t}function Vw(e){return e?(t,n)=>n[e]:null}function pi(e,t){let{ownerState:n}=t,r=(0,hs.default)(t,Iw);const o=typeof e=="function"?e((0,qe.default)({ownerState:n},r)):e;if(Array.isArray(o))return o.flatMap(i=>pi(i,(0,qe.default)({ownerState:n},r)));if(o&&typeof o=="object"&&Array.isArray(o.variants)){const{variants:i=[]}=o;let a=(0,hs.default)(o,Dw);return i.forEach(s=>{let u=!0;typeof s.props=="function"?u=s.props((0,qe.default)({ownerState:n},r,n)):Object.keys(s.props).forEach(p=>{(n==null?void 0:n[p])!==s.props[p]&&r[p]!==s.props[p]&&(u=!1)}),u&&(Array.isArray(a)||(a=[a]),a.push(typeof s.style=="function"?s.style((0,qe.default)({ownerState:n},r,n)):s.style))}),a}return o}function Hw(e={}){const{themeId:t,defaultTheme:n=Bw,rootShouldForwardProp:r=di,slotShouldForwardProp:o=di}=e,i=l=>(0,Lw.default)((0,qe.default)({},l,{theme:Yo((0,qe.default)({},l,{defaultTheme:n,themeId:t}))}));return i.__mui_systemSx=!0,(l,a={})=>{(0,Cf.internal_processStyles)(l,x=>x.filter(k=>!(k!=null&&k.__mui_systemSx)));const{name:s,slot:u,skipVariantsResolver:p,skipSx:m,overridesResolver:d=Vw(Uw(u))}=a,v=(0,hs.default)(a,Aw),g=p!==void 0?p:u&&u!=="Root"&&u!=="root"||!1,y=m||!1;let $,f=di;u==="Root"||u==="root"?f=r:u?f=o:Ww(l)&&(f=void 0);const c=(0,Cf.default)(l,(0,qe.default)({shouldForwardProp:f,label:$},v)),h=x=>typeof x=="function"&&x.__emotion_real!==x||(0,zw.isPlainObject)(x)?k=>pi(x,(0,qe.default)({},k,{theme:Yo({theme:k.theme,defaultTheme:n,themeId:t})})):x,w=(x,...k)=>{let S=h(x);const P=k?k.map(h):[];s&&d&&P.push(W=>{const H=Yo((0,qe.default)({},W,{defaultTheme:n,themeId:t}));if(!H.components||!H.components[s]||!H.components[s].styleOverrides)return null;const se=H.components[s].styleOverrides,Se={};return Object.entries(se).forEach(([ut,$e])=>{Se[ut]=pi($e,(0,qe.default)({},W,{theme:H}))}),d(W,Se)}),s&&!g&&P.push(W=>{var H;const se=Yo((0,qe.default)({},W,{defaultTheme:n,themeId:t})),Se=se==null||(H=se.components)==null||(H=H[s])==null?void 0:H.variants;return pi({variants:Se},(0,qe.default)({},W,{theme:se}))}),y||P.push(i);const I=P.length-k.length;if(Array.isArray(x)&&I>0){const W=new Array(I).fill("");S=[...x,...W],S.raw=[...x.raw,...W]}const O=c(S,...P);return l.muiName&&(O.muiName=l.muiName),O};return c.withConfig&&(w.withConfig=c.withConfig),w}}function Kw(e){return e!=="ownerState"&&e!=="theme"&&e!=="sx"&&e!=="as"}const Qw=e=>Kw(e)&&e!=="classes",Km=Qw,Gw=bw({themeId:gu,defaultTheme:Vm,rootShouldForwardProp:Km}),vt=Gw;function vr(e){return Av(e)}function ys(e,t){return ys=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,r){return n.__proto__=r,n},ys(e,t)}function Yw(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,ys(e,t)}const Ef=In.createContext(null);function Xw(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Iu(e,t){var n=function(i){return t&&C.isValidElement(i)?t(i):i},r=Object.create(null);return e&&C.Children.map(e,function(o){return o}).forEach(function(o){r[o.key]=n(o)}),r}function qw(e,t){e=e||{},t=t||{};function n(p){return p in t?t[p]:e[p]}var r=Object.create(null),o=[];for(var i in e)i in t?o.length&&(r[i]=o,o=[]):o.push(i);var l,a={};for(var s in t){if(r[s])for(l=0;l{if(!a&&s!=null){const y=setTimeout(s,u);return()=>{clearTimeout(y)}}},[s,a,u]),b.jsx("span",{className:d,style:v,children:b.jsx("span",{className:g})})}const ox=hr("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),Ze=ox,ix=["center","classes","className"];let Al=e=>e,Pf,$f,Tf,Rf;const gs=550,lx=80,ax=$n(Pf||(Pf=Al` - 0% { - transform: scale(0); - opacity: 0.1; - } - - 100% { - transform: scale(1); - opacity: 0.3; - } -`)),sx=$n($f||($f=Al` - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -`)),ux=$n(Tf||(Tf=Al` - 0% { - transform: scale(1); - } - - 50% { - transform: scale(0.92); - } - - 100% { - transform: scale(1); - } -`)),cx=vt("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),fx=vt(rx,{name:"MuiTouchRipple",slot:"Ripple"})(Rf||(Rf=Al` - opacity: 0; - position: absolute; - - &.${0} { - opacity: 0.3; - transform: scale(1); - animation-name: ${0}; - animation-duration: ${0}ms; - animation-timing-function: ${0}; - } - - &.${0} { - animation-duration: ${0}ms; - } - - & .${0} { - opacity: 1; - display: block; - width: 100%; - height: 100%; - border-radius: 50%; - background-color: currentColor; - } - - & .${0} { - opacity: 0; - animation-name: ${0}; - animation-duration: ${0}ms; - animation-timing-function: ${0}; - } - - & .${0} { - position: absolute; - /* @noflip */ - left: 0px; - top: 0; - animation-name: ${0}; - animation-duration: 2500ms; - animation-timing-function: ${0}; - animation-iteration-count: infinite; - animation-delay: 200ms; - } -`),Ze.rippleVisible,ax,gs,({theme:e})=>e.transitions.easing.easeInOut,Ze.ripplePulsate,({theme:e})=>e.transitions.duration.shorter,Ze.child,Ze.childLeaving,sx,gs,({theme:e})=>e.transitions.easing.easeInOut,Ze.childPulsate,ux,({theme:e})=>e.transitions.easing.easeInOut),dx=C.forwardRef(function(t,n){const r=vr({props:t,name:"MuiTouchRipple"}),{center:o=!1,classes:i={},className:l}=r,a=Fe(r,ix),[s,u]=C.useState([]),p=C.useRef(0),m=C.useRef(null);C.useEffect(()=>{m.current&&(m.current(),m.current=null)},[s]);const d=C.useRef(!1),v=Ev(),g=C.useRef(null),y=C.useRef(null),$=C.useCallback(w=>{const{pulsate:x,rippleX:k,rippleY:S,rippleSize:P,cb:I}=w;u(O=>[...O,b.jsx(fx,{classes:{ripple:Oe(i.ripple,Ze.ripple),rippleVisible:Oe(i.rippleVisible,Ze.rippleVisible),ripplePulsate:Oe(i.ripplePulsate,Ze.ripplePulsate),child:Oe(i.child,Ze.child),childLeaving:Oe(i.childLeaving,Ze.childLeaving),childPulsate:Oe(i.childPulsate,Ze.childPulsate)},timeout:gs,pulsate:x,rippleX:k,rippleY:S,rippleSize:P},p.current)]),p.current+=1,m.current=I},[i]),f=C.useCallback((w={},x={},k=()=>{})=>{const{pulsate:S=!1,center:P=o||x.pulsate,fakeElement:I=!1}=x;if((w==null?void 0:w.type)==="mousedown"&&d.current){d.current=!1;return}(w==null?void 0:w.type)==="touchstart"&&(d.current=!0);const O=I?null:y.current,W=O?O.getBoundingClientRect():{width:0,height:0,left:0,top:0};let H,se,Se;if(P||w===void 0||w.clientX===0&&w.clientY===0||!w.clientX&&!w.touches)H=Math.round(W.width/2),se=Math.round(W.height/2);else{const{clientX:ut,clientY:$e}=w.touches&&w.touches.length>0?w.touches[0]:w;H=Math.round(ut-W.left),se=Math.round($e-W.top)}if(P)Se=Math.sqrt((2*W.width**2+W.height**2)/3),Se%2===0&&(Se+=1);else{const ut=Math.max(Math.abs((O?O.clientWidth:0)-H),H)*2+2,$e=Math.max(Math.abs((O?O.clientHeight:0)-se),se)*2+2;Se=Math.sqrt(ut**2+$e**2)}w!=null&&w.touches?g.current===null&&(g.current=()=>{$({pulsate:S,rippleX:H,rippleY:se,rippleSize:Se,cb:k})},v.start(lx,()=>{g.current&&(g.current(),g.current=null)})):$({pulsate:S,rippleX:H,rippleY:se,rippleSize:Se,cb:k})},[o,$,v]),c=C.useCallback(()=>{f({},{pulsate:!0})},[f]),h=C.useCallback((w,x)=>{if(v.clear(),(w==null?void 0:w.type)==="touchend"&&g.current){g.current(),g.current=null,v.start(0,()=>{h(w,x)});return}g.current=null,u(k=>k.length>0?k.slice(1):k),m.current=x},[v]);return C.useImperativeHandle(n,()=>({pulsate:c,start:f,stop:h}),[c,f,h]),b.jsx(cx,R({className:Oe(Ze.root,i.root,l),ref:y},a,{children:b.jsx(nx,{component:null,exit:!0,children:s})}))}),px=dx;function mx(e){return Po("MuiButtonBase",e)}const hx=hr("MuiButtonBase",["root","disabled","focusVisible"]),yx=hx,gx=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],vx=e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:r,classes:o}=e,l=Dl({root:["root",t&&"disabled",n&&"focusVisible"]},mx,o);return n&&r&&(l.root+=` ${r}`),l},wx=vt("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${yx.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),xx=C.forwardRef(function(t,n){const r=vr({props:t,name:"MuiButtonBase"}),{action:o,centerRipple:i=!1,children:l,className:a,component:s="button",disabled:u=!1,disableRipple:p=!1,disableTouchRipple:m=!1,focusRipple:d=!1,LinkComponent:v="a",onBlur:g,onClick:y,onContextMenu:$,onDragLeave:f,onFocus:c,onFocusVisible:h,onKeyDown:w,onKeyUp:x,onMouseDown:k,onMouseLeave:S,onMouseUp:P,onTouchEnd:I,onTouchMove:O,onTouchStart:W,tabIndex:H=0,TouchRippleProps:se,touchRippleRef:Se,type:ut}=r,$e=Fe(r,gx),Tt=C.useRef(null),E=C.useRef(null),z=mf(E,Se),{isFocusVisibleRef:N,onFocus:Z,onBlur:ue,ref:Tn}=zv(),[Te,Bt]=C.useState(!1);u&&Te&&Bt(!1),C.useImperativeHandle(o,()=>({focusVisible:()=>{Bt(!0),Tt.current.focus()}}),[]);const[ct,Rn]=C.useState(!1);C.useEffect(()=>{Rn(!0)},[]);const Xm=ct&&!p&&!u;C.useEffect(()=>{Te&&d&&!p&&ct&&E.current.pulsate()},[p,d,Te,ct]);function Rt(L,Wu,fh=m){return Qo(Bu=>(Wu&&Wu(Bu),!fh&&E.current&&E.current[L](Bu),!0))}const qm=Rt("start",k),Zm=Rt("stop",$),Jm=Rt("stop",f),eh=Rt("stop",P),th=Rt("stop",L=>{Te&&L.preventDefault(),S&&S(L)}),nh=Rt("start",W),rh=Rt("stop",I),oh=Rt("stop",O),ih=Rt("stop",L=>{ue(L),N.current===!1&&Bt(!1),g&&g(L)},!1),lh=Qo(L=>{Tt.current||(Tt.current=L.currentTarget),Z(L),N.current===!0&&(Bt(!0),h&&h(L)),c&&c(L)}),jl=()=>{const L=Tt.current;return s&&s!=="button"&&!(L.tagName==="A"&&L.href)},Fl=C.useRef(!1),ah=Qo(L=>{d&&!Fl.current&&Te&&E.current&&L.key===" "&&(Fl.current=!0,E.current.stop(L,()=>{E.current.start(L)})),L.target===L.currentTarget&&jl()&&L.key===" "&&L.preventDefault(),w&&w(L),L.target===L.currentTarget&&jl()&&L.key==="Enter"&&!u&&(L.preventDefault(),y&&y(L))}),sh=Qo(L=>{d&&L.key===" "&&E.current&&Te&&!L.defaultPrevented&&(Fl.current=!1,E.current.stop(L,()=>{E.current.pulsate(L)})),x&&x(L),y&&L.target===L.currentTarget&&jl()&&L.key===" "&&!L.defaultPrevented&&y(L)});let To=s;To==="button"&&($e.href||$e.to)&&(To=v);const xr={};To==="button"?(xr.type=ut===void 0?"button":ut,xr.disabled=u):(!$e.href&&!$e.to&&(xr.role="button"),u&&(xr["aria-disabled"]=u));const uh=mf(n,Tn,Tt),Fu=R({},r,{centerRipple:i,component:s,disabled:u,disableRipple:p,disableTouchRipple:m,focusRipple:d,tabIndex:H,focusVisible:Te}),ch=vx(Fu);return b.jsxs(wx,R({as:To,className:Oe(ch.root,a),ownerState:Fu,onBlur:ih,onClick:y,onContextMenu:Zm,onFocus:lh,onKeyDown:ah,onKeyUp:sh,onMouseDown:qm,onMouseLeave:th,onMouseUp:eh,onDragLeave:Jm,onTouchEnd:rh,onTouchMove:oh,onTouchStart:nh,ref:uh,tabIndex:u?-1:H,type:ut},xr,$e,{children:[l,Xm?b.jsx(px,R({ref:z,center:i},se)):null]}))}),Sx=xx;function kx(e){return Po("MuiTypography",e)}hr("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);const _x=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],Cx=e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:i,classes:l}=e,a={root:["root",i,e.align!=="inherit"&&`align${G(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return Dl(a,kx,l)},Ex=vt("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],n.align!=="inherit"&&t[`align${G(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})(({theme:e,ownerState:t})=>R({margin:0},t.variant==="inherit"&&{font:"inherit"},t.variant!=="inherit"&&e.typography[t.variant],t.align!=="inherit"&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16})),Of={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},Px={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},$x=e=>Px[e]||e,Tx=C.forwardRef(function(t,n){const r=vr({props:t,name:"MuiTypography"}),o=$x(r.color),i=Ou(R({},r,{color:o})),{align:l="inherit",className:a,component:s,gutterBottom:u=!1,noWrap:p=!1,paragraph:m=!1,variant:d="body1",variantMapping:v=Of}=i,g=Fe(i,_x),y=R({},i,{align:l,color:o,className:a,component:s,gutterBottom:u,noWrap:p,paragraph:m,variant:d,variantMapping:v}),$=s||(m?"p":v[d]||Of[d])||"span",f=Cx(y);return b.jsx(Ex,R({as:$,ref:n,ownerState:y,className:Oe(f.root,a)},g))}),Au=Tx;function Rx(e){return b.jsx(rv,R({},e,{defaultTheme:Vm,themeId:gu}))}const Ox=hr("MuiBox",["root"]),Mx=Ox,bx=Um(),zx=cv({themeId:gu,defaultTheme:bx,defaultClassName:Mx.root,generateClassName:$m.generate}),Nt=zx;function Nx(e){return Po("MuiButton",e)}const Lx=hr("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","colorPrimary","colorSecondary","colorSuccess","colorError","colorInfo","colorWarning","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","icon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),Xo=Lx,Ix=C.createContext({}),Dx=Ix,Ax=C.createContext(void 0),jx=Ax,Fx=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],Wx=e=>{const{color:t,disableElevation:n,fullWidth:r,size:o,variant:i,classes:l}=e,a={root:["root",i,`${i}${G(t)}`,`size${G(o)}`,`${i}Size${G(o)}`,`color${G(t)}`,n&&"disableElevation",r&&"fullWidth"],label:["label"],startIcon:["icon","startIcon",`iconSize${G(o)}`],endIcon:["icon","endIcon",`iconSize${G(o)}`]},s=Dl(a,Nx,l);return R({},l,s)},Qm=e=>R({},e.size==="small"&&{"& > *:nth-of-type(1)":{fontSize:18}},e.size==="medium"&&{"& > *:nth-of-type(1)":{fontSize:20}},e.size==="large"&&{"& > *:nth-of-type(1)":{fontSize:22}}),Bx=vt(Sx,{shouldForwardProp:e=>Km(e)||e==="classes",name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${G(n.color)}`],t[`size${G(n.size)}`],t[`${n.variant}Size${G(n.size)}`],n.color==="inherit"&&t.colorInherit,n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth]}})(({theme:e,ownerState:t})=>{var n,r;const o=e.palette.mode==="light"?e.palette.grey[300]:e.palette.grey[800],i=e.palette.mode==="light"?e.palette.grey.A100:e.palette.grey[700];return R({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":R({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:Go(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},t.variant==="text"&&t.color!=="inherit"&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:Go(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},t.variant==="outlined"&&t.color!=="inherit"&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:Go(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},t.variant==="contained"&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:i,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},t.variant==="contained"&&t.color!=="inherit"&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":R({},t.variant==="contained"&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${Xo.focusVisible}`]:R({},t.variant==="contained"&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${Xo.disabled}`]:R({color:(e.vars||e).palette.action.disabled},t.variant==="outlined"&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},t.variant==="contained"&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},t.variant==="text"&&{padding:"6px 8px"},t.variant==="text"&&t.color!=="inherit"&&{color:(e.vars||e).palette[t.color].main},t.variant==="outlined"&&{padding:"5px 15px",border:"1px solid currentColor"},t.variant==="outlined"&&t.color!=="inherit"&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${Go(e.palette[t.color].main,.5)}`},t.variant==="contained"&&{color:e.vars?e.vars.palette.text.primary:(n=(r=e.palette).getContrastText)==null?void 0:n.call(r,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:o,boxShadow:(e.vars||e).shadows[2]},t.variant==="contained"&&t.color!=="inherit"&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},t.color==="inherit"&&{color:"inherit",borderColor:"currentColor"},t.size==="small"&&t.variant==="text"&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},t.size==="large"&&t.variant==="text"&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},t.size==="small"&&t.variant==="outlined"&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},t.size==="large"&&t.variant==="outlined"&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},t.size==="small"&&t.variant==="contained"&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},t.size==="large"&&t.variant==="contained"&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})},({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${Xo.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${Xo.disabled}`]:{boxShadow:"none"}}),Ux=vt("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.startIcon,t[`iconSize${G(n.size)}`]]}})(({ownerState:e})=>R({display:"inherit",marginRight:8,marginLeft:-4},e.size==="small"&&{marginLeft:-2},Qm(e))),Vx=vt("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.endIcon,t[`iconSize${G(n.size)}`]]}})(({ownerState:e})=>R({display:"inherit",marginRight:-4,marginLeft:8},e.size==="small"&&{marginRight:-2},Qm(e))),Hx=C.forwardRef(function(t,n){const r=C.useContext(Dx),o=C.useContext(jx),i=Fi(r,t),l=vr({props:i,name:"MuiButton"}),{children:a,color:s="primary",component:u="button",className:p,disabled:m=!1,disableElevation:d=!1,disableFocusRipple:v=!1,endIcon:g,focusVisibleClassName:y,fullWidth:$=!1,size:f="medium",startIcon:c,type:h,variant:w="text"}=l,x=Fe(l,Fx),k=R({},l,{color:s,component:u,disabled:m,disableElevation:d,disableFocusRipple:v,fullWidth:$,size:f,type:h,variant:w}),S=Wx(k),P=c&&b.jsx(Ux,{className:S.startIcon,ownerState:k,children:c}),I=g&&b.jsx(Vx,{className:S.endIcon,ownerState:k,children:g}),O=o||"";return b.jsxs(Bx,R({ownerState:k,className:Oe(r.className,S.root,p,O),component:u,disabled:m,focusRipple:!v,focusVisibleClassName:Oe(S.focusVisible,y),ref:n,type:h},x,{classes:S,children:[P,a,I]}))}),Kx=Hx,Qx=(e,t)=>R({WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",boxSizing:"border-box",WebkitTextSizeAdjust:"100%"},t&&!e.vars&&{colorScheme:e.palette.mode}),Gx=e=>R({color:(e.vars||e).palette.text.primary},e.typography.body1,{backgroundColor:(e.vars||e).palette.background.default,"@media print":{backgroundColor:(e.vars||e).palette.common.white}}),Yx=(e,t=!1)=>{var n;const r={};t&&e.colorSchemes&&Object.entries(e.colorSchemes).forEach(([l,a])=>{var s;r[e.getColorSchemeSelector(l).replace(/\s*&/,"")]={colorScheme:(s=a.palette)==null?void 0:s.mode}});let o=R({html:Qx(e,t),"*, *::before, *::after":{boxSizing:"inherit"},"strong, b":{fontWeight:e.typography.fontWeightBold},body:R({margin:0},Gx(e),{"&::backdrop":{backgroundColor:(e.vars||e).palette.background.default}})},r);const i=(n=e.components)==null||(n=n.MuiCssBaseline)==null?void 0:n.styleOverrides;return i&&(o=[o,i]),o};function Xx(e){const t=vr({props:e,name:"MuiCssBaseline"}),{children:n,enableColorScheme:r=!1}=t;return b.jsxs(C.Fragment,{children:[b.jsx(Rx,{styles:o=>Yx(o,r)}),n]})}function qx(e){return Po("MuiLinearProgress",e)}hr("MuiLinearProgress",["root","colorPrimary","colorSecondary","determinate","indeterminate","buffer","query","dashed","dashedColorPrimary","dashedColorSecondary","bar","barColorPrimary","barColorSecondary","bar1Indeterminate","bar1Determinate","bar1Buffer","bar2Indeterminate","bar2Buffer"]);const Zx=["className","color","value","valueBuffer","variant"];let wr=e=>e,Mf,bf,zf,Nf,Lf,If;const vs=4,Jx=$n(Mf||(Mf=wr` - 0% { - left: -35%; - right: 100%; - } - - 60% { - left: 100%; - right: -90%; - } - - 100% { - left: 100%; - right: -90%; - } -`)),eS=$n(bf||(bf=wr` - 0% { - left: -200%; - right: 100%; - } - - 60% { - left: 107%; - right: -8%; - } - - 100% { - left: 107%; - right: -8%; - } -`)),tS=$n(zf||(zf=wr` - 0% { - opacity: 1; - background-position: 0 -23px; - } - - 60% { - opacity: 0; - background-position: 0 -23px; - } - - 100% { - opacity: 1; - background-position: -200px -23px; - } -`)),nS=e=>{const{classes:t,variant:n,color:r}=e,o={root:["root",`color${G(r)}`,n],dashed:["dashed",`dashedColor${G(r)}`],bar1:["bar",`barColor${G(r)}`,(n==="indeterminate"||n==="query")&&"bar1Indeterminate",n==="determinate"&&"bar1Determinate",n==="buffer"&&"bar1Buffer"],bar2:["bar",n!=="buffer"&&`barColor${G(r)}`,n==="buffer"&&`color${G(r)}`,(n==="indeterminate"||n==="query")&&"bar2Indeterminate",n==="buffer"&&"bar2Buffer"]};return Dl(o,qx,t)},ju=(e,t)=>t==="inherit"?"currentColor":e.vars?e.vars.palette.LinearProgress[`${t}Bg`]:e.palette.mode==="light"?Dm(e.palette[t].main,.62):Im(e.palette[t].main,.5),rS=vt("span",{name:"MuiLinearProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`color${G(n.color)}`],t[n.variant]]}})(({ownerState:e,theme:t})=>R({position:"relative",overflow:"hidden",display:"block",height:4,zIndex:0,"@media print":{colorAdjust:"exact"},backgroundColor:ju(t,e.color)},e.color==="inherit"&&e.variant!=="buffer"&&{backgroundColor:"none","&::before":{content:'""',position:"absolute",left:0,top:0,right:0,bottom:0,backgroundColor:"currentColor",opacity:.3}},e.variant==="buffer"&&{backgroundColor:"transparent"},e.variant==="query"&&{transform:"rotate(180deg)"})),oS=vt("span",{name:"MuiLinearProgress",slot:"Dashed",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.dashed,t[`dashedColor${G(n.color)}`]]}})(({ownerState:e,theme:t})=>{const n=ju(t,e.color);return R({position:"absolute",marginTop:0,height:"100%",width:"100%"},e.color==="inherit"&&{opacity:.3},{backgroundImage:`radial-gradient(${n} 0%, ${n} 16%, transparent 42%)`,backgroundSize:"10px 10px",backgroundPosition:"0 -23px"})},ko(Nf||(Nf=wr` - animation: ${0} 3s infinite linear; - `),tS)),iS=vt("span",{name:"MuiLinearProgress",slot:"Bar1",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.bar,t[`barColor${G(n.color)}`],(n.variant==="indeterminate"||n.variant==="query")&&t.bar1Indeterminate,n.variant==="determinate"&&t.bar1Determinate,n.variant==="buffer"&&t.bar1Buffer]}})(({ownerState:e,theme:t})=>R({width:"100%",position:"absolute",left:0,bottom:0,top:0,transition:"transform 0.2s linear",transformOrigin:"left",backgroundColor:e.color==="inherit"?"currentColor":(t.vars||t).palette[e.color].main},e.variant==="determinate"&&{transition:`transform .${vs}s linear`},e.variant==="buffer"&&{zIndex:1,transition:`transform .${vs}s linear`}),({ownerState:e})=>(e.variant==="indeterminate"||e.variant==="query")&&ko(Lf||(Lf=wr` - width: auto; - animation: ${0} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - `),Jx)),lS=vt("span",{name:"MuiLinearProgress",slot:"Bar2",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.bar,t[`barColor${G(n.color)}`],(n.variant==="indeterminate"||n.variant==="query")&&t.bar2Indeterminate,n.variant==="buffer"&&t.bar2Buffer]}})(({ownerState:e,theme:t})=>R({width:"100%",position:"absolute",left:0,bottom:0,top:0,transition:"transform 0.2s linear",transformOrigin:"left"},e.variant!=="buffer"&&{backgroundColor:e.color==="inherit"?"currentColor":(t.vars||t).palette[e.color].main},e.color==="inherit"&&{opacity:.3},e.variant==="buffer"&&{backgroundColor:ju(t,e.color),transition:`transform .${vs}s linear`}),({ownerState:e})=>(e.variant==="indeterminate"||e.variant==="query")&&ko(If||(If=wr` - width: auto; - animation: ${0} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite; - `),eS)),aS=C.forwardRef(function(t,n){const r=vr({props:t,name:"MuiLinearProgress"}),{className:o,color:i="primary",value:l,valueBuffer:a,variant:s="indeterminate"}=r,u=Fe(r,Zx),p=R({},r,{color:i,variant:s}),m=nS(p),d=Lv(),v={},g={bar1:{},bar2:{}};if((s==="determinate"||s==="buffer")&&l!==void 0){v["aria-valuenow"]=Math.round(l),v["aria-valuemin"]=0,v["aria-valuemax"]=100;let y=l-100;d&&(y=-y),g.bar1.transform=`translateX(${y}%)`}if(s==="buffer"&&a!==void 0){let y=(a||0)-100;d&&(y=-y),g.bar2.transform=`translateX(${y}%)`}return b.jsxs(rS,R({className:Oe(m.root,o),ownerState:p,role:"progressbar"},v,{ref:n},u,{children:[s==="buffer"?b.jsx(oS,{className:m.dashed,ownerState:p}):null,b.jsx(iS,{className:m.bar1,ownerState:p,style:g.bar1}),s==="determinate"?null:b.jsx(lS,{className:m.bar2,ownerState:p,style:g.bar2})]}))}),sS=aS;function uS(){return window.crypto.getRandomValues(new Uint32Array(1))[0]}function ws(e,t=!1){const n=uS(),r=`_${n}`;return Object.defineProperty(window,r,{value:o=>(t&&Reflect.deleteProperty(window,r),e==null?void 0:e(o)),writable:!1,configurable:!0}),n}async function cS(e,t={}){return new Promise((n,r)=>{const o=ws(l=>{n(l),Reflect.deleteProperty(window,`_${i}`)},!0),i=ws(l=>{r(l),Reflect.deleteProperty(window,`_${o}`)},!0);window.__TAURI_IPC__({cmd:e,callback:o,error:i,...t})})}async function M(e){return cS("tauri",e)}async function Gm(e,t){return M({__tauriModule:"Event",message:{cmd:"unlisten",event:e,eventId:t}})}async function fS(e,t,n){await M({__tauriModule:"Event",message:{cmd:"emit",event:e,windowLabel:t,payload:n}})}async function Ym(e,t,n){return M({__tauriModule:"Event",message:{cmd:"listen",event:e,windowLabel:t,handler:ws(n)}}).then(r=>async()=>Gm(e,r))}async function dS(e,t,n){return Ym(e,t,r=>{n(r),Gm(e,r.id).catch(()=>{})})}var We;(function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",e.WINDOW_CREATED="tauri://window-created",e.WINDOW_DESTROYED="tauri://destroyed",e.WINDOW_FOCUS="tauri://focus",e.WINDOW_BLUR="tauri://blur",e.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",e.WINDOW_THEME_CHANGED="tauri://theme-changed",e.WINDOW_FILE_DROP="tauri://file-drop",e.WINDOW_FILE_DROP_HOVER="tauri://file-drop-hover",e.WINDOW_FILE_DROP_CANCELLED="tauri://file-drop-cancelled",e.MENU="tauri://menu",e.CHECK_UPDATE="tauri://update",e.UPDATE_AVAILABLE="tauri://update-available",e.INSTALL_UPDATE="tauri://update-install",e.STATUS_UPDATE="tauri://update-status",e.DOWNLOAD_PROGRESS="tauri://update-download-progress"})(We||(We={}));class pS{constructor(t,n){this.type="Logical",this.width=t,this.height=n}}class xs{constructor(t,n){this.type="Physical",this.width=t,this.height=n}toLogical(t){return new pS(this.width/t,this.height/t)}}class mS{constructor(t,n){this.type="Logical",this.x=t,this.y=n}}class Ss{constructor(t,n){this.type="Physical",this.x=t,this.y=n}toLogical(t){return new mS(this.x/t,this.y/t)}}var ks;(function(e){e[e.Critical=1]="Critical",e[e.Informational=2]="Informational"})(ks||(ks={}));function Df(){return window.__TAURI_METADATA__.__windows.map(e=>new mo(e.label,{skip:!0}))}const Af=["tauri://created","tauri://error"];class hS{constructor(t){this.label=t,this.listeners=Object.create(null)}async listen(t,n){return this._handleTauriEvent(t,n)?Promise.resolve(()=>{const r=this.listeners[t];r.splice(r.indexOf(n),1)}):Ym(t,this.label,n)}async once(t,n){return this._handleTauriEvent(t,n)?Promise.resolve(()=>{const r=this.listeners[t];r.splice(r.indexOf(n),1)}):dS(t,this.label,n)}async emit(t,n){if(Af.includes(t)){for(const r of this.listeners[t]||[])r({event:t,id:-1,windowLabel:this.label,payload:n});return Promise.resolve()}return fS(t,this.label,n)}_handleTauriEvent(t,n){return Af.includes(t)?(t in this.listeners?this.listeners[t].push(n):this.listeners[t]=[n],!0):!1}}class yS extends hS{async scaleFactor(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"scaleFactor"}}}})}async innerPosition(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"innerPosition"}}}}).then(({x:t,y:n})=>new Ss(t,n))}async outerPosition(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"outerPosition"}}}}).then(({x:t,y:n})=>new Ss(t,n))}async innerSize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"innerSize"}}}}).then(({width:t,height:n})=>new xs(t,n))}async outerSize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"outerSize"}}}}).then(({width:t,height:n})=>new xs(t,n))}async isFullscreen(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isFullscreen"}}}})}async isMinimized(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMinimized"}}}})}async isMaximized(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMaximized"}}}})}async isFocused(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isFocused"}}}})}async isDecorated(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isDecorated"}}}})}async isResizable(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isResizable"}}}})}async isMaximizable(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMaximizable"}}}})}async isMinimizable(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMinimizable"}}}})}async isClosable(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isClosable"}}}})}async isVisible(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isVisible"}}}})}async title(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"title"}}}})}async theme(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"theme"}}}})}async center(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"center"}}}})}async requestUserAttention(t){let n=null;return t&&(t===ks.Critical?n={type:"Critical"}:n={type:"Informational"}),M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"requestUserAttention",payload:n}}}})}async setResizable(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setResizable",payload:t}}}})}async setMaximizable(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMaximizable",payload:t}}}})}async setMinimizable(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMinimizable",payload:t}}}})}async setClosable(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setClosable",payload:t}}}})}async setTitle(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setTitle",payload:t}}}})}async maximize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"maximize"}}}})}async unmaximize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"unmaximize"}}}})}async toggleMaximize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"toggleMaximize"}}}})}async minimize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"minimize"}}}})}async unminimize(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"unminimize"}}}})}async show(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"show"}}}})}async hide(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"hide"}}}})}async close(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"close"}}}})}async setDecorations(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setDecorations",payload:t}}}})}async setAlwaysOnTop(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setAlwaysOnTop",payload:t}}}})}async setContentProtected(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setContentProtected",payload:t}}}})}async setSize(t){if(!t||t.type!=="Logical"&&t.type!=="Physical")throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setSize",payload:{type:t.type,data:{width:t.width,height:t.height}}}}}})}async setMinSize(t){if(t&&t.type!=="Logical"&&t.type!=="Physical")throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMinSize",payload:t?{type:t.type,data:{width:t.width,height:t.height}}:null}}}})}async setMaxSize(t){if(t&&t.type!=="Logical"&&t.type!=="Physical")throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMaxSize",payload:t?{type:t.type,data:{width:t.width,height:t.height}}:null}}}})}async setPosition(t){if(!t||t.type!=="Logical"&&t.type!=="Physical")throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setPosition",payload:{type:t.type,data:{x:t.x,y:t.y}}}}}})}async setFullscreen(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setFullscreen",payload:t}}}})}async setFocus(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setFocus"}}}})}async setIcon(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setIcon",payload:{icon:typeof t=="string"?t:Array.from(t)}}}}})}async setSkipTaskbar(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setSkipTaskbar",payload:t}}}})}async setCursorGrab(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorGrab",payload:t}}}})}async setCursorVisible(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorVisible",payload:t}}}})}async setCursorIcon(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorIcon",payload:t}}}})}async setCursorPosition(t){if(!t||t.type!=="Logical"&&t.type!=="Physical")throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorPosition",payload:{type:t.type,data:{x:t.x,y:t.y}}}}}})}async setIgnoreCursorEvents(t){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setIgnoreCursorEvents",payload:t}}}})}async startDragging(){return M({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"startDragging"}}}})}async onResized(t){return this.listen(We.WINDOW_RESIZED,n=>{n.payload=wS(n.payload),t(n)})}async onMoved(t){return this.listen(We.WINDOW_MOVED,n=>{n.payload=vS(n.payload),t(n)})}async onCloseRequested(t){return this.listen(We.WINDOW_CLOSE_REQUESTED,n=>{const r=new gS(n);Promise.resolve(t(r)).then(()=>{if(!r.isPreventDefault())return this.close()})})}async onFocusChanged(t){const n=await this.listen(We.WINDOW_FOCUS,o=>{t({...o,payload:!0})}),r=await this.listen(We.WINDOW_BLUR,o=>{t({...o,payload:!1})});return()=>{n(),r()}}async onScaleChanged(t){return this.listen(We.WINDOW_SCALE_FACTOR_CHANGED,t)}async onMenuClicked(t){return this.listen(We.MENU,t)}async onFileDropEvent(t){const n=await this.listen(We.WINDOW_FILE_DROP,i=>{t({...i,payload:{type:"drop",paths:i.payload}})}),r=await this.listen(We.WINDOW_FILE_DROP_HOVER,i=>{t({...i,payload:{type:"hover",paths:i.payload}})}),o=await this.listen(We.WINDOW_FILE_DROP_CANCELLED,i=>{t({...i,payload:{type:"cancel"}})});return()=>{n(),r(),o()}}async onThemeChanged(t){return this.listen(We.WINDOW_THEME_CHANGED,t)}}class gS{constructor(t){this._preventDefault=!1,this.event=t.event,this.windowLabel=t.windowLabel,this.id=t.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}class mo extends yS{constructor(t,n={}){super(t),n!=null&&n.skip||M({__tauriModule:"Window",message:{cmd:"createWebview",data:{options:{label:t,...n}}}}).then(async()=>this.emit("tauri://created")).catch(async r=>this.emit("tauri://error",r))}static getByLabel(t){return Df().some(n=>n.label===t)?new mo(t,{skip:!0}):null}static async getFocusedWindow(){for(const t of Df())if(await t.isFocused())return t;return null}}let ho;"__TAURI_METADATA__"in window?ho=new mo(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0}):(console.warn(`Could not find "window.__TAURI_METADATA__". The "appWindow" value will reference the "main" window label. -Note that this is not an issue if running this frontend on a browser instead of a Tauri window.`),ho=new mo("main",{skip:!0}));function vS(e){return new Ss(e.x,e.y)}function wS(e){return new xs(e.width,e.height)}const xS="/assets/icon-674efcbe.svg";function SS(){const[e,t]=C.useState(null);return C.useEffect(()=>{const n=ho.listen("app://update-progress",r=>{t(r.payload)});return()=>{n.then(r=>r())}},[]),e}function kS(){const[e,t]=C.useState(!1);C.useEffect(()=>{const r=ho.listen("app://update-error",()=>{t(!0)});return()=>{r.then(o=>o())}},[]);const n=()=>{t(!1),ho.emit("app://update")};return b.jsxs(b.Fragment,{children:[b.jsx(Xx,{}),b.jsx(Nt,{sx:{position:"absolute",inset:0},display:"flex",alignItems:"center",px:2,"data-tauri-drag-region":!0,children:b.jsxs(Nt,{display:"flex",alignItems:"center",flex:"1","data-tauri-drag-region":!0,children:[b.jsx(Nt,{component:"img",src:xS,alt:"logo",sx:{width:"4rem",height:"4rem"},"data-tauri-drag-region":!0}),b.jsx(Nt,{flex:1,ml:2,children:e?b.jsx(CS,{onRetry:n}):b.jsx(_S,{})})]})})]})}function _S(){const e=SS();return b.jsxs(b.Fragment,{children:[b.jsx(Au,{variant:"h1",fontSize:"1rem","data-tauri-drag-region":!0,children:"Updating the GUI components..."}),b.jsx(Nt,{mt:1,children:b.jsx(ES,{value:e})})]})}function CS({onRetry:e}){return b.jsxs(b.Fragment,{children:[b.jsx(Au,{variant:"h1",fontSize:"1rem","data-tauri-drag-region":!0,children:"Failed to update the GUI components."}),b.jsx(Nt,{mt:1,"data-tauri-drag-region":!0,children:b.jsx(Kx,{variant:"contained",color:"primary",size:"small",onClick:e,sx:{textTransform:"none"},children:"Retry"})})]})}function ES(e){const{value:t}=e;return b.jsxs(Nt,{sx:{display:"flex",alignItems:"center"},children:[b.jsx(Nt,{flex:"1",children:b.jsx(sS,{variant:t===null?"indeterminate":"determinate",value:t??0,sx:{py:1.2,".MuiLinearProgress-bar":{transition:"none"}}})}),t!==null&&b.jsx(Nt,{sx:{minWidth:35,textAlign:"right",ml:1},children:b.jsx(Au,{variant:"body2",color:"text.secondary",children:`${Math.round(t)}%`})})]})}const PS=qp(document.getElementById("root"));PS.render(b.jsx(kS,{})); diff --git a/apps/gpgui-helper/dist/index.html b/apps/gpgui-helper/dist/index.html index c5ce425c..32b71600 100644 --- a/apps/gpgui-helper/dist/index.html +++ b/apps/gpgui-helper/dist/index.html @@ -5,8 +5,8 @@ GlobalProtect - - + +
- diff --git a/apps/gpgui-helper/package.json b/apps/gpgui-helper/package.json index cc9ba534..1c2e7c91 100644 --- a/apps/gpgui-helper/package.json +++ b/apps/gpgui-helper/package.json @@ -9,29 +9,29 @@ "tauri": "tauri" }, "dependencies": { - "@emotion/react": "^11.13.0", - "@emotion/styled": "^11.13.0", - "@mui/icons-material": "^5.16.7", - "@mui/material": "^5.16.7", - "@tauri-apps/api": "^1.6.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/icons-material": "^6.3.0", + "@mui/material": "^6.3.0", + "@tauri-apps/api": "^2.1.1", + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { - "@tauri-apps/cli": "^1.6.0", - "@types/node": "^20.14.15", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@vitejs/plugin-react": "^4.3.1", - "eslint": "^8.57.0", + "@tauri-apps/cli": "^2.1.0", + "@types/node": "^22.10.2", + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.35.0", - "eslint-plugin-react-hooks": "^4.6.2", - "prettier": "3.1.0", - "typescript": "^5.5.4", - "vite": "^4.5.3" + "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react-hooks": "^5.1.0", + "prettier": "3.4.2", + "typescript": "^5.7.2", + "vite": "^6.0.5" }, - "packageManager": "pnpm@8.15.7" + "packageManager": "pnpm@9.15.1" } diff --git a/apps/gpgui-helper/pnpm-lock.yaml b/apps/gpgui-helper/pnpm-lock.yaml index 289fb197..13a037b8 100644 --- a/apps/gpgui-helper/pnpm-lock.yaml +++ b/apps/gpgui-helper/pnpm-lock.yaml @@ -1,355 +1,199 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@emotion/react': - specifier: ^11.13.0 - version: 11.13.0(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': - specifier: ^11.13.0 - version: 11.13.0(@emotion/react@11.13.0)(@types/react@18.3.3)(react@18.3.1) - '@mui/icons-material': - specifier: ^5.16.7 - version: 5.16.7(@mui/material@5.16.7)(@types/react@18.3.3)(react@18.3.1) - '@mui/material': - specifier: ^5.16.7 - version: 5.16.7(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@tauri-apps/api': - specifier: ^1.6.0 - version: 1.6.0 - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - -devDependencies: - '@tauri-apps/cli': - specifier: ^1.6.0 - version: 1.6.0 - '@types/node': - specifier: ^20.14.15 - version: 20.14.15 - '@types/react': - specifier: ^18.3.3 - version: 18.3.3 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.5.4) - '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.1(vite@4.5.3) - eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-plugin-react: - specifier: ^7.35.0 - version: 7.35.0(eslint@8.57.0) - eslint-plugin-react-hooks: - specifier: ^4.6.2 - version: 4.6.2(eslint@8.57.0) - prettier: - specifier: 3.1.0 - version: 3.1.0 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - vite: - specifier: ^4.5.3 - version: 4.5.3(@types/node@20.14.15) +importers: + + .: + dependencies: + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.0.2)(react@19.0.0) + '@emotion/styled': + specifier: ^11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0) + '@mui/icons-material': + specifier: ^6.3.0 + version: 6.3.0(@mui/material@6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0) + '@mui/material': + specifier: ^6.3.0 + version: 6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@tauri-apps/api': + specifier: ^2.1.1 + version: 2.1.1 + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + devDependencies: + '@tauri-apps/cli': + specifier: ^2.1.0 + version: 2.1.0 + '@types/node': + specifier: ^22.10.2 + version: 22.10.2 + '@types/react': + specifier: ^19.0.2 + version: 19.0.2 + '@types/react-dom': + specifier: ^19.0.2 + version: 19.0.2(@types/react@19.0.2) + '@typescript-eslint/eslint-plugin': + specifier: ^8.18.2 + version: 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/parser': + specifier: ^8.18.2 + version: 8.18.2(eslint@9.17.0)(typescript@5.7.2) + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.0.5(@types/node@22.10.2)) + eslint: + specifier: ^9.17.0 + version: 9.17.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.17.0) + eslint-plugin-react: + specifier: ^7.37.3 + version: 7.37.3(eslint@9.17.0) + eslint-plugin-react-hooks: + specifier: ^5.1.0 + version: 5.1.0(eslint@9.17.0) + prettier: + specifier: 3.4.2 + version: 3.4.2 + typescript: + specifier: ^5.7.2 + version: 5.7.2 + vite: + specifier: ^6.0.5 + version: 6.0.5(@types/node@22.10.2) packages: - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@babel/code-frame@7.24.7: - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - /@babel/compat-data@7.25.2: - resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.25.2: - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.3 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - convert-source-map: 2.0.0 - debug: 4.3.6 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.25.0: - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.25.2 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - /@babel/helper-compilation-targets@7.25.2: - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.25.2 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-module-imports@7.24.7: - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-plugin-utils@7.24.8: - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-simple-access@7.24.7: - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-string-parser@7.24.8: - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.7: - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.24.8: - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helpers@7.25.0: - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - dev: true - /@babel/highlight@7.24.7: - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - /@babel/parser@7.25.3: - resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.25.2 - /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - dev: true - /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - dev: true - /@babel/runtime@7.25.0: - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - /@babel/template@7.25.0: - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - /@babel/traverse@7.25.3: - resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/types@7.25.2: - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - /@emotion/babel-plugin@11.12.0: - resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} - dependencies: - '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.25.0 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.0 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - dev: false + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - /@emotion/cache@11.13.1: - resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} - dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.0 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - dev: false + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - /@emotion/hash@0.9.2: + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - dev: false - /@emotion/is-prop-valid@1.3.0: - resolution: {integrity: sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==} - dependencies: - '@emotion/memoize': 0.9.0 - dev: false + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} - /@emotion/memoize@0.9.0: + '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - dev: false - /@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==} + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} peerDependencies: '@types/react': '*' react: '>=16.8.0' peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@emotion/babel-plugin': 11.12.0 - '@emotion/cache': 11.13.1 - '@emotion/serialize': 1.3.0 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) - '@emotion/utils': 1.4.0 - '@emotion/weak-memoize': 0.4.0 - '@types/react': 18.3.3 - hoist-non-react-statics: 3.3.2 - react: 18.3.1 - transitivePeerDependencies: - - supports-color - dev: false - /@emotion/serialize@1.3.0: - resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==} - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.9.0 - '@emotion/utils': 1.4.0 - csstype: 3.1.3 - dev: false + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - /@emotion/sheet@1.4.0: + '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - dev: false - /@emotion/styled@11.13.0(@emotion/react@11.13.0)(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} + '@emotion/styled@11.14.0': + resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' @@ -357,426 +201,302 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@emotion/babel-plugin': 11.12.0 - '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) - '@emotion/serialize': 1.3.0 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) - '@emotion/utils': 1.4.0 - '@types/react': 18.3.3 - react: 18.3.1 - transitivePeerDependencies: - - supports-color - dev: false - /@emotion/unitless@0.9.0: - resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==} - dev: false + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - /@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1): - resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: react: '>=16.8.0' - dependencies: - react: 18.3.1 - dev: false - /@emotion/utils@1.4.0: - resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} - dev: false + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - /@emotion/weak-memoize@0.4.0: + '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - dev: false - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.11.0: - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.6 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.17.0': + resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@humanwhocodes/module-importer@1.0.1: + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - dev: true + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.2: + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.2.1: + '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec@1.5.0: + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@jridgewell/trace-mapping@0.3.25: + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - /@mui/core-downloads-tracker@5.16.7: - resolution: {integrity: sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==} - dev: false + '@mui/core-downloads-tracker@6.3.0': + resolution: {integrity: sha512-/d8NwSuC3rMwCjswmGB3oXC4sdDuhIUJ8inVQAxGrADJhf0eq/kmy+foFKvpYhHl2siOZR+MLdFttw6/Bzqtqg==} - /@mui/icons-material@5.16.7(@mui/material@5.16.7)(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==} - engines: {node: '>=12.0.0'} + '@mui/icons-material@6.3.0': + resolution: {integrity: sha512-3uWws6DveDn5KxCS34p+sUNMxehuclQY6OmoJeJJ+Sfg9L7LGBpksY/nX5ywKAqickTZnn+sQyVcp963ep9jvw==} + engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^5.0.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@mui/material': ^6.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@mui/material': 5.16.7(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - dev: false - /@mui/material@5.16.7(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==} - engines: {node: '>=12.0.0'} + '@mui/material@6.3.0': + resolution: {integrity: sha512-qhlTFyRMxfoVPxUtA5e8IvqxP0dWo2Ij7cvot7Orag+etUlZH+3UwD8gZGt+3irOoy7Ms3UNBflYjwEikUXtAQ==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + '@mui/material-pigment-css': ^6.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true '@emotion/styled': optional: true + '@mui/material-pigment-css': + optional: true '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0)(@types/react@18.3.3)(react@18.3.1) - '@mui/core-downloads-tracker': 5.16.7 - '@mui/system': 5.16.7(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(@types/react@18.3.3)(react@18.3.1) - '@mui/types': 7.2.15(@types/react@18.3.3) - '@mui/utils': 5.16.6(@types/react@18.3.3)(react@18.3.1) - '@popperjs/core': 2.11.8 - '@types/react': 18.3.3 - '@types/react-transition-group': 4.4.11 - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-is: 18.3.1 - react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) - dev: false - - /@mui/private-theming@5.16.6(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==} - engines: {node: '>=12.0.0'} + + '@mui/private-theming@6.3.0': + resolution: {integrity: sha512-tdS8jvqMokltNTXg6ioRCCbVdDmZUJZa/T9VtTnX2Lwww3FTgCakst9tWLZSxm1fEE9Xp0m7onZJmgeUmWQYVw==} + engines: {node: '>=14.0.0'} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@mui/utils': 5.16.6(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - prop-types: 15.8.1 - react: 18.3.1 - dev: false - /@mui/styled-engine@5.16.6(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(react@18.3.1): - resolution: {integrity: sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==} - engines: {node: '>=12.0.0'} + '@mui/styled-engine@6.3.0': + resolution: {integrity: sha512-iWA6eyiPkO07AlHxRUvI7dwVRSc+84zV54kLmjUms67GJeOWVuXlu8ZO+UhCnwJxHacghxnabsMEqet5PYQmHg==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true '@emotion/styled': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@emotion/cache': 11.13.1 - '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0)(@types/react@18.3.3)(react@18.3.1) - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - dev: false - /@mui/system@5.16.7(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==} - engines: {node: '>=12.0.0'} + '@mui/system@6.3.0': + resolution: {integrity: sha512-L+8hUHMNlfReKSqcnVslFrVhoNfz/jw7Fe9NfDE85R3KarvZ4O3MU9daF/lZeqEAvnYxEilkkTfDwQ7qCgJdFg==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true @@ -784,1736 +504,2783 @@ packages: optional: true '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0)(@types/react@18.3.3)(react@18.3.1) - '@mui/private-theming': 5.16.6(@types/react@18.3.3)(react@18.3.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.0)(@emotion/styled@11.13.0)(react@18.3.1) - '@mui/types': 7.2.15(@types/react@18.3.3) - '@mui/utils': 5.16.6(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - dev: false - /@mui/types@7.2.15(@types/react@18.3.3): - resolution: {integrity: sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q==} + '@mui/types@7.2.20': + resolution: {integrity: sha512-straFHD7L8v05l/N5vcWk+y7eL9JF0C2mtph/y4BPm3gn2Eh61dDwDB65pa8DLss3WJfDXYC7Kx5yjP0EmXpgw==} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.3.3 - dev: false - /@mui/utils@5.16.6(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==} - engines: {node: '>=12.0.0'} + '@mui/utils@6.3.0': + resolution: {integrity: sha512-MkDBF08OPVwXhAjedyMykRojgvmf0y/jxkBWjystpfI/pasyTYrfdv4jic6s7j3y2+a+SJzS9qrD6X8ZYj/8AQ==} + engines: {node: '>=14.0.0'} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.25.0 - '@mui/types': 7.2.15(@types/react@18.3.3) - '@types/prop-types': 15.7.12 - '@types/react': 18.3.3 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 18.3.1 - react-is: 18.3.1 - dev: false - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - dev: true - /@popperjs/core@2.11.8: + '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false - /@tauri-apps/api@1.6.0: - resolution: {integrity: sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==} - engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: false + '@rollup/rollup-android-arm-eabi@4.29.1': + resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.29.1': + resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.29.1': + resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.29.1': + resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.29.1': + resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.29.1': + resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.29.1': + resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.29.1': + resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.29.1': + resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.29.1': + resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.29.1': + resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.29.1': + resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.29.1': + resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.29.1': + resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} + cpu: [x64] + os: [win32] + + '@tauri-apps/api@2.1.1': + resolution: {integrity: sha512-fzUfFFKo4lknXGJq8qrCidkUcKcH2UHhfaaCNt4GzgzGaW2iS26uFOg4tS3H4P8D6ZEeUxtiD5z0nwFF0UN30A==} - /@tauri-apps/cli-darwin-arm64@1.6.0: - resolution: {integrity: sha512-SNRwUD9nqGxY47mbY1CGTt/jqyQOU7Ps7Mx/mpgahL0FVUDiCEY/5L9QfEPPhEgccgcelEVn7i6aQHIkHyUtCA==} + '@tauri-apps/cli-darwin-arm64@2.1.0': + resolution: {integrity: sha512-ESc6J6CE8hl1yKH2vJ+ALF+thq4Be+DM1mvmTyUCQObvezNCNhzfS6abIUd3ou4x5RGH51ouiANeT3wekU6dCw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-darwin-x64@1.6.0: - resolution: {integrity: sha512-g2/uDR/eeH2arvuawA4WwaEOqv/7jDO/ZLNI3JlBjP5Pk8GGb3Kdy0ro1xQzF94mtk2mOnOXa4dMgAet4sUJ1A==} + '@tauri-apps/cli-darwin-x64@2.1.0': + resolution: {integrity: sha512-TasHS442DFs8cSH2eUQzuDBXUST4ECjCd0yyP+zZzvAruiB0Bg+c8A+I/EnqCvBQ2G2yvWLYG8q/LI7c87A5UA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-linux-arm-gnueabihf@1.6.0: - resolution: {integrity: sha512-EVwf4oRkQyG8BpSrk0gqO7oA0sDM2MdNDtJpMfleYFEgCxLIOGZKNqaOW3M7U+0Y4qikmG3TtRK+ngc8Ymtrjg==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0': + resolution: {integrity: sha512-aP7ZBGNL4ny07Cbb6kKpUOSrmhcIK2KhjviTzYlh+pPhAptxnC78xQGD3zKQkTi2WliJLPmBYbOHWWQa57lQ9w==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-linux-arm64-gnu@1.6.0: - resolution: {integrity: sha512-YdpY17cAySrhK9dX4BUVEmhAxE2o+6skIEFg8iN/xrDwRxhaNPI9I80YXPatUTX54Kx55T5++25VJG9+3iw83A==} + '@tauri-apps/cli-linux-arm64-gnu@2.1.0': + resolution: {integrity: sha512-ZTdgD5gLeMCzndMT2f358EkoYkZ5T+Qy6zPzU+l5vv5M7dHVN9ZmblNAYYXmoOuw7y+BY4X/rZvHV9pcGrcanQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-linux-arm64-musl@1.6.0: - resolution: {integrity: sha512-4U628tuf2U8pMr4tIBJhEkrFwt+46dwhXrDlpdyWSZtnop5RJAVKHODm0KbWns4xGKfTW1F3r6sSv+2ZxLcISA==} + '@tauri-apps/cli-linux-arm64-musl@2.1.0': + resolution: {integrity: sha512-NzwqjUCilhnhJzusz3d/0i0F1GFrwCQbkwR6yAHUxItESbsGYkZRJk0yMEWkg3PzFnyK4cWTlQJMEU52TjhEzA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-linux-x64-gnu@1.6.0: - resolution: {integrity: sha512-AKRzp76fVUaJyXj5KRJT9bJyhwZyUnRQU0RqIRqOtZCT5yr6qGP8rjtQ7YhCIzWrseBlOllc3Qvbgw3Yl0VQcA==} + '@tauri-apps/cli-linux-x64-gnu@2.1.0': + resolution: {integrity: sha512-TyiIpMEtZxNOQmuFyfJwaaYbg3movSthpBJLIdPlKxSAB2BW0VWLY3/ZfIxm/G2YGHyREkjJvimzYE0i37PnMA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-linux-x64-musl@1.6.0: - resolution: {integrity: sha512-0edIdq6aMBTaRMIXddHfyAFL361JqulLLd2Wi2aoOie7DkQ2MYh6gv3hA7NB9gqFwNIGE+xtJ4BkXIP2tSGPlg==} + '@tauri-apps/cli-linux-x64-musl@2.1.0': + resolution: {integrity: sha512-/dQd0TlaxBdJACrR72DhynWftzHDaX32eBtS5WBrNJ+nnNb+znM3gON6nJ9tSE9jgDa6n1v2BkI/oIDtypfUXw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-win32-arm64-msvc@1.6.0: - resolution: {integrity: sha512-QwWpWk4ubcwJ1rljsRAmINgB2AwkyzZhpYbalA+MmzyYMREcdXWGkyixWbRZgqc6fEWEBmq5UG73qz5eBJiIKg==} + '@tauri-apps/cli-win32-arm64-msvc@2.1.0': + resolution: {integrity: sha512-NdQJO7SmdYqOcE+JPU7bwg7+odfZMWO6g8xF9SXYCMdUzvM2Gv/AQfikNXz5yS7ralRhNFuW32i5dcHlxh4pDg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@tauri-apps/cli-win32-ia32-msvc@1.6.0: - resolution: {integrity: sha512-Vtw0yxO9+aEFuhuxQ57ALG43tjECopRimRuKGbtZYDCriB/ty5TrT3QWMdy0dxBkpDTu3Rqsz30sbDzw6tlP3Q==} + '@tauri-apps/cli-win32-ia32-msvc@2.1.0': + resolution: {integrity: sha512-f5h8gKT/cB8s1ticFRUpNmHqkmaLutT62oFDB7N//2YTXnxst7EpMIn1w+QimxTvTk2gcx6EcW6bEk/y2hZGzg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true + + '@tauri-apps/cli-win32-x64-msvc@2.1.0': + resolution: {integrity: sha512-P/+LrdSSb5Xbho1LRP4haBjFHdyPdjWvGgeopL96OVtrFpYnfC+RctB45z2V2XxqFk3HweDDxk266btjttfjGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tauri-apps/cli@2.1.0': + resolution: {integrity: sha512-K2VhcKqBhAeS5pNOVdnR/xQRU6jwpgmkSL2ejHXcl0m+kaTggT0WRDQnFtPq6NljA7aE03cvwsbCAoFG7vtkJw==} + engines: {node: '>= 10'} + hasBin: true + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@22.10.2': + resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-dom@19.0.2': + resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + + '@types/react@19.0.2': + resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==} + + '@typescript-eslint/eslint-plugin@8.18.2': + resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.18.2': + resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.18.2': + resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.18.2': + resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.18.2': + resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.18.2': + resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.18.2': + resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.18.2': + resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.3: + resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001690: + resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + electron-to-chromium@1.5.76: + resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.7: + resolution: {integrity: sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.3: + resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.17.0: + resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.6: + resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.1: + resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.0: + resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.4: + resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==} + engines: {node: '>= 0.4'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@19.0.0: + resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + reflect.getprototypeof@1.0.9: + resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.29.1: + resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + vite@6.0.5: + resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.3': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + + '@babel/parser@7.26.3': + dependencies: + '@babel/types': 7.26.3 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.2 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/utils': 1.4.2 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.2 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.0.0)': + dependencies: + react: 19.0.0 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.24.0': + optional: true + + '@esbuild/android-arm64@0.24.0': + optional: true + + '@esbuild/android-arm@0.24.0': + optional: true + + '@esbuild/android-x64@0.24.0': + optional: true + + '@esbuild/darwin-arm64@0.24.0': + optional: true + + '@esbuild/darwin-x64@0.24.0': + optional: true + + '@esbuild/freebsd-arm64@0.24.0': + optional: true + + '@esbuild/freebsd-x64@0.24.0': + optional: true + + '@esbuild/linux-arm64@0.24.0': + optional: true + + '@esbuild/linux-arm@0.24.0': + optional: true + + '@esbuild/linux-ia32@0.24.0': + optional: true + + '@esbuild/linux-loong64@0.24.0': + optional: true + + '@esbuild/linux-mips64el@0.24.0': + optional: true + + '@esbuild/linux-ppc64@0.24.0': + optional: true + + '@esbuild/linux-riscv64@0.24.0': + optional: true + + '@esbuild/linux-s390x@0.24.0': + optional: true + + '@esbuild/linux-x64@0.24.0': + optional: true + + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + + '@esbuild/openbsd-x64@0.24.0': + optional: true + + '@esbuild/sunos-x64@0.24.0': + optional: true + + '@esbuild/win32-arm64@0.24.0': + optional: true + + '@esbuild/win32-ia32@0.24.0': + optional: true + + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': + dependencies: + eslint: 9.17.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.17.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@mui/core-downloads-tracker@6.3.0': {} + + '@mui/icons-material@6.3.0(@mui/material@6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.2 + + '@mui/material@6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/core-downloads-tracker': 6.3.0 + '@mui/system': 6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0) + '@mui/types': 7.2.20(@types/react@19.0.2) + '@mui/utils': 6.3.0(@types/react@19.0.2)(react@19.0.0) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@19.0.2) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-is: 19.0.0 + react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0) + '@types/react': 19.0.2 + + '@mui/private-theming@6.3.0(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/utils': 6.3.0(@types/react@19.0.2)(react@19.0.0) + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.2 + + '@mui/styled-engine@6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0) + + '@mui/system@6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/private-theming': 6.3.0(@types/react@19.0.2)(react@19.0.0) + '@mui/styled-engine': 6.3.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(react@19.0.0) + '@mui/types': 7.2.20(@types/react@19.0.2) + '@mui/utils': 6.3.0(@types/react@19.0.2)(react@19.0.0) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0) + '@types/react': 19.0.2 + + '@mui/types@7.2.20(@types/react@19.0.2)': + optionalDependencies: + '@types/react': 19.0.2 + + '@mui/utils@6.3.0(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.20(@types/react@19.0.2) + '@types/prop-types': 15.7.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-is: 19.0.0 + optionalDependencies: + '@types/react': 19.0.2 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.18.0 + + '@popperjs/core@2.11.8': {} + + '@rollup/rollup-android-arm-eabi@4.29.1': + optional: true + + '@rollup/rollup-android-arm64@4.29.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.29.1': + optional: true + + '@rollup/rollup-darwin-x64@4.29.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.29.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.29.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.29.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.29.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.29.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.29.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.29.1': + optional: true + + '@tauri-apps/api@2.1.1': {} + + '@tauri-apps/cli-darwin-arm64@2.1.0': + optional: true + + '@tauri-apps/cli-darwin-x64@2.1.0': + optional: true + + '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0': + optional: true + + '@tauri-apps/cli-linux-arm64-gnu@2.1.0': + optional: true + + '@tauri-apps/cli-linux-arm64-musl@2.1.0': + optional: true + + '@tauri-apps/cli-linux-x64-gnu@2.1.0': + optional: true + + '@tauri-apps/cli-linux-x64-musl@2.1.0': + optional: true + + '@tauri-apps/cli-win32-arm64-msvc@2.1.0': optional: true - /@tauri-apps/cli-win32-x64-msvc@1.6.0: - resolution: {integrity: sha512-h54FHOvGi7+LIfRchzgZYSCHB1HDlP599vWXQQJ/XnwJY+6Rwr2E5bOe/EhqoG8rbGkfK0xX3KPAvXPbUlmggg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@tauri-apps/cli-win32-ia32-msvc@2.1.0': optional: true - /@tauri-apps/cli@1.6.0: - resolution: {integrity: sha512-DBBpBl6GhTzm8ImMbKkfaZ4fDTykWrC7Q5OXP4XqD91recmDEn2LExuvuiiS3HYe7uP8Eb5B9NPHhqJb+Zo7qQ==} - engines: {node: '>= 10'} - hasBin: true + '@tauri-apps/cli-win32-x64-msvc@2.1.0': + optional: true + + '@tauri-apps/cli@2.1.0': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.6.0 - '@tauri-apps/cli-darwin-x64': 1.6.0 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.6.0 - '@tauri-apps/cli-linux-arm64-gnu': 1.6.0 - '@tauri-apps/cli-linux-arm64-musl': 1.6.0 - '@tauri-apps/cli-linux-x64-gnu': 1.6.0 - '@tauri-apps/cli-linux-x64-musl': 1.6.0 - '@tauri-apps/cli-win32-arm64-msvc': 1.6.0 - '@tauri-apps/cli-win32-ia32-msvc': 1.6.0 - '@tauri-apps/cli-win32-x64-msvc': 1.6.0 - dev: true - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@tauri-apps/cli-darwin-arm64': 2.1.0 + '@tauri-apps/cli-darwin-x64': 2.1.0 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.1.0 + '@tauri-apps/cli-linux-arm64-gnu': 2.1.0 + '@tauri-apps/cli-linux-arm64-musl': 2.1.0 + '@tauri-apps/cli-linux-x64-gnu': 2.1.0 + '@tauri-apps/cli-linux-x64-musl': 2.1.0 + '@tauri-apps/cli-win32-arm64-msvc': 2.1.0 + '@tauri-apps/cli-win32-ia32-msvc': 2.1.0 + '@tauri-apps/cli-win32-x64-msvc': 2.1.0 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 - dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.2 - dev: true + '@babel/types': 7.26.3 - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - dev: true + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 - /@types/babel__traverse@7.20.6: - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.2 - dev: true + '@babel/types': 7.26.3 - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} - /@types/node@20.14.15: - resolution: {integrity: sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==} + '@types/node@22.10.2': dependencies: - undici-types: 5.26.5 - dev: true + undici-types: 6.20.0 - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false + '@types/parse-json@4.0.2': {} - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.14': {} - /@types/react-dom@18.3.0: - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/react-dom@19.0.2(@types/react@19.0.2)': dependencies: - '@types/react': 18.3.3 - dev: true + '@types/react': 19.0.2 - /@types/react-transition-group@4.4.11: - resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} + '@types/react-transition-group@4.4.12(@types/react@19.0.2)': dependencies: - '@types/react': 18.3.3 - dev: false + '@types/react': 19.0.2 - /@types/react@18.3.3: - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/react@19.0.2': dependencies: - '@types/prop-types': 15.7.12 csstype: 3.1.3 - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.18.2(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.2 + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.2 + eslint: 9.17.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6 - eslint: 8.57.0 - typescript: 5.5.4 + '@typescript-eslint/scope-manager': 8.18.2 + '@typescript-eslint/types': 8.18.2 + '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.2 + debug: 4.4.0 + eslint: 9.17.0 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.18.2': dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - dev: true + '@typescript-eslint/types': 8.18.2 + '@typescript-eslint/visitor-keys': 8.18.2 - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - debug: 4.3.6 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) + debug: 4.4.0 + eslint: 9.17.0 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@8.18.2': {} - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@8.18.2(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6 - globby: 11.1.0 + '@typescript-eslint/types': 8.18.2 + '@typescript-eslint/visitor-keys': 8.18.2 + debug: 4.4.0 + fast-glob: 3.3.2 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@8.18.2(eslint@9.17.0)(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.57.0 - semver: 7.6.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@typescript-eslint/scope-manager': 8.18.2 + '@typescript-eslint/types': 8.18.2 + '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) + eslint: 9.17.0 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - - typescript - dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.18.2': dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@typescript-eslint/types': 8.18.2 + eslint-visitor-keys: 4.2.0 - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vitejs/plugin-react@4.3.1(vite@4.5.3): - resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-react@4.3.4(vite@6.0.5(@types/node@22.10.2))': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 4.5.3(@types/node@20.14.15) + vite: 6.0.5(@types/node@22.10.2) transitivePeerDependencies: - supports-color - dev: true - /acorn-jsx@5.3.2(acorn@8.12.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 - dev: true + acorn: 8.14.0 - /acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.14.0: {} - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true + call-bound: 1.0.3 + is-array-buffer: 3.0.5 - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + get-intrinsic: 1.2.6 + is-string: 1.1.1 - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: true + get-intrinsic: 1.2.6 + is-array-buffer: 3.0.5 - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: false + resolve: 1.22.10 - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.24.3: dependencies: - caniuse-lite: 1.0.30001651 - electron-to-chromium: 1.5.7 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) - dev: true + caniuse-lite: 1.0.30001690 + electron-to-chromium: 1.5.76 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.3) - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.1: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.6 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.6 - /caniuse-lite@1.0.30001651: - resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} - dev: true + callsites@3.1.0: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + caniuse-lite@1.0.30001690: {} - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 + clsx@2.1.1: {} - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false + convert-source-map@1.9.0: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: false - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.1.3: {} - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true + is-data-view: 1.0.2 - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true + is-data-view: 1.0.2 - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true + is-data-view: 1.0.2 - /debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.4.0: dependencies: - ms: 2.1.2 + ms: 2.1.3 - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 - dev: true + gopd: 1.2.0 - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + dom-helpers@5.2.1: dependencies: - esutils: 2.0.3 - dev: true + '@babel/runtime': 7.26.0 + csstype: 3.1.3 - /dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dunder-proto@1.0.1: dependencies: - '@babel/runtime': 7.25.0 - csstype: 3.1.3 - dev: false + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - /electron-to-chromium@1.5.7: - resolution: {integrity: sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==} - dev: true + electron-to-chromium@1.5.76: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: false - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + es-abstract@1.23.7: dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.6 + get-symbol-description: 1.1.0 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.0 + math-intrinsics: 1.1.0 + object-inspect: 1.13.3 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.3 + safe-regex-test: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - dev: true + es-define-property@1.0.1: {} - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} - engines: {node: '>= 0.4'} + es-iterator-helpers@1.2.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.6 globalthis: 1.0.4 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 - dev: true - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.4 + safe-array-concat: 1.1.3 + + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.6 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true + is-date-object: 1.1.0 + is-symbol: 1.1.1 - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.24.0: optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /eslint-config-prettier@9.1.0(eslint@8.57.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.57.0 - dev: true - - /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.57.0 - dev: true - - /eslint-plugin-react@7.35.0(eslint@8.57.0): - resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@9.17.0): + dependencies: + eslint: 9.17.0 + + eslint-plugin-react-hooks@5.1.0(eslint@9.17.0): + dependencies: + eslint: 9.17.0 + + eslint-plugin-react@7.37.3(eslint@9.17.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + es-iterator-helpers: 1.2.1 + eslint: 9.17.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint-visitor-keys@4.2.0: {} + + eslint@9.17.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.17.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.6 - doctrine: 3.0.0 + cross-spawn: 7.0.6 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 - dev: true + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 - dev: true + micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.18.0: dependencies: reusify: 1.0.4 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 - dev: true + flat-cache: 4.0.1 - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false + find-root@1.1.0: {} - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true + flatted@3.3.2: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true + hasown: 2.0.2 + is-callable: 1.2.7 - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.6: dependencies: + call-bind-apply-helpers: 1.0.1 + dunder-proto: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.0.0 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 - dev: true + math-intrinsics: 1.1.0 - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true + get-intrinsic: 1.2.6 - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true + globals@14.0.0: {} - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.4 - dev: true + gopd: 1.2.0 - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + gopd@1.2.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + graphemer@1.4.0: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-bigints@1.1.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - dev: true + es-define-property: 1.0.1 - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.1.0: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 - dev: true + has-symbols: 1.1.0 - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 - dev: false - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true + imurmurhash@0.1.4: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 - dev: true + side-channel: 1.1.0 - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.6 - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false + is-arrayish@0.2.1: {} - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 - dev: true + has-bigints: 1.1.0 - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.2.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + is-data-view@1.0.2: dependencies: - is-typed-array: 1.1.13 - dev: true + call-bound: 1.0.3 + get-intrinsic: 1.2.6 + is-typed-array: 1.1.15 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.1.0: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.1.1: dependencies: - call-bind: 1.0.7 - dev: true + call-bound: 1.0.3 - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.1.1: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-number@7.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.2.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 + gopd: 1.2.0 has-tostringtag: 1.0.2 - dev: true + hasown: 2.0.2 - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.7 - dev: true + call-bound: 1.0.3 - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.1.1: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.1.1: dependencies: - has-symbols: 1.0.3 - dev: true + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.15 - dev: true + which-typed-array: 1.1.18 - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.0: dependencies: - call-bind: 1.0.7 - dev: true + call-bound: 1.0.3 - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.4: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true + call-bound: 1.0.3 + get-intrinsic: 1.2.6 - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.4: dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 + define-data-property: 1.1.4 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.6 + has-symbols: 1.1.0 + reflect.getprototypeof: 1.0.9 set-function-name: 2.0.2 - dev: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + jsesc@3.1.0: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 - dev: true + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false + lines-and-columns@1.2.4: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + math-intrinsics@1.1.0: {} - /micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} + merge2@1.4.1: {} + + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.8: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - dev: true + node-releases@2.0.19: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + object-assign@4.1.1: {} - /object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.3: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - has-symbols: 1.0.3 + es-object-atoms: 1.0.0 + has-symbols: 1.1.0 object-keys: 1.1.1 - dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-object-atoms: 1.0.0 - dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + object.values@1.2.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -2521,640 +3288,398 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: false - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-exists@4.0.0: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-key@3.1.1: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + path-parse@1.0.7: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + path-type@4.0.0: {} - /picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.49: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.4.2: {} - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /react-dom@18.3.1(react@18.3.1): - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 + react-dom@19.0.0(react@19.0.0): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - dev: false + react: 19.0.0 + scheduler: 0.25.0 - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@16.13.1: {} - /react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - dev: false + react-is@19.0.0: {} - /react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} - dev: true + react-refresh@0.14.2: {} - /react-transition-group@4.4.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + react-transition-group@4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - /react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false + react@19.0.0: {} - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + dunder-proto: 1.0.1 + es-abstract: 1.23.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 - dev: true + get-intrinsic: 1.2.6 + gopd: 1.2.0 + which-builtin-type: 1.2.1 - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false + regenerator-runtime@0.14.1: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolve-from@4.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.10: dependencies: - is-core-module: 2.15.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: - is-core-module: 2.15.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rollup@4.29.1: dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true + '@types/estree': 1.0.6 optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.29.1 + '@rollup/rollup-android-arm64': 4.29.1 + '@rollup/rollup-darwin-arm64': 4.29.1 + '@rollup/rollup-darwin-x64': 4.29.1 + '@rollup/rollup-freebsd-arm64': 4.29.1 + '@rollup/rollup-freebsd-x64': 4.29.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 + '@rollup/rollup-linux-arm-musleabihf': 4.29.1 + '@rollup/rollup-linux-arm64-gnu': 4.29.1 + '@rollup/rollup-linux-arm64-musl': 4.29.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 + '@rollup/rollup-linux-riscv64-gnu': 4.29.1 + '@rollup/rollup-linux-s390x-gnu': 4.29.1 + '@rollup/rollup-linux-x64-gnu': 4.29.1 + '@rollup/rollup-linux-x64-musl': 4.29.1 + '@rollup/rollup-win32-arm64-msvc': 4.29.1 + '@rollup/rollup-win32-ia32-msvc': 4.29.1 + '@rollup/rollup-win32-x64-msvc': 4.29.1 fsevents: 2.3.3 - dev: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.3: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.6 + has-symbols: 1.1.0 isarray: 2.0.5 - dev: true - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-regex: 1.1.4 - dev: true + is-regex: 1.2.1 - /scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - dependencies: - loose-envify: 1.4.0 - dev: false + scheduler@0.25.0: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - dev: true + semver@7.6.3: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.6 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel-list@1.0.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - dev: true + object-inspect: 1.13.3 - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.6 + object-inspect: 1.13.3 - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.6 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: false + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + source-map-js@1.2.1: {} + + source-map@0.5.7: {} + + string.prototype.matchall@4.0.12: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-errors: 1.3.0 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + get-intrinsic: 1.2.6 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 - side-channel: 1.0.6 - dev: true + side-channel: 1.1.0 - /string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 - dev: true + es-abstract: 1.23.7 - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.7 es-object-atoms: 1.0.0 - dev: true + has-property-descriptors: 1.0.2 - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false + strip-json-comments@3.1.1: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 + stylis@4.2.0: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + supports-preserve-symlinks-flag@1.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /ts-api-utils@1.3.0(typescript@5.5.4): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.4.3(typescript@5.7.2): dependencies: - typescript: 5.5.4 - dev: true + typescript: 5.7.2 - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: true + is-typed-array: 1.1.15 - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.9 - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + gopd: 1.2.0 + is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 - dev: true + reflect.getprototypeof: 1.0.9 - /typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.7.2: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@6.20.0: {} - /update-browserslist-db@1.1.0(browserslist@4.23.3): - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1(browserslist@4.24.3): dependencies: - browserslist: 4.23.3 - escalade: 3.1.2 - picocolors: 1.0.1 - dev: true + browserslist: 4.24.3 + escalade: 3.2.0 + picocolors: 1.1.1 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /vite@4.5.3(@types/node@20.14.15): - resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@6.0.5(@types/node@22.10.2): dependencies: - '@types/node': 20.14.15 - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 + esbuild: 0.24.0 + postcss: 8.4.49 + rollup: 4.29.1 optionalDependencies: + '@types/node': 22.10.2 fsevents: 2.3.3 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.1: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true + is-bigint: 1.1.0 + is-boolean-object: 1.2.1 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 - /which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} + which-builtin-type@1.2.1: dependencies: - function.prototype.name: 1.1.6 + call-bound: 1.0.3 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 + is-regex: 1.2.1 + is-weakref: 1.1.0 isarray: 2.0.5 - which-boxed-primitive: 1.0.2 + which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.15 - dev: true + which-typed-array: 1.1.18 - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 - is-weakset: 2.0.3 - dev: true + is-weakset: 2.0.4 - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.5: {} - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false + yaml@1.10.2: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/apps/gpgui-helper/src-tauri/Cargo.toml b/apps/gpgui-helper/src-tauri/Cargo.toml index 51d972c2..363d9287 100644 --- a/apps/gpgui-helper/src-tauri/Cargo.toml +++ b/apps/gpgui-helper/src-tauri/Cargo.toml @@ -1,16 +1,18 @@ [package] name = "gpgui-helper" +rust-version.workspace = true authors.workspace = true version.workspace = true edition.workspace = true license.workspace = true [build-dependencies] -tauri-build = { version = "1.5", features = [] } +tauri-build = { version = "2", features = [] } [dependencies] gpapi = { path = "../../../crates/gpapi", features = ["tauri"] } -tauri = { workspace = true, features = ["window-start-dragging"] } +tauri.workspace = true + tokio.workspace = true anyhow.workspace = true log.workspace = true diff --git a/apps/gpgui-helper/src-tauri/capabilities/default.json b/apps/gpgui-helper/src-tauri/capabilities/default.json new file mode 100644 index 00000000..ef9439ad --- /dev/null +++ b/apps/gpgui-helper/src-tauri/capabilities/default.json @@ -0,0 +1,12 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Capability for the main window", + "windows": ["main"], + "permissions": [ + "core:window:allow-start-dragging", + "core:event:allow-listen", + "core:event:allow-emit", + "core:event:allow-unlisten" + ] +} diff --git a/apps/gpgui-helper/src-tauri/src/app.rs b/apps/gpgui-helper/src-tauri/src/app.rs index 17820ff1..f9e3703b 100644 --- a/apps/gpgui-helper/src-tauri/src/app.rs +++ b/apps/gpgui-helper/src-tauri/src/app.rs @@ -1,8 +1,7 @@ use std::sync::Arc; -use gpapi::utils::window::WindowExt; use log::info; -use tauri::Manager; +use tauri::{Listener, Manager}; use crate::updater::{GuiUpdater, Installer, ProgressNotifier}; @@ -25,15 +24,15 @@ impl App { tauri::Builder::default() .setup(move |app| { - let win = app.get_window("main").expect("no main window"); - win.hide_menu(); + let win = app.get_webview_window("main").expect("no main window"); + let _ = win.hide_menu(); let notifier = ProgressNotifier::new(win.clone()); let installer = Installer::new(api_key); let updater = Arc::new(GuiUpdater::new(gui_version, notifier, installer)); let win_clone = win.clone(); - app.listen_global("app://update-done", move |_event| { + app.listen_any("app://update-done", move |_event| { info!("Update done"); let _ = win_clone.close(); }); @@ -41,12 +40,15 @@ impl App { // Listen for the update event win.listen("app://update", move |_event| { let updater = Arc::clone(&updater); + if updater.is_in_progress() { + info!("Update already in progress"); + updater.notify_progress(); + return; + } + tokio::spawn(async move { updater.update().await }); }); - // Update the GUI on startup - win.trigger("app://update", None); - Ok(()) }) .run(tauri::generate_context!())?; diff --git a/apps/gpgui-helper/src-tauri/src/cli.rs b/apps/gpgui-helper/src-tauri/src/cli.rs index c7904857..8a01f558 100644 --- a/apps/gpgui-helper/src-tauri/src/cli.rs +++ b/apps/gpgui-helper/src-tauri/src/cli.rs @@ -1,5 +1,5 @@ use clap::Parser; -use gpapi::utils::base64; +use gpapi::utils::{base64, env_utils}; use log::{info, LevelFilter}; use crate::app::App; @@ -22,6 +22,8 @@ impl Cli { let api_key = self.read_api_key()?; let app = App::new(api_key, &self.gui_version); + env_utils::patch_gui_runtime_env(false); + app.run() } diff --git a/apps/gpgui-helper/src-tauri/src/updater.rs b/apps/gpgui-helper/src-tauri/src/updater.rs index 096c0de4..6dd5c5ba 100644 --- a/apps/gpgui-helper/src-tauri/src/updater.rs +++ b/apps/gpgui-helper/src-tauri/src/updater.rs @@ -1,39 +1,39 @@ -use std::sync::Arc; +use std::sync::{Arc, RwLock}; use gpapi::{ service::request::UpdateGuiRequest, utils::{checksum::verify_checksum, crypto::Crypto, endpoint::http_endpoint}, }; use log::{info, warn}; -use tauri::{Manager, Window}; +use tauri::{Emitter, WebviewWindow}; use crate::downloader::{ChecksumFetcher, FileDownloader}; #[cfg(not(debug_assertions))] const SNAPSHOT: &str = match option_env!("SNAPSHOT") { - Some(val) => val, - None => "false" + Some(val) => val, + None => "false", }; pub struct ProgressNotifier { - win: Window, + win: WebviewWindow, } impl ProgressNotifier { - pub fn new(win: Window) -> Self { + pub fn new(win: WebviewWindow) -> Self { Self { win } } fn notify(&self, progress: Option) { - let _ = self.win.emit_all("app://update-progress", progress); + let _ = self.win.emit("app://update-progress", progress); } fn notify_error(&self) { - let _ = self.win.emit_all("app://update-error", ()); + let _ = self.win.emit("app://update-error", ()); } fn notify_done(&self) { - let _ = self.win.emit_and_trigger("app://update-done", ()); + let _ = self.win.emit("app://update-done", ()); } } @@ -72,6 +72,8 @@ pub struct GuiUpdater { version: String, notifier: Arc, installer: Installer, + in_progress: RwLock, + progress: Arc>>, } impl GuiUpdater { @@ -80,6 +82,8 @@ impl GuiUpdater { version, notifier: Arc::new(notifier), installer, + in_progress: Default::default(), + progress: Default::default(), } } @@ -112,15 +116,23 @@ impl GuiUpdater { let cf = ChecksumFetcher::new(&checksum_url); let notifier = Arc::clone(&self.notifier); - dl.on_progress(move |progress| notifier.notify(progress)); + let progress_ref = Arc::clone(&self.progress); + dl.on_progress(move |progress| { + // Save progress to shared state so that it can be notified to the UI when needed + if let Ok(mut guard) = progress_ref.try_write() { + *guard = progress; + } + notifier.notify(progress); + }); + self.set_in_progress(true); let res = tokio::try_join!(dl.download(), cf.fetch()); let (file, checksum) = match res { Ok((file, checksum)) => (file, checksum), Err(err) => { warn!("Download error: {}", err); - self.notifier.notify_error(); + self.notify_error(); return; } }; @@ -130,7 +142,7 @@ impl GuiUpdater { if let Err(err) = verify_checksum(&file_path, &checksum) { warn!("Checksum error: {}", err); - self.notifier.notify_error(); + self.notify_error(); return; } @@ -138,10 +150,48 @@ impl GuiUpdater { if let Err(err) = self.installer.install(&file_path, &checksum).await { warn!("Install error: {}", err); - self.notifier.notify_error(); + self.notify_error(); } else { info!("Install success"); - self.notifier.notify_done(); + self.notify_done(); + } + } + + pub fn is_in_progress(&self) -> bool { + if let Ok(guard) = self.in_progress.try_read() { + *guard + } else { + info!("Failed to acquire in_progress lock"); + false } } + + fn set_in_progress(&self, in_progress: bool) { + if let Ok(mut guard) = self.in_progress.try_write() { + *guard = in_progress; + } else { + info!("Failed to acquire in_progress lock"); + } + } + + fn notify_error(&self) { + self.set_in_progress(false); + self.notifier.notify_error(); + } + + fn notify_done(&self) { + self.set_in_progress(false); + self.notifier.notify_done(); + } + + pub fn notify_progress(&self) { + let progress = if let Ok(guard) = self.progress.try_read() { + *guard + } else { + info!("Failed to acquire progress lock"); + None + }; + + self.notifier.notify(progress); + } } diff --git a/apps/gpgui-helper/src-tauri/tauri.conf.json b/apps/gpgui-helper/src-tauri/tauri.conf.json index 1d5931e0..1e9132af 100644 --- a/apps/gpgui-helper/src-tauri/tauri.conf.json +++ b/apps/gpgui-helper/src-tauri/tauri.conf.json @@ -1,35 +1,15 @@ { - "$schema": "../node_modules/@tauri-apps/cli/schema.json", + "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "build": { "beforeDevCommand": "pnpm dev", "beforeBuildCommand": "pnpm build", - "devPath": "http://localhost:1421", - "distDir": "../dist", - "withGlobalTauri": false + "devUrl": "http://localhost:1421", + "frontendDist": "../dist" }, - "package": { - "productName": "gpgui-helper" - }, - "tauri": { - "allowlist": { - "all": false, - "window": { - "all": false, - "startDragging": true - } - }, - "bundle": { - "active": false, - "targets": "deb", - "identifier": "com.yuezk.gpgui-helper", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ] - }, + "identifier": "com.yuezk.gpgui-helper", + "productName": "gpgui-helper", + "app": { + "withGlobalTauri": false, "security": { "csp": null }, @@ -48,5 +28,16 @@ "decorations": false } ] + }, + "bundle": { + "active": false, + "targets": "deb", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] } } diff --git a/apps/gpgui-helper/src/components/App/App.tsx b/apps/gpgui-helper/src/components/App/App.tsx index 5170636f..f1a47169 100644 --- a/apps/gpgui-helper/src/components/App/App.tsx +++ b/apps/gpgui-helper/src/components/App/App.tsx @@ -1,10 +1,12 @@ import { Box, Button, CssBaseline, LinearProgress, Typography } from "@mui/material"; -import { appWindow } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import logo from "../../assets/icon.svg"; import { useEffect, useState } from "react"; import "./styles.css"; +const appWindow = getCurrentWindow(); + function useUpdateProgress() { const [progress, setProgress] = useState(null); @@ -25,6 +27,8 @@ export default function App() { const [error, setError] = useState(false); useEffect(() => { + appWindow.emit("app://update"); + const unlisten = appWindow.listen("app://update-error", () => { setError(true); }); diff --git a/apps/gpservice/src/cli.rs b/apps/gpservice/src/cli.rs index 309dc060..b379bb62 100644 --- a/apps/gpservice/src/cli.rs +++ b/apps/gpservice/src/cli.rs @@ -6,7 +6,7 @@ use clap::Parser; use gpapi::{ process::gui_launcher::GuiLauncher, service::{request::WsRequest, vpn_state::VpnState}, - utils::{crypto::generate_key, env_file, lock_file::LockFile, redact::Redaction, shutdown_signal}, + utils::{crypto::generate_key, env_utils, lock_file::LockFile, redact::Redaction, shutdown_signal}, GP_SERVICE_LOCK_FILE, }; use log::{info, warn, LevelFilter}; @@ -63,7 +63,7 @@ impl Cli { if no_gui { info!("GUI is disabled"); } else { - let envs = self.env_file.as_ref().map(env_file::load_env_vars).transpose()?; + let envs = self.env_file.as_ref().map(env_utils::load_env_vars).transpose()?; let minimized = self.minimized; diff --git a/apps/gpservice/src/handlers.rs b/apps/gpservice/src/handlers.rs index 643eeb07..42bad2ba 100644 --- a/apps/gpservice/src/handlers.rs +++ b/apps/gpservice/src/handlers.rs @@ -39,10 +39,6 @@ pub(crate) async fn active_gui(State(ctx): State>) -> impl ctx.send_event(WsEvent::ActiveGui).await; } -pub(crate) async fn auth_data(State(ctx): State>, body: String) -> impl IntoResponse { - ctx.send_event(WsEvent::AuthData(body)).await; -} - pub async fn update_gui(State(ctx): State>, body: Bytes) -> Result<(), StatusCode> { let payload = match ctx.decrypt::(body.to_vec()) { Ok(payload) => payload, diff --git a/apps/gpservice/src/routes.rs b/apps/gpservice/src/routes.rs index 0f2ff227..53e70874 100644 --- a/apps/gpservice/src/routes.rs +++ b/apps/gpservice/src/routes.rs @@ -11,7 +11,6 @@ pub(crate) fn routes(ctx: Arc) -> Router { Router::new() .route("/health", get(handlers::health)) .route("/active-gui", post(handlers::active_gui)) - .route("/auth-data", post(handlers::auth_data)) .route("/update-gui", post(handlers::update_gui)) .route("/ws", get(handlers::ws_handler)) .with_state(ctx) diff --git a/crates/auth/Cargo.toml b/crates/auth/Cargo.toml new file mode 100644 index 00000000..9e640f2b --- /dev/null +++ b/crates/auth/Cargo.toml @@ -0,0 +1,49 @@ +[package] +name = "auth" +rust-version.workspace = true +version.workspace = true +authors.workspace = true +homepage.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +gpapi = { path = "../gpapi" } + +# Shared dependencies +anyhow.workspace = true +log.workspace = true +tokio.workspace = true + +# Browser auth dependencies +webbrowser = { version = "1", optional = true } +open = { version = "5", optional = true } +which = { workspace = true, optional = true } +tiny_http = { version = "0.12", optional = true } +uuid = { version = "1", optional = true, features = ["v4"] } + +# Webview auth dependencies +tauri = { workspace = true, optional = true } +regex = { workspace = true, optional = true } +tokio-util = { workspace = true, optional = true } +html-escape = { version = "0.2.13", optional = true } + +[target.'cfg(not(target_os = "macos"))'.dependencies] +webkit2gtk = { version = "2", optional = true } + +[features] +browser-auth = [ + "dep:webbrowser", + "dep:open", + "dep:which", + "dep:tiny_http", + "dep:uuid", +] +webview-auth = [ + "dep:tauri", + "dep:regex", + "dep:tokio-util", + "dep:html-escape", + "dep:webkit2gtk", + "gpapi/tauri", +] diff --git a/crates/auth/LICENSE b/crates/auth/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/crates/auth/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/crates/auth/src/authenticator.rs b/crates/auth/src/authenticator.rs new file mode 100644 index 00000000..200d4fa9 --- /dev/null +++ b/crates/auth/src/authenticator.rs @@ -0,0 +1,60 @@ +use std::borrow::Cow; + +use anyhow::bail; +use gpapi::{ + gp_params::GpParams, + portal::{prelogin, Prelogin}, +}; + +pub struct Authenticator<'a> { + server: &'a str, + auth_request: Option<&'a str>, + pub(crate) gp_params: &'a GpParams, + + #[cfg(feature = "webview-auth")] + pub(crate) clean: bool, + #[cfg(feature = "webview-auth")] + pub(crate) is_retrying: tokio::sync::RwLock, +} + +impl<'a> Authenticator<'a> { + pub fn new(server: &'a str, gp_params: &'a GpParams) -> Self { + Self { + server, + gp_params, + auth_request: None, + + #[cfg(feature = "webview-auth")] + clean: false, + #[cfg(feature = "webview-auth")] + is_retrying: Default::default(), + } + } + + pub fn with_auth_request(mut self, auth_request: &'a str) -> Self { + if !auth_request.is_empty() { + self.auth_request = Some(auth_request); + } + self + } + + pub(crate) async fn initial_auth_request(&self) -> anyhow::Result> { + if let Some(auth_request) = self.auth_request { + return Ok(Cow::Borrowed(auth_request)); + } + + let auth_request = self.portal_prelogin().await?; + Ok(Cow::Owned(auth_request)) + } + + pub(crate) async fn portal_prelogin(&self) -> anyhow::Result { + auth_prelogin(self.server, self.gp_params).await + } +} + +pub async fn auth_prelogin(server: &str, gp_params: &GpParams) -> anyhow::Result { + match prelogin(server, gp_params).await? { + Prelogin::Saml(prelogin) => Ok(prelogin.saml_request().to_string()), + Prelogin::Standard(_) => bail!("Received non-SAML prelogin response"), + } +} diff --git a/crates/auth/src/browser_auth.rs b/crates/auth/src/browser_auth.rs new file mode 100644 index 00000000..b8917d60 --- /dev/null +++ b/crates/auth/src/browser_auth.rs @@ -0,0 +1,5 @@ +mod auth_server; +mod browser_auth_ext; +mod browser_auth_impl; + +pub use browser_auth_ext::BrowserAuthenticator; diff --git a/crates/auth/src/browser_auth/auth_server.rs b/crates/auth/src/browser_auth/auth_server.rs new file mode 100644 index 00000000..48c402d6 --- /dev/null +++ b/crates/auth/src/browser_auth/auth_server.rs @@ -0,0 +1,57 @@ +use std::io::Cursor; + +use log::info; +use tiny_http::{Header, Response, Server}; +use uuid::Uuid; + +pub(super) struct AuthServer { + server: Server, + auth_id: String, +} + +impl AuthServer { + pub fn new() -> anyhow::Result { + let server = Server::http("127.0.0.1:0").map_err(|err| anyhow::anyhow!(err))?; + let auth_id = Uuid::new_v4().to_string(); + + Ok(Self { server, auth_id }) + } + + pub fn auth_url(&self) -> String { + format!("http://{}/{}", self.server.server_addr(), self.auth_id) + } + + pub fn serve_request(&self, auth_request: &str) { + info!("auth server started at: {}", self.auth_url()); + + for req in self.server.incoming_requests() { + info!("received request, method: {}, url: {}", req.method(), req.url()); + + if req.url() != format!("/{}", self.auth_id) { + let forbidden = Response::from_string("forbidden").with_status_code(403); + let _ = req.respond(forbidden); + } else { + let auth_response = build_auth_response(auth_request); + if let Err(err) = req.respond(auth_response) { + info!("failed to respond to request: {}", err); + } else { + info!("stop the auth server"); + break; + } + } + } + } +} + +fn build_auth_response(auth_request: &str) -> Response>> { + if auth_request.starts_with("http") { + let header = format!("location: {}", auth_request); + let header: Header = header.parse().unwrap(); + Response::from_string("redirect") + .with_status_code(302) + .with_header(header) + } else { + let content_type: Header = "content-type: text/html".parse().unwrap(); + Response::from_string(auth_request).with_header(content_type) + } +} diff --git a/crates/auth/src/browser_auth/browser_auth_ext.rs b/crates/auth/src/browser_auth/browser_auth_ext.rs new file mode 100644 index 00000000..fe6e8150 --- /dev/null +++ b/crates/auth/src/browser_auth/browser_auth_ext.rs @@ -0,0 +1,22 @@ +use std::future::Future; + +use gpapi::auth::SamlAuthData; + +use crate::{browser_auth::browser_auth_impl::BrowserAuthenticatorImpl, Authenticator}; + +pub trait BrowserAuthenticator { + fn browser_authenticate(&self, browser: Option<&str>) -> impl Future> + Send; +} + +impl BrowserAuthenticator for Authenticator<'_> { + async fn browser_authenticate(&self, browser: Option<&str>) -> anyhow::Result { + let auth_request = self.initial_auth_request().await?; + let browser_auth = if let Some(browser) = browser { + BrowserAuthenticatorImpl::new_with_browser(&auth_request, browser) + } else { + BrowserAuthenticatorImpl::new(&auth_request) + }; + + browser_auth.authenticate().await + } +} diff --git a/crates/auth/src/browser_auth/browser_auth_impl.rs b/crates/auth/src/browser_auth/browser_auth_impl.rs new file mode 100644 index 00000000..2d311525 --- /dev/null +++ b/crates/auth/src/browser_auth/browser_auth_impl.rs @@ -0,0 +1,100 @@ +use std::{env::temp_dir, fs, os::unix::fs::PermissionsExt}; + +use gpapi::{auth::SamlAuthData, GP_CALLBACK_PORT_FILENAME}; +use log::info; +use tokio::{io::AsyncReadExt, net::TcpListener}; + +use super::auth_server::AuthServer; + +pub(super) struct BrowserAuthenticatorImpl<'a> { + auth_request: &'a str, + browser: Option<&'a str>, +} + +impl BrowserAuthenticatorImpl<'_> { + pub fn new(auth_request: &str) -> BrowserAuthenticatorImpl { + BrowserAuthenticatorImpl { + auth_request, + browser: None, + } + } + + pub fn new_with_browser<'a>(auth_request: &'a str, browser: &'a str) -> BrowserAuthenticatorImpl<'a> { + let browser = browser.trim(); + BrowserAuthenticatorImpl { + auth_request, + browser: if browser.is_empty() || browser == "default" { + None + } else { + Some(browser) + }, + } + } + + pub async fn authenticate(&self) -> anyhow::Result { + let auth_server = AuthServer::new()?; + let auth_url = auth_server.auth_url(); + + let auth_request = self.auth_request.to_string(); + tokio::spawn(async move { + auth_server.serve_request(&auth_request); + }); + + if let Some(browser) = self.browser { + let app = find_browser_path(browser); + + info!("Launching browser: {}", app); + open::with_detached(auth_url, app)?; + } else { + info!("Launching the default browser..."); + webbrowser::open(&auth_url)?; + } + + info!("Please continue the authentication process in the default browser"); + wait_auth_data().await + } +} + +fn find_browser_path(browser: &str) -> String { + if browser == "chrome" { + which::which("google-chrome-stable") + .or_else(|_| which::which("google-chrome")) + .or_else(|_| which::which("chromium")) + .map(|path| path.to_string_lossy().to_string()) + .unwrap_or_else(|_| browser.to_string()) + } else { + browser.into() + } +} + +async fn wait_auth_data() -> anyhow::Result { + // Start a local server to receive the browser authentication data + let listener = TcpListener::bind("127.0.0.1:0").await?; + let port = listener.local_addr()?.port(); + let port_file = temp_dir().join(GP_CALLBACK_PORT_FILENAME); + + // Write the port to a file + fs::write(&port_file, port.to_string())?; + fs::set_permissions(&port_file, fs::Permissions::from_mode(0o600))?; + + // Remove the previous log file + let callback_log = temp_dir().join("gpcallback.log"); + let _ = fs::remove_file(&callback_log); + + info!("Listening authentication data on port {}", port); + info!( + "If it hangs, please check the logs at `{}` for more information", + callback_log.display() + ); + let (mut socket, _) = listener.accept().await?; + + info!("Received the browser authentication data from the socket"); + let mut data = String::new(); + socket.read_to_string(&mut data).await?; + + // Remove the port file + fs::remove_file(&port_file)?; + + let auth_data = SamlAuthData::from_gpcallback(&data)?; + Ok(auth_data) +} diff --git a/crates/auth/src/lib.rs b/crates/auth/src/lib.rs new file mode 100644 index 00000000..ef46475f --- /dev/null +++ b/crates/auth/src/lib.rs @@ -0,0 +1,13 @@ +mod authenticator; +pub use authenticator::auth_prelogin; +pub use authenticator::Authenticator; + +#[cfg(feature = "browser-auth")] +mod browser_auth; +#[cfg(feature = "browser-auth")] +pub use browser_auth::BrowserAuthenticator; + +#[cfg(feature = "webview-auth")] +mod webview_auth; +#[cfg(feature = "webview-auth")] +pub use webview_auth::WebviewAuthenticator; diff --git a/crates/auth/src/webview_auth.rs b/crates/auth/src/webview_auth.rs new file mode 100644 index 00000000..cc9e2966 --- /dev/null +++ b/crates/auth/src/webview_auth.rs @@ -0,0 +1,9 @@ +mod auth_messenger; +mod auth_response; +mod auth_settings; +mod webview_auth_ext; + +#[cfg_attr(not(target_os = "macos"), path = "webview_auth/unix.rs")] +mod platform_impl; + +pub use webview_auth_ext::WebviewAuthenticator; diff --git a/crates/auth/src/webview_auth/auth_messenger.rs b/crates/auth/src/webview_auth/auth_messenger.rs new file mode 100644 index 00000000..29e4da89 --- /dev/null +++ b/crates/auth/src/webview_auth/auth_messenger.rs @@ -0,0 +1,108 @@ +use anyhow::bail; +use gpapi::auth::SamlAuthData; +use log::{error, info}; +use tokio::sync::{mpsc, RwLock}; +use tokio_util::sync::CancellationToken; + +pub enum AuthError { + /// Failed to load page due to TLS error + TlsError, + /// 1. Found auth data in headers/body but it's invalid + /// 2. Loaded an empty page, failed to load page. etc. + Invalid, + /// No auth data found in headers/body + NotFound, +} + +pub type AuthResult = anyhow::Result; + +pub enum AuthEvent { + Data(SamlAuthData), + Error(AuthError), + RaiseWindow, + Close, +} + +pub struct AuthMessenger { + tx: mpsc::UnboundedSender, + rx: RwLock>, + raise_window_cancel_token: RwLock>, +} + +impl AuthMessenger { + pub fn new() -> Self { + let (tx, rx) = mpsc::unbounded_channel(); + + Self { + tx, + rx: RwLock::new(rx), + raise_window_cancel_token: Default::default(), + } + } + + pub async fn subscribe(&self) -> anyhow::Result { + let mut rx = self.rx.write().await; + if let Some(event) = rx.recv().await { + return Ok(event); + } + bail!("Failed to receive auth event"); + } + + pub fn send_auth_event(&self, event: AuthEvent) { + if let Err(event) = self.tx.send(event) { + error!("Failed to send auth event: {}", event); + } + } + + pub fn send_auth_result(&self, result: AuthResult) { + match result { + Ok(data) => self.send_auth_data(data), + Err(err) => self.send_auth_error(err), + } + } + + pub fn send_auth_error(&self, err: AuthError) { + self.send_auth_event(AuthEvent::Error(err)); + } + + pub fn send_auth_data(&self, data: SamlAuthData) { + self.send_auth_event(AuthEvent::Data(data)); + } + + pub fn schedule_raise_window(&self, delay: u64) { + let cancel_token = CancellationToken::new(); + let cancel_token_clone = cancel_token.clone(); + + if let Ok(mut guard) = self.raise_window_cancel_token.try_write() { + // Cancel the previous raise window task if it exists + if let Some(token) = guard.take() { + token.cancel(); + } + *guard = Some(cancel_token_clone); + } + + let tx = self.tx.clone(); + tokio::spawn(async move { + info!("Displaying the window in {} second(s)...", delay); + + tokio::select! { + _ = tokio::time::sleep(tokio::time::Duration::from_secs(delay)) => { + if let Err(err) = tx.send(AuthEvent::RaiseWindow) { + error!("Failed to send raise window event: {}", err); + } + } + _ = cancel_token.cancelled() => { + info!("Cancelled raise window task"); + } + } + }); + } + + pub fn cancel_raise_window(&self) { + if let Ok(mut cancel_token) = self.raise_window_cancel_token.try_write() { + if let Some(token) = cancel_token.take() { + token.cancel(); + } + } + } +} diff --git a/crates/auth/src/webview_auth/auth_response.rs b/crates/auth/src/webview_auth/auth_response.rs new file mode 100644 index 00000000..75a5a65b --- /dev/null +++ b/crates/auth/src/webview_auth/auth_response.rs @@ -0,0 +1,152 @@ +use std::sync::Arc; + +use gpapi::{ + auth::{AuthDataParseResult, SamlAuthData}, + error::AuthDataParseError, +}; +use log::{info, warn}; +use regex::Regex; + +use crate::webview_auth::auth_messenger::{AuthError, AuthMessenger}; + +/// Trait for handling authentication response +pub trait AuthResponse { + fn get_header(&self, key: &str) -> Option; + fn get_body(&self, cb: F) + where + F: FnOnce(anyhow::Result>) + 'static; + + fn url(&self) -> Option; + + fn is_acs_endpoint(&self) -> bool { + self.url().map_or(false, |url| url.ends_with("/SAML20/SP/ACS")) + } +} + +pub fn read_auth_data(auth_response: &impl AuthResponse, auth_messenger: &Arc) { + let auth_messenger = Arc::clone(auth_messenger); + + match read_from_headers(auth_response) { + Ok(auth_data) => { + info!("Found auth data in headers"); + auth_messenger.send_auth_data(auth_data); + } + Err(header_err) => { + info!("Failed to read auth data from headers: {}", header_err); + + let is_acs_endpoint = auth_response.is_acs_endpoint(); + read_from_body(auth_response, move |auth_result| { + // If the endpoint is `/SAML20/SP/ACS` and no auth data found in body, it should be considered as invalid + let auth_result = auth_result.map_err(move |e| { + info!("Failed to read auth data from body: {}", e); + if is_acs_endpoint || e.is_invalid() || header_err.is_invalid() { + AuthError::Invalid + } else { + AuthError::NotFound + } + }); + + auth_messenger.send_auth_result(auth_result); + }); + } + } +} + +fn read_from_headers(auth_response: &impl AuthResponse) -> AuthDataParseResult { + let Some(status) = auth_response.get_header("saml-auth-status") else { + info!("No SAML auth status found in headers"); + return Err(AuthDataParseError::NotFound); + }; + + if status != "1" { + info!("Found invalid auth status: {}", status); + return Err(AuthDataParseError::Invalid); + } + + let username = auth_response.get_header("saml-username"); + let prelogin_cookie = auth_response.get_header("prelogin-cookie"); + let portal_userauthcookie = auth_response.get_header("portal-userauthcookie"); + + SamlAuthData::new(username, prelogin_cookie, portal_userauthcookie).map_err(|e| { + warn!("Found invalid auth data: {}", e); + AuthDataParseError::Invalid + }) +} + +fn read_from_body(auth_response: &impl AuthResponse, cb: F) +where + F: FnOnce(AuthDataParseResult) + 'static, +{ + auth_response.get_body(|body| match body { + Ok(body) => { + let html = String::from_utf8_lossy(&body); + cb(read_from_html(&html)) + } + Err(err) => { + info!("Failed to read body: {}", err); + cb(Err(AuthDataParseError::Invalid)) + } + }); +} + +fn read_from_html(html: &str) -> AuthDataParseResult { + if html.contains("Temporarily Unavailable") { + info!("Found 'Temporarily Unavailable' in HTML, auth failed"); + return Err(AuthDataParseError::Invalid); + } + + SamlAuthData::from_html(html).or_else(|err| { + if let Some(gpcallback) = extract_gpcallback(html) { + info!("Found gpcallback from html..."); + SamlAuthData::from_gpcallback(&gpcallback) + } else { + Err(err) + } + }) +} + +fn extract_gpcallback(html: &str) -> Option { + let re = Regex::new(r#"globalprotectcallback:[^"]+"#).unwrap(); + re.captures(html) + .and_then(|captures| captures.get(0)) + .map(|m| html_escape::decode_html_entities(m.as_str()).to_string()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn extract_gpcallback_some() { + let html = r#" + + + "#; + + assert_eq!( + extract_gpcallback(html).as_deref(), + Some("globalprotectcallback:PGh0bWw+PCEtLSA8c") + ); + } + + #[test] + fn extract_gpcallback_cas() { + let html = r#" + + "#; + + assert_eq!( + extract_gpcallback(html).as_deref(), + Some("globalprotectcallback:cas-as=1&un=xyz@email.com&token=very_long_string") + ); + } + + #[test] + fn extract_gpcallback_none() { + let html = r#" + + "#; + + assert_eq!(extract_gpcallback(html), None); + } +} diff --git a/crates/auth/src/webview_auth/auth_settings.rs b/crates/auth/src/webview_auth/auth_settings.rs new file mode 100644 index 00000000..6adb90e1 --- /dev/null +++ b/crates/auth/src/webview_auth/auth_settings.rs @@ -0,0 +1,25 @@ +use std::sync::Arc; + +use super::auth_messenger::AuthMessenger; + +pub struct AuthRequest<'a>(&'a str); + +impl<'a> AuthRequest<'a> { + pub fn new(auth_request: &'a str) -> Self { + Self(auth_request) + } + + pub fn is_url(&self) -> bool { + self.0.starts_with("http") + } + + pub fn as_str(&self) -> &str { + self.0 + } +} + +pub struct AuthSettings<'a> { + pub auth_request: AuthRequest<'a>, + pub auth_messenger: Arc, + pub ignore_tls_errors: bool, +} diff --git a/crates/auth/src/webview_auth/unix.rs b/crates/auth/src/webview_auth/unix.rs new file mode 100644 index 00000000..05ce6555 --- /dev/null +++ b/crates/auth/src/webview_auth/unix.rs @@ -0,0 +1,136 @@ +use std::sync::Arc; + +use anyhow::bail; +use gpapi::utils::redact::redact_uri; +use log::{info, warn}; +use webkit2gtk::{ + gio::Cancellable, + glib::{GString, TimeSpan}, + LoadEvent, TLSErrorsPolicy, URIResponseExt, WebResource, WebResourceExt, WebView, WebViewExt, WebsiteDataManagerExt, + WebsiteDataManagerExtManual, WebsiteDataTypes, +}; + +use crate::webview_auth::{ + auth_messenger::AuthError, + auth_response::read_auth_data, + auth_settings::{AuthRequest, AuthSettings}, +}; + +use super::auth_response::AuthResponse; + +impl AuthResponse for WebResource { + fn get_header(&self, key: &str) -> Option { + self + .response() + .and_then(|response| response.http_headers()) + .and_then(|headers| headers.one(key)) + .map(GString::into) + } + + fn get_body(&self, cb: F) + where + F: FnOnce(anyhow::Result>) + 'static, + { + let cancellable = Cancellable::NONE; + self.data(cancellable, |data| cb(data.map_err(|e| anyhow::anyhow!(e)))); + } + + fn url(&self) -> Option { + self.uri().map(GString::into) + } +} + +pub fn clear_data(wv: &WebView, cb: F) +where + F: FnOnce(anyhow::Result<()>) + Send + 'static, +{ + let Some(data_manager) = wv.website_data_manager() else { + cb(Err(anyhow::anyhow!("Failed to get website data manager"))); + return; + }; + + data_manager.clear( + WebsiteDataTypes::COOKIES, + TimeSpan(0), + Cancellable::NONE, + move |result| { + cb(result.map_err(|e| anyhow::anyhow!(e))); + }, + ); +} + +pub fn setup_webview(wv: &WebView, auth_settings: AuthSettings) -> anyhow::Result<()> { + let AuthSettings { + auth_request, + auth_messenger, + ignore_tls_errors, + } = auth_settings; + let auth_messenger_clone = Arc::clone(&auth_messenger); + + let Some(data_manager) = wv.website_data_manager() else { + bail!("Failed to get website data manager"); + }; + + if ignore_tls_errors { + data_manager.set_tls_errors_policy(TLSErrorsPolicy::Ignore); + } + + wv.connect_load_changed(move |wv, event| { + if event == LoadEvent::Started { + auth_messenger_clone.cancel_raise_window(); + return; + } + + if event != LoadEvent::Finished { + return; + } + + let Some(main_resource) = wv.main_resource() else { + return; + }; + + let uri = main_resource.uri().unwrap_or("".into()); + if uri.is_empty() { + warn!("Loaded an empty URI"); + auth_messenger_clone.send_auth_error(AuthError::Invalid); + return; + } + + read_auth_data(&main_resource, &auth_messenger_clone); + }); + + wv.connect_load_failed_with_tls_errors(move |_wv, uri, cert, err| { + let redacted_uri = redact_uri(uri); + warn!( + "Failed to load uri: {} with error: {}, cert: {}", + redacted_uri, err, cert + ); + + auth_messenger.send_auth_error(AuthError::TlsError); + true + }); + + wv.connect_load_failed(move |_wv, _event, uri, err| { + let redacted_uri = redact_uri(uri); + if !uri.starts_with("globalprotectcallback:") { + warn!("Failed to load uri: {} with error: {}", redacted_uri, err); + } + // NOTE: Don't send error here, since load_changed event will be triggered after this + // true to stop other handlers from being invoked for the event. false to propagate the event further. + true + }); + + load_auth_request(wv, &auth_request); + + Ok(()) +} + +pub fn load_auth_request(wv: &WebView, auth_request: &AuthRequest) { + if auth_request.is_url() { + info!("Loading auth request as URI..."); + wv.load_uri(auth_request.as_str()); + } else { + info!("Loading auth request as HTML..."); + wv.load_html(auth_request.as_str(), None); + } +} diff --git a/crates/auth/src/webview_auth/webview_auth_ext.rs b/crates/auth/src/webview_auth/webview_auth_ext.rs new file mode 100644 index 00000000..0b7b7e5f --- /dev/null +++ b/crates/auth/src/webview_auth/webview_auth_ext.rs @@ -0,0 +1,194 @@ +use std::{ + future::Future, + sync::Arc, + time::{Duration, Instant}, +}; + +use anyhow::bail; +use gpapi::{auth::SamlAuthData, error::PortalError, utils::window::WindowExt}; +use log::{info, warn}; +use tauri::{AppHandle, WebviewUrl, WebviewWindow, WindowEvent}; +use tokio::{sync::oneshot, time}; + +use crate::{ + webview_auth::{ + auth_messenger::{AuthError, AuthEvent, AuthMessenger}, + auth_settings::{AuthRequest, AuthSettings}, + platform_impl, + }, + Authenticator, +}; + +pub trait WebviewAuthenticator { + fn with_clean(self, clean: bool) -> Self; + fn webview_authenticate(&self, app_handle: &AppHandle) -> impl Future> + Send; +} + +impl WebviewAuthenticator for Authenticator<'_> { + fn with_clean(mut self, clean: bool) -> Self { + self.clean = clean; + self + } + + async fn webview_authenticate(&self, app_handle: &AppHandle) -> anyhow::Result { + let auth_window = WebviewWindow::builder(app_handle, "auth_window", WebviewUrl::default()) + .title("GlobalProtect Login") + .focused(true) + .visible(false) + .center() + .build()?; + + self.auth_loop(&auth_window).await + } +} + +impl Authenticator<'_> { + async fn auth_loop(&self, auth_window: &WebviewWindow) -> anyhow::Result { + if self.clean { + self.clear_webview_data(&auth_window).await?; + } + + let auth_messenger = self.setup_auth_window(&auth_window).await?; + + loop { + match auth_messenger.subscribe().await? { + AuthEvent::Close => bail!("Authentication cancelled"), + AuthEvent::RaiseWindow => self.raise_window(auth_window), + AuthEvent::Error(AuthError::TlsError) => bail!(PortalError::TlsError), + AuthEvent::Error(AuthError::NotFound) => self.handle_not_found(auth_window, &auth_messenger), + AuthEvent::Error(AuthError::Invalid) => self.retry_auth(auth_window).await, + AuthEvent::Data(auth_data) => { + auth_window.close()?; + return Ok(auth_data); + } + } + } + } + + async fn clear_webview_data(&self, auth_window: &WebviewWindow) -> anyhow::Result<()> { + info!("Clearing webview data..."); + + let (tx, rx) = oneshot::channel::>(); + let now = Instant::now(); + auth_window.with_webview(|webview| { + platform_impl::clear_data(&webview.inner(), |result| { + if let Err(result) = tx.send(result) { + warn!("Failed to send clear data result: {:?}", result); + } + }) + })?; + + rx.await??; + info!("Webview data cleared in {:?}", now.elapsed()); + + Ok(()) + } + + async fn setup_auth_window(&self, auth_window: &WebviewWindow) -> anyhow::Result> { + info!("Setting up auth window..."); + + let auth_messenger = Arc::new(AuthMessenger::new()); + let auth_request = self.initial_auth_request().await?.into_owned(); + let ignore_tls_errors = self.gp_params.ignore_tls_errors(); + + // Handle window close event + let auth_messenger_clone = Arc::clone(&auth_messenger); + auth_window.on_window_event(move |event| { + if let WindowEvent::CloseRequested { .. } = event { + auth_messenger_clone.send_auth_event(AuthEvent::Close); + } + }); + + // Show the window after 10 seconds, so that the user can see the window if the auth process is stuck + let auth_messenger_clone = Arc::clone(&auth_messenger); + tokio::spawn(async move { + time::sleep(Duration::from_secs(10)).await; + auth_messenger_clone.send_auth_event(AuthEvent::RaiseWindow); + }); + + // setup webview + let auth_messenger_clone = Arc::clone(&auth_messenger); + let (tx, rx) = oneshot::channel::>(); + + auth_window.with_webview(move |webview| { + let auth_settings = AuthSettings { + auth_request: AuthRequest::new(&auth_request), + auth_messenger: auth_messenger_clone, + ignore_tls_errors, + }; + + let result = platform_impl::setup_webview(&webview.inner(), auth_settings); + if let Err(result) = tx.send(result) { + warn!("Failed to send setup auth window result: {:?}", result); + } + })?; + + rx.await??; + info!("Auth window setup completed"); + + Ok(auth_messenger) + } + + fn handle_not_found(&self, auth_window: &WebviewWindow, auth_messenger: &Arc) { + info!("No auth data found, it may not be the /SAML20/SP/ACS endpoint"); + + let visible = auth_window.is_visible().unwrap_or(false); + if visible { + return; + } + + auth_messenger.schedule_raise_window(1); + } + + async fn retry_auth(&self, auth_window: &WebviewWindow) { + let mut is_retrying = self.is_retrying.write().await; + if *is_retrying { + info!("Already retrying authentication, skipping..."); + return; + } + + *is_retrying = true; + drop(is_retrying); + + if let Err(err) = self.retry_auth_impl(auth_window).await { + warn!("Failed to retry authentication: {}", err); + } + + *self.is_retrying.write().await = false; + } + + async fn retry_auth_impl(&self, auth_window: &WebviewWindow) -> anyhow::Result<()> { + info!("Retrying authentication..."); + + auth_window.eval( r#" + var loading = document.createElement("div"); + loading.innerHTML = '
Got invalid token, retrying...
'; + loading.style = "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.85); z-index: 99999;"; + document.body.appendChild(loading); + "#)?; + + let auth_request = self.portal_prelogin().await?; + let (tx, rx) = oneshot::channel::<()>(); + auth_window.with_webview(move |webview| { + let auth_request = AuthRequest::new(&auth_request); + platform_impl::load_auth_request(&webview.inner(), &auth_request); + + tx.send(()).expect("Failed to send message to the channel") + })?; + + rx.await?; + Ok(()) + } + + fn raise_window(&self, auth_window: &WebviewWindow) { + let visible = auth_window.is_visible().unwrap_or(false); + if visible { + return; + } + + info!("Raising auth window..."); + if let Err(err) = auth_window.raise() { + warn!("Failed to raise window: {}", err); + } + } +} diff --git a/crates/gpapi/Cargo.toml b/crates/gpapi/Cargo.toml index 3bee05f3..68e3f5df 100644 --- a/crates/gpapi/Cargo.toml +++ b/crates/gpapi/Cargo.toml @@ -1,5 +1,6 @@ [package] name = "gpapi" +rust-version.workspace = true version.workspace = true edition.workspace = true license = "MIT" @@ -14,8 +15,7 @@ openssl.workspace = true pem.workspace = true roxmltree.workspace = true serde.workspace = true -specta.workspace = true -specta-macros.workspace = true +specta = { workspace = true, features = ["derive"] } urlencoding.workspace = true tokio.workspace = true serde_json.workspace = true @@ -30,14 +30,11 @@ uzers.workspace = true serde_urlencoded.workspace = true md5.workspace = true sha256.workspace = true -which.workspace = true tauri = { workspace = true, optional = true } clap = { workspace = true, optional = true } -open = { version = "5", optional = true } -webbrowser = { version = "1", optional = true } [features] tauri = ["dep:tauri"] clap = ["dep:clap"] -browser-auth = ["dep:open", "dep:webbrowser"] +webview-auth = [] diff --git a/crates/gpapi/src/auth.rs b/crates/gpapi/src/auth.rs index 86ddcd4f..dcabde37 100644 --- a/crates/gpapi/src/auth.rs +++ b/crates/gpapi/src/auth.rs @@ -1,11 +1,14 @@ use std::borrow::{Borrow, Cow}; +use anyhow::bail; use log::{info, warn}; use regex::Regex; use serde::{Deserialize, Serialize}; use crate::{error::AuthDataParseError, utils::base64::decode_to_string}; +pub type AuthDataParseResult = anyhow::Result; + #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SamlAuthData { @@ -33,33 +36,51 @@ impl SamlAuthResult { } impl SamlAuthData { - pub fn new(username: String, prelogin_cookie: Option, portal_userauthcookie: Option) -> Self { - Self { + pub fn new( + username: Option, + prelogin_cookie: Option, + portal_userauthcookie: Option, + ) -> anyhow::Result { + let username = username.unwrap_or_default(); + if username.is_empty() { + bail!("Invalid username: "); + } + + let prelogin_cookie = prelogin_cookie.unwrap_or_default(); + let portal_userauthcookie = portal_userauthcookie.unwrap_or_default(); + + if prelogin_cookie.len() <= 5 && portal_userauthcookie.len() <= 5 { + bail!( + "Invalid prelogin-cookie: {}, portal-userauthcookie: {}", + prelogin_cookie, + portal_userauthcookie + ); + } + + Ok(Self { username, - prelogin_cookie, - portal_userauthcookie, + prelogin_cookie: Some(prelogin_cookie), + portal_userauthcookie: Some(portal_userauthcookie), token: None, - } + }) } - pub fn from_html(html: &str) -> anyhow::Result { + pub fn from_html(html: &str) -> AuthDataParseResult { match parse_xml_tag(html, "saml-auth-status") { - Some(saml_status) if saml_status == "1" => { + Some(status) if status == "1" => { let username = parse_xml_tag(html, "saml-username"); let prelogin_cookie = parse_xml_tag(html, "prelogin-cookie"); let portal_userauthcookie = parse_xml_tag(html, "portal-userauthcookie"); - if SamlAuthData::check(&username, &prelogin_cookie, &portal_userauthcookie) { - Ok(SamlAuthData::new( - username.unwrap(), - prelogin_cookie, - portal_userauthcookie, - )) - } else { - Err(AuthDataParseError::Invalid) - } + SamlAuthData::new(username, prelogin_cookie, portal_userauthcookie).map_err(|e| { + warn!("Failed to parse auth data: {}", e); + AuthDataParseError::Invalid + }) + } + Some(status) => { + warn!("Found invalid auth status: {}", status); + Err(AuthDataParseError::Invalid) } - Some(_) => Err(AuthDataParseError::Invalid), None => Err(AuthDataParseError::NotFound), } } @@ -105,27 +126,6 @@ impl SamlAuthData { pub fn token(&self) -> Option<&str> { self.token.as_deref() } - - pub fn check( - username: &Option, - prelogin_cookie: &Option, - portal_userauthcookie: &Option, - ) -> bool { - let username_valid = username.as_ref().is_some_and(|username| !username.is_empty()); - let prelogin_cookie_valid = prelogin_cookie.as_ref().is_some_and(|val| val.len() > 5); - let portal_userauthcookie_valid = portal_userauthcookie.as_ref().is_some_and(|val| val.len() > 5); - - let is_valid = username_valid && (prelogin_cookie_valid || portal_userauthcookie_valid); - - if !is_valid { - warn!( - "Invalid SAML auth data: username: {:?}, prelogin-cookie: {:?}, portal-userauthcookie: {:?}", - username, prelogin_cookie, portal_userauthcookie - ); - } - - is_valid - } } pub fn parse_xml_tag(html: &str, tag: &str) -> Option { diff --git a/crates/gpapi/src/clap/mod.rs b/crates/gpapi/src/clap/mod.rs index 6e10f4ad..74bc6e36 100644 --- a/crates/gpapi/src/clap/mod.rs +++ b/crates/gpapi/src/clap/mod.rs @@ -1 +1,28 @@ +use crate::error::PortalError; + pub mod args; + +pub trait Args { + fn fix_openssl(&self) -> bool; + fn ignore_tls_errors(&self) -> bool; +} + +pub fn handle_error(err: anyhow::Error, args: &impl Args) { + eprintln!("\nError: {}", err); + + let Some(err) = err.downcast_ref::() else { + return; + }; + + if err.is_legacy_openssl_error() && !args.fix_openssl() { + eprintln!("\nRe-run it with the `--fix-openssl` option to work around this issue, e.g.:\n"); + let args = std::env::args().collect::>(); + eprintln!("{} --fix-openssl {}\n", args[0], args[1..].join(" ")); + } + + if err.is_tls_error() && !args.ignore_tls_errors() { + eprintln!("\nRe-run it with the `--ignore-tls-errors` option to ignore the certificate error, e.g.:\n"); + let args = std::env::args().collect::>(); + eprintln!("{} --ignore-tls-errors {}\n", args[0], args[1..].join(" ")); + } +} diff --git a/crates/gpapi/src/error.rs b/crates/gpapi/src/error.rs index f46be52d..6af70850 100644 --- a/crates/gpapi/src/error.rs +++ b/crates/gpapi/src/error.rs @@ -7,7 +7,19 @@ pub enum PortalError { #[error("Portal config error: {0}")] ConfigError(String), #[error("Network error: {0}")] - NetworkError(String), + NetworkError(#[from] reqwest::Error), + #[error("TLS error")] + TlsError, +} + +impl PortalError { + pub fn is_legacy_openssl_error(&self) -> bool { + format!("{:?}", self).contains("unsafe legacy renegotiation") + } + + pub fn is_tls_error(&self) -> bool { + matches!(self, PortalError::TlsError) || format!("{:?}", self).contains("certificate verify failed") + } } #[derive(Error, Debug)] @@ -17,3 +29,9 @@ pub enum AuthDataParseError { #[error("Invalid auth data")] Invalid, } + +impl AuthDataParseError { + pub fn is_invalid(&self) -> bool { + matches!(self, AuthDataParseError::Invalid) + } +} diff --git a/crates/gpapi/src/gateway/login.rs b/crates/gpapi/src/gateway/login.rs index 0188e22b..d99c0e9e 100644 --- a/crates/gpapi/src/gateway/login.rs +++ b/crates/gpapi/src/gateway/login.rs @@ -36,7 +36,7 @@ pub async fn gateway_login(gateway: &str, cred: &Credential, gp_params: &GpParam .form(¶ms) .send() .await - .map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e.to_string())))?; + .map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e)))?; let res = parse_gp_response(res).await.map_err(|err| { warn!("{err}"); diff --git a/crates/gpapi/src/lib.rs b/crates/gpapi/src/lib.rs index 63bd13ba..663eb24e 100644 --- a/crates/gpapi/src/lib.rs +++ b/crates/gpapi/src/lib.rs @@ -16,6 +16,7 @@ pub const GP_API_KEY: &[u8; 32] = &[0; 32]; pub const GP_USER_AGENT: &str = "PAN GlobalProtect"; pub const GP_SERVICE_LOCK_FILE: &str = "/var/run/gpservice.lock"; +pub const GP_CALLBACK_PORT_FILENAME: &str = "gpcallback.port"; #[cfg(not(debug_assertions))] pub const GP_CLIENT_BINARY: &str = "/usr/bin/gpclient"; diff --git a/crates/gpapi/src/portal/config.rs b/crates/gpapi/src/portal/config.rs index 3db25d6b..9be4c765 100644 --- a/crates/gpapi/src/portal/config.rs +++ b/crates/gpapi/src/portal/config.rs @@ -116,7 +116,7 @@ pub async fn retrieve_config(portal: &str, cred: &Credential, gp_params: &GpPara .form(¶ms) .send() .await - .map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e.to_string())))?; + .map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e)))?; let res_xml = parse_gp_response(res).await.or_else(|err| { if err.status == StatusCode::NOT_FOUND { diff --git a/crates/gpapi/src/portal/prelogin.rs b/crates/gpapi/src/portal/prelogin.rs index 4c10d2ab..b4076d95 100644 --- a/crates/gpapi/src/portal/prelogin.rs +++ b/crates/gpapi/src/portal/prelogin.rs @@ -116,14 +116,12 @@ pub async fn prelogin(portal: &str, gp_params: &GpParams) -> anyhow::Result { user_agent: Option<&'a str>, os: Option<&'a str>, os_version: Option<&'a str>, - hidpi: bool, fix_openssl: bool, ignore_tls_errors: bool, + #[cfg(feature = "webview-auth")] + hidpi: bool, + #[cfg(feature = "webview-auth")] clean: bool, + #[cfg(feature = "webview-auth")] default_browser: bool, browser: Option<&'a str>, } @@ -31,10 +34,13 @@ impl<'a> SamlAuthLauncher<'a> { user_agent: None, os: None, os_version: None, - hidpi: false, fix_openssl: false, ignore_tls_errors: false, + #[cfg(feature = "webview-auth")] + hidpi: false, + #[cfg(feature = "webview-auth")] clean: false, + #[cfg(feature = "webview-auth")] default_browser: false, browser: None, } @@ -65,11 +71,6 @@ impl<'a> SamlAuthLauncher<'a> { self } - pub fn hidpi(mut self, hidpi: bool) -> Self { - self.hidpi = hidpi; - self - } - pub fn fix_openssl(mut self, fix_openssl: bool) -> Self { self.fix_openssl = fix_openssl; self @@ -80,11 +81,19 @@ impl<'a> SamlAuthLauncher<'a> { self } + #[cfg(feature = "webview-auth")] + pub fn hidpi(mut self, hidpi: bool) -> Self { + self.hidpi = hidpi; + self + } + + #[cfg(feature = "webview-auth")] pub fn clean(mut self, clean: bool) -> Self { self.clean = clean; self } + #[cfg(feature = "webview-auth")] pub fn default_browser(mut self, default_browser: bool) -> Self { self.default_browser = default_browser; self @@ -120,10 +129,6 @@ impl<'a> SamlAuthLauncher<'a> { auth_cmd.arg("--os-version").arg(os_version); } - if self.hidpi { - auth_cmd.arg("--hidpi"); - } - if self.fix_openssl { auth_cmd.arg("--fix-openssl"); } @@ -132,12 +137,19 @@ impl<'a> SamlAuthLauncher<'a> { auth_cmd.arg("--ignore-tls-errors"); } - if self.clean { - auth_cmd.arg("--clean"); - } + #[cfg(feature = "webview-auth")] + { + if self.hidpi { + auth_cmd.arg("--hidpi"); + } + + if self.clean { + auth_cmd.arg("--clean"); + } - if self.default_browser { - auth_cmd.arg("--default-browser"); + if self.default_browser { + auth_cmd.arg("--default-browser"); + } } if let Some(browser) = self.browser { diff --git a/crates/gpapi/src/process/browser_authenticator.rs b/crates/gpapi/src/process/browser_authenticator.rs deleted file mode 100644 index 7657ca34..00000000 --- a/crates/gpapi/src/process/browser_authenticator.rs +++ /dev/null @@ -1,77 +0,0 @@ -use std::{borrow::Cow, env::temp_dir, fs, io::Write, os::unix::fs::PermissionsExt}; - -use anyhow::bail; -use log::{info, warn}; - -pub struct BrowserAuthenticator<'a> { - auth_request: &'a str, - browser: Option<&'a str>, -} - -impl BrowserAuthenticator<'_> { - pub fn new(auth_request: &str) -> BrowserAuthenticator { - BrowserAuthenticator { - auth_request, - browser: None, - } - } - - pub fn new_with_browser<'a>(auth_request: &'a str, browser: &'a str) -> BrowserAuthenticator<'a> { - let browser = browser.trim(); - BrowserAuthenticator { - auth_request, - browser: if browser.is_empty() || browser == "default" { - None - } else { - Some(browser) - }, - } - } - - pub fn authenticate(&self) -> anyhow::Result<()> { - let path = if self.auth_request.starts_with("http") { - Cow::Borrowed(self.auth_request) - } else { - let html_file = temp_dir().join("gpauth.html"); - - // Remove the file and error if permission denied - if let Err(err) = fs::remove_file(&html_file) { - if err.kind() != std::io::ErrorKind::NotFound { - warn!("Failed to remove the temporary file: {}", err); - bail!("Please remove the file manually: {:?}", html_file); - } - } - - let mut file = fs::File::create(&html_file)?; - - file.set_permissions(fs::Permissions::from_mode(0o600))?; - file.write_all(self.auth_request.as_bytes())?; - - Cow::Owned(html_file.to_string_lossy().to_string()) - }; - - if let Some(browser) = self.browser { - let app = find_browser_path(browser); - - info!("Launching browser: {}", app); - open::with_detached(path.as_ref(), app)?; - } else { - info!("Launching the default browser..."); - webbrowser::open(path.as_ref())?; - } - - Ok(()) - } -} - -fn find_browser_path(browser: &str) -> String { - if browser == "chrome" { - which::which("google-chrome-stable") - .or_else(|_| which::which("google-chrome")) - .or_else(|_| which::which("chromium")) - .map(|path| path.to_string_lossy().to_string()) - .unwrap_or_else(|_| browser.to_string()) - } else { - browser.into() - } -} diff --git a/crates/gpapi/src/process/mod.rs b/crates/gpapi/src/process/mod.rs index 5dbb18cd..b5beb204 100644 --- a/crates/gpapi/src/process/mod.rs +++ b/crates/gpapi/src/process/mod.rs @@ -2,8 +2,6 @@ pub(crate) mod command_traits; pub(crate) mod gui_helper_launcher; pub mod auth_launcher; -#[cfg(feature = "browser-auth")] -pub mod browser_authenticator; pub mod gui_launcher; pub mod hip_launcher; pub mod service_launcher; diff --git a/crates/gpapi/src/service/event.rs b/crates/gpapi/src/service/event.rs index f685d727..869b9809 100644 --- a/crates/gpapi/src/service/event.rs +++ b/crates/gpapi/src/service/event.rs @@ -7,6 +7,4 @@ use super::vpn_state::VpnState; pub enum WsEvent { VpnState(VpnState), ActiveGui, - /// External authentication data - AuthData(String), } diff --git a/crates/gpapi/src/utils/env_file.rs b/crates/gpapi/src/utils/env_utils.rs similarity index 63% rename from crates/gpapi/src/utils/env_file.rs rename to crates/gpapi/src/utils/env_utils.rs index 76d52c33..70524d14 100644 --- a/crates/gpapi/src/utils/env_file.rs +++ b/crates/gpapi/src/utils/env_utils.rs @@ -3,6 +3,7 @@ use std::env; use std::io::Write; use std::path::Path; +use log::info; use tempfile::NamedTempFile; pub fn persist_env_vars(extra: Option>) -> anyhow::Result { @@ -35,3 +36,20 @@ pub fn load_env_vars>(env_file: T) -> anyhow::Result anyhow::Result<()>; - fn hide_menu(&self); } -impl WindowExt for Window { +impl WindowExt for WebviewWindow { fn raise(&self) -> anyhow::Result<()> { raise_window(self) } - - fn hide_menu(&self) { - hide_menu(self); - } } -pub fn raise_window(win: &Window) -> anyhow::Result<()> { +pub fn raise_window(win: &WebviewWindow) -> anyhow::Result<()> { let is_wayland = std::env::var("XDG_SESSION_TYPE").unwrap_or_default() == "wayland"; if is_wayland { @@ -40,7 +35,7 @@ pub fn raise_window(win: &Window) -> anyhow::Result<()> { // Calling window.show() on Windows will cause the menu to be shown. // We need to hide it again. - hide_menu(win); + win.hide_menu()?; Ok(()) } @@ -76,22 +71,3 @@ async fn wmctrl_try_raise_window(title: &str) -> anyhow::Result { Ok(exit_status) } - -fn hide_menu(win: &Window) { - let menu_handle = win.menu_handle(); - - tokio::spawn(async move { - loop { - let menu_visible = menu_handle.is_visible().unwrap_or(false); - - if !menu_visible { - break; - } - - if menu_visible { - let _ = menu_handle.hide(); - tokio::time::sleep(Duration::from_millis(10)).await; - } - } - }); -} diff --git a/packaging/deb/compat b/packaging/deb/compat new file mode 100644 index 00000000..f599e28b --- /dev/null +++ b/packaging/deb/compat @@ -0,0 +1 @@ +10 diff --git a/packaging/deb/control.in b/packaging/deb/control.in index 27d046d9..a9b3ecba 100644 --- a/packaging/deb/control.in +++ b/packaging/deb/control.in @@ -7,17 +7,24 @@ Build-Depends: debhelper (>= 9), pkg-config, jq (>= 1), make (>= 4), + libssl-dev, libxml2, libsecret-1-0, libayatana-appindicator3-1, gnome-keyring, - libwebkit2gtk-4.0-dev, + libwebkit2gtk-4.1-dev, libopenconnect-dev (>= 8.20),@RUST@ Homepage: https://github.com/yuezk/GlobalProtect-openconnect Package: globalprotect-openconnect Architecture: any Multi-Arch: foreign -Depends: ${misc:Depends}, ${shlibs:Depends}, openconnect (>=8.20), libxml2, libsecret-1-0, libayatana-appindicator3-1, gnome-keyring +Depends: ${misc:Depends}, + ${shlibs:Depends}, + openconnect (>=8.20), + libxml2, + libsecret-1-0, + libayatana-appindicator3-1, + gnome-keyring, Description: A GUI for GlobalProtect VPN A GUI for GlobalProtect VPN, based on OpenConnect, supports the SSO authentication method. diff --git a/packaging/deb/rules.in b/packaging/deb/rules.in index af860750..114384b6 100755 --- a/packaging/deb/rules.in +++ b/packaging/deb/rules.in @@ -2,6 +2,11 @@ export OFFLINE = @OFFLINE@ export BUILD_FE = 0 +export BUILD_GUI = @BUILD_GUI@ + +export PATH := /usr/lib/rust-@RUST_VERSION@/bin:$(PATH) %: + which cargo + which rustc dh $@ --no-parallel diff --git a/packaging/pkgbuild/PKGBUILD.in b/packaging/pkgbuild/PKGBUILD.in index a238afb3..ee762979 100644 --- a/packaging/pkgbuild/PKGBUILD.in +++ b/packaging/pkgbuild/PKGBUILD.in @@ -8,8 +8,8 @@ pkgdesc="A GUI for GlobalProtect VPN, based on OpenConnect, supports the SSO aut arch=('x86_64' 'aarch64') url="https://github.com/yuezk/GlobalProtect-openconnect" license=('GPL3') -makedepends=('make' 'pkg-config' 'rust' 'cargo' 'jq' 'webkit2gtk' 'curl' 'wget' 'file' 'openssl' 'appmenu-gtk-module' 'gtk3' 'libappindicator-gtk3' 'librsvg' 'libvips' 'libayatana-appindicator' 'openconnect' 'libsecret') -depends=('openconnect>=8.20' webkit2gtk libappindicator-gtk3 libayatana-appindicator libsecret libxml2) +makedepends=('make' 'pkg-config' 'rust' 'cargo' 'jq' 'webkit2gtk-4.1' 'curl' 'wget' 'file' 'openssl' 'appmenu-gtk-module' 'libappindicator-gtk3' 'librsvg' 'openconnect' 'libsecret') +depends=('openconnect>=8.20' webkit2gtk-4.1 libappindicator-gtk3 libsecret libxml2) optdepends=('wmctrl: for window management') provides=('globalprotect-openconnect' 'gpclient' 'gpservice' 'gpauth' 'gpgui') diff --git a/packaging/rpm/globalprotect-openconnect.spec.in b/packaging/rpm/globalprotect-openconnect.spec.in index 61f3023a..978796a2 100644 --- a/packaging/rpm/globalprotect-openconnect.spec.in +++ b/packaging/rpm/globalprotect-openconnect.spec.in @@ -19,11 +19,11 @@ BuildRequires: wget BuildRequires: file BuildRequires: perl -BuildRequires: (webkit2gtk4.0-devel or webkit2gtk3-soup2-devel) +BuildRequires: (webkit2gtk4.1-devel or webkit2gtk3-soup2-devel) BuildRequires: (libappindicator-gtk3-devel or libappindicator3-1) BuildRequires: (librsvg2-devel or librsvg-devel) -Requires: openconnect >= 8.20, (libayatana-appindicator or libappindicator-gtk3) +Requires: openconnect >= 8.20, (libappindicator-gtk3 or libayatana-appindicator) Conflicts: globalprotect-openconnect-snapshot %global debug_package %{nil}