From 4a1ab087c8ea627d9240fd8cddb71d6ddecbc391 Mon Sep 17 00:00:00 2001 From: emil28092005 Date: Sun, 6 Sep 2026 00:14:29 +0300 Subject: [PATCH] feat: bootstrap ShaCraft cross-platform launcher --- .github/workflows/build.yml | 36 + .gitignore | 11 + README.md | 34 + index.html | 13 + package-lock.json | 1334 ++++++++ package.json | 27 + src-tauri/Cargo.lock | 4511 +++++++++++++++++++++++++++ src-tauri/Cargo.toml | 18 + src-tauri/build.rs | 3 + src-tauri/capabilities/default.json | 7 + src-tauri/src/lib.rs | 33 + src-tauri/src/main.rs | 5 + src-tauri/tauri.conf.json | 33 + src/assets/shacraft-logo.png | Bin 0 -> 80219 bytes src/main.tsx | 248 ++ src/styles.css | 155 + 16 files changed, 6468 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src-tauri/Cargo.lock create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/src/lib.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src/assets/shacraft-logo.png create mode 100644 src/main.tsx create mode 100644 src/styles.css diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..5eb8325 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,36 @@ +name: Cross-platform build + +on: + workflow_dispatch: + +jobs: + build: + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Linux x64 + os: ubuntu-22.04 + args: --bundles appimage,deb + - name: Windows x64 + os: windows-latest + args: --bundles nsis,msi + - name: macOS Apple Silicon + os: macos-14 + args: --target aarch64-apple-darwin --bundles dmg + - name: macOS Intel + os: macos-13 + args: --target x86_64-apple-darwin --bundles dmg + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + - uses: dtolnay/rust-toolchain@stable + - run: npm ci + - run: npm run tauri:build -- ${{ matrix.args }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..01638dc --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +node_modules/ +dist/ +src-tauri/target/ +.env +.env.* +!.env.example +*.pem +*.key +*.p12 +*.pfx +*.sig diff --git a/README.md b/README.md new file mode 100644 index 0000000..ca47608 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# ShaCraft Launcher + +Кроссплатформенный лаунчер для сети Minecraft-серверов ShaCraft. + +Сейчас реализовано: + +- интерактивный интерфейс профилей и настроек; +- Tauri 2 native shell с безопасной командой `native_host`; +- адаптивное окно для Windows, Linux и macOS; +- базовая структура, в которую будут добавлены манифесты, проверка файлов, + Java 21 и запуск Minecraft. + +## Локальная разработка + +```bash +npm install +npm run dev +``` + +Для нативного приложения нужен Rust: + +```bash +npm run tauri:dev +``` + +На Ubuntu для сборки Tauri также потребуются системные пакеты WebKit/GTK и +DBus development headers. Их установка описана в официальной документации +Tauri и требует прав администратора. + +## Статус + +Лаунчер пока не загружает игровые файлы и не запускает Minecraft. Следующий +этап — спроектировать новый подписываемый манифест ShaCraft v2 и добавить +Rust-менеджер профилей. diff --git a/index.html b/index.html new file mode 100644 index 0000000..ff7f0d9 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + ShaCraft Launcher + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f0eac88 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1334 @@ +{ + "name": "shacraft-launcher-ui", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "shacraft-launcher-ui", + "version": "0.1.0", + "dependencies": { + "@tauri-apps/api": "^2.11.1", + "@vitejs/plugin-react": "latest", + "lucide-react": "latest", + "react": "latest", + "react-dom": "latest", + "typescript": "latest", + "vite": "latest" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.11.4" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.148.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", + "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", + "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", + "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", + "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", + "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", + "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", + "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", + "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", + "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", + "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", + "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", + "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", + "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", + "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", + "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", + "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==" + }, + "node_modules/@tauri-apps/api": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.11.1.tgz", + "integrity": "sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.11.4.tgz", + "integrity": "sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ==", + "dev": true, + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.11.4", + "@tauri-apps/cli-darwin-x64": "2.11.4", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.11.4", + "@tauri-apps/cli-linux-arm64-gnu": "2.11.4", + "@tauri-apps/cli-linux-arm64-musl": "2.11.4", + "@tauri-apps/cli-linux-riscv64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-musl": "2.11.4", + "@tauri-apps/cli-win32-arm64-msvc": "2.11.4", + "@tauri-apps/cli-win32-ia32-msvc": "2.11.4", + "@tauri-apps/cli-win32-x64-msvc": "2.11.4" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.11.4.tgz", + "integrity": "sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.11.4.tgz", + "integrity": "sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.11.4.tgz", + "integrity": "sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.11.4.tgz", + "integrity": "sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.11.4.tgz", + "integrity": "sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.11.4.tgz", + "integrity": "sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.11.4.tgz", + "integrity": "sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.11.4.tgz", + "integrity": "sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.11.4.tgz", + "integrity": "sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.11.4.tgz", + "integrity": "sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.11.4.tgz", + "integrity": "sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.1.tgz", + "integrity": "sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.145.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lucide-react": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.41.0.tgz", + "integrity": "sha512-6lksP35l6KszDKUeRTi4LV7i6DEe0Yzl2ALJm9j4c5xEYN91GdW1xGsawGMOg2mgjF5GHBVX8pKX9kP+cWsP3Q==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/rolldown": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", + "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "dependencies": { + "@oxc-project/types": "=0.148.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.7", + "@rolldown/binding-android-arm64": "1.2.7", + "@rolldown/binding-darwin-arm64": "1.2.7", + "@rolldown/binding-darwin-x64": "1.2.7", + "@rolldown/binding-freebsd-x64": "1.2.7", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", + "@rolldown/binding-linux-arm64-gnu": "1.2.7", + "@rolldown/binding-linux-arm64-musl": "1.2.7", + "@rolldown/binding-linux-ppc64-gnu": "1.2.7", + "@rolldown/binding-linux-s390x-gnu": "1.2.7", + "@rolldown/binding-linux-x64-gnu": "1.2.7", + "@rolldown/binding-linux-x64-musl": "1.2.7", + "@rolldown/binding-openharmony-arm64": "1.2.7", + "@rolldown/binding-win32-arm64-msvc": "1.2.7", + "@rolldown/binding-win32-x64-msvc": "1.2.7" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/vite": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a6c02a2 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "shacraft-launcher-ui", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "tauri": "tauri", + "tauri:dev": "tauri dev", + "tauri:build": "tauri build" + }, + "dependencies": { + "@tauri-apps/api": "^2.11.1", + "@vitejs/plugin-react": "latest", + "@tauri-apps/cli": "^2.9.4", + "lucide-react": "latest", + "react": "latest", + "react-dom": "latest", + "typescript": "latest", + "vite": "latest" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.11.4" + } +} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock new file mode 100644 index 0000000..6569f97 --- /dev/null +++ b/src-tauri/Cargo.lock @@ -0,0 +1,4511 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.13.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" +dependencies = [ + "serde_core", +] + +[[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.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.20", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.5+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", + "zlib-rs", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[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", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-executor" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.13.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[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.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jiff" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link 0.2.1", +] + +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + +[[package]] +name = "jiff-static" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +dependencies = [ + "jiff-core", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "js-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "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.13.1", + "serde", + "unicode-segmentation", +] + +[[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 = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d8f1ea3f21fd3405dcaf6c9b5c1630af9afc422d9073ea39c5f6d6c772e08ed" +dependencies = [ + "libc", +] + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "plist" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.2", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.13.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "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 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.13+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.20", +] + +[[package]] +name = "ref-cast" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[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.119", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.2", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shacraft-launcher" +version = "0.1.0" +dependencies = [ + "serde", + "tauri", + "tauri-build", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45c444e496845d3f2a351146bff59aae4975b2280238df1dfaa0c7d1846f38e" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.13.1", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "667b20e2726d572dea2de7370da16e188eb06008faf9a92fab7cdc46791190b5" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.20", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.20", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.20", + "toml 1.1.5+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.5+spec-1.1.0", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.2", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12c0ba9680044b4ce98d391a62094047eada0d64860b80166c39f4a6b5640785" +dependencies = [ + "indexmap 2.14.2", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.2", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.2", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap 2.14.2", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.1", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045979e3f037cd18ad1cb2a419dfda133c5c29c9f3453370079f2255d46c257e" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +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 = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[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 = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.5", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.20", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[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]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "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-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..eaf56fc --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "shacraft-launcher" +version = "0.1.0" +description = "ShaCraft Minecraft launcher" +authors = ["ShaCraft"] +edition = "2021" + +[lib] +name = "shacraft_launcher_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +serde = { version = "1", features = ["derive"] } +tauri = { version = "2", features = [] } + diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..0e15dea --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "main-window", + "description": "Minimal permissions for the ShaCraft main window.", + "windows": ["main"], + "permissions": ["core:default"] +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs new file mode 100644 index 0000000..95109c0 --- /dev/null +++ b/src-tauri/src/lib.rs @@ -0,0 +1,33 @@ +use serde::Serialize; +use tauri::{AppHandle, Manager}; + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +struct NativeHost { + platform: &'static str, + data_dir: String, + launcher_version: &'static str, +} + +/// Returns non-sensitive environment information needed by the interface. +/// File access and child-process launching are deliberately not exposed yet. +#[tauri::command] +fn native_host(app: AppHandle) -> Result { + let data_dir = app + .path() + .app_data_dir() + .map_err(|error| format!("Cannot resolve launcher data directory: {error}"))?; + + Ok(NativeHost { + platform: std::env::consts::OS, + data_dir: data_dir.display().to_string(), + launcher_version: env!("CARGO_PKG_VERSION"), + }) +} + +pub fn run() { + tauri::Builder::default() + .invoke_handler(tauri::generate_handler![native_host]) + .run(tauri::generate_context!()) + .expect("error while running ShaCraft Launcher"); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..311b109 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + shacraft_launcher_lib::run() +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..8143097 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "ShaCraft Launcher", + "version": "0.1.0", + "identifier": "ru.shacraft.launcher", + "build": { + "beforeDevCommand": "npm run dev", + "beforeBuildCommand": "npm run build", + "devUrl": "http://localhost:5173", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "title": "ShaCraft Launcher", + "width": 1280, + "height": 820, + "minWidth": 1040, + "minHeight": 680, + "decorations": false, + "transparent": false, + "resizable": true + } + ], + "security": { + "csp": "default-src 'self'; img-src 'self' asset: http://asset.localhost data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com" + } + }, + "bundle": { + "active": true, + "targets": "all" + } +} diff --git a/src/assets/shacraft-logo.png b/src/assets/shacraft-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cd308cf638a4add6ff49547dd27a0f5ae586c3 GIT binary patch literal 80219 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 bLlVwPi_0v)gY8jWIDn#@s%*K8*_ZzVV(null) + const [ready, setReady] = useState(true) + const [settingsOpen, setSettingsOpen] = useState(false) + const [ram, setRam] = useState(6) + const [nativeHost, setNativeHost] = useState(null) + + useEffect(() => { + if (progress === null) return + if (progress >= 100) { + const done = window.setTimeout(() => { + setProgress(null) + setReady(true) + }, 650) + return () => window.clearTimeout(done) + } + const timer = window.setTimeout(() => setProgress(Math.min(100, progress + 2)), 55) + return () => window.clearTimeout(timer) + }, [progress]) + + useEffect(() => { + if (!('__TAURI_INTERNALS__' in window)) return + invoke('native_host').then(setNativeHost).catch(() => setNativeHost(null)) + }, []) + + const repair = () => { + if (selected.disabled) return + setReady(false) + setProgress(0) + } + + return ( +
+
+
+ + ShaCraft +
+
{nativeHost ? `Лаунчер · ${nativeHost.platform}` : 'Лаунчер'}
+
+ + + +
+
+ +
+ + + + +
+
+
+ {selected.disabled ? 'Не в сети' : 'Сервер работает'} +
+
{selected.players}
+
+ +
+

{selected.id === 'aoc' ? 'All of Create / сборка 2.5' : selected.kicker}

+

{selected.name}

+

{selected.subtitle}

+
+
Состав
{selected.id === 'aoc' ? '250 модов' : '41 мод'}
+
Загрузчик
{selected.id === 'aoc' ? 'NeoForge 21.1.248' : 'NeoForge 21.1.249'}
+
Java
Версия 21
+
+
+ +
+
+ {progress !== null ? ( + <> + + + Проверяем сборку + Файлы и обновления · {progress}% + + + ) : selected.disabled ? ( + <> + + ТехобслуживаниеСообщим, когда сервер вернётся + + ) : ( + <> + + {ready ? 'Сборка готова' : 'Требуется проверка'}Обновлено сегодня в 21:42 + + )} + {progress !== null &&
} +
+ +
+ {selected.version} + {ram} ГБ памяти +
+ + + +
+
+
+ +
setSettingsOpen(false)} /> + +
+ ) +} + +createRoot(document.getElementById('root')!).render( + , +) diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..632f010 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,155 @@ +@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Unbounded:wght@500;600&display=swap'); + +:root { + font-family: 'Manrope', sans-serif; + color: #eef2ed; + background: #090c0a; + font-synthesis: none; + --ink: #090c0a; + --panel: #111612; + --panel-2: #171d18; + --line: rgba(229, 240, 228, 0.1); + --muted: #879087; + --green: #77d17a; + --green-dark: #275d31; + --copper: #e58a47; + --ice: #87cbd3; +} + +* { box-sizing: border-box; } +button, input { font: inherit; } +button { color: inherit; } +body { margin: 0; min-width: 1040px; min-height: 680px; overflow: hidden; } +button:focus-visible, input:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; } + +.app-shell { + height: 100vh; + min-height: 680px; + background: var(--ink); + overflow: hidden; + position: relative; +} + +.titlebar { + height: 48px; + display: flex; + align-items: center; + border-bottom: 1px solid var(--line); + background: #0c100d; + user-select: none; +} +.brand { width: 262px; display: flex; align-items: center; gap: 9px; padding-left: 16px; font-weight: 800; letter-spacing: -0.02em; } +.brand img { width: 25px; height: 25px; image-rendering: auto; } +.brand span::first-letter { color: white; } +.titlebar-drag { flex: 1; text-align: center; color: #626b63; font-size: 12px; } +.window-actions { display: flex; height: 100%; } +.window-actions button { width: 46px; border: 0; background: transparent; display: grid; place-items: center; color: #7e8780; } +.window-actions button:hover { background: #1a201b; color: white; } +.window-actions .close:hover { background: #a93939; } + +.workspace { height: calc(100vh - 48px); display: grid; grid-template-columns: 64px 250px 1fr; } +.rail { background: #0c100d; border-right: 1px solid var(--line); padding: 18px 10px 14px; display: flex; flex-direction: column; justify-content: space-between; } +.rail-main { display: grid; gap: 8px; } +.rail-button { border: 0; width: 44px; height: 44px; border-radius: 5px; display: grid; place-items: center; background: transparent; color: #69716a; cursor: pointer; } +.rail-button svg { width: 20px; } +.rail-button:hover { color: #cfd6cf; background: #171c18; } +.rail-button.active { color: var(--green); background: #16251a; box-shadow: inset 2px 0 0 var(--green); } + +.library-panel { background: var(--panel); border-right: 1px solid var(--line); display: flex; flex-direction: column; padding: 26px 14px 14px; } +.library-heading { padding: 0 10px 19px; display: flex; align-items: baseline; justify-content: space-between; } +.library-heading p { margin: 0; font-weight: 750; font-size: 16px; } +.library-heading span { color: #687069; font-size: 11px; } +.server-list { display: grid; gap: 5px; } +.server-row { width: 100%; border: 0; border-left: 2px solid transparent; background: transparent; padding: 10px 10px 10px 12px; border-radius: 3px; display: grid; grid-template-columns: 42px 1fr 16px; gap: 10px; align-items: center; text-align: left; cursor: pointer; } +.server-row > svg { color: #555e56; } +.server-row:hover { background: #171c18; } +.server-row.selected { background: linear-gradient(90deg, rgba(229,138,71,.1), rgba(229,138,71,.025)); border-left-color: var(--copper); } +.server-row.selected > svg { color: var(--copper); } +.server-glyph { width: 42px; height: 42px; border-radius: 4px; display: grid; place-items: center; font-family: 'Unbounded'; font-size: 15px; color: #fff0e5; background: #9b5c31; box-shadow: inset 0 0 0 1px rgba(255,255,255,.1); } +.server-glyph.create { color: #dae8dc; background: linear-gradient(145deg, #293b2c, #58755b); filter: saturate(.65); } +.server-copy { min-width: 0; display: grid; } +.server-copy strong { font-size: 13px; font-weight: 700; } +.server-copy small { font-size: 10px; color: var(--green); margin-top: 2px; } +.server-row:not(.selected) .server-copy small { color: #707871; } +.account-chip { margin-top: auto; padding: 10px; border-top: 1px solid var(--line); display: grid; grid-template-columns: 34px 1fr 16px; gap: 9px; align-items: center; } +.account-chip .avatar { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: #243127; color: #bfe1c1; font-size: 11px; font-weight: 800; } +.account-chip > span:nth-child(2) { display: grid; } +.account-chip strong { font-size: 12px; } +.account-chip small { color: #6d756e; font-size: 9px; } +.account-chip svg { color: #555e56; } + +.stage { position: relative; overflow: hidden; isolation: isolate; background: #16231b; } +.stage::before { content: ''; position: absolute; inset: 0; z-index: -5; background: + radial-gradient(ellipse 64% 78% at 86% 38%, rgba(237, 126, 50, .34), transparent 69%), + radial-gradient(ellipse 58% 72% at 55% 34%, rgba(90, 163, 104, .2), transparent 72%), + linear-gradient(112deg, #0b130e 0%, #11291d 39%, #28301f 66%, #512713 100%); +} +.stage::after { content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none; background: linear-gradient(180deg, transparent 45%, rgba(5,8,6,.9) 100%); } +.stage-create::before { filter: grayscale(.55); background: linear-gradient(110deg, #152019, #27372b 55%, #151a16); } +.stage-top { display: flex; justify-content: flex-end; align-items: center; gap: 12px; padding: 22px 26px; } +.live-pill, .players { height: 28px; padding: 0 0 0 12px; border: 0; border-left: 1px solid rgba(255,255,255,.16); border-radius: 0; background: transparent; display: flex; align-items: center; gap: 7px; font-size: 11px; color: #c0c8c0; } +.live-pill span { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 4px rgba(119,209,122,.1), 0 0 12px rgba(119,209,122,.55); } +.live-pill.offline span { background: #7d8580; box-shadow: none; } +.players { color: #9ea69f; } +.hero-copy { position: absolute; left: 7%; top: 43%; transform: translateY(-50%); max-width: 680px; } +.hero-copy p { margin: 0 0 15px; color: var(--copper); font-size: 11px; font-weight: 700; display: flex; align-items: center; gap: 10px; } +.hero-copy p::before { content: ''; width: 26px; height: 2px; background: var(--copper); } +.hero-copy h1 { font-family: 'Unbounded', sans-serif; font-size: clamp(40px, 5vw, 66px); line-height: 1; letter-spacing: -.045em; margin: 0; text-shadow: 0 8px 36px rgba(0,0,0,.3); } +.hero-copy h2 { max-width: 440px; font-size: 15px; line-height: 1.5; font-weight: 500; color: #aeb7af; margin: 16px 0 0; } +.stage-create .hero-copy p { color: #9aa49c; } +.hero-meta { display: flex; gap: 0; margin: 36px 0 0; padding: 0; } +.hero-meta div { min-width: 130px; padding: 0 26px; border-left: 1px solid rgba(235,243,234,.14); } +.hero-meta div:first-child { padding-left: 0; border-left: 0; } +.hero-meta dt { color: #6e786f; font-size: 9px; margin-bottom: 5px; } +.hero-meta dd { color: #d9ded9; font-size: 11px; font-weight: 650; margin: 0; } + +.play-dock { position: absolute; left: 24px; right: 24px; bottom: 24px; min-height: 82px; border: 1px solid rgba(231,241,230,.13); border-top: 2px solid rgba(229,138,71,.48); background: rgba(12,17,13,.92); backdrop-filter: blur(22px); border-radius: 6px; padding: 13px 14px 13px 16px; display: grid; grid-template-columns: minmax(245px,1fr) auto 44px 184px; gap: 14px; align-items: center; box-shadow: 0 18px 55px rgba(0,0,0,.38); } +.build-state { min-width: 0; display: grid; grid-template-columns: 42px 1fr; align-items: center; gap: 11px; position: relative; } +.state-icon { grid-row: span 2; width: 42px; height: 42px; display: grid; place-items: center; border-radius: 4px; background: #17311d; color: var(--green); } +.state-icon.downloading { color: var(--ice); background: #172b2d; } +.state-icon.muted { color: #8c948e; background: #252b26; } +.build-state > span:nth-child(2) { display: grid; } +.build-state strong { font-size: 12px; } +.build-state small { color: #737c74; font-size: 10px; margin-top: 3px; } +.progress-track { position: absolute; left: 53px; right: 0; height: 2px; bottom: -5px; background: #283029; border-radius: 2px; overflow: hidden; } +.progress-track i { display: block; height: 100%; background: var(--ice); transition: width .08s linear; } +.build-facts { display: flex; gap: 17px; padding: 0 4px; } +.build-facts span { color: #8c958d; display: flex; align-items: center; gap: 6px; font-size: 10px; white-space: nowrap; } +.repair-button, .play-button { border: 0; cursor: pointer; height: 50px; border-radius: 4px; } +.repair-button { width: 44px; display: grid; place-items: center; background: #252c26; color: #9ca59d; } +.repair-button:hover { color: white; background: #303831; } +.play-button { background: var(--green); color: #0b160d; display: flex; justify-content: center; align-items: center; gap: 10px; font-weight: 800; box-shadow: none; } +.play-button:hover { background: #8bdd8e; transform: translateY(-1px); } +.play-button:active { transform: translateY(0); } +.repair-button:disabled, .play-button:disabled { opacity: .45; cursor: default; transform: none; } + +.drawer-backdrop { position: fixed; inset: 48px 0 0; background: rgba(0,0,0,.44); opacity: 0; pointer-events: none; transition: opacity .2s; z-index: 20; } +.drawer-backdrop.visible { opacity: 1; pointer-events: auto; } +.settings-drawer { position: fixed; top: 48px; right: 0; bottom: 0; width: 390px; background: #121713; border-left: 1px solid var(--line); z-index: 21; padding: 28px; transform: translateX(100%); transition: transform .24s cubic-bezier(.2,.8,.2,1); box-shadow: -30px 0 70px rgba(0,0,0,.35); } +.settings-drawer.open { transform: translateX(0); } +.drawer-title { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 34px; } +.drawer-title p { color: #737c74; font-size: 11px; margin: 0 0 5px; } +.drawer-title h2 { margin: 0; font-family: 'Unbounded'; font-size: 25px; } +.drawer-title button { border: 0; background: #222923; width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center; cursor: pointer; } +.drawer-title button svg { width: 18px; } +.range-setting { display: grid; background: #191f1a; padding: 18px; border-radius: 13px; margin-bottom: 12px; } +.range-setting > span { display: flex; justify-content: space-between; align-items: center; font-size: 13px; } +.range-setting b { color: var(--green); } +.range-setting input { accent-color: var(--green); margin: 18px 0 8px; } +.range-setting small { color: #707971; font-size: 10px; } +.setting-row { width: 100%; height: 55px; border: 0; border-bottom: 1px solid var(--line); background: transparent; display: flex; align-items: center; justify-content: space-between; cursor: pointer; color: #abb3ac; } +.setting-row span { display: flex; align-items: center; gap: 11px; font-size: 12px; } +.setting-row svg { width: 17px; color: #677068; } +.setting-row:hover { color: white; } +.drawer-note { position: absolute; left: 28px; right: 28px; bottom: 26px; padding: 13px 15px; background: #17231a; color: #8fb193; border-radius: 10px; font-size: 10px; } + +@media (max-width: 1160px) { + .workspace { grid-template-columns: 58px 224px 1fr; } + .brand { width: 240px; } + .build-facts span:first-child { display: none; } + .play-dock { grid-template-columns: minmax(220px,1fr) auto 44px 160px; } +} + +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; } +}