From dfb04462f3630c60ad7fba2d49bb9e7812d7e05e Mon Sep 17 00:00:00 2001 From: Elijah Date: Sun, 19 Jul 2026 18:37:14 -0700 Subject: [PATCH] Initial commit of version 0.2.0 --- .forgejo/workflows/release.yml | 43 + .gitignore | 5 + Implementation Plan.md | 8 + README.md | 80 +- app/UPDATES.md | 82 + app/index.html | 13 + app/package-lock.json | 2736 +++++++++ app/package.json | 31 + app/src-tauri/Cargo.lock | 5348 +++++++++++++++++ app/src-tauri/Cargo.toml | 22 + app/src-tauri/build.rs | 3 + app/src-tauri/capabilities/default.json | 23 + app/src-tauri/gen/schemas/acl-manifests.json | 1 + app/src-tauri/gen/schemas/capabilities.json | 1 + app/src-tauri/gen/schemas/desktop-schema.json | 2580 ++++++++ app/src-tauri/gen/schemas/windows-schema.json | 2580 ++++++++ app/src-tauri/icons/128x128.png | Bin 0 -> 4942 bytes app/src-tauri/icons/128x128@2x.png | Bin 0 -> 9754 bytes app/src-tauri/icons/32x32.png | Bin 0 -> 1140 bytes app/src-tauri/icons/64x64.png | Bin 0 -> 2286 bytes app/src-tauri/icons/Square107x107Logo.png | Bin 0 -> 3982 bytes app/src-tauri/icons/Square142x142Logo.png | Bin 0 -> 5366 bytes app/src-tauri/icons/Square150x150Logo.png | Bin 0 -> 5555 bytes app/src-tauri/icons/Square284x284Logo.png | Bin 0 -> 10920 bytes app/src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1034 bytes app/src-tauri/icons/Square310x310Logo.png | Bin 0 -> 11576 bytes app/src-tauri/icons/Square44x44Logo.png | Bin 0 -> 1433 bytes app/src-tauri/icons/Square71x71Logo.png | Bin 0 -> 2591 bytes app/src-tauri/icons/Square89x89Logo.png | Bin 0 -> 3230 bytes app/src-tauri/icons/StoreLogo.png | Bin 0 -> 1681 bytes .../android/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../icons/android/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2441 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 5962 bytes .../android/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 2190 bytes .../icons/android/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2343 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 3946 bytes .../android/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2280 bytes .../android/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5373 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 8222 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4885 bytes .../android/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8327 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 12087 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7940 bytes .../android/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11815 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 15896 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10612 bytes .../android/values/ic_launcher_background.xml | 4 + app/src-tauri/icons/icon.icns | Bin 0 -> 117687 bytes app/src-tauri/icons/icon.ico | Bin 0 -> 18767 bytes app/src-tauri/icons/icon.png | Bin 0 -> 19398 bytes app/src-tauri/icons/icon.svg | 13 + app/src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin 0 -> 740 bytes .../icons/ios/AppIcon-20x20@2x-1.png | Bin 0 -> 1325 bytes app/src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin 0 -> 1325 bytes app/src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin 0 -> 2199 bytes app/src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin 0 -> 926 bytes .../icons/ios/AppIcon-29x29@2x-1.png | Bin 0 -> 1935 bytes app/src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin 0 -> 1935 bytes app/src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin 0 -> 3068 bytes app/src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin 0 -> 1325 bytes .../icons/ios/AppIcon-40x40@2x-1.png | Bin 0 -> 2787 bytes app/src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin 0 -> 2787 bytes app/src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin 0 -> 4267 bytes app/src-tauri/icons/ios/AppIcon-512@2x.png | Bin 0 -> 46995 bytes app/src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin 0 -> 4267 bytes app/src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin 0 -> 6681 bytes app/src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin 0 -> 2652 bytes app/src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin 0 -> 5661 bytes .../icons/ios/AppIcon-83.5x83.5@2x.png | Bin 0 -> 6274 bytes app/src-tauri/src/lib.rs | 45 + app/src-tauri/src/main.rs | 5 + app/src-tauri/tauri.conf.json | 59 + app/src/App.svelte | 762 +++ app/src/app.css | 234 + app/src/lib/color.ts | 17 + app/src/lib/credentials.ts | 16 + app/src/lib/deck-api.test.ts | 99 + app/src/lib/deck-api.ts | 212 + app/src/lib/reorder.test.ts | 57 + app/src/lib/reorder.ts | 44 + app/src/lib/settings.ts | 31 + app/src/lib/types.ts | 63 + app/src/main.ts | 5 + app/src/vite-env.d.ts | 1 + app/svelte.config.js | 5 + app/tsconfig.json | 14 + app/vite.config.ts | 14 + installer/Decky.appinstaller.template | 16 - installer/README.md | 17 +- releases/latest.json | 11 + scripts/Prepare-Release.ps1 | 94 + scripts/Publish-ForgejoRelease.ps1 | 78 + scripts/Set-Version.ps1 | 31 + src/Decky.ApiSpike/Program.cs | 38 +- src/Decky.App/App.xaml.cs | 29 +- src/Decky.App/Decky.App.csproj | 2 + src/Decky.App/MainWindow.xaml | 23 +- src/Decky.App/MainWindow.xaml.cs | 61 + src/Decky.App/ViewModels/CardEditorResult.cs | 9 + src/Decky.App/ViewModels/MainViewModel.cs | 138 +- src/Decky.App/Views/CardEditorDialog.cs | 179 + src/Decky.Core/Api/DeckApiClient.cs | 48 +- src/Decky.Core/Api/Models/DeckDtos.cs | 7 +- src/Decky.Core/Api/Requests/CardRequests.cs | 4 +- .../Serialization/CardOwnerJsonConverter.cs | 55 + .../CardDtoSerializationTests.cs | 39 + .../CardUpdateRequestTests.cs | 25 +- tests/Decky.Core.Tests/DeckApiClientTests.cs | 82 + 108 files changed, 16167 insertions(+), 80 deletions(-) create mode 100644 .forgejo/workflows/release.yml create mode 100644 app/UPDATES.md create mode 100644 app/index.html create mode 100644 app/package-lock.json create mode 100644 app/package.json create mode 100644 app/src-tauri/Cargo.lock create mode 100644 app/src-tauri/Cargo.toml create mode 100644 app/src-tauri/build.rs create mode 100644 app/src-tauri/capabilities/default.json create mode 100644 app/src-tauri/gen/schemas/acl-manifests.json create mode 100644 app/src-tauri/gen/schemas/capabilities.json create mode 100644 app/src-tauri/gen/schemas/desktop-schema.json create mode 100644 app/src-tauri/gen/schemas/windows-schema.json create mode 100644 app/src-tauri/icons/128x128.png create mode 100644 app/src-tauri/icons/128x128@2x.png create mode 100644 app/src-tauri/icons/32x32.png create mode 100644 app/src-tauri/icons/64x64.png create mode 100644 app/src-tauri/icons/Square107x107Logo.png create mode 100644 app/src-tauri/icons/Square142x142Logo.png create mode 100644 app/src-tauri/icons/Square150x150Logo.png create mode 100644 app/src-tauri/icons/Square284x284Logo.png create mode 100644 app/src-tauri/icons/Square30x30Logo.png create mode 100644 app/src-tauri/icons/Square310x310Logo.png create mode 100644 app/src-tauri/icons/Square44x44Logo.png create mode 100644 app/src-tauri/icons/Square71x71Logo.png create mode 100644 app/src-tauri/icons/Square89x89Logo.png create mode 100644 app/src-tauri/icons/StoreLogo.png create mode 100644 app/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png create mode 100644 app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png create mode 100644 app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src-tauri/icons/android/values/ic_launcher_background.xml create mode 100644 app/src-tauri/icons/icon.icns create mode 100644 app/src-tauri/icons/icon.ico create mode 100644 app/src-tauri/icons/icon.png create mode 100644 app/src-tauri/icons/icon.svg create mode 100644 app/src-tauri/icons/ios/AppIcon-20x20@1x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png create mode 100644 app/src-tauri/icons/ios/AppIcon-20x20@2x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-20x20@3x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-29x29@1x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png create mode 100644 app/src-tauri/icons/ios/AppIcon-29x29@2x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-29x29@3x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-40x40@1x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png create mode 100644 app/src-tauri/icons/ios/AppIcon-40x40@2x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-40x40@3x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-512@2x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-60x60@2x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-60x60@3x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-76x76@1x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-76x76@2x.png create mode 100644 app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png create mode 100644 app/src-tauri/src/lib.rs create mode 100644 app/src-tauri/src/main.rs create mode 100644 app/src-tauri/tauri.conf.json create mode 100644 app/src/App.svelte create mode 100644 app/src/app.css create mode 100644 app/src/lib/color.ts create mode 100644 app/src/lib/credentials.ts create mode 100644 app/src/lib/deck-api.test.ts create mode 100644 app/src/lib/deck-api.ts create mode 100644 app/src/lib/reorder.test.ts create mode 100644 app/src/lib/reorder.ts create mode 100644 app/src/lib/settings.ts create mode 100644 app/src/lib/types.ts create mode 100644 app/src/main.ts create mode 100644 app/src/vite-env.d.ts create mode 100644 app/svelte.config.js create mode 100644 app/tsconfig.json create mode 100644 app/vite.config.ts delete mode 100644 installer/Decky.appinstaller.template create mode 100644 releases/latest.json create mode 100644 scripts/Prepare-Release.ps1 create mode 100644 scripts/Publish-ForgejoRelease.ps1 create mode 100644 scripts/Set-Version.ps1 create mode 100644 src/Decky.App/ViewModels/CardEditorResult.cs create mode 100644 src/Decky.App/Views/CardEditorDialog.cs create mode 100644 src/Decky.Core/Api/Serialization/CardOwnerJsonConverter.cs create mode 100644 tests/Decky.Core.Tests/CardDtoSerializationTests.cs diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml new file mode 100644 index 0000000..09c1a6c --- /dev/null +++ b/.forgejo/workflows/release.yml @@ -0,0 +1,43 @@ +name: Release Decky + +on: + push: + tags: + - 'v*' + +jobs: + windows-release: + # This label must match a trusted Windows Forgejo runner with Node, Rust, + # Visual Studio C++ Build Tools, and WebView2/NSIS build prerequisites. + runs-on: windows-latest + steps: + - name: Check out the tagged source + uses: https://data.forgejo.org/actions/checkout@v6 + + - name: Set up Node.js + uses: https://data.forgejo.org/actions/setup-node@v4 + with: + node-version: '22' + cache: npm + cache-dependency-path: app/package-lock.json + + - name: Set up Rust + uses: https://github.com/dtolnay/rust-toolchain@stable + + - name: Build signed installer and updater metadata + shell: pwsh + working-directory: . + env: + TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} + TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} + run: | + $version = '${{ forgejo.ref_name }}'.TrimStart('v') + ./scripts/Prepare-Release.ps1 -Version $version -Notes "See the Forgejo release for changes in Decky $version." + + - name: Publish Forgejo release and stable update metadata + shell: pwsh + env: + FORGEJO_TOKEN: ${{ forgejo.token }} + run: | + $version = '${{ forgejo.ref_name }}'.TrimStart('v') + ./scripts/Publish-ForgejoRelease.ps1 -Version $version -Notes "Decky $version" diff --git a/.gitignore b/.gitignore index eb152fe..5d24f8e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,8 @@ artifacts/ appsettings.local.json .dotnet-home/ .packages/ +app/node_modules/ +app/dist/ +app/src-tauri/target/ +app/src-tauri/release.conf.json +.tauri-signing/ diff --git a/Implementation Plan.md b/Implementation Plan.md index f0cb206..7eaf38d 100644 --- a/Implementation Plan.md +++ b/Implementation Plan.md @@ -1,5 +1,13 @@ # Implementation plan: Nextcloud Deck desktop client +> **Current architecture (July 19, 2026):** The original WinUI/MSIX proposal +> below is retained as historical design context. The implemented application +> uses Tauri 2, Svelte 5, and TypeScript so the same UI and Deck integration can +> ship on Windows, macOS, and Linux. Windows version 0.2.0 is packaged as a +> per-user NSIS installer and uses Tauri's signed updater with immutable Forgejo +> release assets plus `releases/latest.json`. The application never updates by +> pulling the Git repository. `app/UPDATES.md` is authoritative for releases. + ## Architecture review (July 19, 2026) The overall direction remains appropriate: a C# WinUI 3 client, an API-first core, diff --git a/README.md b/README.md index eed9b55..9ea7e8f 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,71 @@ # Decky -Decky is a focused Windows desktop client for viewing and editing boards from a -Nextcloud Deck instance. +Decky is a focused cross-platform desktop client for viewing and editing boards +from a Nextcloud Deck instance. -## Current status +## Current application -The repository currently contains: +The active application lives in `app/` and uses: -- `Decky.Core`, a UI-independent Deck REST API client and domain foundation; -- `Decky.ApiSpike`, a read-only connection and compatibility probe; -- `Decky.App`, the initial WinUI 3 desktop shell; -- focused tests for API path discovery, required headers, update serialization, - completion clearing, color preservation, and text contrast. +- Tauri 2 for the small native desktop shell; +- Svelte 5 and TypeScript for the interface; +- the operating system webview on Windows, macOS, and Linux; +- the native credential store on each platform (Windows Credential Manager, + macOS Keychain, or Linux Secret Service); +- Tauri's Rust HTTP client so Nextcloud requests are not blocked by browser CORS. + +Implemented functionality includes: + +- app-password authentication and automatic API-path discovery; +- active-board filtering and saved board selection; +- horizontal and vertical layouts saved independently per board; +- card creation, editing, deletion, due date, description, and color controls; +- a directly visible completion checkmark that synchronizes Deck's `done` value + and applies the configured active/completed color; +- preserved full-card update payloads and the tested Deck cross-stack movement + compatibility fallback; +- responsive/collapsible navigation and card search. + +The earlier .NET/WinUI projects remain in `src/` and `tests/` temporarily as a +reference for the compatibility probe and original API test cases. They are no +longer the primary application. ## Development -Install the .NET 10 SDK and the Visual Studio WinUI application-development -workload. Then run: +Install Node.js, Rust stable, the platform-specific Tauri prerequisites, and +then run: ```powershell -dotnet restore Decky.slnx -dotnet test tests/Decky.Core.Tests/Decky.Core.Tests.csproj -dotnet run --project src/Decky.ApiSpike/Decky.ApiSpike.csproj +cd app +npm install +npm run check +npm test +npm run tauri dev ``` -The compatibility probe prompts for a Nextcloud app password without echoing or -storing it. It starts with read-only board, stack, and card-list requests. On a -disposable test board, its explicitly confirmed `WRITE` mode also verifies card -color creation/preservation, setting and clearing completion, same-stack reorder, -cross-stack movement, response verification, and cleanup. +Build a release executable with: -The desktop app stores its JSON settings in `%LOCALAPPDATA%\Decky\settings.json`. -The app password is stored separately in Windows Credential Locker and is never -written to the JSON file. +```powershell +powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-Release.ps1 -Version 0.2.0 -Notes "Release notes" +``` + +This produces a normal per-user Windows setup executable plus the cryptographic +signature and metadata used by Decky's in-app updater. + +Cross-platform artifacts must be compiled on their target operating system. +Use macOS for `.app`/DMG builds, Windows for MSI/NSIS builds, and Linux for the +desired Linux packages. + +## Security + +Decky only accepts HTTPS servers, except for `localhost` during development. +The app password is never stored in local storage or the JSON/settings model. +When “Save securely on this device” is selected it is saved through the native +OS credential service. ## Updates -Release builds will be distributed as a signed MSIX bundle through a stable -`Decky.appinstaller` feed. Forgejo is the source and CI/release host; installed -copies do not update with `git pull`. +Installed copies update from signed release artifacts, never with `git pull`. +The updater is available from Settings and reads stable metadata from the +Forgejo repository. See `app/UPDATES.md` for signing-key backup, release tags, +Forgejo Actions secrets, and the manual release fallback. diff --git a/app/UPDATES.md b/app/UPDATES.md new file mode 100644 index 0000000..a3ad2b4 --- /dev/null +++ b/app/UPDATES.md @@ -0,0 +1,82 @@ +# Installer and signed updates + +Decky is distributed on Windows as a per-user Tauri NSIS installer. Installed +copies update from signed Forgejo release assets; they never run `git pull`. + +## Trust model + +Two signing systems are independent: + +- The Tauri updater signature is mandatory. It proves an update was made with + Decky's updater private key before the installer is executed. +- Windows Authenticode signing is optional but recommended for wider + distribution because it reduces SmartScreen warnings. It requires a separate + code-signing certificate and is not configured yet. + +Decky's permanent updater key is stored outside the repository: + +```text +%USERPROFILE%\.tauri\decky.key +%USERPROFILE%\.tauri\decky.key.password +``` + +Back up both files securely. Never regenerate this key after shipping: existing +installations would reject every artifact signed by a replacement key. + +## Forgejo layout + +The installed app checks this stable, public HTTPS URL: + +```text +https://git.elijahkuntz.com/Elijah/Decky/raw/branch/main/releases/latest.json +``` + +`releases/latest.json` contains the newest semantic version, release notes, +versioned installer URL, and the contents of its `.sig` file. Installer assets +are attached to immutable Forgejo releases such as `v0.2.0`. + +The repository and release assets must be readable without authentication. +Tauri cannot attach the user's Forgejo credentials to an updater request. + +## Preparing a release locally + +Keep all three version fields synchronized with `Set-Version.ps1`, commit the +release, and tag that exact commit: + +```powershell +powershell -ExecutionPolicy Bypass -File .\scripts\Set-Version.ps1 -Version 0.2.1 +powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-Release.ps1 -Version 0.2.1 -Notes "Release notes" +git tag v0.2.1 +git push origin main v0.2.1 +``` + +The preparation script runs dependency installation, validation, tests, the +Tauri build, and creates: + +```text +artifacts/release/v0.2.1/ + Decky_0.2.1_x64-setup.exe + Decky_0.2.1_x64-setup.exe.sig + latest.json +``` + +To publish manually, set `FORGEJO_TOKEN` only in the current process and run: + +```powershell +powershell -ExecutionPolicy Bypass -File .\scripts\Publish-ForgejoRelease.ps1 -Version 0.2.1 -Notes "Release notes" +``` + +The publisher creates the Forgejo release, uploads all three assets, and updates +the tracked `releases/latest.json` through the Forgejo API. + +## Forgejo Actions + +`.forgejo/workflows/release.yml` performs the same process when a `v*` tag is +pushed. Configure a trusted Windows runner whose label matches +`windows-latest`, then add these repository secrets: + +- `TAURI_SIGNING_PRIVATE_KEY`: contents of `decky.key` +- `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`: contents of `decky.key.password` + +The short-lived `${{ forgejo.token }}` publishes only to this repository. The +workflow intentionally runs only for trusted tags, never pull requests. diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..3f7cc24 --- /dev/null +++ b/app/index.html @@ -0,0 +1,13 @@ + + + + + + + Decky + + +
+ + + diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..f398c3b --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,2736 @@ +{ + "name": "decky", + "version": "0.2.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "decky", + "version": "0.2.0", + "dependencies": { + "@lucide/svelte": "^0.545.0", + "@tauri-apps/api": "^2.0.0", + "@tauri-apps/plugin-http": "^2.0.0", + "@tauri-apps/plugin-process": "^2.3.1", + "@tauri-apps/plugin-updater": "^2.0.0", + "svelte": "^5.0.0" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tauri-apps/cli": "^2.0.0", + "@tsconfig/svelte": "^5.0.0", + "jsdom": "^26.0.0", + "svelte-check": "^4.0.0", + "typescript": "^5.7.0", + "vite": "^7.0.0", + "vitest": "^3.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lucide/svelte": { + "version": "0.545.0", + "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.545.0.tgz", + "integrity": "sha512-RlAtWefx9MdpXaOMbx3Qv3/NqpeZKOIPxN2D0RBN2+op0opKly8VgYEEWZTT6Ow/zf7UwyTg6/0ExJlsVLK+8g==", + "license": "ISC", + "peerDependencies": { + "svelte": "^5" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.11.tgz", + "integrity": "sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/load-config": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.2.0.tgz", + "integrity": "sha512-1LgZ/qUqSoq+QorD83lk2hka79Px0wXNW2q5V1nZlxGhQgw1jrsIbVz5YiCeucVLo4XvFLjXukUaQjIiqowkcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz", + "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", + "deepmerge": "^4.3.1", + "magic-string": "^0.30.21", + "obug": "^2.1.0", + "vitefu": "^1.1.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz", + "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "obug": "^2.1.0" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "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==", + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "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, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-http": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-http/-/plugin-http-2.5.9.tgz", + "integrity": "sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.11.0" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.3.1.tgz", + "integrity": "sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.10.1.tgz", + "integrity": "sha512-NFYMg+tWOZPJdzE/PpFj2qfqwAWwNS3kXrb1tm1gnBJ9mYzZ4WDRrwy8udzWoAnfGCHLuePNLY1WVCNHnh3eRA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.10.1" + } + }, + "node_modules/@tsconfig/svelte": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.8.tgz", + "integrity": "sha512-UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@vitest/expect": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.7", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/devalue": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.3.0.tgz", + "integrity": "sha512-GQ/7RN8uOtEfNpzZzBMTzW9JBcX42oaSVtPzdF+6cEL8pqIL094iUpr9jzYGn4O4P/1S60dJ6izyT8F4LYARng==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { + "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", + "dev": true, + "license": "MIT" + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.20.tgz", + "integrity": "sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==", + "dev": true, + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/svelte": { + "version": "5.56.6", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.56.6.tgz", + "integrity": "sha512-p4HDLDogGHKRKCrgckQHNs5PEfXkju6JI5jTywueaKJI5hAdjPohEhRtQ0M1SWC/+TA73SPln+r7srr+7e4nZA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.10", + "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", + "acorn": "^8.12.1", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.8.1", + "esm-env": "^1.2.1", + "esrap": "^2.2.12", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.7.3.tgz", + "integrity": "sha512-DHdTCGX62R0fCxBEaT+USdASAnoaRBaaNczkRJl0K7o3WyoCeVUbVxo6fKqpOll/B+WMWCsiFK0eFrJSNBKZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "@sveltejs/load-config": "^0.2.0", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "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", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.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 + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", + "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.7", + "@vitest/mocker": "3.2.7", + "@vitest/pretty-format": "^3.2.7", + "@vitest/runner": "3.2.7", + "@vitest/snapshot": "3.2.7", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.7", + "@vitest/ui": "3.2.7", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "license": "MIT" + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 0000000..fa541ae --- /dev/null +++ b/app/package.json @@ -0,0 +1,31 @@ +{ + "name": "decky", + "private": true, + "version": "0.2.0", + "type": "module", + "scripts": { + "dev": "vite --configLoader runner", + "build": "vite build --configLoader runner", + "check": "svelte-check --tsconfig ./tsconfig.json", + "test": "vitest run", + "tauri": "tauri" + }, + "dependencies": { + "@lucide/svelte": "^0.545.0", + "@tauri-apps/api": "^2.0.0", + "@tauri-apps/plugin-http": "^2.0.0", + "@tauri-apps/plugin-process": "^2.3.1", + "@tauri-apps/plugin-updater": "^2.0.0", + "svelte": "^5.0.0" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tauri-apps/cli": "^2.0.0", + "@tsconfig/svelte": "^5.0.0", + "jsdom": "^26.0.0", + "svelte-check": "^4.0.0", + "typescript": "^5.7.0", + "vite": "^7.0.0", + "vitest": "^3.0.0" + } +} diff --git a/app/src-tauri/Cargo.lock b/app/src-tauri/Cargo.lock new file mode 100644 index 0000000..5c0ae0f --- /dev/null +++ b/app/src-tauri/Cargo.lock @@ -0,0 +1,5348 @@ +# 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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0" +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.19", +] + +[[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +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 = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core", +] + +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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 0.10.1", + "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 0.10.1", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[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 = "data-url" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" + +[[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 = "dbus-secret-service" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6" +dependencies = [ + "dbus", + "zeroize", +] + +[[package]] +name = "decky" +version = "0.2.0" +dependencies = [ + "keyring", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-http", + "tauri-plugin-process", + "tauri-plugin-updater", +] + +[[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_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[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 = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[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.3+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 = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[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 = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[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 = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[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.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" + +[[package]] +name = "futures-executor" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" + +[[package]] +name = "futures-macro" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "futures-sink" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" + +[[package]] +name = "futures-task" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" + +[[package]] +name = "futures-util" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +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", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[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", + "js-sys", + "libc", + "r-efi 6.0.0", + "rand_core", + "wasm-bindgen", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[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 = "h2" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.14.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +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.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[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", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[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 = "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" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.19", + "walkdir", + "windows-link 0.2.1", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", +] + +[[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.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +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 = "keyring" +version = "3.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c" +dependencies = [ + "byteorder", + "dbus-secret-service", + "log", + "security-framework 2.11.1", + "security-framework 3.7.0", + "windows-sys 0.60.2", + "zeroize", +] + +[[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.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[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.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[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.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[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 = "minisign-verify" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e" + +[[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 = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +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.19", + "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", + "libc", + "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-osa-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-app-kit", + "objc2-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 = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "osakit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b" +dependencies = [ + "objc2", + "objc2-foundation", + "objc2-osa-kit", + "serde", + "serde_json", + "thiserror 2.0.19", +] + +[[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.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[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.0", + "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", +] + +[[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", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +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 = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.19", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.19", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + +[[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 = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core", +] + +[[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.19", +] + +[[package]] +name = "ref-cast" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.0", +] + +[[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.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +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.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64 0.22.1", + "bytes", + "cookie", + "cookie_store", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "mime", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[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-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[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 = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.7.0", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.22.4", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework 3.7.0", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[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 = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +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 = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.13.1", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.13.1", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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.0", +] + +[[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.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +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.0", +] + +[[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_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" +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 0.2.17", + "digest", +] + +[[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 = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[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.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[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 = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fac314a64dc9a36e61a9eb4261a5e9bbfbc922b27e518af97bc32b926cf967" +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-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags 2.13.1", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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 0.10.1", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni 0.21.1", + "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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tar" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[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 0.21.1", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest 0.13.4", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.19", + "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.19", + "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-plugin" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ecc274121aca0c036a2b42d1cbe83d368d348f54e0bb8a735c2b1548e8f371" +dependencies = [ + "anyhow", + "dunce", + "glob", + "log", + "objc2-foundation", + "percent-encoding", + "schemars 0.8.22", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.19", + "toml 1.1.3+spec-1.1.0", + "url", +] + +[[package]] +name = "tauri-plugin-http" +version = "2.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5bd512048e1985b7ec78f96d99083e2ddaf7e0d906b2b63c44ce5bb8b894067" +dependencies = [ + "bytes", + "cookie_store", + "data-url", + "http", + "regex", + "reqwest 0.12.28", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.19", + "tokio", + "url", + "urlpattern", +] + +[[package]] +name = "tauri-plugin-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" +dependencies = [ + "tauri", + "tauri-plugin", +] + +[[package]] +name = "tauri-plugin-updater" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806d9dac662c2e4594ff03c647a552f2c9bd544e7d0f683ec58f872f952ce4af" +dependencies = [ + "base64 0.22.1", + "dirs", + "flate2", + "futures-util", + "http", + "infer", + "log", + "minisign-verify", + "osakit", + "percent-encoding", + "reqwest 0.13.4", + "rustls", + "semver", + "serde", + "serde_json", + "tar", + "tauri", + "tauri-plugin", + "tempfile", + "thiserror 2.0.19", + "time", + "tokio", + "url", + "windows-sys 0.60.2", + "zip", +] + +[[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 0.21.1", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.19", + "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 0.21.1", + "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.19", + "toml 1.1.3+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.3+spec-1.1.0", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[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.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl 2.0.19", +] + +[[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.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.0", +] + +[[package]] +name = "time" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +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.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d988bcd52dbe076d3d46903332f58c912b87a2c49b1428419a5845154762ffee" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +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.0", + "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.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" +dependencies = [ + "indexmap 2.14.0", + "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.0", + "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.0", + "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.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65ba1e5f6b9ef9fd87e21b9c6f351554dbd717960089168fcfdef854686961dc" +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.19", + "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 = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[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.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +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.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +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.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "075474b12bcb3d2e3d4546580e9de478eeeead668a1761e2a8860c836b7ef297" +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 = "webpki-root-certs" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + +[[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.19", + "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-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[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.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[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 0.52.6", + "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-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[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_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[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_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[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_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[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_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[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_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[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_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[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_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[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 = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[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 0.21.1", + "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.19", + "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 = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix", +] + +[[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 = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zip" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" +dependencies = [ + "arbitrary", + "crc32fast", + "indexmap 2.14.0", + "memchr", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/app/src-tauri/Cargo.toml b/app/src-tauri/Cargo.toml new file mode 100644 index 0000000..d6fb600 --- /dev/null +++ b/app/src-tauri/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "decky" +version = "0.2.0" +description = "A focused cross-platform client for Nextcloud Deck" +authors = ["Elijah Kuntz"] +edition = "2021" + +[lib] +name = "decky_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +keyring = { version = "3.6.3", features = ["apple-native", "windows-native", "sync-secret-service"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tauri = { version = "2", features = [] } +tauri-plugin-http = "2" +tauri-plugin-process = "2" +tauri-plugin-updater = "2" diff --git a/app/src-tauri/build.rs b/app/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/app/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/app/src-tauri/capabilities/default.json b/app/src-tauri/capabilities/default.json new file mode 100644 index 0000000..e9e063e --- /dev/null +++ b/app/src-tauri/capabilities/default.json @@ -0,0 +1,23 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Permissions required by the Decky main window", + "windows": ["main"], + "permissions": [ + "core:default", + "core:window:allow-close", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-start-dragging", + "process:allow-restart", + "updater:default", + { + "identifier": "http:default", + "allow": [ + { "url": "https://**" }, + { "url": "http://localhost:**" }, + { "url": "http://127.0.0.1:**" } + ] + } + ] +} diff --git a/app/src-tauri/gen/schemas/acl-manifests.json b/app/src-tauri/gen/schemas/acl-manifests.json new file mode 100644 index 0000000..9912f83 --- /dev/null +++ b/app/src-tauri/gen/schemas/acl-manifests.json @@ -0,0 +1 @@ +{"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type","allow-register-listener","allow-remove-listener","allow-supports-multiple-windows"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-register-listener":{"identifier":"allow-register-listener","description":"Enables the register_listener command without any pre-configured scope.","commands":{"allow":["register_listener"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-remove-listener":{"identifier":"allow-remove-listener","description":"Enables the remove_listener command without any pre-configured scope.","commands":{"allow":["remove_listener"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-supports-multiple-windows":{"identifier":"allow-supports-multiple-windows","description":"Enables the supports_multiple_windows command without any pre-configured scope.","commands":{"allow":["supports_multiple_windows"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-register-listener":{"identifier":"deny-register-listener","description":"Denies the register_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["register_listener"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-remove-listener":{"identifier":"deny-remove-listener","description":"Denies the remove_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_listener"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-supports-multiple-windows":{"identifier":"deny-supports-multiple-windows","description":"Denies the supports_multiple_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["supports_multiple_windows"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-icon-with-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-icon-with-as-template":{"identifier":"allow-set-icon-with-as-template","description":"Enables the set_icon_with_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_with_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-icon-with-as-template":{"identifier":"deny-set-icon-with-as-template","description":"Denies the set_icon_with_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_with_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-activity-name","allow-scene-identifier","allow-internal-toggle-maximize"]},"permissions":{"allow-activity-name":{"identifier":"allow-activity-name","description":"Enables the activity_name command without any pre-configured scope.","commands":{"allow":["activity_name"],"deny":[]}},"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-scene-identifier":{"identifier":"allow-scene-identifier","description":"Enables the scene_identifier command without any pre-configured scope.","commands":{"allow":["scene_identifier"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-focusable":{"identifier":"allow-set-focusable","description":"Enables the set_focusable command without any pre-configured scope.","commands":{"allow":["set_focusable"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-simple-fullscreen":{"identifier":"allow-set-simple-fullscreen","description":"Enables the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":["set_simple_fullscreen"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-activity-name":{"identifier":"deny-activity-name","description":"Denies the activity_name command without any pre-configured scope.","commands":{"allow":[],"deny":["activity_name"]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-scene-identifier":{"identifier":"deny-scene-identifier","description":"Denies the scene_identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["scene_identifier"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-focusable":{"identifier":"deny-set-focusable","description":"Denies the set_focusable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focusable"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-simple-fullscreen":{"identifier":"deny-set-simple-fullscreen","description":"Denies the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_simple_fullscreen"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-send","allow-fetch-read-body","allow-fetch-cancel-body"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-cancel-body":{"identifier":"allow-fetch-cancel-body","description":"Enables the fetch_cancel_body command without any pre-configured scope.","commands":{"allow":["fetch_cancel_body"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-cancel-body":{"identifier":"deny-fetch-cancel-body","description":"Denies the fetch_cancel_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel_body"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/app/src-tauri/gen/schemas/capabilities.json b/app/src-tauri/gen/schemas/capabilities.json new file mode 100644 index 0000000..2491766 --- /dev/null +++ b/app/src-tauri/gen/schemas/capabilities.json @@ -0,0 +1 @@ +{"default":{"identifier":"default","description":"Permissions required by the Decky main window","local":true,"windows":["main"],"permissions":["core:default","core:window:allow-close","core:window:allow-minimize","core:window:allow-toggle-maximize","core:window:allow-start-dragging","process:allow-restart","updater:default",{"identifier":"http:default","allow":[{"url":"https://**"},{"url":"http://localhost:**"},{"url":"http://127.0.0.1:**"}]}]}} \ No newline at end of file diff --git a/app/src-tauri/gen/schemas/desktop-schema.json b/app/src-tauri/gen/schemas/desktop-schema.json new file mode 100644 index 0000000..fd2e84a --- /dev/null +++ b/app/src-tauri/gen/schemas/desktop-schema.json @@ -0,0 +1,2580 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + }, + "deny": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", + "type": "string", + "const": "core:default", + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`", + "type": "string", + "const": "core:app:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide", + "markdownDescription": "Enables the app_hide command without any pre-configured scope." + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show", + "markdownDescription": "Enables the app_show command without any pre-configured scope." + }, + { + "description": "Enables the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-bundle-type", + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon", + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." + }, + { + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-fetch-data-store-identifiers", + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Enables the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-identifier", + "markdownDescription": "Enables the identifier command without any pre-configured scope." + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name", + "markdownDescription": "Enables the name command without any pre-configured scope." + }, + { + "description": "Enables the register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-register-listener", + "markdownDescription": "Enables the register_listener command without any pre-configured scope." + }, + { + "description": "Enables the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-data-store", + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." + }, + { + "description": "Enables the remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-listener", + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme", + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-dock-visibility", + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Enables the supports_multiple_windows command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-supports-multiple-windows", + "markdownDescription": "Enables the supports_multiple_windows command without any pre-configured scope." + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version", + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version", + "markdownDescription": "Enables the version command without any pre-configured scope." + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide", + "markdownDescription": "Denies the app_hide command without any pre-configured scope." + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show", + "markdownDescription": "Denies the app_show command without any pre-configured scope." + }, + { + "description": "Denies the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-bundle-type", + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon", + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." + }, + { + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-fetch-data-store-identifiers", + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Denies the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-identifier", + "markdownDescription": "Denies the identifier command without any pre-configured scope." + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name", + "markdownDescription": "Denies the name command without any pre-configured scope." + }, + { + "description": "Denies the register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-register-listener", + "markdownDescription": "Denies the register_listener command without any pre-configured scope." + }, + { + "description": "Denies the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-data-store", + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." + }, + { + "description": "Denies the remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-listener", + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme", + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-dock-visibility", + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Denies the supports_multiple_windows command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-supports-multiple-windows", + "markdownDescription": "Denies the supports_multiple_windows command without any pre-configured scope." + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version", + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version", + "markdownDescription": "Denies the version command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", + "type": "string", + "const": "core:event:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit", + "markdownDescription": "Enables the emit command without any pre-configured scope." + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to", + "markdownDescription": "Enables the emit_to command without any pre-configured scope." + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen", + "markdownDescription": "Enables the listen command without any pre-configured scope." + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten", + "markdownDescription": "Enables the unlisten command without any pre-configured scope." + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit", + "markdownDescription": "Denies the emit command without any pre-configured scope." + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to", + "markdownDescription": "Denies the emit_to command without any pre-configured scope." + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen", + "markdownDescription": "Denies the listen command without any pre-configured scope." + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten", + "markdownDescription": "Denies the unlisten command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", + "type": "string", + "const": "core:image:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes", + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path", + "markdownDescription": "Enables the from_path command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba", + "markdownDescription": "Enables the rgba command without any pre-configured scope." + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size", + "markdownDescription": "Enables the size command without any pre-configured scope." + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes", + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path", + "markdownDescription": "Denies the from_path command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba", + "markdownDescription": "Denies the rgba command without any pre-configured scope." + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size", + "markdownDescription": "Denies the size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", + "type": "string", + "const": "core:menu:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append", + "markdownDescription": "Enables the append command without any pre-configured scope." + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default", + "markdownDescription": "Enables the create_default command without any pre-configured scope." + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get", + "markdownDescription": "Enables the get command without any pre-configured scope." + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert", + "markdownDescription": "Enables the insert command without any pre-configured scope." + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked", + "markdownDescription": "Enables the is_checked command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items", + "markdownDescription": "Enables the items command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup", + "markdownDescription": "Enables the popup command without any pre-configured scope." + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend", + "markdownDescription": "Enables the prepend command without any pre-configured scope." + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove", + "markdownDescription": "Enables the remove command without any pre-configured scope." + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at", + "markdownDescription": "Enables the remove_at command without any pre-configured scope." + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator", + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu", + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp", + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu", + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked", + "markdownDescription": "Enables the set_checked command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text", + "markdownDescription": "Enables the set_text command without any pre-configured scope." + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text", + "markdownDescription": "Enables the text command without any pre-configured scope." + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append", + "markdownDescription": "Denies the append command without any pre-configured scope." + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default", + "markdownDescription": "Denies the create_default command without any pre-configured scope." + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get", + "markdownDescription": "Denies the get command without any pre-configured scope." + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert", + "markdownDescription": "Denies the insert command without any pre-configured scope." + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked", + "markdownDescription": "Denies the is_checked command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items", + "markdownDescription": "Denies the items command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup", + "markdownDescription": "Denies the popup command without any pre-configured scope." + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend", + "markdownDescription": "Denies the prepend command without any pre-configured scope." + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove", + "markdownDescription": "Denies the remove command without any pre-configured scope." + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at", + "markdownDescription": "Denies the remove_at command without any pre-configured scope." + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator", + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu", + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp", + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu", + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked", + "markdownDescription": "Denies the set_checked command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text", + "markdownDescription": "Denies the set_text command without any pre-configured scope." + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text", + "markdownDescription": "Denies the text command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", + "type": "string", + "const": "core:path:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename", + "markdownDescription": "Enables the basename command without any pre-configured scope." + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname", + "markdownDescription": "Enables the dirname command without any pre-configured scope." + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname", + "markdownDescription": "Enables the extname command without any pre-configured scope." + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute", + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join", + "markdownDescription": "Enables the join command without any pre-configured scope." + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize", + "markdownDescription": "Enables the normalize command without any pre-configured scope." + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve", + "markdownDescription": "Enables the resolve command without any pre-configured scope." + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory", + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename", + "markdownDescription": "Denies the basename command without any pre-configured scope." + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname", + "markdownDescription": "Denies the dirname command without any pre-configured scope." + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname", + "markdownDescription": "Denies the extname command without any pre-configured scope." + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute", + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join", + "markdownDescription": "Denies the join command without any pre-configured scope." + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize", + "markdownDescription": "Denies the normalize command without any pre-configured scope." + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve", + "markdownDescription": "Denies the resolve command without any pre-configured scope." + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory", + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", + "type": "string", + "const": "core:resources:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`", + "type": "string", + "const": "core:tray:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id", + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id", + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template", + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Enables the set_icon_with_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-with-as-template", + "markdownDescription": "Enables the set_icon_with_as_template command without any pre-configured scope." + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu", + "markdownDescription": "Enables the set_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click", + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path", + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip", + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible", + "markdownDescription": "Enables the set_visible command without any pre-configured scope." + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id", + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id", + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template", + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Denies the set_icon_with_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-with-as-template", + "markdownDescription": "Denies the set_icon_with_as_template command without any pre-configured scope." + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu", + "markdownDescription": "Denies the set_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click", + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path", + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip", + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible", + "markdownDescription": "Denies the set_visible command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", + "type": "string", + "const": "core:webview:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data", + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview", + "markdownDescription": "Enables the create_webview command without any pre-configured scope." + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window", + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews", + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools", + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print", + "markdownDescription": "Enables the print command without any pre-configured scope." + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent", + "markdownDescription": "Enables the reparent command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-auto-resize", + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-background-color", + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus", + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position", + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size", + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom", + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close", + "markdownDescription": "Enables the webview_close command without any pre-configured scope." + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide", + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position", + "markdownDescription": "Enables the webview_position command without any pre-configured scope." + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show", + "markdownDescription": "Enables the webview_show command without any pre-configured scope." + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size", + "markdownDescription": "Enables the webview_size command without any pre-configured scope." + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data", + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview", + "markdownDescription": "Denies the create_webview command without any pre-configured scope." + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window", + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews", + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools", + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print", + "markdownDescription": "Denies the print command without any pre-configured scope." + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent", + "markdownDescription": "Denies the reparent command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-auto-resize", + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-background-color", + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus", + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position", + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size", + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom", + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close", + "markdownDescription": "Denies the webview_close command without any pre-configured scope." + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide", + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position", + "markdownDescription": "Denies the webview_position command without any pre-configured scope." + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show", + "markdownDescription": "Denies the webview_show command without any pre-configured scope." + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size", + "markdownDescription": "Denies the webview_size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`", + "type": "string", + "const": "core:window:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`" + }, + { + "description": "Enables the activity_name command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-activity-name", + "markdownDescription": "Enables the activity_name command without any pre-configured scope." + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors", + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center", + "markdownDescription": "Enables the center command without any pre-configured scope." + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create", + "markdownDescription": "Enables the create command without any pre-configured scope." + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor", + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position", + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy", + "markdownDescription": "Enables the destroy command without any pre-configured scope." + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows", + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide", + "markdownDescription": "Enables the hide command without any pre-configured scope." + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position", + "markdownDescription": "Enables the inner_position command without any pre-configured scope." + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size", + "markdownDescription": "Enables the inner_size command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize", + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-always-on-top", + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable", + "markdownDescription": "Enables the is_closable command without any pre-configured scope." + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated", + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused", + "markdownDescription": "Enables the is_focused command without any pre-configured scope." + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen", + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable", + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized", + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable", + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized", + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable", + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible", + "markdownDescription": "Enables the is_visible command without any pre-configured scope." + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize", + "markdownDescription": "Enables the maximize command without any pre-configured scope." + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize", + "markdownDescription": "Enables the minimize command without any pre-configured scope." + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point", + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position", + "markdownDescription": "Enables the outer_position command without any pre-configured scope." + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size", + "markdownDescription": "Enables the outer_size command without any pre-configured scope." + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor", + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention", + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor", + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." + }, + { + "description": "Enables the scene_identifier command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scene-identifier", + "markdownDescription": "Enables the scene_identifier command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom", + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top", + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-background-color", + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-count", + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-label", + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable", + "markdownDescription": "Enables the set_closable command without any pre-configured scope." + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected", + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab", + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon", + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position", + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible", + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations", + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects", + "markdownDescription": "Enables the set_effects command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus", + "markdownDescription": "Enables the set_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focusable", + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen", + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events", + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size", + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable", + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size", + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable", + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-overlay-icon", + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position", + "markdownDescription": "Enables the set_position command without any pre-configured scope." + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar", + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable", + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow", + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." + }, + { + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-simple-fullscreen", + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size", + "markdownDescription": "Enables the set_size command without any pre-configured scope." + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints", + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar", + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme", + "markdownDescription": "Enables the set_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style", + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces", + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show", + "markdownDescription": "Enables the show command without any pre-configured scope." + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging", + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging", + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme", + "markdownDescription": "Enables the theme command without any pre-configured scope." + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title", + "markdownDescription": "Enables the title command without any pre-configured scope." + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize", + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize", + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize", + "markdownDescription": "Enables the unminimize command without any pre-configured scope." + }, + { + "description": "Denies the activity_name command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-activity-name", + "markdownDescription": "Denies the activity_name command without any pre-configured scope." + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors", + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center", + "markdownDescription": "Denies the center command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create", + "markdownDescription": "Denies the create command without any pre-configured scope." + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor", + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position", + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy", + "markdownDescription": "Denies the destroy command without any pre-configured scope." + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows", + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide", + "markdownDescription": "Denies the hide command without any pre-configured scope." + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position", + "markdownDescription": "Denies the inner_position command without any pre-configured scope." + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size", + "markdownDescription": "Denies the inner_size command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize", + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-always-on-top", + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable", + "markdownDescription": "Denies the is_closable command without any pre-configured scope." + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated", + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused", + "markdownDescription": "Denies the is_focused command without any pre-configured scope." + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen", + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable", + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized", + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable", + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized", + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable", + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible", + "markdownDescription": "Denies the is_visible command without any pre-configured scope." + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize", + "markdownDescription": "Denies the maximize command without any pre-configured scope." + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize", + "markdownDescription": "Denies the minimize command without any pre-configured scope." + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point", + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position", + "markdownDescription": "Denies the outer_position command without any pre-configured scope." + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size", + "markdownDescription": "Denies the outer_size command without any pre-configured scope." + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor", + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention", + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor", + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." + }, + { + "description": "Denies the scene_identifier command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scene-identifier", + "markdownDescription": "Denies the scene_identifier command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom", + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top", + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-background-color", + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-count", + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-label", + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable", + "markdownDescription": "Denies the set_closable command without any pre-configured scope." + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected", + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab", + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon", + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position", + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible", + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations", + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects", + "markdownDescription": "Denies the set_effects command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus", + "markdownDescription": "Denies the set_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focusable", + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen", + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events", + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size", + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable", + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size", + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable", + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-overlay-icon", + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position", + "markdownDescription": "Denies the set_position command without any pre-configured scope." + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar", + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable", + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow", + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." + }, + { + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-simple-fullscreen", + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size", + "markdownDescription": "Denies the set_size command without any pre-configured scope." + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints", + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar", + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme", + "markdownDescription": "Denies the set_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style", + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces", + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show", + "markdownDescription": "Denies the show command without any pre-configured scope." + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging", + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging", + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme", + "markdownDescription": "Denies the theme command without any pre-configured scope." + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title", + "markdownDescription": "Denies the title command without any pre-configured scope." + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize", + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize", + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize", + "markdownDescription": "Denies the unminimize command without any pre-configured scope." + }, + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + }, + { + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", + "type": "string", + "const": "process:default", + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" + }, + { + "description": "Enables the exit command without any pre-configured scope.", + "type": "string", + "const": "process:allow-exit", + "markdownDescription": "Enables the exit command without any pre-configured scope." + }, + { + "description": "Enables the restart command without any pre-configured scope.", + "type": "string", + "const": "process:allow-restart", + "markdownDescription": "Enables the restart command without any pre-configured scope." + }, + { + "description": "Denies the exit command without any pre-configured scope.", + "type": "string", + "const": "process:deny-exit", + "markdownDescription": "Denies the exit command without any pre-configured scope." + }, + { + "description": "Denies the restart command without any pre-configured scope.", + "type": "string", + "const": "process:deny-restart", + "markdownDescription": "Denies the restart command without any pre-configured scope." + }, + { + "description": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`", + "type": "string", + "const": "updater:default", + "markdownDescription": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`" + }, + { + "description": "Enables the check command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-check", + "markdownDescription": "Enables the check command without any pre-configured scope." + }, + { + "description": "Enables the download command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download", + "markdownDescription": "Enables the download command without any pre-configured scope." + }, + { + "description": "Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download-and-install", + "markdownDescription": "Enables the download_and_install command without any pre-configured scope." + }, + { + "description": "Enables the install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-install", + "markdownDescription": "Enables the install command without any pre-configured scope." + }, + { + "description": "Denies the check command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-check", + "markdownDescription": "Denies the check command without any pre-configured scope." + }, + { + "description": "Denies the download command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download", + "markdownDescription": "Denies the download command without any pre-configured scope." + }, + { + "description": "Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download-and-install", + "markdownDescription": "Denies the download_and_install command without any pre-configured scope." + }, + { + "description": "Denies the install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-install", + "markdownDescription": "Denies the install command without any pre-configured scope." + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/app/src-tauri/gen/schemas/windows-schema.json b/app/src-tauri/gen/schemas/windows-schema.json new file mode 100644 index 0000000..fd2e84a --- /dev/null +++ b/app/src-tauri/gen/schemas/windows-schema.json @@ -0,0 +1,2580 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + }, + "deny": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", + "type": "string", + "const": "core:default", + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`", + "type": "string", + "const": "core:app:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide", + "markdownDescription": "Enables the app_hide command without any pre-configured scope." + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show", + "markdownDescription": "Enables the app_show command without any pre-configured scope." + }, + { + "description": "Enables the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-bundle-type", + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon", + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." + }, + { + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-fetch-data-store-identifiers", + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Enables the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-identifier", + "markdownDescription": "Enables the identifier command without any pre-configured scope." + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name", + "markdownDescription": "Enables the name command without any pre-configured scope." + }, + { + "description": "Enables the register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-register-listener", + "markdownDescription": "Enables the register_listener command without any pre-configured scope." + }, + { + "description": "Enables the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-data-store", + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." + }, + { + "description": "Enables the remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-listener", + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme", + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-dock-visibility", + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Enables the supports_multiple_windows command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-supports-multiple-windows", + "markdownDescription": "Enables the supports_multiple_windows command without any pre-configured scope." + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version", + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version", + "markdownDescription": "Enables the version command without any pre-configured scope." + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide", + "markdownDescription": "Denies the app_hide command without any pre-configured scope." + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show", + "markdownDescription": "Denies the app_show command without any pre-configured scope." + }, + { + "description": "Denies the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-bundle-type", + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon", + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." + }, + { + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-fetch-data-store-identifiers", + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Denies the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-identifier", + "markdownDescription": "Denies the identifier command without any pre-configured scope." + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name", + "markdownDescription": "Denies the name command without any pre-configured scope." + }, + { + "description": "Denies the register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-register-listener", + "markdownDescription": "Denies the register_listener command without any pre-configured scope." + }, + { + "description": "Denies the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-data-store", + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." + }, + { + "description": "Denies the remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-listener", + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme", + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-dock-visibility", + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Denies the supports_multiple_windows command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-supports-multiple-windows", + "markdownDescription": "Denies the supports_multiple_windows command without any pre-configured scope." + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version", + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version", + "markdownDescription": "Denies the version command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", + "type": "string", + "const": "core:event:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit", + "markdownDescription": "Enables the emit command without any pre-configured scope." + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to", + "markdownDescription": "Enables the emit_to command without any pre-configured scope." + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen", + "markdownDescription": "Enables the listen command without any pre-configured scope." + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten", + "markdownDescription": "Enables the unlisten command without any pre-configured scope." + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit", + "markdownDescription": "Denies the emit command without any pre-configured scope." + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to", + "markdownDescription": "Denies the emit_to command without any pre-configured scope." + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen", + "markdownDescription": "Denies the listen command without any pre-configured scope." + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten", + "markdownDescription": "Denies the unlisten command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", + "type": "string", + "const": "core:image:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes", + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path", + "markdownDescription": "Enables the from_path command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba", + "markdownDescription": "Enables the rgba command without any pre-configured scope." + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size", + "markdownDescription": "Enables the size command without any pre-configured scope." + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes", + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path", + "markdownDescription": "Denies the from_path command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba", + "markdownDescription": "Denies the rgba command without any pre-configured scope." + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size", + "markdownDescription": "Denies the size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", + "type": "string", + "const": "core:menu:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append", + "markdownDescription": "Enables the append command without any pre-configured scope." + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default", + "markdownDescription": "Enables the create_default command without any pre-configured scope." + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get", + "markdownDescription": "Enables the get command without any pre-configured scope." + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert", + "markdownDescription": "Enables the insert command without any pre-configured scope." + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked", + "markdownDescription": "Enables the is_checked command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items", + "markdownDescription": "Enables the items command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup", + "markdownDescription": "Enables the popup command without any pre-configured scope." + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend", + "markdownDescription": "Enables the prepend command without any pre-configured scope." + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove", + "markdownDescription": "Enables the remove command without any pre-configured scope." + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at", + "markdownDescription": "Enables the remove_at command without any pre-configured scope." + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator", + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu", + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp", + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu", + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked", + "markdownDescription": "Enables the set_checked command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text", + "markdownDescription": "Enables the set_text command without any pre-configured scope." + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text", + "markdownDescription": "Enables the text command without any pre-configured scope." + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append", + "markdownDescription": "Denies the append command without any pre-configured scope." + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default", + "markdownDescription": "Denies the create_default command without any pre-configured scope." + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get", + "markdownDescription": "Denies the get command without any pre-configured scope." + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert", + "markdownDescription": "Denies the insert command without any pre-configured scope." + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked", + "markdownDescription": "Denies the is_checked command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items", + "markdownDescription": "Denies the items command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup", + "markdownDescription": "Denies the popup command without any pre-configured scope." + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend", + "markdownDescription": "Denies the prepend command without any pre-configured scope." + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove", + "markdownDescription": "Denies the remove command without any pre-configured scope." + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at", + "markdownDescription": "Denies the remove_at command without any pre-configured scope." + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator", + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu", + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp", + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu", + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked", + "markdownDescription": "Denies the set_checked command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text", + "markdownDescription": "Denies the set_text command without any pre-configured scope." + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text", + "markdownDescription": "Denies the text command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", + "type": "string", + "const": "core:path:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename", + "markdownDescription": "Enables the basename command without any pre-configured scope." + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname", + "markdownDescription": "Enables the dirname command without any pre-configured scope." + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname", + "markdownDescription": "Enables the extname command without any pre-configured scope." + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute", + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join", + "markdownDescription": "Enables the join command without any pre-configured scope." + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize", + "markdownDescription": "Enables the normalize command without any pre-configured scope." + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve", + "markdownDescription": "Enables the resolve command without any pre-configured scope." + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory", + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename", + "markdownDescription": "Denies the basename command without any pre-configured scope." + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname", + "markdownDescription": "Denies the dirname command without any pre-configured scope." + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname", + "markdownDescription": "Denies the extname command without any pre-configured scope." + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute", + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join", + "markdownDescription": "Denies the join command without any pre-configured scope." + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize", + "markdownDescription": "Denies the normalize command without any pre-configured scope." + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve", + "markdownDescription": "Denies the resolve command without any pre-configured scope." + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory", + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", + "type": "string", + "const": "core:resources:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`", + "type": "string", + "const": "core:tray:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id", + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id", + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template", + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Enables the set_icon_with_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-with-as-template", + "markdownDescription": "Enables the set_icon_with_as_template command without any pre-configured scope." + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu", + "markdownDescription": "Enables the set_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click", + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path", + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip", + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible", + "markdownDescription": "Enables the set_visible command without any pre-configured scope." + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id", + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id", + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template", + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Denies the set_icon_with_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-with-as-template", + "markdownDescription": "Denies the set_icon_with_as_template command without any pre-configured scope." + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu", + "markdownDescription": "Denies the set_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click", + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path", + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip", + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible", + "markdownDescription": "Denies the set_visible command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", + "type": "string", + "const": "core:webview:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data", + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview", + "markdownDescription": "Enables the create_webview command without any pre-configured scope." + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window", + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews", + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools", + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print", + "markdownDescription": "Enables the print command without any pre-configured scope." + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent", + "markdownDescription": "Enables the reparent command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-auto-resize", + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-background-color", + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus", + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position", + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size", + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom", + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close", + "markdownDescription": "Enables the webview_close command without any pre-configured scope." + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide", + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position", + "markdownDescription": "Enables the webview_position command without any pre-configured scope." + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show", + "markdownDescription": "Enables the webview_show command without any pre-configured scope." + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size", + "markdownDescription": "Enables the webview_size command without any pre-configured scope." + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data", + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview", + "markdownDescription": "Denies the create_webview command without any pre-configured scope." + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window", + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews", + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools", + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print", + "markdownDescription": "Denies the print command without any pre-configured scope." + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent", + "markdownDescription": "Denies the reparent command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-auto-resize", + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-background-color", + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus", + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position", + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size", + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom", + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close", + "markdownDescription": "Denies the webview_close command without any pre-configured scope." + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide", + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position", + "markdownDescription": "Denies the webview_position command without any pre-configured scope." + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show", + "markdownDescription": "Denies the webview_show command without any pre-configured scope." + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size", + "markdownDescription": "Denies the webview_size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`", + "type": "string", + "const": "core:window:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`" + }, + { + "description": "Enables the activity_name command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-activity-name", + "markdownDescription": "Enables the activity_name command without any pre-configured scope." + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors", + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center", + "markdownDescription": "Enables the center command without any pre-configured scope." + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create", + "markdownDescription": "Enables the create command without any pre-configured scope." + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor", + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position", + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy", + "markdownDescription": "Enables the destroy command without any pre-configured scope." + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows", + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide", + "markdownDescription": "Enables the hide command without any pre-configured scope." + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position", + "markdownDescription": "Enables the inner_position command without any pre-configured scope." + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size", + "markdownDescription": "Enables the inner_size command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize", + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-always-on-top", + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable", + "markdownDescription": "Enables the is_closable command without any pre-configured scope." + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated", + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused", + "markdownDescription": "Enables the is_focused command without any pre-configured scope." + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen", + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable", + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized", + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable", + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized", + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable", + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible", + "markdownDescription": "Enables the is_visible command without any pre-configured scope." + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize", + "markdownDescription": "Enables the maximize command without any pre-configured scope." + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize", + "markdownDescription": "Enables the minimize command without any pre-configured scope." + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point", + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position", + "markdownDescription": "Enables the outer_position command without any pre-configured scope." + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size", + "markdownDescription": "Enables the outer_size command without any pre-configured scope." + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor", + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention", + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor", + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." + }, + { + "description": "Enables the scene_identifier command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scene-identifier", + "markdownDescription": "Enables the scene_identifier command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom", + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top", + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-background-color", + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-count", + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-label", + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable", + "markdownDescription": "Enables the set_closable command without any pre-configured scope." + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected", + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab", + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon", + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position", + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible", + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations", + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects", + "markdownDescription": "Enables the set_effects command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus", + "markdownDescription": "Enables the set_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focusable", + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen", + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events", + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size", + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable", + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size", + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable", + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-overlay-icon", + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position", + "markdownDescription": "Enables the set_position command without any pre-configured scope." + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar", + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable", + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow", + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." + }, + { + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-simple-fullscreen", + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size", + "markdownDescription": "Enables the set_size command without any pre-configured scope." + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints", + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar", + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme", + "markdownDescription": "Enables the set_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style", + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces", + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show", + "markdownDescription": "Enables the show command without any pre-configured scope." + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging", + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging", + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme", + "markdownDescription": "Enables the theme command without any pre-configured scope." + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title", + "markdownDescription": "Enables the title command without any pre-configured scope." + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize", + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize", + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize", + "markdownDescription": "Enables the unminimize command without any pre-configured scope." + }, + { + "description": "Denies the activity_name command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-activity-name", + "markdownDescription": "Denies the activity_name command without any pre-configured scope." + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors", + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center", + "markdownDescription": "Denies the center command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create", + "markdownDescription": "Denies the create command without any pre-configured scope." + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor", + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position", + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy", + "markdownDescription": "Denies the destroy command without any pre-configured scope." + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows", + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide", + "markdownDescription": "Denies the hide command without any pre-configured scope." + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position", + "markdownDescription": "Denies the inner_position command without any pre-configured scope." + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size", + "markdownDescription": "Denies the inner_size command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize", + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-always-on-top", + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable", + "markdownDescription": "Denies the is_closable command without any pre-configured scope." + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated", + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused", + "markdownDescription": "Denies the is_focused command without any pre-configured scope." + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen", + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable", + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized", + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable", + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized", + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable", + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible", + "markdownDescription": "Denies the is_visible command without any pre-configured scope." + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize", + "markdownDescription": "Denies the maximize command without any pre-configured scope." + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize", + "markdownDescription": "Denies the minimize command without any pre-configured scope." + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point", + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position", + "markdownDescription": "Denies the outer_position command without any pre-configured scope." + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size", + "markdownDescription": "Denies the outer_size command without any pre-configured scope." + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor", + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention", + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor", + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." + }, + { + "description": "Denies the scene_identifier command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scene-identifier", + "markdownDescription": "Denies the scene_identifier command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom", + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top", + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-background-color", + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-count", + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-label", + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable", + "markdownDescription": "Denies the set_closable command without any pre-configured scope." + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected", + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab", + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon", + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position", + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible", + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations", + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects", + "markdownDescription": "Denies the set_effects command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus", + "markdownDescription": "Denies the set_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focusable", + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen", + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events", + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size", + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable", + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size", + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable", + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-overlay-icon", + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position", + "markdownDescription": "Denies the set_position command without any pre-configured scope." + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar", + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable", + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow", + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." + }, + { + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-simple-fullscreen", + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size", + "markdownDescription": "Denies the set_size command without any pre-configured scope." + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints", + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar", + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme", + "markdownDescription": "Denies the set_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style", + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces", + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show", + "markdownDescription": "Denies the show command without any pre-configured scope." + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging", + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging", + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme", + "markdownDescription": "Denies the theme command without any pre-configured scope." + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title", + "markdownDescription": "Denies the title command without any pre-configured scope." + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize", + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize", + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize", + "markdownDescription": "Denies the unminimize command without any pre-configured scope." + }, + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + }, + { + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", + "type": "string", + "const": "process:default", + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" + }, + { + "description": "Enables the exit command without any pre-configured scope.", + "type": "string", + "const": "process:allow-exit", + "markdownDescription": "Enables the exit command without any pre-configured scope." + }, + { + "description": "Enables the restart command without any pre-configured scope.", + "type": "string", + "const": "process:allow-restart", + "markdownDescription": "Enables the restart command without any pre-configured scope." + }, + { + "description": "Denies the exit command without any pre-configured scope.", + "type": "string", + "const": "process:deny-exit", + "markdownDescription": "Denies the exit command without any pre-configured scope." + }, + { + "description": "Denies the restart command without any pre-configured scope.", + "type": "string", + "const": "process:deny-restart", + "markdownDescription": "Denies the restart command without any pre-configured scope." + }, + { + "description": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`", + "type": "string", + "const": "updater:default", + "markdownDescription": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`" + }, + { + "description": "Enables the check command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-check", + "markdownDescription": "Enables the check command without any pre-configured scope." + }, + { + "description": "Enables the download command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download", + "markdownDescription": "Enables the download command without any pre-configured scope." + }, + { + "description": "Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download-and-install", + "markdownDescription": "Enables the download_and_install command without any pre-configured scope." + }, + { + "description": "Enables the install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-install", + "markdownDescription": "Enables the install command without any pre-configured scope." + }, + { + "description": "Denies the check command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-check", + "markdownDescription": "Denies the check command without any pre-configured scope." + }, + { + "description": "Denies the download command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download", + "markdownDescription": "Denies the download command without any pre-configured scope." + }, + { + "description": "Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download-and-install", + "markdownDescription": "Denies the download_and_install command without any pre-configured scope." + }, + { + "description": "Denies the install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-install", + "markdownDescription": "Denies the install command without any pre-configured scope." + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/app/src-tauri/icons/128x128.png b/app/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5032375d2ffd4afa7f53721e27cb8b6c7b64ba GIT binary patch literal 4942 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 M07*qoM6N<$f;C^F7XSbN literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/128x128@2x.png b/app/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..80293768ab2ffd8f64ea2a772a56802ce969e944 GIT binary patch literal 9754 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 CfM9C? literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/32x32.png b/app/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..05e4a40cc8acc22837e3bcb5f1dc85cb04044bc5 GIT binary patch literal 1140 zcmV-)1dIELP)2Kf+_CUG;1VWgte zJdn$!E=d6dI2sqRiY1E34labjX)lz?#hb3VhKYEuxg*MKeyA1rP+|<*woYSBPd}Ri zP~OQZ_Lo;h%^p+ge2{;uwIZ(k@fGscd~kDy$+3;Wky~e2bHYFV;LfM9cl>z)PMQGX zPpAYWqOFWkdyEjbUa1xE_4&7Oe(pV;j2+W0&E-ie*hVE>+%5s7rmji|CIk%G9w z2!S-hM2v1EH|<7k*+Tl-oF6J_>S*6H{+yz*4NjUG3+;U1ywBCzT}PVhc>BJ)o<+Rx zmH-6-0k&=3YulVOH<46(=_UbSNE4~R&bscdK5W@Msfh+(864OoHRhWRtpld__n zj|^COg0rWq$YmP>WO%)SeNU{#K-|@*kZ<73`xX|`b?HM~h)@Q~)q?9>Y~`-WE)O^_ z{RtEIj(1CKADE7Lzrta1nS=18{dZIjM z1nEcsctZ;<+yK7ANe}L_q?@Pr0rl8zL$B>C_Pkn!XswiAtb5Lg4o%=cRuO97Pfl65 z|KSEkH%8_B?EDI5J}-Li2GXeysI;{#3a#Zb!MTqtkG2P%jN_$OM)B&AjOTa`J&2sE zREA+234(Wn{hxZI4|nhC#pRzW%5hAg+pP@)%`j|b0^x+Vpz%QyhmWkor>Bbo*&X#a3TldUZ$gE)YT**WKsdw|Zz_jMz$ByPuE)mad$c6c*_-i-=)taS9&cNpD zc>9gTwuy)XaPq`rAb}xDd#RKOXW&ZeOOeYtl+g|n5gpY;P1#s`dBwtC3*UqbP_WYY z_QEkAus78TOGI=D%nz5}#8M?25P;`|Q#?0QJ2SaCk;82mz7r9%%cHS}dWHUA?r8fE z*ZljRkK*_F&$LOYF*LgQ1-9rl-RJ3@7doAtu9#y4N<8FcaYHcfIf% zmdY7HyH0cQG%$@9orlRKw(_=Bewh5p9wyuWr>B`wh{BxYPcz|!yu#mVT&mU3+yNI( zD3j50KD%LL@c42A3(SNuzhmBjGRtiKI-~t?I-N>6z5fC&8G5sfa9+;<0000aVMl4vopgkXRMNHo#JqA@WsQB3^9KQ!upDv5=J zKMZ~$hJ=VwP-B`%iV1>}G=>5q94TB2{XA%|?X`FPx^d<{_GWiyc4zO-1lkGLF4LX8 z`MrJb_ujmDV+Voe^?F_76VV+}2{i)(7l2d`fLw4-H7SVabO9s?+K_Z&k;8V<@An5y zM;ZOGyxi-Zjz-@{2(`d{*d$3hoNKdvI56P%TNXe`SxqYfv=`<`X$ut&}>auQW|P;}5!4SV4EZTp}g zub4R*1*meZ?o-|%Qw#KcYJsr7FE4iyJXE&@BGcp0H*`tdC*TN4E+}-qMnV9Q0gVkW z!;Yr+)Ng`*gPcCT7O>Qu5(rld*qTvSy%DCY31Lt!aJX9WMZSpIKez1@y=|MQG+ztY zn!yIo=+k^(QV?D&gut*5hDZG((V@#Gx~d~KpHe&Zn=l2R97k!10z#t&DQ%#~vB4vq zCdPknYIs}J2wXNHwqLg!+?eoavQvSewE)rfj7*t6B@m=mX+-~>79{OukPbZgZ?U5S z)~whrN`&TZ&B`W2rcX_lvTaH;lsCv?dPX0QT$A6yBwURqF0W}65`bOgrqvHT!?0(* zjk8>yA=7h-jZJnUZnw^}DLVon5gw0ll9S2F1z7)t9ZJh=%48Vv9s~xX&~bJOB4IYM z8$|QPF~CO=_PrL))-mR z0JE^xDtK*xq`W~$PYd+m5s1DYK@-qMar%Ho7`)P@Cs*s>jq?a1&$Nr#EI)x^6?{r< zA!8HZh1OQI(=Kjj7KsLltFB^JmMO(JnIQ{W z3|VxAbVw~Y81cA-lSIja0E`nDiXc!L?5z#0)1ebiLPeBU#RDOOY^`PREOJF@&@C;{@awQ0F;M(R8giCX5;k>Oe6q-nMiBB~f07;YyG320*g-#=42As~bCQ{gCd zcTMZTYt|SU3ji_LR+SRV#D7zfTW}-_r+x`3LNEr8pzXvMjNF|y+&6%1MuNO-ZCX-5 zzznS~c0^*D;8~UnODknHktMW+y!HOuGvF?@F@h=Up|xc`+DGEb85~95h%R}H8w5LFaKZWwh00^jwud<2#mU(&%-FnaZTfzINv^!e?$L$<75FQi zVfguYkg+d`z{$=}ZMb*!3N19fI%#GT%4&Kir^hYbt|f ztd{KhZethMI|CI}2_fLOPP{@vVLV)k;Na)m&+e+hbF~0vGb^m#{-VJT_0L*f#u8r+ zj7`!A4sgE2ZjGpTveDoVeHwt?TQeN+$TD~fp|Cp4q>1MGm1*el&j^F>xiJm?t{F{e zonrd%B#QZVS_q^O!Xw~SyUp~zBw}T+vLFCbkYu(mcjD+6c1e>kG%(8rPk^8KEd<{k z4(fA@n$Vi4{pYO#MF@oOI?hdKHc7#BlQa|_FcpC0F7uem>YZ0Rnf4`C2*IfcG2J9J zvvJ-gX=)Bfer?Q-3HZ8CGr=QfAp~RJpOr*G`ZYWcJmP^@o~7Bb#-E!kXM zu{WsK0;JwW(iK85))U-5P0j$R$`nr0QyFIs~;<8!eHYQOO%?jbTJ~M)iluYXbg8Z<}ana$YVdayE+= zO7;gX#p>|lLIAG4n`dj0V2O-D{UIZg?D+Q}TS1;d&t1}y8AH-S18S! z3X}1!XJ+?)bI$qBlEbPDM^#RQWggFtI1@d!|AV7XSLU|sRUFp21dy|*Eh!7T}c)JO0!Q-mnO2fLsdc> z`p+bGaf3Cj`m!IErfzPjM2i}1ZjQ&NRbOcYrV^FhD}>ZB!5YtIpDx*`pz*@^;Ar+~ zN3iOemToQ4^SJ^Tw3`WsV)UhQCreT_x9nG>O1+@qgPoHsEre7GAI(AgHI0i-vVxGR zy66&!MHUlrH%Y&}UZA~+4u4L6iT@(Bmj{P?AU)JwROw13J7eT1oR_LhZj;|Y5pXWQ zcy0b?`LgQ^hIDp93Rs|SN@xCuW~>l(@3YUFeH(Shh1XGcJbNPq=kpTX`{9$5Z^I{v zcYFp9qr~U!Pj+q3OIEC5>4$#hpB6V?3U{piDXbs>2~Ifb-joj%o;x<2X8_Xqyu#-? z)w3VodjE0g`{Jly>6KSgXS&)I;#X;O{iGj~bnA^<;ObQy9VZ;Y`ZQC4qJf}0i8bN2 z=g~m01B#{zbf5jmu~%X5!6!9UDPPi3$u33lBdkQE=?4$)fb#Mh)0d@5iw#gT5CkTi zE^#!qM+3@1qD`OO{N2VThGECSb*oHI}cjhu;Q|Sx@Z046lrk} zln4P41IqX}ZV8B;ZM|q&n+8~qJirtfB!1Q!S*q`z^}pf+3Xx)qW?w@ykw5_=!3k9U zBQObw4g_AHW-d&Q*WLIFXsll;i4-c!R9R%=`wzb0%-qljf}ZiAnMfebJ|Ue*I7~R| zCLGZS6q86GaNAb2{cZsF-u4HG)GU&LR;v`SZoO#>RFu~mCLB$SuQ1_MBH@AYp^5RK z5aUB(##cBGIaU4qc{T9m)!&mtGQ3{kLd}1=`ihOFr^^lFLpI|pNFwVz#4XXaK73-y_L(gE{a^s`?PbE45WmF%i`?AQx_|S<+nADnHH5#PFOeB!u zcF&u|5+}*ubeklysd}SW|Z4PPtgA`&;%W7UzrKsjfu=SFPM#ey~2 zKmo98=w;jhS*lmCz_iF| zi+{?fGxy8I8ym}+3U&MqIfdnfTI?6B6(eH{tny`_B&xT2QgGEI1Y3h4x?s(>h^ocM zntkEaiOIYa$OLLUGYu9KC{tZXU|qu;=v==8_^>B6JSK2JLC8 zkp-fUl7-ABC%bnJ!Ku$C;F=pMp>bhY7^uNi7WTX`0v-D^oJ0bp`B;(&24Alue^cwg zRcB8A`{>{p9M*owanquZp-PwLUKAdJ#PNx9@0VAArUDs2(TZS$jk*i=Is)H02D5xw z{~3F`r-Yn)0@8OLU7#(jn5Ti2gV$ajgo7W9@~ts8EsHHa!Em);%}=|Y0oFYrK7+ZR*u6RJ%l`r!p3#~rm1Dos40i_?& zx{!5Mzr)&O2qK^5rq>bpSQ*Pz73(rtc;^FAxZtAs)LWMdV-HU+6Krr6PbL@9NyVbA3v$Sz+F1Srv}BZ?+ieO(3I zd|M6mmIwEp)yTzJWfv_=RP80$~T# zOV6aNL_*K_Y$6%KEld#Tb>yebLh4dkI+3`3O(m?`P&;F9reMb(Q*c_N@Oq${7l-qN zf;LWnJ^_E*nPw6RyOv0SFH`01byS?y9QJMPnlx!D07XWuJ`4~4us#n?VKRx6Oei{` z<}{#w|J&qrOwhK;3EH%^3tA1j>2>5cP!?ZlRy|czSidd-<=ZoW5%u`U7CKO4nH=oY zRNpzESd0%H78eE{8{|;~eukPj7~jCaRDROSO`s8Qh%}`KvQ%G+ob&tNB%$Z?Nv?)l ztVl*6PO)gOqjWm!J5Xq1e5jMMwB{4N_VN(*S_Ci}P}2e6v;`=1=&i_FARkz4kV#W@ zA3E8S^`+P{-Jj(yFg>&{lYjG08>VL-JD(lM$Nxl$gqMu9Z`56+X<}b*76v^^m-#z) zo|u4iDkl^=I`r=h{N?!+^IpV{at)MSUC5khtpI%8EqA>zEDfk}&6d3R*I}FfgZ5QN z~DTb~^l&)?MtWU#H-rOUj^S`8=&#i%MTcL>YZO zQ_$Np2_GF86AB&K*)XE!h;w|`L$SQyMI?#^;u`Ru zY(6X$$>43jKo1>>Em-5KIvU>+QU}Us6SU>BZ`yS_Nlg&jW5V=D~*7UsCjtH_s zN4)hN2mkX#@U`w_%b|}y-OX&1?N`+iFOlG>I&y5ZFWgOg_WPXZejNsejt37G8Sj1g zB#e&_b5U&BRYy*hz#>&g?ie3ZY_jpZ$*B?e==gS!vvG_9hrM2e*sd2}-)u6xbjAk= z(ioqykug$Aw&gHBv}Jt2RP}G}-|EQ`)@^onSk*3?mVr7^hi~ltxn;vIsf-WVD+|Ty zLOh0!(0N;q503m2QWDhP%t(YPtD|x4piK&31IO|`%gHtl=wsCp7f^1hjs!zT&Oki| zpJ}#A)=(7XMO6W{10;@*kMD-(ci#`=6C=V^N1j4QwtHZ4Rvo$Ch|NfXCZ>kr@9%Gx z3e>a~R6CUEt=h9GkUYrtL)WePE?m0&b{9kfxQPU{A*2@~0eqn&ntdVw9nr{y6dMJU zeTvCJtg&U6cEdZshtW{C64qSxBW=@^D_xf_1J~9{-Xju@O`09f>(duf!bhE!)oB|b>wcrn%k-){wx8BNPOP+E_7)>en^tZzk0Yo z*|q)LO0rnPQjHa21d22Wcr{fEf!W21_8WJ1PrmFda$gtoz<3QC35wNVD%lwYeezLL zh}*R9^|NAq1i~8K?sjuN4T6g$f>B$kZX+m`re{t;H8_pS^avFW(&_YARaI@TrU}|h zlQcJms)X)4-JR%|KeHNvq@`?b6@ zjs8niC=^=vMQ>t{y%}SLiyGpsQ;^$JOo#b=v{6L$*+~?4rkGqHQl-WTJ1NboKddiO zskX9!;*u==sBet7=P@SyR+nsxV;@(H1bk&o6ZTExSr^veI6x>L0kPb7No{t}V~QIQC_RxPQ}s{I<*09YT=Z0eq;fRc?tH%K!iX07*qoM6N<$f(=G(lK=n! literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/Square142x142Logo.png b/app/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..859319020feadd66cfa7d263a88fb48d272c2df5 GIT binary patch literal 5366 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 literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/Square30x30Logo.png b/app/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b9d19bcad77372fe57a74bac4c73e64b97a73a GIT binary patch literal 1034 zcmV+l1oiugP)jQR!V>-P@>W%1$^F>*thE(YJ(A5uxZo*+|zXg zet%E}gcVQ)Au5PP0UZzqErSQqx#_UO-CjE*(zHppP>Nl+g<}t|Dhd?x6d&Iek=0-D=wAeqzM2CgffYKEL5|-wMukPpFpHvt8O((PFB{RB^3a z7mx+&nOvq>P-`Ak1SV>ox(cN>&&V5S8DO&!i?&#EIp+Y>6)aRCvzS&W6(+Pf;$dJ7c=dmtxA?dnolQF{1JR09}OL)`Fj)eEYu5mH+?% literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/Square310x310Logo.png b/app/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c0da75fd9c781acb46ad5a253b5f1dc9bacd3192 GIT binary patch literal 11576 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 literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/Square44x44Logo.png b/app/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..93e437a5eaa2d339f2ca1bc698cbedf6e2977180 GIT binary patch literal 1433 zcmV;K1!nq*P)7?fYL@h%0h^j z0n@*@;QdY)xUz;Frj+&~j|u@9TnhR7rE8lE>tY8f=m*HZ(otGgUJ>4W@S|*DQ3iDT zGV-`E#P+5j4@S5UHJj%}VkA|r{k6<|O4@H&d^PW6u~p!F=Q4XbE_%#K8( zt2p=dYX;E7%@_>|eLd$ySgKI(lGkR4=dCfMl9VQ{I z!%qCd&=spOG4}QwH&q?#>whh2K6i>zuJ1% zrVA^T=GG#e&}Y%YqE6Gom%~YnBRfUf>&-rb)zlTp9mKAHC@C@&cNp<_>|?!>kdgS{A7&VWvp(+ogpwhuN&K8bfwA>ni1! z14&4YsalfMP?EBRjfiQ6VR9u2#dHu^{4O~U%W7e&_g0V#Nhls<%I)P4MG+2jSyeO_ zh-Vna$ij>n3riCfn2S3mfG-^!xP<&3VP{ES%IBrDlOslDKkl6`osR zg#$y5ARNb`xCEN>8&n8|Au>Q>>7!IGu3pc)ko>uR73ostS$Gg}h}eWZ0pB1#E6`nyZx^0;~U5S2$Dp zRYLzZwvHelx&+AgKB`7tLm@xO=WuCsDG95+Cd`Q>{!E4_J=ld{oOiIes*{3Koge&9 zw5U)7*r78a1ZHA}ODD@tx3U(1vuvNrA$<3?F#P#49zSeXEp-G}iG(RUH#aqhSpj-z zAcWW7dJGeuFarLVVSZzMGiV*yKYI&Dn%~HnrwW6?-0YTNB*;vbB%m*jE@y-h0N(c(?9>Kb>P3fWAF!WTgoZqB407L=*Em8Fo8#}^825KT-W-} z;5h5nkHyzy`bcaI=f63InYr7Rk}0s1(n?wO^0l``XoGCL+g4iY zEa%&F>)o`y9mB*wR}fmB!q#>a_Ckl4152L{YI?jzy>ihhL<8aV-sfK#UQxq(`6nF6>x?!bzU2jfBa=VEv~vw!I|iGDoF{-vNDA$Ok@Z&GI`(eUfE$cS2KJxBGi3A)Qpn&{I6| nkj&{3LKmTw-@2U{(Yoh<8lo6LTjF;r00000NkvXXu0mjf7bwF= literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/Square71x71Logo.png b/app/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8eed0aff1a6ffa4f40ac27f1926f7e544192cc68 GIT binary patch literal 2591 zcmV+)3gGpLP)^rWzB@Z-J8|rslRy;0!z3h5piN99P>ZUT1S$auQiuc}TD9RDtyDEh zKNVG~kear@2XK=jgb1ZYRh9Nb9wiMR9P%oUn1IiYV;dWv&rW=IzVq!cvv$0%ncbPa zH7a&TUfYDe>A5bVDN$^~1sP}*n zID}fpCW>$3({`But#l zGj+-73{-};w(Iy`vj2VP>OKY+F1-c0$#KurGdkQGlWOBlyH$Xfz1(8U#wXzZEqkFN zSj{y^dmTm_Cjf3-w>-mICyRkO)%izw|Kcm2;87IiUZtWcN=T?xlv%NtuA z2fzi4!ywsp+`%(GqbAw{D;n>HPrCmp3eco1YS%pR!xvy_{Tg%UkN_}~hBjgb6%k>)+k2PeG`B zk^hvl;r53igaNVwgOJV&W*`s+JU5o12y{eeJvZ=ZtX+@E1EX)bpqUFhnQU>rVZWdG}f>87o4ToCE$HK z>ox~q$ub$1G_i@Yzqbfi@o}Lu54kKGm|zItjt%9oYbmhVKH|O(RuROX4G$kt=k0 zBY6U+I;zlxzJ*SjgSl z_MdVbllZ9MP6#`~5i{Rap6I_$_zJY_BW%3)9ByZ?GQS!4q9DH^JB2gJ4HL}@V;V5pe0NyZ&XGenhquF}QI26SzD!PWgo3T6#EzX&JW(H6!c%on`30w zz<}=-GK2g@txnb)0}U9rna6G4T?Fekg-tfj;TJ|QYaz$b%$(Ud);M)3&Z5cA0eXT# z+mJ&wF&8N)^z;uOC#R5E=!YuwDn!uk z`AIFbZmht;K6Cow-(OEd=Q|mJIQksKt(+2s#?z`Ns$m*!_}7mvOv2gsGA4i?emtgq z-Y93@nSfKrt~>3bYcr&|>97=2L*KexSfFYVG zlTkgTspJdSxxkTP@g^=TfA-{gkGaM?N!Q+TjU6?TgWNgvkFEZ)RqsG2m4Dq53`AW4 zpv=KIni2w;UF6H)$XWkoPFM2SEErx>YH6+jE2q#6Jl=FW>wT|$ams&i{`=`$n(X0u zJ1kd#Ki8OtLXg3QVdoSY+vKON!)I5I`VUSHuSz-n!SnXcF%pFQ&o!pI0%q_W)Hy!6 z@M#CPFrEfSg7dtUJ3o8{F83UFNV=wU&hK1f1pEe{;l=e0oq~^(NBH$P#ziI*X(Gnk z(YN=(P^!y4K?pI@@xA04dl0oOg;-3jI&)Y!kLc`LQxf5P6XO|tDkF$cd>XgW-S!);!p>1%KR-WzXvOp zwZqc7b)Ht&xh7pR!Lzp+Or3*1tgeYx5~UUc-HhRtdQlCWnt1bb_#u0Jh+RTFcC)s| zz?$=CjZrxU>=@o5yDidyNR3|xf7akj2k0G!f5?Ua8SGZBlvjbOqj@tIJz)t81{IPWbV{>wJ_)0s~LdLs+Jcyy|S(qdP=e6;( z+y`wHK9Uz6Kp2<+Qg&OniLv=sWSf*oSSE(y$%Vp7k+9Nk-5$oY(TA}R0iDZ?caTjl zFsygtOQHFwm5A`gGG;d!FVzrqYEE_oX{d`mpDzFol1OXj2T0SPV0Hb-4XxyPLo;Jp z+>mHji|T{gZf_DqvF&xoH$k2dC(^Ln+X>#bUjc;2Pm_cPAawu$002ovPDHLkV1hC! B)=~ff literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/Square89x89Logo.png b/app/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff58f5672cfde63557f46775143fd5cf18c30a54 GIT binary patch literal 3230 zcmV;P3}N$$P)`y&V_2U=20l3;Ijxx7CXi^YY4tN^#2fE$Ld{gC2$uq)(O zc)+#?CIJ7Q0Nh^0%rVds z0s4d?UCfO{TeI2h$3?8%jX)sqlu{YWN;55+%e_&A$o-%=Qap7a6Fa!QXr>7o1jjs{ zO1hw^kB(pJ!}Tz`x}JnMrax%Vyg>R7 zXMV=%@2ENl9~?u)HD(Se-_N*~>J9h*8@bmHqlp3N?LPy(16`uUIXsQ)-n=B&)-_%i zMHREd4Y2LWov?c4HVBnf&!C{j0Ux|p0E`M0Rp%D~wme4vM;-VNjwxW*oIjDi2bZsZ z1Sh-pK|Ikf%p)AR-M2&%Wl@xes$t8<9k6Z7F4Z5Q1Gw-r7r=~TN(prWFe)bpGN0q$ z-G7Fz^9Km<3D-CWA^U=JX=bkp(a+ z!PoFL+5;F_x?%dHvXV;p@%LYcnyQ5^L>a=eQ-w!4xa~*#7y!e}gQ9_gQ%-rMM5{p2 zogeTVi(xDmWU^K0G+R}nhALCPSz->XOJvd$k$9z^Wp)Sp_WsR-=Nb<79 zo1vU20i`B3RB&ja;LHFM;E-Rz zp@o7|0gQ$ggdJPHVg7pW>0;sh$8EdF3mRlt-V}hUYDsm>Xe34vE}hRne_xi{MXqm@ z;qkSlP+cQyfM(xoG@gSCXVY-w+LSF*v$}Gj_aK*(ppP9FdFwMJuzXd(_Jgfl6NE3$ zWZ>k7X-gOR$)`imva!t8^%s$^)y-w_<>zVm=aDf^TOOfmR>XU{P?_W`2$)(BOIHMK1FRgYTgqS+`O;GzGWgmrJK2VdysE`Hz=iS6Z}1{`yZhvV zHv7S{AOzluCs+l(N;1Rc74WGW1I$)_0+XLy*%*H$*+!6E1i+RtV4;%C?|FJo7j|4^ z*8uBsscH{SB+7=KC%B`*ps;D>5x~YC95`f18+yhh-Sv<-*@f~$p2Nrtt%{Xoo^%)b z#mRi1x(I;vocs{13)D?1uO(UFv_c0;$pcf72Vgfe7<8kFt+L1>0M_y^D`qUhQsiFG z0T0XL)5UqwT*%PH>=DGtXd=p9SWPPRR*Tv#23kv~xYGZdWJ@-C0*0&T2A696!n z$F4%u&XEXVS>;F_li)z zoDn+FmNMh;B>H8ANk^p zs42r+fWcO}3ki4`E*Cje4)F7xa|y^LkV@v@^;f=v!J8T2DtYjplkF_D79WOmwjvY_ z0j8t8LWXCbui;)1>W`glQmQ39V{LmysCB)`_nr&S09+VUnt5tUd<%S=cn#*lG7~6&M-AwHkC60KK$k|QGS#B>zDoG zWR6NA!PW&Blsr&CL*)`#vQ+_(ttm4E_=hjn>aP9X;W%`iP8tHNuO#q|lhHbh>_?Jw z8bu0l`|sxE6&M{o|4G7;1EVvDMCyZthii0~?f!I}I5T6GHGSaH<8y8&qj?tD3r;pl zcSRPK%m7Tsx=j`N^N$>eL!=>?wk30Yvjp7sH z(p`?@$!JiEtX-MjeQE+6Uw?Z1>-e~(i(H5ScN3uBHUOFe{Mw#7(0?PtMRkVd%YGG0 zn$;pJkDVv=7_=tCX^QBxlS#PrW!lt5)_R`Z#2h>PS3S`09*XAy241RDl$k0riTx4aboK*u9giIy@x9*{YjSD~&i${$Kai>NJJs{5!@feOX>Egy zzCs4kJ&P=|J{qW}6EG-RM~e!m|6V@~W2sv{+R0RVUpxqR?q0F1MMhm$0CN}FabF>a zF0#6OnLQIn5?A3;?_qG$9;egE8);*@qaW=iN^s1w7MWYYarYHMcH=yoE;7$d%uFSq zv*))knHh76ai>i8(Qx{1N*iw-dx-#@@L0jIEePa{2J(0KLLI=z&+K+g6L7!fY&<|Z zS4YSNzw7iGv@zY4*l}ne9ZhDH&#}%T+gNDrv~ixXi_Bl*J4`6z0|M~9@jh3PL`jxj z4OCXtPLTC8zjAXS+G_DK0eUK%&UZF(nnkwTSIDi4%u;X}VntlI_BS|laSx=@!>+@% zK@9w+&~-LO?yy)ykezlm+5C-{VCkY(C=FH$agn*Q$SynDQqH|W?BH`(JKWKOy6bE& z={g&gruP$R#~i*4f(MoA`nq*_;43Q@fOe@mJ3pw7)FYU?$n1sUMloPDz~jk5NDx4W zh!;0Bd=`Yasg|YP!$W<06`jCyF>>n~C=O8&kCIN{QQ8SS-;pC8k55!o)`Z-)_$?0A z<}QC6?C(9Maz@BzQF|$e6yXuW#d$o7`;35Z`;4d>_$0^TF}mYRkv3e>#2@Ys^>&zU zOGLNSAwVx7FPn>y*#>w&*<`DoYlAHU^wA>FjsR}6wIAO!&_(LtqzIM-bMGvfSBAM< zhbWKmQL`e*&XR4ec9twC!^phaj>#z?3m~Kx@~co0U1^ls!8H|f+rZ7(CGorclC5^~ z8`6FqC7Vd@^lrZ$!gu=xgAHo4a;}vGb6W53TMb(uL0CH#`&OTDx^MOW0Rq-?Z?3~S Qi2wiq07*qoM6N<$f+(aGumAu6 literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/StoreLogo.png b/app/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..6906387d24f603291c666d376c2d235d04cba97d GIT binary patch literal 1681 zcmV;C25$L@P)& z`Ojnlrxlk~K8KK0hY<4NVJ+O5c3P4oza*g}pGSaw6tHk|FKCegQwW?H2K3O}1R8>r=CdZ@lmsJXXEK$ZhI4NeFR`H%{U- zfKbO3rPWYYd_P?N>$n+-VGP9Gz?Z}aIuJTS!8j&WhRSUQ_gRuIa#w)^tMRpgRvwu? zS;Qs`AEtrO_4+vo(R-5n2D>80t5>`X?t%)gNVq_1*6vKI1D_zO3L!JwU@(9&XX7Jp zbAe>>ZmzudDF*ldBclc*_YHQIoU^=glXW0D4j0v^?GBs*Y_davOG*<&w$Wf5I?nwA zF-1>kb`HS08V8h=+0sT%J{um7!>J!4phOV?B=LNTFf{g(kPKz_)&)4SptFp*y)A|0FodwE{FrkoQb9qp?M|| z5I}k#nDt`95}~N~JXDLGUWkB5+Zl)vVvq=A#>6ZxcM;w13xOaABIAmHX)$9G4+-B! z7y(cO1gRn^6%_$N)dXbnA--xE_0ymt0(MWjU=TGgh9=C**lFp8s3)BpM=~%i>bH5{ zm4)H}(DYRl$n1YC78lS;#Acw??3bB-XW)HEHR(8~n1VQeCTd`S2m?)woxTvtL?UEX zd*);WCdO`q_Z~aA3vEE!@Wl8G_^(bucYBnv$eL%0Vo<9LBtnY=Jsk>kUr?w4Z~H55 zc>XmHeAyU+OWiR86Or{eLMbp<$(fjIcRh&J8}hX0JViERFg5Wqe2FmD*YnPqbSew* z==z*Ah@pXL=xmD^gQ<06XRogpTF>|0Mq zwEK&f+TpEt7C~;Ftbu6!coYT$(?%5(bTmQ%ac*@Z;GZ@H(c7s|bEfaG6n;4$)y-EW zF&LOKEhAY{t^OMqnAMGM4ot%4ZFzWoZA-Z}9kYTrW}xN7Br}UWynh_qK^z|6oDYZg zkHN+6IiML8&EZfNyKGumQpv=+>-DqXu;(+XipGT(yWGQ$Ni_GKjv0i6rlxPf!4uC| zvym(QW=>VnxbWc?-sYqmh*4FX9qXS74F6<3*Xp=EB@9@E(#oZrKAA-JT-j$G zNHFv}bpG}gw=T;Hcyxm33^1!F_xTUQEoImgNDFU5^Uu2>Fw|*Yvt_tU_E@Z*90;C; zj?15zdHWVyUcRSR-HYSRx^(pzII>+(zUU#-bR$!v=GBk;`VT`}??)mVJs60yP<_FR zW|RFlTH()u7O>f}!R4#~S+>)QXk1Uk+9aBtGd(?tzts#aUGIT^s97lZ%98CvZJ)ic z)a%D@S(fQOgI z+SB{&>OM8Ll`1n^fxGW0N7LA7ph4$;@!5`D_&`U`!a)H&8qIU#h + + + + \ No newline at end of file diff --git a/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e52b921c614c3e1b75f06917bbfba90b20f9d33f GIT binary patch literal 2441 zcmV;433m30P)yIQ=6+icOb@glBvpcghvoK^=Rwj#yyCEy6G5P@rq6Ex_k1iiffEYgU&CjC$fkRA8 z6cULNT}C0e0pSA>0xIHST;$<0vpdgybWcC4y1VZ6ocpM%er$Iyv}-gwox9alee2fw zo%1`7duko{KlpR5gSZaj8iGh9oW$JR!fjPwJ|G#~0a6~t%Of}>4mLzt?0RKj>>VcI z&1{ODJb!-mt$sK56e69@%%yWvKW5xH0U-VhI_4l`bJ;In{-Nj9HjL7n1B2MRcj1fN zO+VxN^;;MV5wIa^zn4{{`XYh5u6rgSYxit!Zmf0#!n>_7yKmu86Ot>Q?-78ynaAS* z7#k)Yrao=T<>oPU&-0c7mU$7GG2hJ+i4G@8x~WWVaybZ^w{yk`fZKwak%>89BdNdZ90!_Rie+&4v&!pbCO^kn{l0 zFGI@B!uaSM%Vz&fHMN>6vy5 z5P*Y=$Kb^AWtf?ohpN{=VT9Hy35p*fl~e|hG(zJgp@mU^WVfSGI!mGjb}oJZ&%gQu zSl#>+0!hU!q7BK|OZlC(yLvlzI{>r*QD}N1**|$JKh(S^@SP+ zhJN%+2mE>&mJWUkMzS-g#72Agl~+}EXaN|^Odn8AT&;PUBKQd~0^~**Oipv{oMt`| z$M+>{Zv-eD`IDYYv10#C2}q@wv5@u&5^rZafZ}d|me5qAaGQ1~kh+UdD6X|j&91U` zlFAy{>|_*$2mlI^%`v$9fh5e%cg>gZ^6!0k?=N*DEWqI-Nx1vIOxOIlvDSoNKUIWM zK_F-ij%bulO{mb_MfrW{)Col;wJ3}dO=o7A0^oZ9bw3(jO+WC^VFywubHf*q#^dJ? zCl!ENRbmPTbsr6yKYybGa|;fxE0tBH9YPGR6j#y2hC<1;g}92QKna$`w9B|YQ53Ry zKsmWqsN=Af`Ls4It1MuA$L5;B%ftceF;VW1 z8!Dltd0YMUnSCNw2ZiNB&&UleWd;nO)wnNMAVc0`M^Qs%f>;4}5{C5r;gtl`AKj?D)(nNC15tcO6# z0sKg3YAQFj*7b%gon_#r0a9jUG7KtZ0XtjGSShbV?Qks-6Uv%qkT@<({Zy|@c>R?M zCN}}2<6M;^I@d6j47b)BaQQ+*(>A{M7o5*$XY0yxwsvYS-#@!g82S(pJLEt<5&07R-Mo~-ddq=gA%O8I4&Q!oTmksU-)eAb zWjDOZK5M9S3OOpwrp@lB#g#WB@x0PNpIE>m@A!!c^}{niy9{6X#t7VSlMA1G?8CE9 z<)K;)R9&SK9j?v=3^zK3nbcZ>9@Nw&0)SPrUcYoh^gzg9*{aro{d z(^%!EA%Cd}zj->Zj>#lzsbX!;7>*?vA?2niAVY0$oNK~5?gL1}-E8sqzk14&00tBzIZ#u-$nrml|aEum2G(M!{@Q z&3AvQT8$}Z1huDQx(uXoY(40jc5vAOKnovr19kZllT`@h^D&^b=62ZDUl+w08h$FZ@p5u6Q;(zJ!N6T8nH=t3v4e| zTDACcPk!y+zj&s5ARdIFeig&HA#`Y{MV{UlFykK$LyW^TV4SQk0*C@S{srJ95@&Vad z3e;)afh2sgcyayFf!4-1G7DqVb1!){e<_hrFItkFb6M}b=~ccdy24s?p%Dn-rqii2 z#Y>xa;=8-`fyxe=n2_E*=}hVjX+WD2L?=;(0if$z(ms!#j{x39dG0j;oW722lVG`2 z$_EYaIef*GMH3%W8R*))bd2@o=9q6jED*(8Ln!WztBCdn@U-|nt3Q3})NN}Kf00000NkvXX Hu0mjfCQ*;X literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..020380a671b8127b38e6cfcb3197c0d4c0072e26 GIT binary patch literal 5962 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 literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png b/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1cabcd69f09f9cddef0ddd3ed42f5a0fd1bbefd6 GIT binary patch literal 2190 zcmV;92yyp`P)>Y~%}AVgo`Zh@c=q#F3&1MM46UK$P%6-trH4MLg#xARd5_ z$T&)31woJ!3mm`}ijp8fEHAzgF1y(4_0FxQr>i)ps=B*+wr8eiccVmv(YAVKx~8hW zbN$Y#4e%9s1z&?G@tWVYU-5l)<+Austs%C1v*W(D1DyD8Y<#-`iOp|bKy0IdC@l`P zDKKMiV`0w$C4>hlV}0ovREbs8fbZ#jt*Uu6SJ7C z&(fmhEy^7!ECBwwAeDB)>u85-s8x2LR^5SEMx}v>vgX55T5Eic#hV|*;w{Ipd*@+V za7u&VjVQZKWj`p_M5O&}A0)p)`kg@7ZQzU5C7iqP7o5NJCZ;AAv{uTPmniGJEUoX| z`wM*g=#Q~y=S}c^AdX=-Rd8X*Gw0%$luFOvi@I38dJbp)@dD2N^Cfy7mvZ`%AQpBX zptU3(`N1=||L&jZg~M)0>Xxavl@@j;erctxaY(BvWp$APu+Qyy@OAd&; zukhMi&)O;FP!QfIA7B$=4KRQxiV=n#jh)TQqeTVXh4AfX^PZlX_eh@8-SgA2LS)|q z$+$qz+wHapkHpbie}p@~`2?EnEAYL_&~WYzi$d(g>;r57OXauJs+xdq=|V zIP`x`{0I5*JbxT__5J9rkK@q3dl5zr4SEm|Z;&6blsF149yx|x3pb$~hFW4OS&+0J zMJl~|U5SXUF0J3|sf|FD`M%p#W?X3A>(8Ooe&GV?Mr|z29VQU>)0n2#`k(|G4009D z0USnm-Eas2IdO|Vd!%xfI-9TWDa_1?EK%vr3jMqr3bdOtjXv6EXp<9@0@bR>fz!c@ z?u~{d$5tk7=<&3kSH=A70n}?VI(H08NpOM&ov#5WzGW_HGvXGgcrGMbB(=K95nh1^gw4W1keM1ASx^z$k9@zFbCJ+7G2x|2 zG9LtnX98~|E7jshPBJ#659AgC8EBIS%zYSPWPxPPt@@b2a0VTe;XATF0}q;74bozH zDw}8yPRLdxbP&`xP!fbpD2V6gmptJeJ7dFWfYppEBc8|5IY?EgL3u9q_!nGWfVY-GAEVy31u;BB1oIB5QtVo z>hGAEKm7Qt2C%l;!>hktOEb2iKX0l3a;kyq_jzyN_l*;9q(%fl7gmNN8vLOc4Zjw_5rViLZsi_`d zli>&yTf1g6;!5x2@#~nJ@^I)#Ej9C3Ph7*9w;HI{M5<*M$RKAfT@(o$piOaCwU+S{NHHw)0Ovrsou8qR<2bL+TWLAK^F8uj2BBt~QZVudm}zC$H-oBhg?^dzRvG zy|2bKCuMu1ZE7ucs7M#oR*^P3G5mg>D!$soOz7soowGP=X>gnYLv>-HtU}y|#p?7pCDh zu>&qe+f+kuXv5gdo>YDPi7Ox=%b)eMR(K3Mc#=2Zw1Aju^r&^S*0@M(aqo9GJ&Ovv zf!?tCnj5?4E}p{5>Una;3EezMbB1U9A_z<=%6Fgd73d^Z)UwG!F8?+$wIaWh2)sI0 z*O&0|@@dlGRIa62D#S8UZjmsE^OsNI?;pORC8Nzs15vq!)3Q>U_d0SF0kDBV+qyJG zQy!qw^K&Wa!W@TEGXZv(|7`K=>*<=|Cgy%3~MTjaZZKqzWpiOcJss3&^o9cEslG6 zUL{oyRDY)=(FFR6A5;4I*gVc#)U9}g4-+)xzIo8(x4 zqfprsqD>z>X0&9C(^FM;h}zU~u=rm%zuxM3_W$o;{8#GVBJlOU3T@x(OAVw5if07*qoM6N<$g7|7K)&Kwi literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd65682bc82c26c74bb73e41fc07b38ef25879b GIT binary patch literal 2343 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 Eg6QUGlK=n! literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png b/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..589ad3cceaa57a2d6c865a4852bccc44de55a380 GIT binary patch literal 2280 zcmVP)32Seeqrry0x(^-cttdr*x0Xj5sRcLOAsD@fE0`%wMIB z#K@s3_|VC-yc>eBg)sEZ#^N|8AmF+=8hQOJWk^ii6c2;}mVB+g4Iu=^M`ti{;*{Q; zB?uKu)D~~VoDzwwJ12$G$8O~|ws%+cjN;&!{{G(jlDKaSOiazGmS0D)FoKJZK8LxP zk7KwriJ?*%j^i3FC_}H(<`D6ujA^KtX!^wb4B|Ap`4{QRd;Dte%O;fJj9m^f(SVp~?yFk%=`(eE*Hk>&Fo zBEb8VF>=}SMv`Lh>MtB2Uxt!cA} zEW;2fZRuOYTM}0h6DbDF2mQU{5`wZw#QS$28}z8h3>w11doqq}}?4-wCg-Z9_1dOcpdTEC0A(@){EpZIp- z*kk2cb!Y|{ZP;Pi<{u`rsWn29mI2OKx@g`kZCTh#GjeCAZQa6 z-d!q89B{Do*0e^e1iX>dHh{A7Iro&NEaF4^0vA1_~2rBw{9~ z1*T^loEQ=Gj0nRC{x(9~_*Z~hwT+idc%dk8?!z7?%C2UBiDf2sw?e#o!^hf6fCR4S zUqCTts8Gh}&}q~oEyMtEAOkwek`#CW#`&S*gpnvS7D;mQl)!VB2H<*zkQmF@d>qHa zxeFeC`-?i74WohlAn?qW3z&b{(@Z*|9S+zT*i-oe^UUqAEr45fv^aoT?hmHMV$ zmw#dUY*fm2V%nI46gzB;>oNlI^B;Bfo2{1FJn+pRA4H=L%$;*FGA_s`Bnd*{#IU1@ zZ`725U*8OVr`0qJJ@)uOqOI6p9CGZK@GQi44vY{HhRY6zWTG|3L?B}i*EO$?jtL{p zI1cc9SL~b5Yw)kbqfU|&B}2w%&1eF8Y5P}7_1{+Mnrn187OY&qXEJUP5yubD zLlUU$R~dnp{?pPyj?)qqgGL|4p3|$SPT6Be;?>K9pmQH!Z#Ts2f2mXOQfM?3Md3cbKcWzNc`@lJ-mIbfzk;_=Th;-zcpxZu2k9G z9}AA%nM>JY!i?zCk)sSVn!b3wrM1BM6q^kbf8k>T_}Vunw5@#in`@dmUEHKl=%}4J zyV|nq-o8X*rv&uqwAPrF(dHit2Ir$>Uggg3OR>?LwN{v zP_m6MzArI0?&8_64r696hdZ}?%s-UJvtJp(V8OvZ->TzRKi@V!V1;F+RL`=#cOXk3 zQ?;>LW-B4y&hZQZ{2Ws5GRAuyW(QHmoi`ZQKR5cCPXMf zEsnkF9qQGXYDj6jp#p=TbY&^PIXpc(Cd#E-xbWxS14zHVf*o?TPvAwrKOswmEjg-=~ zK_Z)6Ui39Vx{$Z}Lb^b=BC6e?$mIm?tor!%i#r-hJrAjdSImH}#)z~km6Da(8V2)Y zG$-g9aGhQdw0!%GNDFx)OePy~rKdX(el!B5omF>#gzBD{=}w2Ks{!*l9etq%#R97| z*0HwnT2B;mvYdpw#06@!UR$_=8#n(%ZN4Frg47!%#K06Q@f||#uc~Y&;&>w3sdkD% zy*4?%TO#7GVsY(d4CIG(doe5Bak38_OpBYl$FIEhBP_1`83k(jv2Ak4g1cy;40Yko zcSS>nQn$yGp+e2Dd1m6weEYk2E&~R4=kmExtZuxDHx^#d4jlVrR<71FCm5fcQ+`lG zdHg&+bMaf4J^6%gI&t4fGD=Ci1Fg~x+*E2DmlIKkI`JE5p|~_EbuydHtD5+&UFwT^ z1+9^Tn!BRE(-@ZsZV)o%@satbF+2SvN`qz6$hh7-Zk4A}@5tGu_Dai{(S}JVqhUsy zT4R&U=5;LIdRap^gNTZ1(PJ@SA1U$0y-L1@ho-4>Hf8l~Vr7dim0KJHJM$=^8K{xN zR%*BOGuymTrtIs;>5wNhvx-}Mh&pGy`GI9wKPN0AJ|BpVn6$&HzR$|UQBNjC(l);z zS2{sF%t4>{Upu^h;HQ)yh;!l(%t<}||G!m^fBhGp{Phv2S}{fd00001{WF!>*lJ5CA{D96SUAS@9;kU)6ZF%SesFOVW3A+2_HXLsJ+eRIz3+dbX4dv<$f zdZm>#T^h~KOi$14@7(h~_gn+|#|1r%J_LON^a;>E`UL0`pnvoU&?i9uxCjZr7)x=^ zo8n?ddcd;G(ZSIrH>K10du`jg3g6D)NgIIkJpRq;D;EJS&Nvw>;<%4;4sYeM`t!9) z>Gfi9>SN$`O}+Q7@k@Y!rjg2|ja2%s!J#D&+T6Yu2Q_$!PS{yp)A!8IoO{%4Hl8(` z^*X+%BaAlEjGs3GAmtf%evc32NAJoG4E-_Fje9J!NuSaC7Cy8D34NitfexF%ru){7 z6mZLYs#cx(`^xOpa}pE{X<&DHalH%pHJ93B<7@sRoy-5g;?@SRZ4<$_CD@vLW*0g5 z;JXL9Cyw`MaoggY!RAah{~%7jfqJd-0=I43!3OvOasWeuaZA&U;nA^`|AJJ%kA4>i z)xZzamyzxykWJ)<6w_!v+PkMGPk-CC%#w>y@&u49hTsp4jIDeeU+(}%4sk`?Tuz5A zB{GTRm!>CAeOVBp197CsMW4hDf}ch3AH(0dI` zOHK!*h}wnmRez1weMnMQy9DHWl7!%h&E{NgaIjh_?UUH@o<)#r>!P)D+rUs^uW2?j zQrT*~jhJ0H^6?-7(xB^E93f7cVWgUs+2Rhej^g+Uu^=#v%+S!-GGr}&2VS%(Iid^m zRTE|^I%{M!;VtvTr(xKeis5nLxHQzAx@L$mbzx1qM-#uD!n=IBG4KsQg4(6@VV>=vc{DgK@B!VeCZAzJvsLs%HYAnUx(JUh<%62`8&#p+Ps)Xja7EYgS$j z%a?A14Qp?P)hn)nq5L>lq^~404p#CfIQPI4PfUK!U9h?Hck4->%LCN#uHk;me+>j! z(^4=~J`1PLybB+md>tkxkH9ArzZT<2rLs6-tPUkBCy%112L$;_|UXJLG7E!?{O58*RgehUe(T7Y08?v~~FZ4Q`HAo+l6z2=^y&qJ?y z;Qbas6ap!qyT2zG5XWig8F8JnlZWBJp=aQYcOHRa>Hm-$20G;gSMtq*Ro+^hoIKhS z0hX;;`*72;{z--x^tcKZV?sjQY`gXWxbv3p;*8&jfRh-iIzK8LY6-pol(mT90_LB+ zyalQsK<~BtnR}l5mO>y;BFXc-YuOx)dK*$k4)uY7T<|`;_~t*rfrC#|kkNI7;}St& zl})FhtPJnl+$Un@ zo!$QTJ?S4Ie%ikVA6K}XrE*%(GSvhTbkq;)R^5c$Y@vR56?8q_2^Wycw2=Vcn^Q-| zxX?9m!6$`FGM~iG-M9S-&UlVDVmh9=A{JEeIak1N#fJ*MD`rBXr9Cm?g6~(@G-lIo z2qpZv>mG(J>+coD1aWX|i#pt0rvZ*HSu13|fde(oM$7W^0mlP`@LMJd z_=^1JJ`VAN8&=TV2Pkjz+Y!X}6NS5+&_D&9gdt6wf8gr~trnO#c^fv?f z;NszlDuqJ=x&d0>(=_M0;@Nji&HF9qbvv_`w-f@3o+>OEy;3}E&v}H!P!-|Cb|}2C zVcpHrYh?ks?e|_?T960Oz%-84ROB{&Jr}LE~<~l9BZyR#dGOacrrcqo_s_AxIi31=fc0OTl)~ z2`Nx_)>8-~lLgrJd9<-NXpqUw9hP2x6^A2ugmol19Zk}K+_>-ugs4j(h@DJf7Uxb# z7abRho47OG55C|C+quCTZZY7R>vRF49V5)5<0w}kw|rqo2C8KXXDo&cQVvXtt=YZemp z>TM}wkUC`$i9_J4=f}%-JI_m(>*5ctn#KW79TsnGsAqCgl#_+62}V|j#(GM331z7f z$8qp@&34V$E{kpC`MSP(Pcm6wT#Ar=nc`9vO9e49lmg1C=u!%(x9mPs;yV zNHa7j5&{X7L{dNggo#hNbJq35=Sx-*eQ za#;^L-ape-<3YU7lE!}lbO5xePVl&ZcPu8t5edZ?00*3&6SZ6oK?gZEkj`X_)e+;Z zz?+&d2j2V0eMV2f*9ZjPSa*6}q&4PNnj$gd6#zi6cB!WcbYAiSd~Wb#Ib!kipdK)k56BHLc1>W!CKw<$iH^1Pd3b`mXIeW^2AOGt# z+#*5vcVA|9cnkB(Ik$B#DP zCy!v2#-JwZe&k7^*p7S5l#pXGPB!e5Q@C`>k_JSZ+R=bX%@-8`f*zwkS{5jDV#&ts z)k5Ahij!K^hVqQ%3($q*`=q366&tpHegN+Oy#glr8SLLX1JCX*1s%&ds;C!-4&dP^ zrQa8DZD%#g*sHG*xd;Os`Ay;|h4n)zBt|+d|CX-}e9mOC=oT%W8*dwc-}%m%0H2QA z?;aALQ?*5OAun6Zp0F=Yuhv@nL)A$s8fYV{{h;|Lf;^98d}Y>xjaOyhtH0|MFWZu6 zWJOsP4=0#7gx0MsLIOnOX(JSI&ojs$?oh+VK8|oKoS-#BAlIrKR$q~VuYbEBtRENr zDvG0@J~D|VDz-?@M~0#yc}Fa9Gc;i7C{9ga{Z=AAN4VBg6l>u>SFF%$w@ig>{ld70 zGJh0nfOIk2HEH$idaQ^Qa(cOzKPbTIkDGAq zwgIPzONylbd94i3JTWaSB%6n0KjDQN$y-5M@+sknA}pVXu*~k97_V=bSmZ5p0ZQpR zm6spFN@ud?U8PHo)w&HCxarnGrw~|z|Nc8w*!B37C}9tX7S88fvB?*6EXY5{d6XlD z08D&hdAR@{;X_0{L|jLnOhLEOlr5Df53E6Ok7u7OArVTR+3BuFaLW)+pKQVtk4`~( z))uiKJE9CxT_xjR&CeHoFwV~fK3Po`1}Vfh|GS24@06+s)>ub8xO~oLG2)59zwvU# z5gE3cC~2*xq2JlJdj?+kc}XrwV#4tvqD`GM;nDA%gNd`IaMDEJtqr#Z*Eo>KGoVsE zi(FL~i%=GwBgUxRi{h^P9W#o}P~HAZ`zivMOvFpg_AT{G?2G<8mglxGctBSFjXMQ>Z@BA_aqhq?GP`MH_F0~=7O zokIdN;@7_~JO>bK>bNp;22P)SPb^|<;3`QG3y!cRMDtDJUYt$Gjx^!O2aWI|zQBTO zhm^E7%=KK=g?V$eDzPf@Qd<4%A z=_15Ti#i1Os(}!>Dl#hC%HY(*FQDEmK_)faOJ}X5bpRJcm?$0=4UdKgSD{F%$<>mo zHQ`(BZiQ2rA+<7>*6rt$Dq9hoqm=Am&S``CwHI5F)PVGk# zbQFmZyNMG&&%GiT{NmjoiDpMBBk#2P;tx!M)b zJ){uuNu2oykL^O$)zRAE1X>j^HWkkYutkrxV(B=%`u6ulza8p46_tz$h|mIAG*r6sIUm2&Os@YPcB=w3kKy3=qDI-1y_(nGbPL--T4dfpJO^xKDi z2p@j@tl$J5uProJu!F8UW@QJ4w=<_@Sxj-nh4MXq>P`H86IQLbP7Iu8krO~;k^LZ| zTFpci^+wA3s8ua-yKpJsJCg;uSsy?m)ZwjzKY(`*|4^8qoi;|t>+bEjWm%yxo;NM~ ze%Yv6>!d;JM<2fm#pz=(h8;$R^DD({GR=BuAw*=Gu{PkhtGrgtPp()GxxQ>49#v}J_|^mOOBOr zrZg!k4Kd#0%n>+pVjmnlz8hvLC#2Z9fNd*r)((s>`}B{n_uG9qtIbY*2fE3o<@63% zI<^rBupU0WVw)huKz1A-W021+RcbFg=<&wmw6)|B4WT%OPEJAtz1m7`0;Xm^g45_^ z717h3EPWu9ucL4~YTOEPUjf6=jUP{(IsW@SH*R(Gz|hY8@c2`<*|cPyL%^m1w9 zE49kZlZn{)xJgfDcy!rMFvPGEW1c-V?-q@ZsBt$bJNG8%LURE-tb6@S8S^Z*E_+6U z(!6^QHt)VaPV?^g?du0ezc?^h*n{osQ%SV12Vc9@o7@7n(UIIHKEeuDAE+Y2d;OzfrcZ;v2wlER@*XxxRv$?^oNZCyn z(WY$Y4_Yq5Jz&i zpx08VOaX1*&FIl;a+eJY{JrBZe$c(}0vEe^r8JZ|d#dH>?~=k5GM{x0evjaYx-=3y z7WoP8W}evEaR%Q)b10YfAk5^CqVz`6QECk{?RAE bMR)u^NsK}LpLb*+00000NkvXXu0mjfF;+pk literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..375122019cf1142123e0b85f371cf52ab6a6bfcc GIT binary patch literal 8222 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 Hu0mjfQuRip literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cd54ef60708ed71f318e6de6d1530646b77a4b2c GIT binary patch literal 8327 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 literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf89a7884297921ce3c911e85b8808162587aa6 GIT binary patch literal 7940 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 Y^hbEO!8FHz060KiMn$?>(lq3M0Hd@}zyJUM literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c4ec970f3de3293ccd547cef52e1335d1e4b10 GIT binary patch literal 15896 zcmZwuc|6qb_dkvgLK!0|+Ym`2`!?24l(Hm5jAbmDDaMv{Y$1#-WZ$c)EHPQL55|(p zSh9^ZTbAr&&;EVr`FekT|NQ=NoAH?Ix*peAu5-?H&izE{>)nGeKp8+F5Jc<#9YYX^ zs^s+VEFJLVyPl*l2&6Khb?3GbW@IJX&%m z?lso>N)6c z$PnV49Cco3ZD^b)WdwBdz$4OWpy9EXk0s9Rl1E^`Wv>A zy43yE_W5=^Z-q$C$i2pnil}^6Zh_F=+_CFx6~D~)g;STdR2Rdke4+Y3MV=SQ`BWeqrUh9o%hMvb-4* z-fz~;)EM>X0$=E>3fpIEg^cbvMognFt zSck^;NDa#Z%_qczvg}O=U#R*cKZE{xRHrj*G1UAaEt~Iv@gZC3!?S#s0&W^-&$xKv zpd!_hOTxmQar6=e;-Sn@2ylJY(8Fp;F4FL_Xw(rF?x-p*~J;kT&5W_Ug6V;&n1(Cj~m|7NTw^SwGVdh-J2a&P<+U&{@v{J27YG+ zJXi5~ZDr+h626UxIwL3bfU{H4|nA{ZFuWcYdCtf+V)9mGLVKg)Mzj++>CDk7iZqh-0#T_JhmDw3 zW_6)Wvw{BpGR3IRrfv#M0DmJx;ve~Nho9vOZN2@}HXpPEu%0beBa~SknH`yN!FGz# zarGs#Dmr1*Cjr>(gAX!KVO2XmU9EYoDV!Yc62QP0^EQyM!}g-0F1=D*SiWE8DcP_8 zriDXdo)w2)n^4bE4jjHbPP2dJAp^jGw`K}xFLW1L!0Q@Wo!jYh?9FfP!2s`#JPl1b zTg~2{A6L2qY{$Xo`}gdGJK*R2p83vGH*THfGx{(RQqAH{WjHs{R1M6yPhHDmp0Oe5 z>E*Sf%`Mg%aP+nAl(T&2nvxaTlQ@J+ezR8=^Kf$dB!$ER!&ziKI83a02n`)LO+Z)9 zaVc%&j()_vee9kOFd_^;aF636gcw!BJpe3%yKmQ?MljgE+j|rECx1q&?IQ!}Q2<{k zvs>x^zb^;y-Mia>6otBk@vU#(fu8(2U8H(8Tt%@`=SQrb;yQ~x8h+KiKCX1_Zu0o* ztGdpD=M%|(PmR_`Bh?IyPkfTC@)uq>y0O3Du}`L#KOStKtUNw>hNLL8pTL3d$!qYv zhLxdA1wN^Zb4pL=jfYsxAHE2wWZO<2fn*55`J7Wxlo3%MB$aOtim$*tcv!h zZdZ<9z30FwyukzK%7zZi0y`YDWIDI+?$tT(zcj#53^kJq&PdFz?X-8l<&h%j5|LDd zq^U&cCB(6_azPU=ptpV=wlIEFu(djR-MrG}wfGu(CdI90tlrPtx#lZ}^|dbLGx#u` zk`znn{V8MpCnW_;AJ0x2Kk}RbTM|hW-gINbh2TLCd2a48!AzCcPUFYA3-0o_+*LoR zn*30*x@6O$t>d}wBj2w0)WV0+wEZ0oD?j1ABWFf);m!dQ7_t6^@xfHi;iD^Vm>U}J z55i1p^7KvYYo+~GvhU4=4U(T5lp4J;_)P|^-}sX=C6zuT!f>it(^Pq3ukXp%D$Hc9 zgRPFF6h=UPt-wMn47Ns%xIJfy^}Z}Z_^3---|o6Mv%ubwSc}x&QNTp{&#c=-`6I#qXGh8sa&OPv2pDv_xJ zu++yoo9EnCIR}44MoT1oR+ej@#2s0*+8P>YIlpUM!$q-jthQi2T85_9&y!iIlctPs zYGZ83M0`AJIravj{nxPx*GUgr?3kZjRx39qttCJx@(Wn)`HG3oK&mt$DzgJPv!(i< z2OR_8_csJvu}13o{o=u6X@TK8*W%B;FE}NMAH@OnjRv zEQuUaZn2N(V=mYHf{HP_GGeNBuS?}f3GO<^Sr#xKEq%vaN*Z#$aFA|)*GU*$(l#vS zjd|NOBN>261%EW+#dI0Juiooli?v? z|7y@C^SS4^%wlJv3l(Kq97vSz7i&+Cr*d?y?g+o`(}&xUBX|&tLtl#-?l=XfmYqek z|GaiVfM8^e`Sf!#N4Vm4F*u9j>8bT(hvkk_03DJe(EgM&Rz{&wcte3$jLZrTXWTA*3c!w-eV= z<}6lZO*H+czJg)R*y0VbJJTPUdmiu}6|fTyN;BpxTh#%f+ds?eD`CStINtd>IQWBR zsj>C0AvKqxlAo8e;=(i9T>0WNh#$>`i(GqYozV7o6M3&zTgUJ=V1ki_p2lqX>c+2! z(c^d=V|$O#)NG-b2_40-q6NM2q{nzDT;fDTJSkX5asXjV<{&aL_NpcYeS*F{D)y#- zX+l6jkg4z%hdi7%;F|Mn&Y~bEH2n+CpZIdkqhcVP778@aUcvWzUVXX>0)vXx_P2It zv-*k)JbvhivI!fbVhX}9m1BnqIuAa7G&1XevSh+r92wuue7RWsI#czq`h{^~%cfQzL%cMX+;OhKQXv!>Y|8z*{* z_TRzm@gAmi)wx17CuJ|CW?@mA;>dWo#-7-G((M7`kiMUTPa>%hPpY!#Z!c$%(jo`s z=(v#Nw3uTzrbtCXm*Q{Xsx0h_DWomHVN*Jf0wuyFy%tkjoDo5mj1`zBEqh+MVaO^wyF;tqP}zl3wa;7>m58>kYV$4pN+E`YRG80q8Xh8 zJ6-8n7M1}Mwj?V$@q`WmQ-VA&!_rl$&G*OoGJTD63x>T$nY;l;uj~8rO4#B;O@;W_ zgmp^w0V6u?jt%HMI4S5iyhF!oT6&-E{a?npZ3r+bBCOdyt=2UE{v=Fmq`#+^kOnR~ zZ|`LgyqDA^=O~Kg(wvul^$UMn)MyI@$-+KruMt&*Kxj^Knn-#Un@x?gFPEyQH&sUz z84ZzY#S%ZJ6D;4H9vk58wzyXS3ybZI&G>hMjZZ?rE}j+haGLAJ^N6*;?$2qk|Iwb2 z4e$(>3+`@6_eqPZu>QiFvoW^hU34UTde$$1?}{2p=HUuJy824$;4JW3|NCoe76*-Crb1cR(>Jpw!+}tIb#eDmn6Vq* zd#&0I8K*ycCc;_R>tZcN3J^iETd4wsHqT~8Pa~3OpRb#ZW#J;UsimY0N6+>qzy00J zNNi1g{=0yr8uy5aKk9w5n2 zs4<1F2Uh^?__v#|dD*R9@oKZ4dXK5Q97>>}t=h#hH9j^5zyoO5;?%vMbe3=2mg!TA zs$;+~P@!SKDd+wz`}L3P)N>+=LD*9kFdGG>mkw z@SjHf)5x>7IETOo4+B2rKDAL`p&Bx<^jiOXy2UVfh-vHIjkso~#A9DT>NVujap3Nurs-$oRgJ z{a-?guoh!elzD`pMBO#pa_kV2%$)fIXJ|`iw#B{7gsB(QUQ06J}pbA_^ikvgJA0P!cLWlHpYeIOM3`H%{h!9fgs*b8b7m3I^$d*V znrBdu=Rfd#&Ka<4H_EYgBs?Dr5ziN&0TZrYos$)#v$i)eC!M3x^Y~8+fE{}VP!Gsx ze5{Ykbfn_hF?>A(7G$!uDQ6Yx-(=tAgfb3EzZ$|{ z*d-L=qy#tFW@i7=hV>5Sq-*(Q8-zU`mEr2DDJiZJ3Q+mlJ6KoCl-jVi3jJ}NkXw^3 z=LVAeL8M06;$~VOZMcmL)4~ZKuWZLSs})D5vgRH-dV3p;`}{5;>?C-XE{UL|*&OuH zdRQ~&G?}R2^F(X zC(-)%rIO-PWcKFIg52La1Df>~hYh~Nl|FamZoc^QEGNaQye;7(*zE^0W_;eGk-$~2 zz41k6NrxAT>Q+@0>Q;pbh0ql2XZD2J;;yM<7DQf+&lsKw(o%wO>qvu(-Nl8z(-xvW z@>tAzy!5`UHr1Lg@LFYq_-=Xa(Sjse_a$HoiU?kh7n@+0JH+d4b1f+2nm!vnRKtIo zL}LJt)MwcpS$+Q*UoM=}9l8i7C-Z(zt=V)>@U(v&uzx;trZhZ!CJfT@Ng9pEJgm2P zG0@SW_6=%hVj-i`g@8+-8@+Gs``%m5^bR{Kq0#uM~M>SCMFx> zfG9dKqM>Ab+zrUTT~veXk&&rBFX8n4@Aq#{sfx8S8cXzE?8eP~w|_b?`jmVYf_TKQ zGgpyKMJzLal_SWu=+XTSCsHh0$$0eVW8czDZ6-=fBc!fWABvEFQTxfR_ttDdDFI*e zX*hFFPJtCH(9rAF{?rN9-%V#d9AZ*yi<2dYABc%NOt<_gotuN_Xm?bY=1XC6dMr6A zi)vo%2(@xYg>A^JwPSWAGeJ7P=#r!>oX!$D_#S^+l-BwZfu_-(M4m0>Lh(8YYSxFR zMm6E72-0UuzN}5WVQ1;EHR)Y|D%Z8~C3Q@6i7`-$*)3>xd8sygN^ic7G-s6V6U_o7n%t*^X_wuzA zn|BZ)<7z#PMoRk#VA6CS5_Re8USwm>El=eP`b^0&=I#cR*z~7ATi`+Xu6lAhYn)ru zBmC*rth2>2W@CHky{RM*1g(qGVZviodP6^>lMEzbRdch1=*7>SvK9-Uw=?<@<|7$| z>L=mF>^jYOo3fnO8;yleQFT#1q7kuaFyX9hC7viUE|je8`0UF!yi~)!+3h9$W(NVp z-|;qLseWY|OxIh1-kL}%fCzQNf80_Nwb#$`9Dnt<6KX8?&f>-KtDZ|fm!dSO9@q8h zi@r2T(J8q}VadzFCQf)(_*L%tiaX*KJKUePx{&j!m9mB7)bY(I-#RJL;`7er*LEFH zV)QkpJX>6@%wFYN?QH?v=puL=f8%KB_%j^cl|qnR=~+Pc46e-h|U&hRIK2c@Z~%F*TDu zE>a`Z!9CY8VVA&2>f(Jml(oSdcBLFudrT=t(X7+Ts6?5qJsi$Y(&F|ck{awFjVARt zzVW=^{y6)J3sxEDgGd24G`8`ZLKu_b%qe&#A#Mksk-+UHd z!ZmC@J!rT8!;VOU8LIMD_28R^fgczMK_4`m$C-X-BmfIV{j$%$ zG_C=N3}l*gV>=D@jI&J!NLQ`DjTQf}Y^lK{=f)gjfBHlq7Q~83rp^QT#^xC257NN;bv$4_4d5lz zL>;M3Y6Q2p@>Cd{CJ4U6Q2GOpdmrUA$!hTXdGt?w{M7uN;lHL9GU$@m=_ZkYm7*dT z(n=(+KzVn@@-6ftBw7sBq_@g zKEMI`M_Y;lq1hAI+?N)e9_A*zjlV+~F9*Opd(&g>Z?5bZ;8+S&GY6;Y=xGp3zG%k3GeF&Gf4Fq?KzsxrI% zWHKEltRzv-R!>8m>e_RK1zC^4)-_)~wo^MLZZegO?~^ni47*7wz@F+uTSLJGgfIue z%j+^7;)2TJs#6OapdIX>=rah^DM|4*ruR`0V^)t3i%XnTr$ff;`B|HC4pp_J6d(aj zI)DMQ3Qy{;)ft|WH7b}EIIqYcaZ%XO=P3u~E+s#lF3H15jk}8=VvtF=8c8$E4$iq` zoVr4Z8o}cNEB01wCRv;K$xL^4JE6jTjHEF}QGmXUo>*qywLd|rTw2^y&FDkUFYezW zwzgx3#;aYOwRabFLW1Wle>CYlSP(<4Yf}*=(eI!|Bs#q0-!+oZ!o(6_KubND`H z%rJ~TiUpDQqIN1W*t9@0`LW-6^`cHAUqnBkCLNGUN9YAfunyV($@3U&^jRO~^Epc9 z%fiAC?I$Z%zTEE6sPt3k1Na~ytyL#`X^9{bs;hzg!^Clt`S$4G#lraWG@n!)`RLt4 zFGuBNeBbMpbaBKhuGj=e4%%D1gun_ngF=aQ=da>#T#rl zh`4NSG`BVNev1_Be(kQ3mi@vjL{@h0(Ya!07d45??R5+3FF600^oZ)w0p?RjuSMw8 zOp*^Q{@w-0dRjDR} zl~W&_)I}0t*Lce5Cfg;6x^tGfYrTNmGL-75V?3hCk*KYwCH%U_wtieNlJk?&5MWgn z&~{&_CGl4_aO-fY^u7pqZaTvI@fH#@B8cr4Y}Ax&yurX@h1&e`>xld-dYC!{>ClBJi2dmr|l^;|h! zfsN?J&+r!f#3cd3dwb5<0}+iggYbE|cCEYtKVC@LvmdQK6S3amI=pc=tF3(7YgjF1 z&~^%8{J(+lAebdIRcnBj;NPTUVlMArV4U(+-hCvnI5<}gxS<=o`J*5dce7-I3UlM? zN04dzB<++a_)kd-e#&n=S-QOKy@01%i{NOkkwu^V9G>7$Y3bxyhR(iS8(FE~XwglG zYXY?UT8M$6*EjV~w*-~6MdKx!d`uotr0X6>zx_-yZl>%n^YX57AreK(xYT|vJ_a1h zRdCN66#{VSB9f#{Y}>Q3?e7+~nGv<`3yewKZ*TA(uFTEIz1spy0MSAk%nx%prhMmw z34+OCK?r-~*{o19OttRHt}zfKCQ8!>I~(QYnF(!MP3ODg6IFiSGxWoxXTYlI>^Q8u z6d^u?NUJOL3^HsCdAP=GRR0;wQI(n^Vk8#q@+z>Y0KTdWfde6mqbwREp6T_-;710` z|FFCF4IcLkThT!f)*4;?91VmMM%D|V?Duur?DG@6p{UDfToToZ)3K@LW8Bjj4ujYHYn zSqKqfO1WV1^c%blr2@TqzCWY0%5I!SU?oXuu>yJ2$t7nHHpSZoAHxGHC3+x2fIHG5<1au7m!i{y zP29NjuRD@C`Z^oc}>b) z4+4iWnab(3xQQev#=ujN4)CeB3&oFqpT~@5-Kim?%Xk83f(S?Zd{t99`9x_qDK{V* zCoGQ-C79+@CM(-HLFtHlRgD_A!^~vsJK)07Oa%{5tnvM63Fzf~q6y z4s^Y2wKhe&qEEl{HD@^%31mcQ2|%ipqmT9+e!F+T#J3YV9JBbT#b^!-++_s5TsCFs zfQ|^2{v5Th_H@4OyBm9dJ~P}lCJY)lA^5d{yrl0)iBbaesz=>J5cnA0PWdKKcod?dL&UuUYYy5~O@k`i!-`8?+f_-fWJK z3N!Or*R2@|F%dx5dL1vs$#gpoy zognH8mBV~)UUG4WFYiKc9SJ(T^WTY!OB7UMY7bExVLwOk06#K8lmaXowd^hTJA=uw z@F_C<)&Xsr%uxs8P6_t8C$J3IVY5z5yvCldsELKj=vl;X&xOV7HOGl!xHQ=H6HN)D zSohC^0lTYW759@T2D76C*@P8;l|Gi&nAHn zl{>tFRT3qA`fZ=Lqb?%U4tEefvwKatiV&^ocgR0jAnM40A}W+1p3%;oonpAdfG5lc zJ&ik@K+c2gGNB+i7f`=LY7;!@vnO9UVGdHf48E(aLdj@rZ`epkM`mM#ugv}0jcXWv zdUFlhNM7m{L4Dg9bM)V^zHwbRpj7`0Bb8}X2Q;htTnnk$RLCj$y!n&lKB3l*$%?Ve z7J*W-$R-NHCVi0)X?z-#6Bf((*&L>(pCQ`5T_G>^4N29Km*`wpS$EAOChyW>MMiAP z=_uMa2B%<*4=pz|w1)9)8z!bnF6@MXv%Qb6|3Q?TEMPmq$yJ8|e z_Xeo4V!8BH5BhK22>b9HrAkg8Qg&fF)%2-@-LO7sMh-AC8qObW%+6}6JxSX&onOo1 z3Wct|!9TT*yNS6qE$7u*Lta`L3@4Cn9%4>!Yeb8OHZV`<2sPk$rY#>Ee1P-!{z??g zKJ(DmexvrP_6NYeu8q|zvj7qE(X|3f2UK%YN&|5GSa?gneZE7uiDxH8G<%UY`fQl_Ev_luf#%3`w@xqay~HoB>=LV46(61D}_V)+EBKcoJgc2pujsZ_i^<_7U#9Vj_I)U4v4EpcDj`w+z z{N?a8#8OTSSFqeWBPQotpM(b{POs2k@l!{(RuAK46sR%w+uN^9?aBH3ru}K_O_mW4 z>c}KIpmO6xz7olgPL%;}PP!e?doP9u&65J^Z;3|bS9eu0!O`Tjo%*s@b&7=r}bb9eqE&+8=lgJvXQef{Fz{uVkwAP`!*V)0y zeeso;32v54;smc%j+AkRm0=+u{++jM|0X9Pe#>#B0x*|*voIj-D5VUcA?R=&^l&wD zrr>Vp*4Q*~9c>ry2V}q!o@v2HNpM;j=fGhkxmy@u#Y%h2@^r!H03a7q@>SZv_r?;yEpY-$>K z)EBqy$8L-)?$b{WNiATIxS-6JI|Z}(4ESt-nY7hEhgrb07ZEw$rQ>yj-*{K(5mY&! zH=)*#l_8KKx4vIhV$6N$`hpgqEO$aNT&7R)!3+ZhGf;777s)eANjma0_rcG^2#`Qu>ISF_a6!smGzB*l*?SpK+@J%)uiD=#l)yY2&cUO z_6V`bS-c_4JHC_xZ?S9ayZol~_uJJdUR%IdKZ)Ze+H-ta6u#IyT)y@Il;ZRx9Jr+i z)@wT*y`bEq&#!GAlRJriyIdvBR=`${oe0VA_N*UL)QhO!I3$*yvOi36%}||%o>Df3 z$N9hg<7+uYa|3I7iL&1{=m%twqZkmsFDg$5ood?r>G1OscY)E`(rns{bCv_E(>e24 z!*iwilfbW)-_(tvv1fu!ESQ&u-Tw}m0fkj{7+Q!;`l(+cC6=vgC%gwZ@w{4IjT6_&49H z(S_i4fAuJwXZ}~DP0Nzni(0GIx+)1<%w6R*X>4jYf6bFZ`cmbVu%Vt)^3uPl-#DT4 zj*Ny!^2>;6jN0N3 z1?OCSIXLt{*0JFNORF}zzLM!8n6(1V|3RaqR`jSefWFe42h2(qKK!&>+hi`7`}7HW zy?3q!#{Pq>+?>oKPkYy+4K*g+iXZo2Yh@kw&oT^U$a?+Ebt~X+I=?&oJ1HZ7?*u+L ztzI%tdETL?uLYSpP*n!{0d@7#Gl*H|!i&m02i?cL-|R_CvtwYW-GY`3J|vyt$Gi1I z>}{W;oThU>HoC5(?=VWhI(3&_j>~jZkL#Su4iD39ZHIn7-m9|WDr*7Cm*4G$Y~%V$ zMlN%I=ODT{ZKj|KD2LIbZ_e}mkstRl0aBh@pm{Oj`)Kpqa}v-1wZ7hr)Ranpp)ZlY zXGWHdP4@#oLPUOzhS$fnJlbH)jtfh`0Jtzs_M!{{-aQO@z(H5Su;C=UUfNZEul~&F zMX-Qvdf(5RCzR3i7J9TPD9Ggz3CMOQl^Od^It-|kCKn{f_kLR{<}SdnK5nB(*GNA& z82NnsQm(D|n?u`n6&bFnmb1vk{upIi#n4;np z0#=5NKUpitbIs>LidgOUBDZbzOKh>qisGWX_O4#5A{6w zt#736^U!g53Ih!OB;#N_vy|h;k7*@I6?%6*w)R#aT5O%COIrA+_YLRImFh<-LX0)3 zQfe3+^Gt$se&KCOzK9uNZnRVlv{M4@s3i&ku--$XF;t8Lr63@2h@%tA*Q#D)M;6*G z#B(Z0pDQuE8W6;$Q81ZPaJ)^o>*V%M`iuk+4CytCga9R!#>Mf?te@(-HMQQ2X3}oe zm%yy@g#N8;?Le^>=BXTfP^w?4{`2POe??|pL|;qzt_%&ykaf-s0CP|b2cV+sKu(DW z&a=5yt~qePv{O2vz%|={HP*B*`aXO{_6zW=?7;0)YZkVWDAErRday%rdrs31oyuXC zeER%2c>y9;#qGpj;4wM_q?H;vphGh>-F1dGi4V#6_*#e%IyCjMiDqH3F3oaG*FBj@ zStHaxn8}|$d~ly+P@lfQ)PL?Y9?mbGH{}sHVZNq%hFF%%Ze=B?p>fb6kG^&ZoD5X% zt;v#ay@A2i0O%t$)tT3M zZ~BDvQ-UCkBBzOF2c#MA@_`ad;X@Dq1N;C$1fbGUuyZX=C8eqoIY^))#{S8XfAK$j z1K>3uh$c;pHb97=v~gbi8L9sPLn6YoRoU7l2uxc~T@EgR9&2)`$lS|9#dv&E51Wy_ zl!bl#Rs9BlJc$Y0I4^P333eH43F8X-VIcF3Tm<>n~UOiUKjx?AOEok8Pn&wp++7s@y3>)r!u8gF(_#M zfAlQ7LiLWR2G{|7O_Hoz`+=bYUi%pVi0 z>;J)#0Q?j;DrUWL8M71Z_Utc+eOentnsv+O#x88P%>gKVlZJc$$2e9l0^--<+83rm zA;FplwbV4$##<4C+G7>Fp8p|IfU|W?uVuY)tnNf?n3CBz-)x?3UH^qSz+r{oiZW+I ze+s(+_y(9DzD!sf&m^veekQg1Sb*K)ZM)y%q+~>~&rnEQ0Q`UA$im)!g3DDNeCxmN zVp_7yi@0oLP3PN}8GdwFs{H>%M*USi`9S3D#$-jsft2`{>&&CS2DE5V?^4JAMiLI& z9!CBH<^e1Z?u0&xTV8QeORcI@X{9CK%CPk0rgK;E_?V2@`7}ru6&57`*SJrPxC!Ua zHO*h{sOzxBwO%d9ay0A25~JUZTQ3pG?m``Wa;l#I8QS8`lmmcGEXCJ*{x`8u?z0+$ zB>Ck)?pr_R(S_lqNC1!bPkm=kyFc)G>U6CCi->ZqvWdp2FD=dyqL#8KVR@B8o&?k?bm+750Q$2l)_b)2S zHhF9xG+ZS;+`E5>f;8bT)W9{)w~`W(sjb&s7X_K*Akb{ zuO{>a@{H)iuXEQQ&OMyXi#vwjP>%mkG22n1Nl80f8)cBU2Unw$TFwk9Jf4jUFtBD~ za}(J4^>$pg2lqcX9TEVB#VSB}F^9X6;Rz+|61-20oew2O=EOF=o<0`ie(zebKYb!D z(p~$>jf)n*CZ7f%4)W*-ClsV~9KUWh-$=rm46_Kl+%GH!0O#b=HHP1TF!!A-gGM|)utNnTjKr!9|45lLc@wY`cKN#2d-m_@uB^T;{H7yjmJ)o$1qy! z2jynadO=%A_znM+m8GOXKidPo4O9>){wkD^kvMo;KHBP2iSGqPOelI)U zDEG6m*dP4-wEYPeAMdT8+vD(~89ZB{v-Vo?L3DyV`mCM?Isq1H7xOF;_8z!;asLq? z{$00g%O7EO3eN88>KZQtCHDH3JC!XGMs2gbwfa$zr7Y~#F5rk! zqU6|w2|j~EfmZ&Th~;$_bN~KLK&E=8i^ggGnecM6ZAM4ddm_H|qxA*|pMw|a^1B}C zzbn`PP<6}b6Y|+kJYS^%I%41lRC!m`%7NYaS7eK1+uq=>@x#I=SNpEpj}vxSf!-uV z0M0)CxPM^i99aAe;*$sTy7F4HJqHt^R>gH8D%#8D&_U>u-s0loGXAV2-(z9;Yq7L5 z(jCx$PC_daCR+kZwOrA-F{s|30js;KmTuzSKb;zj>vj4%f#HqW?vyTGkv+99)3Ul} z5iWk`pi2I`1D$GH9Z*Y)cL~!bs=M-t1InjQ79#v(5j*$0+fv>h#v9(EEK3buML{~C zX|RH2EJB$eoA0reh#jPQCs0{=K94qSQuB-9$a3lQtIV0CoWh(JZI1Fl+~blXh3?n) z3}Xf-1J`Cm5T5_7M^1(JM5cw~a_{~dOLLRdHBr3}zvsm2bA&d;VzaZ&UbI)ZZ6uI% zWXjhify_1lj>oED?4K>9rxaCw7rB(lE-_L2bdc=#3Pc_sA0P298Pbw_Pm>HET@ZLJ zwxg=TX>?1D@hl@Sf+gXoJ4WQCRuO1?Ig>qC|ZhM@6 zHu5z;Q8jkAfjsfhS#esn6(5f($6}M|l8%4Mhy~3qj}-guu8z5pw&q&3+11IRS|g(S zojm;+acQ?To5(k(Wy1vzf zMOP@QmR&fYJLno)n!McxHl^>AzR+0HbKuFPyu%W~`T5xUb3muiwRK3N-0t#NulT^_ zsDWgYC}BpR5leJ~l$AB1{E4Z?udp0b>M=>lSYGtlTX zY#6|4VvPp_W3Qe2e86B7d~WIV`Q3L)H^vYeKa117ygj}C_zN@1pLQJG*mNB%>Ut1Q zql@msAFe0~q_qGoM?%l04}~6e80XLOZtv_cbvZb5Zk5Rv&rR}&G8b@K?Twv`l{&fK zdvGH6{UpsY6X-(HdesIwH=@q{C|h`}dHo(hSL$<(mzB)l`X?qvVQ8_AtPR(A-u+qkBYfRd(>$`81z6MA`?A~&7~Nc* zr_SMR=pZny4e)EG#k0E5Z&PFHk{e$;TA*nAir3|bz+jwoD}26!X)x5&dry+roP=){ ztF8J`4zzha+ZZcsjnH3{w(HCsY?v;&q_=Z^SME7tR79$u$ge-i=tQl+33;-^xw&?k&JJ8p5;rL?Xp=#`*}MZEeWmG zF%N|B{8{t+Za(9mush4}MjhyHL$x1{Tbiq~+aTGqwa>MrDFJLv%#AU7G zKR>ipV2{qCzTn2ItD*WR?(jloWo5r?y0l4MfKKl4X;biX-Tm`Dfy~bzo#i`2$fD+8 z2BbPUD@qIkc26bol!~qu*eOO4EO`aXtWG4sgB}ENECJ8HYZdw@P@+0DC5#6nV?0Ve z$f%z!?IJ}oIO^_${?Op~?csV)M>X+&Y0-cP0j!B}wSX3o zKvJSfwC9eh{kC|y+A~W9U=;^}ynrr^p_Elpa~0QsQ+^dixzXPy0y<(vl1xoi-tls& zAvrfFT``OL_pF4^%Cv7_VA%dZL#*2M=D~qq9o_lWgW9T=a=KNAE=i#4vi0go@|$dP zwda$!T#CVQRg=9ICG~>NVE`m)!L!^UlKcxs))J$4na3sV6O$NSpcCCeNGj4i1q09*mE6t-$ z6>U$Mte+@3kN28K)r?(!-yfOv;VhplZe}FQWbw3tbv%)$#g2jYJ0RuyNo^Pr#HoJP zHHY0I9h4@?uW=Una0wjNe7UYpNx8RiPD!ITl83)$dPVyObb0qI&S-eby{uC8ZDUK= z83^cllUML~psU>jDZ#3X55t(c9HNj7-rjbcrBQl$gcP_>23jgF-pZRH(Cj z>}3q~FpJ&(`3-crkrS2VdXH_=w3u+-V;Y&z*Tz2$Yhw4+kBjgc0L%#AfxV~sxX{8G zCL%#K)ukb=t4+N*5bly7~_RMEjyzMg7)aQnywuUwx=we;W z6?!`4T?1AV%t{;UIOAu_k_Gm1L*_=!VeW8DStJ8EDDuHl*VepkX|?Yw z?|UHm>$k%78Jc9pg{t}v`r+ET-Sf&@^P+fCl=%toy4)>fu!9X4==cU{-POBOq;CE4 F{{y}tn+^Z~ literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ca787d60edd6b1a9ff543c23915e4a1da6a10b47 GIT binary patch literal 10612 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 + + #fff + \ No newline at end of file diff --git a/app/src-tauri/icons/icon.icns b/app/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..46d43a5f098a3fd1fe634c1c09e2774e5ee1a96b GIT binary patch literal 117687 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

9h{BpPUk#4)bTcDAAV# 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 F2ms@+D)9gS literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/icon.ico b/app/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a927e2ad21a6725ad9aa87ad37b99c636b6cc12e GIT binary patch literal 18767 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 literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/icon.svg b/app/src-tauri/icons/icon.svg new file mode 100644 index 0000000..13eeefb --- /dev/null +++ b/app/src-tauri/icons/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/src-tauri/icons/ios/AppIcon-20x20@1x.png b/app/src-tauri/icons/ios/AppIcon-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f646d87534f2df506a5bc7a567c91874ba0b9e44 GIT binary patch literal 740 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 Z%Kv)MmXa>HS&;w$002ovPDHLkV1iewIN|^R literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@1x.png b/app/src-tauri/icons/ios/AppIcon-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f48e63d57934764183f7d826276ca2d08067b784 GIT binary patch literal 926 zcmV;P17ZA$P)8~g@%?&4_0WRNEu-mJ%mtZNS5T~p$kPp^wMLI1sPEgy#-QWNE%jD zS|a5`k+(33)U;JIvD7xxXwzLan`zFTJ!j9Hb97fko0l`pw>!W2&v%&_Gi43#*4Wg7 z%6s?mwDvjd_Fq_R3keCup52+qKX?G!(zhz(f($)-?jmlM-o{e3lgE#uw5a`n2QF)bw*8EJ=WWqssP>N8{@N)v~DjqznB#|XvXG4IskD4C%BwOeoIRA!`gU1&b~U%5B=5|d>QzQHE|{+Cj09q{XSyB>-tH_1(bS+ z5><2>{N5$l6I8}&;R!aW@4Hg>R|}LECNIty3NF|drqlqas1*YSb3nnTj!#Mz71RI- zC=m(+6;xKLDjMFEsuG<8YkVfBlF>#$Q!up6WEcc;?qQxlVRqZ_AJ|4_x!+AY3A#I+ zT;48BDV;k|#O-xVQrx;R&IMlT77I(GKnxAqJ-g+*QULR$ggT$qzCO~ zZl$VV%P9zj(?QVn-su9iwM^ngjh#D@e2-pt5in}%Q|5EeG=qg9eMb=bS--06r{;9> zHBa4n__o=J$S4y6EP|Aq%x)W=#X#STQgPZ^9Io9-OtGNq&X~dR=L6LC<0B%%H@JT6 zWP$Rq+|HFWZJ8vl#Z98MX+lXOwbF5WulGP|?Yuk3`ANMVZ$z$CDxY`vKhQ%%fUu|zO$C1y{}BCGHX{R{>yF9B;LHm`{;52MUKdG1(J9HUTUy>(dM2N z@>@o{mp&8UGQaJ@qTezsNVC{mrXW90P`_pV0o5wZL|5F13IG5A07*qoM6N<$g2T|V AjsO4v literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png b/app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2728083ee9b7aa5ab1c7513cfa9d06720f26ece4 GIT binary patch literal 1935 zcmV;A2XOd_P)*a;(C+STY~H#ZW#tzU&W%d<%l&&1 z6BFYi(XPzJ7L&+lP)1LR7zd!Up zY2W({@5RJ>z4sE_?DzxMTS`#(*Dr9ox;0DHG%Y@9m!N|U<_&CFyC3PP`Iux& z6ulrHpkWYfK*N3C=hDV(!Nvz-~=g=HiPnVV@$Ck=gZApLl91)#^=-lu#h~#;!bM#llxG1E}dPzUf z^wj4A29pOQmNKtqB{GtdTdypQJ}Ws-6{uP5f|TSXvTKE&i;6a2R=Ux90)EMQNe#CX zxK{6m%gJ7&7Ar7k-Z()s8btRK$+H@3T)5x)PEz|BgQP8Xnh_Zb zBZ85 zp`K{+G)oktX^pDjm)KzqXw{;l(AZH0Plp$zgl0sWDk1>GtKwuAzcP}K{563Libgc+ zGS!Ia(XUa$`NphZonN2HhIk>OF3~lBgd2gmA)B?C-RSCkpa`<^ z_kR3#wwn>h5^kH!=hVx1BwCTOY+zlL6SbF|is9Fsc@`{KJRX-T`{C$+$TWE&bpc0W z9-zTIu=<%xtXQ{Yl7F^JOZqfxZ_N%v-~ifHk+uZ46eI*`64?Z|emkm=^BIY=%3GF* zPcWfioy~u1^~F9^RrE3QN+2OJFLK#A%^_A$LXBYh3=_7!HW{ndM*E*TT>$y&>#>L& zKlFN6YaKXxxKl9;`3TmisIM!Y9Fpw(#gTaYi3rbO71A=Ne(J({fv!G~x7yt}`rSR% z1otRfqihA#(&R#R-h`nf*wXQMGQ;Wz*?D&mhxXk;e;<*}Lh>d7_>*Id{B0M*vthcp z!qM97W_Vacprs4PzwaEb40u601yAV6!Mg%T`7|fdz%C=7FU~Fr6d&(}(@9jF^8aoP zpt7`Iw%$^G(Sc(}IwkiW+It5bZEl$acd*F|-5O=280|L(@a=(4%+0h0C7peLIUPiB z2pk>>DaDhQD~6nb+~rXyE9vorccJ zMJmEkbz>i+(q%Iv`w^e8T+#rcA;4emf_CH z(p#l!%_=Grm5HQut-f}E>)k0v%>G7*=qE zp;-xIjS>${sT3>f_i#~`Hi~gX8>%eAo`JNKHNw81XE9^y0>$K+R#PFTbf^hw|F_g5 zNnU^uZK(3>1>F3~c2Zn?&VVu43JUVc4~M@oc!1K~)>@^CaNP7rJHoDIGS)y+Ount> zk{#G%iNYIS-ax+ie6NA&FnlHagK~N-fZY8_p+VL&qI=Nk!VPB{(|4zm6z`{3{W{2d zI}5{x%9M$FJ}xw9`Z`D;;FHB?g)jJ2kgoe(D6gm-6~L)mM?D_u46G?wsrm(<{{e}3 V)y@G%8QK5<002ovPDHLkV1jPVp{xJ^ literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@2x.png b/app/src-tauri/icons/ios/AppIcon-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2728083ee9b7aa5ab1c7513cfa9d06720f26ece4 GIT binary patch literal 1935 zcmV;A2XOd_P)*a;(C+STY~H#ZW#tzU&W%d<%l&&1 z6BFYi(XPzJ7L&+lP)1LR7zd!Up zY2W({@5RJ>z4sE_?DzxMTS`#(*Dr9ox;0DHG%Y@9m!N|U<_&CFyC3PP`Iux& z6ulrHpkWYfK*N3C=hDV(!Nvz-~=g=HiPnVV@$Ck=gZApLl91)#^=-lu#h~#;!bM#llxG1E}dPzUf z^wj4A29pOQmNKtqB{GtdTdypQJ}Ws-6{uP5f|TSXvTKE&i;6a2R=Ux90)EMQNe#CX zxK{6m%gJ7&7Ar7k-Z()s8btRK$+H@3T)5x)PEz|BgQP8Xnh_Zb zBZ85 zp`K{+G)oktX^pDjm)KzqXw{;l(AZH0Plp$zgl0sWDk1>GtKwuAzcP}K{563Libgc+ zGS!Ia(XUa$`NphZonN2HhIk>OF3~lBgd2gmA)B?C-RSCkpa`<^ z_kR3#wwn>h5^kH!=hVx1BwCTOY+zlL6SbF|is9Fsc@`{KJRX-T`{C$+$TWE&bpc0W z9-zTIu=<%xtXQ{Yl7F^JOZqfxZ_N%v-~ifHk+uZ46eI*`64?Z|emkm=^BIY=%3GF* zPcWfioy~u1^~F9^RrE3QN+2OJFLK#A%^_A$LXBYh3=_7!HW{ndM*E*TT>$y&>#>L& zKlFN6YaKXxxKl9;`3TmisIM!Y9Fpw(#gTaYi3rbO71A=Ne(J({fv!G~x7yt}`rSR% z1otRfqihA#(&R#R-h`nf*wXQMGQ;Wz*?D&mhxXk;e;<*}Lh>d7_>*Id{B0M*vthcp z!qM97W_Vacprs4PzwaEb40u601yAV6!Mg%T`7|fdz%C=7FU~Fr6d&(}(@9jF^8aoP zpt7`Iw%$^G(Sc(}IwkiW+It5bZEl$acd*F|-5O=280|L(@a=(4%+0h0C7peLIUPiB z2pk>>DaDhQD~6nb+~rXyE9vorccJ zMJmEkbz>i+(q%Iv`w^e8T+#rcA;4emf_CH z(p#l!%_=Grm5HQut-f}E>)k0v%>G7*=qE zp;-xIjS>${sT3>f_i#~`Hi~gX8>%eAo`JNKHNw81XE9^y0>$K+R#PFTbf^hw|F_g5 zNnU^uZK(3>1>F3~c2Zn?&VVu43JUVc4~M@oc!1K~)>@^CaNP7rJHoDIGS)y+Ount> zk{#G%iNYIS-ax+ie6NA&FnlHagK~N-fZY8_p+VL&qI=Nk!VPB{(|4zm6z`{3{W{2d zI}5{x%9M$FJ}xw9`Z`D;;FHB?g)jJ2kgoe(D6gm-6~L)mM?D_u46G?wsrm(<{{e}3 V)y@G%8QK5<002ovPDHLkV1jPVp{xJ^ literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@3x.png b/app/src-tauri/icons/ios/AppIcon-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9497d0d34d41b010d9986b3c6b70913f953bf8a0 GIT binary patch literal 3068 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%0DF3Krl^g@ILb=pRO40HS2M&ukI`Nl zLotcb1bBTtVNjd=6VZA?hEKomSAZA~Ue9O4*zXOhSc~!Oit9q8BRAq57&BFR@BG-9 z9KZ9HNBq2~BvrL70^Y7yFBu1m>q4XzGntUAPU!KBV$%t5jF#cKFPLil>-bfwqHXOS z5B&S2U(p_+D+E0MRit7qv`fz>Y+P8~R~`*nF95O&z~26L$j-QfYKcQVEN=`)>hra1uTyNBrj()exAd(KV({|i|dK-x*$0sk0u;nI`Yw9JS| zM`;Rmq*Wp6k2>oh zh!^IuK5eGeMv)~HQqoJA7qhNYj<4#3N3KA3Z@qm0l67QFt<~I5n|rkpLK=$)K{e7M z%GFcx_k8BlS{M#rvA3jus;ycCQfYd|Pn)isPPy8MHZ7xE9}>pEwRhICkBJl(79dtF zJal}!5)h4bZpH;rV}FMfJWj(DRaP+3u2XJkd6`-JmMtwoj_Hj1KWEiiNLzV;!^`*8L zytA)Edq*u71_V1t`Pwzy3p)sa`;I;b!LU!}z?p-EW{RjEEO;Vqq`mNn500JQ#^v`S zLa-BthKA5>Uo0|Jf^y+yqKgV1gD>Y-;DyUmHRjG3`#+i_pE)g42^MFu#u4CHeIBT6 zdm`?gwf;LB(7}U;%`Gt+2QqK&N|=*f44E_LLndDN$h->&>sn+A@CI>qF@RIFUQCj^ z`|3>tM`Z2V)u{T9y9E(IvW?L z_IKn9yxD3(3&C(xS|r`sSFwlc#!b(nxA)cx38<9v*rN}j-@dj}Fx-Up-uoX$ZEa^0 zAWDR!y!+p)5ezq>B`1&*3EBzRVw$H09?eGF2)~5M?(^_V;NA+JMCYGv+m0F<-xnqu zRr%$P7X?#W!9(1>p=8@jD>9b=^nv4KrZF_NkeQ^`N1YLCMKBFkrhwAKBs`)B3M{+24;DB*=gRKhyZ3d@x%XlX z`_HVqclX}oJ>UHw-~XQnPJ{&*#Ow7!eM2K0IB*y`ySib>>x0(THnS=k zsb8bfM%*#EE-*X#* zXtgN@2!%GOX)h&sk@K7m7v#*o3l`aOBr1z%VL2=~0Zr-=(dw<{SXxu>RA_Vr!j0Pn}J z8Uv^RNOHq0;OUyP0U(O@86H5+tR)Z{_Q8d|7G@06(x!ofC;AezU0t?04uJ6vpz&kr zXHD>s;+S2VV%J66N1(VDtv1QWdrF>%dAX~&v{0ClH5ai4j2C|NPo`j@+Hos=Bd`0A zv=IvVU{}q(II#Gb0Ccb-&J$@>J1Wx$CyoZ7q0X<7cgv46 zGv?c8!nDC+DI<6yFj%ARuSkJu(?JtF^4q#6*uW#Qd{qjpDo-8frYby9#ggoyF%Wm#P^~&YGt1W8vBx&S$rLgX<|}b zXJV0-{ANb7XE{~afHH8|sDZ|5Stx|~dx$Tclar*GmW6`I6o7MYpF&O4Z3!ZXGA-i; zPyT-?(=yXSS(CI6K*Nd&0>sl(4e%6I9V7LyiCRq?h_18LMBnF7zK%4~rfq#Hl6M+1#V%M8Iml$}(mGMiDs*wxm7 z$EktF1yD2Kfk6S(T!5!7iP=hH^he7yZvgRXIxr(f;=)N>h?xq%F!|_7_V|{ z8JTBClw->iK%{ll-vYuGU#FunFB*6|J`Pa~huU2aq!=x;I_Zxz+uIZ729LUj4S0La=mJ?}*`BX?bT4sI4#$hm|4 zqc9`G0kh^fq35#^s)wbg$=1yafurqe0+v@eCnhh-q|x~+`fH2 z(3lHaR5&&q{R7RZBC+FwFS(-N5m{WCN;TMiU5T_crDMH{H(gEgmRpnH!S(5~RtNh> z=w@-*Nu+5eFg6y4{Ks|}kLLwdC(flHp2p$mv)Ki;gf;;8fJ*|5@T>;*S zIv+GO`XyPE-c-2>(Lmz~-sZv69{n2}7?GV%0DF3Krl^g@ILb=pRO40HS2M&ukI`Nl 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%0AG!`;>U7OLhCZ z|KClvaKYSeN7e1Y8X6j)@ct5PXlw|8%Z)&%-|VOzv!KPHYigd$>H!b5KXtKgzuRvO zgi=FzaNn*#=w^ke+k=r$ESx_ZR=)l}uKy#>U#bM(+-c8!ZxMtd%8%V1jM%wzHBdCF z#J@_unYII!yC5qo6I8eBkT3l32hXE_nS3*2gq=vZVmw%v7JF#Y6jwx)zIn$ovodk# z_Od`ou{$Sb!y);GU;OJ!K3u*r8DS=*vh_=KN9(kylVQQU+5S@L8yPk!LP|8r@8;-?B^exJk|JSb!;i7I^Td-g*EMN8t_@2x+!ocr- z`vz!jK7@giF&1P&Mk|k8*jTbnG-u;eRDoqWQEIAXE*r;BrNswWN=62 zxyU_dg^PKKRNCe(AHhHW%S(P)32xu=56RHe>Mibo!Oev1idR?RFPAL!A%okia7{L$ zhAejeTLugww)(7DTZ$`It^z*@@UDm_`?(g*pA%5-if|mTNRPI9ZK>?l{H4=70-kJh zescaC2yvcO!W}SWT4PJuR@}6u4E&m=`=BDNWmBg-YD&Dj0x+d#tExT>JIi-txIPRA zs}ISa-?jU5A3U&kgc95wL_%gokaqrp{9NvyO3VHq)jhBLdqIRk00000NkvXXu0mjf Dbq5mb literal 0 HcmV?d00001 diff --git a/app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..676b80c9c02b0fc3d851c15bb07f927a315d68e3 GIT binary patch literal 6274 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 literal 0 HcmV?d00001 diff --git a/app/src-tauri/src/lib.rs b/app/src-tauri/src/lib.rs new file mode 100644 index 0000000..698455b --- /dev/null +++ b/app/src-tauri/src/lib.rs @@ -0,0 +1,45 @@ +const CREDENTIAL_SERVICE: &str = "com.elijahkuntz.decky.nextcloud"; + +fn credential_entry(server: &str, username: &str) -> Result { + let account = format!("{}|{}", server.trim().to_lowercase(), username.trim()); + keyring::Entry::new(CREDENTIAL_SERVICE, &account).map_err(|error| error.to_string()) +} + +#[tauri::command] +fn get_credential(server: String, username: String) -> Result, String> { + match credential_entry(&server, &username)?.get_password() { + Ok(password) => Ok(Some(password)), + Err(keyring::Error::NoEntry) => Ok(None), + Err(error) => Err(error.to_string()), + } +} + +#[tauri::command] +fn set_credential(server: String, username: String, password: String) -> Result<(), String> { + credential_entry(&server, &username)? + .set_password(&password) + .map_err(|error| error.to_string()) +} + +#[tauri::command] +fn delete_credential(server: String, username: String) -> Result<(), String> { + match credential_entry(&server, &username)?.delete_credential() { + Ok(()) | Err(keyring::Error::NoEntry) => Ok(()), + Err(error) => Err(error.to_string()), + } +} + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_http::init()) + .plugin(tauri_plugin_process::init()) + .plugin(tauri_plugin_updater::Builder::new().build()) + .invoke_handler(tauri::generate_handler![ + get_credential, + set_credential, + delete_credential + ]) + .run(tauri::generate_context!()) + .expect("error while running Decky"); +} diff --git a/app/src-tauri/src/main.rs b/app/src-tauri/src/main.rs new file mode 100644 index 0000000..cf5d47c --- /dev/null +++ b/app/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + decky_lib::run(); +} diff --git a/app/src-tauri/tauri.conf.json b/app/src-tauri/tauri.conf.json new file mode 100644 index 0000000..8658d89 --- /dev/null +++ b/app/src-tauri/tauri.conf.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Decky", + "version": "0.2.0", + "identifier": "com.elijahkuntz.decky", + "build": { + "beforeDevCommand": "npm run dev", + "devUrl": "http://127.0.0.1:1420", + "beforeBuildCommand": "npm run build", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "Decky", + "width": 1320, + "height": 820, + "minWidth": 820, + "minHeight": 560, + "center": true, + "decorations": false, + "dragDropEnabled": false + } + ], + "security": { + "csp": "default-src 'self'; connect-src ipc: http://ipc.localhost; img-src 'self' asset: http://asset.localhost data:; style-src 'self' 'unsafe-inline'" + } + }, + "bundle": { + "active": true, + "targets": ["nsis"], + "createUpdaterArtifacts": true, + "category": "Productivity", + "shortDescription": "Nextcloud Deck on your desktop", + "longDescription": "A focused cross-platform desktop client for viewing and editing Nextcloud Deck boards.", + "copyright": "Copyright © 2026 Elijah Kuntz", + "windows": { + "webviewInstallMode": { + "type": "downloadBootstrapper" + }, + "nsis": { + "installMode": "currentUser", + "installerIcon": "icons/icon.ico" + } + } + }, + "plugins": { + "updater": { + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEMyN0NBMzgwMjA3QkM4NwpSV1NIdkFjQ09Nb25ERWJQYStYMDRjSTNORERDcG5nQSthYzdVWnZpdnh2YmlOY1ZlekJVc1luUQo=", + "endpoints": [ + "https://git.elijahkuntz.com/Elijah/Decky/raw/branch/main/releases/latest.json" + ], + "windows": { + "installMode": "passive" + } + } + } +} diff --git a/app/src/App.svelte b/app/src/App.svelte new file mode 100644 index 0000000..6628677 --- /dev/null +++ b/app/src/App.svelte @@ -0,0 +1,762 @@ + + +{selectedBoard ? `${selectedBoard.title} · Decky` : 'Decky'} + +

+ + + + +
+ {#if selectedBoard} +
+
+ + {#if selectedBoard}{selectedBoard.title}{/if} +
+ + {visibleStacks.length} stack{visibleStacks.length === 1 ? '' : 's'} +
+ +
+ {#each visibleStacks as stack (stack.id)} +
+ +
+ {#each stack.cards as card, cardIndex (card.id)} +
beginCardPointer(event, card)} + animate:flip={{ duration: reduceMotion ? 0 : 170 }} + in:receiveCard={{ key: card.id }} + out:sendCard={{ key: card.id }} + > + +
+

{card.title}

+ {#if card.description}

{card.description}

{/if} + {#if card.duedate}Due {new Date(card.duedate).toLocaleDateString([], { month: 'short', day: 'numeric' })}{/if} +
+
+ + +
+
+ {/each} + {#if stack.cards.length === 0}{/if} +
+
+ {/each} +
+ {:else} +
+
+

Your boards, without the browser clutter.

+

Connect Decky to Nextcloud, then choose a board from the sidebar.

+ +
+ {/if} +
+ +
+ {#if busy}{:else}{/if} + {status} +
+
+ +{#if dragGhost} +
+ {#if dragGhost.kind === 'card'}{/if} + {dragGhost.title} +
+{/if} + +{#if editor} + +{/if} + +{#if settingsOpen} + +{/if} diff --git a/app/src/app.css b/app/src/app.css new file mode 100644 index 0000000..a5fd704 --- /dev/null +++ b/app/src/app.css @@ -0,0 +1,234 @@ +:root { + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + color: #f2f2f2; + background: #181818; + font-synthesis: none; + text-rendering: optimizeLegibility; + --bg: #181818; + --panel: #202020; + --panel-2: #292929; + --panel-3: #333333; + --line: rgba(255, 255, 255, .1); + --muted: #a8a8a8; + --accent: #0082c9; + --accent-strong: #4db2e8; + --success: #46ba61; +} + +* { box-sizing: border-box; } +html, body, #app { width: 100%; height: 100%; margin: 0; overflow: hidden; } +button, input, textarea { font: inherit; } +button { color: inherit; } +* { scrollbar-width: thin; scrollbar-color: #626262 #202020; } +*::-webkit-scrollbar { width: 10px; height: 10px; } +*::-webkit-scrollbar-track { background: #202020; } +*::-webkit-scrollbar-thumb { min-height: 34px; border: 2px solid #202020; border-radius: 8px; background: #626262; } +*::-webkit-scrollbar-thumb:hover { background: #777; } +*::-webkit-scrollbar-corner { background: #202020; } + +.app-shell { + height: 100%; + display: grid; + grid-template: 34px minmax(0, 1fr) 28px / 250px minmax(0, 1fr); + background: var(--bg); +} + +.window-titlebar { grid-column: 1 / -1; grid-row: 1; display: flex; align-items: center; justify-content: space-between; min-width: 0; border-bottom: 1px solid var(--line); background: #171717; user-select: none; } +.window-title { display: flex; align-items: center; gap: 8px; padding-left: 10px; font-size: 12px; font-weight: 600; } +.window-mark { width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; border-radius: 5px; color: #fff; background: var(--accent); } +.window-controls { align-self: stretch; display: flex; } +.window-controls button { width: 46px; height: 100%; display: flex; align-items: center; justify-content: center; padding: 0; border: 0; color: #d2d2d2; background: transparent; cursor: default; } +.window-controls button:hover { color: #fff; background: rgba(255,255,255,.1); } +.window-controls .window-close:hover { background: #c42b1c; } + +.icon-button, .card-actions button { + border: 0; + background: transparent; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0; + cursor: pointer; + border-radius: 6px; +} +.icon-button { width: 34px; height: 34px; color: var(--muted); } +.icon-button:hover:not(:disabled), .card-actions button:hover { color: #fff; background: rgba(255,255,255,.08); } +.icon-button:disabled { opacity: .35; cursor: default; } + +.sidebar { + grid-row: 2; + min-width: 0; + display: grid; + grid-template-rows: minmax(0, 1fr) auto; + overflow: hidden; + border-right: 1px solid var(--line); + background: var(--panel); +} +.sidebar-content { min-height: 0; overflow-y: auto; padding: 5px 12px 18px; } +.connection-summary { width: 100%; display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 10px; text-align: left; border: 0; border-radius: 6px; background: transparent; padding: 9px 8px; cursor: pointer; } +.connection-summary:hover { background: rgba(255,255,255,.055); } +.connection-summary span:nth-child(2) { min-width: 0; display: flex; flex-direction: column; gap: 2px; } +.connection-summary strong { font-size: 13px; } +.connection-summary small { color: var(--muted); overflow: hidden; text-overflow: ellipsis; } +.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #717171; box-shadow: 0 0 0 3px rgba(113,113,113,.12); flex: 0 0 auto; } +.status-dot.connected { background: var(--success); box-shadow: 0 0 0 3px rgba(70,186,97,.13); } + +.connection-form { margin: 4px 0 18px; padding: 12px; display: grid; gap: 11px; background: var(--panel-2); border: 1px solid var(--line); border-radius: 8px; } +label { display: grid; gap: 7px; font-size: 12px; font-weight: 650; color: #c8c8c8; } +input, textarea { width: 100%; border: 1px solid var(--line); outline: 0; border-radius: 6px; padding: 9px 10px; color: #f5f5f5; background: #171717; transition: border-color .15s, box-shadow .15s; } +input:focus, textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(0,130,201,.22); } +textarea { resize: vertical; min-height: 90px; } +.checkbox-row { display: flex; align-items: center; gap: 8px; font-weight: 450; } +.checkbox-row input { width: 15px; height: 15px; accent-color: var(--accent); } + +.primary-button, .secondary-button { border: 0; border-radius: 18px; min-height: 36px; padding: 0 17px; font-weight: 650; cursor: pointer; } +.primary-button { color: white; background: var(--accent); } +.primary-button:hover:not(:disabled) { background: #1595d3; } +.primary-button:disabled { opacity: .42; cursor: default; } +.secondary-button { color: #e1e1e1; background: var(--panel-3); } + +.section-heading { display: flex; align-items: center; justify-content: space-between; margin: 18px 8px 7px; color: #b5b5b5; font-size: 11px; font-weight: 700; letter-spacing: .035em; text-transform: uppercase; } +.section-heading small { min-width: 22px; padding: 1px 6px; border-radius: 10px; text-align: center; background: var(--panel-3); } +.board-list { display: grid; gap: 2px; } +.board-list button { position: relative; width: 100%; display: grid; grid-template-columns: auto 1fr; gap: 10px; align-items: center; padding: 9px 10px; border: 0; border-radius: 5px; background: transparent; text-align: left; cursor: pointer; color: #d0d0d0; } +.board-list button:hover { background: rgba(255,255,255,.055); color: #fff; } +.board-list button.active { color: #fff; background: rgba(255,255,255,.09); } +.board-list button.active::before { content: ''; position: absolute; left: 0; top: 6px; bottom: 6px; width: 3px; border-radius: 2px; background: var(--accent); } +.board-dot { width: 9px; height: 9px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(255,255,255,.18); flex: 0 0 auto; } + +.sidebar-tools { display: grid; gap: 3px; padding: 8px; border-top: 1px solid var(--line); } +.sidebar-tool, .sidebar-layout button { min-height: 34px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border: 0; border-radius: 6px; color: #c4c4c4; background: transparent; cursor: pointer; text-align: left; } +.sidebar-tool:hover:not(:disabled), .sidebar-layout button:hover { color: #fff; background: rgba(255,255,255,.07); } +.sidebar-tool:disabled { opacity: .35; cursor: default; } +.sidebar-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 3px; padding-bottom: 4px; } +.sidebar-layout button { justify-content: center; gap: 6px; padding: 0 6px; background: #292929; } +.sidebar-layout button.active { color: #fff; background: #3a3a3a; box-shadow: inset 0 -2px var(--accent); } +.sidebar-tool span, .sidebar-layout span { font-size: 12px; } + +.workspace { grid-column: 2; grid-row: 2; min-width: 0; min-height: 0; display: flex; flex-direction: column; background: #232323; } +.workspace-tools { min-height: 46px; flex: 0 0 auto; display: grid; grid-template-columns: minmax(120px, 1fr) minmax(180px, 280px) minmax(80px, 1fr); align-items: center; gap: 16px; padding: 6px 18px; color: var(--muted); font-size: 12px; border-bottom: 1px solid var(--line); } +.workspace-tools > span:last-child { justify-self: end; } +.board-title { min-width: 0; display: flex; align-items: center; gap: 9px; color: #f2f2f2; font-size: 15px; } +.board-title strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.sidebar-toggle { width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; padding: 0; border: 0; border-radius: 5px; color: var(--muted); background: transparent; cursor: pointer; } +.sidebar-toggle:hover { color: #fff; background: rgba(255,255,255,.08); } +.search-box { width: 100%; position: relative; display: flex; align-items: center; color: var(--muted); } +.search-box svg { position: absolute; left: 10px; } +.search-box input { height: 32px; padding: 6px 10px 6px 34px; background: #191919; } + +.board-canvas { flex: 1 1 auto; min-height: 0; display: flex; align-items: flex-start; gap: 14px; overflow: auto; padding: 14px 18px 24px; } +.board-canvas.vertical { flex-direction: column; align-items: stretch; overflow-x: hidden; overflow-y: auto; } +.stack { width: 300px; flex: 0 0 300px; max-height: 100%; display: flex; flex-direction: column; overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: #2a2a2a; } +.stack.dragging, .deck-card.dragging { opacity: .32; } +.vertical .stack { width: min(900px, 100%); flex: 0 0 auto; max-height: none; align-self: center; overflow: visible; } +.stack-header { flex: 0 0 auto; min-height: 43px; display: flex; align-items: center; justify-content: space-between; padding: 5px 7px 5px 12px; border-bottom: 1px solid rgba(255,255,255,.07); } +.stack-header { cursor: grab; touch-action: none; } +.sorting .stack-header { cursor: grabbing; } +.stack-header > div { min-width: 0; display: flex; align-items: center; gap: 8px; } +.stack-header h2 { margin: 0; overflow: hidden; text-overflow: ellipsis; font-size: 14px; font-weight: 650; } +.stack-header span { color: var(--muted); font-size: 11px; } +.icon-button.subtle { width: 31px; height: 31px; } +.card-list { min-height: 58px; overflow-y: auto; display: grid; align-content: start; gap: 7px; padding: 8px; } +.vertical .card-list { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); overflow: visible; } + +.deck-card { --card-color: #d9dee8; --card-text: #111; position: relative; min-height: 58px; display: grid; grid-template-columns: 23px minmax(0, 1fr); align-items: start; gap: 8px; padding: 10px; overflow: hidden; color: var(--card-text); border-radius: 7px; background: var(--card-color); box-shadow: inset 0 1px rgba(255,255,255,.18); transition: filter .15s, opacity .15s; } +.deck-card { cursor: grab; touch-action: none; } +.sorting .deck-card { cursor: grabbing; } +.card-list.card-drag-target:empty { outline: 2px dashed var(--accent); outline-offset: -7px; } +.deck-card:hover { filter: brightness(1.035); } +.deck-card.completed { opacity: .78; } +.deck-card.completed h3 { text-decoration: line-through; text-decoration-thickness: 1.5px; } +.complete-button { position: relative; z-index: 1; width: 22px; height: 22px; min-width: 22px; display: flex; align-items: center; justify-content: center; align-self: start; margin: 0; padding: 0; line-height: 0; border: 2px solid currentColor; border-radius: 6px; color: inherit; background: rgba(255,255,255,.15); opacity: .62; cursor: pointer; } +.complete-button svg { display: block; flex: 0 0 auto; } +.complete-button:hover, .complete-button.checked { opacity: 1; } +.complete-button.checked { color: #fff; border-color: rgba(255,255,255,.92); background: rgba(20,20,20,.58); } +.card-body { position: relative; z-index: 1; min-width: 0; padding-right: 2px; } +.card-body h3 { margin: 1px 0 4px; font-size: 13px; line-height: 1.35; font-weight: 650; } +.card-body p { display: -webkit-box; margin: 0 0 6px; overflow: hidden; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-size: 11px; line-height: 1.35; opacity: .75; } +.due { display: inline-block; padding: 2px 6px; border-radius: 8px; font-size: 10px; font-weight: 650; background: rgba(20,20,20,.13); } +.card-actions { position: absolute; z-index: 2; right: 6px; bottom: 5px; display: flex; gap: 2px; opacity: 0; transition: opacity .15s; } +.deck-card:hover .card-actions { opacity: 1; } +.card-actions button { width: 26px; height: 26px; color: inherit; background: rgba(255,255,255,.16); } +.empty-stack { min-height: 42px; display: flex; align-items: center; justify-content: center; gap: 6px; border: 1px dashed rgba(255,255,255,.14); border-radius: 6px; color: var(--muted); background: transparent; cursor: pointer; } +.empty-stack:hover { color: #fff; border-color: rgba(255,255,255,.26); background: rgba(255,255,255,.025); } + +.empty-state { margin: auto; max-width: 500px; padding: 40px; text-align: center; } +.empty-state h1 { margin: 22px 0 10px; font-size: clamp(24px, 4vw, 34px); letter-spacing: -.035em; } +.empty-state p { margin: 0 auto 24px; color: var(--muted); line-height: 1.55; } +.empty-illustration { width: 104px; height: 84px; position: relative; display: grid; place-items: center; margin: auto; border: 1px solid var(--line); border-radius: 12px; color: var(--accent-strong); background: var(--panel-2); } +.empty-illustration span { position: absolute; width: 66px; height: 44px; z-index: -1; border: 1px solid var(--line); border-radius: 8px; background: var(--panel-2); transform: translate(-28px, 13px) rotate(-12deg); } +.empty-illustration span:last-child { transform: translate(28px, 13px) rotate(12deg); } + +.statusbar { grid-column: 1 / -1; grid-row: 3; display: flex; align-items: center; gap: 8px; min-width: 0; padding: 0 12px; border-top: 1px solid var(--line); color: var(--muted); background: #161616; font-size: 11px; } +.statusbar span:last-child { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } +.spinning { animation: spin .9s linear infinite; } +@keyframes spin { to { transform: rotate(360deg); } } + +.modal-backdrop { position: fixed; z-index: 20; inset: 0; display: grid; place-items: center; padding: 20px; background: rgba(0,0,0,.7); backdrop-filter: blur(5px); } +.modal { width: min(560px, 100%); max-height: calc(100vh - 40px); overflow: visible; display: grid; gap: 17px; padding: 20px; border: 1px solid rgba(255,255,255,.14); border-radius: 10px; background: #282828; box-shadow: 0 24px 70px rgba(0,0,0,.52); } +.settings-modal { width: min(680px, 100%); max-height: calc(100vh - 40px); overflow-y: auto; } +.settings-section { display: grid; gap: 14px; padding-top: 17px; border-top: 1px solid var(--line); } +.settings-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; } +.settings-heading h3 { margin: 0 0 4px; font-size: 15px; } +.settings-heading p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.4; } +.connection-badge { display: flex; align-items: center; gap: 7px; flex: 0 0 auto; padding: 6px 9px; border-radius: 14px; color: var(--muted); background: #1c1c1c; font-size: 11px; } +.connection-badge.connected { color: #d9f6e0; background: rgba(70,186,97,.13); } +.connection-badge.connected .status-dot { background: var(--success); } +.settings-connection { display: grid; grid-template-columns: 1.4fr 1fr; gap: 12px; } +.settings-connection label:nth-child(3) { grid-column: 1 / -1; } +.settings-actions { grid-column: 1 / -1; display: flex; justify-content: flex-end; gap: 8px; } +.version-badge { flex: 0 0 auto; padding: 6px 9px; border: 1px solid var(--line); border-radius: 14px; color: var(--muted); background: #1c1c1c; font-size: 11px; } +.update-status { display: grid; gap: 10px; padding: 12px 14px; border: 1px solid rgba(0,130,201,.25); border-radius: 7px; background: rgba(0,130,201,.07); } +.update-status.error { border-color: rgba(225,95,95,.32); background: rgba(225,95,95,.07); } +.update-status strong { font-size: 13px; } +.update-status p { margin: 3px 0 0; color: var(--muted); font-size: 12px; line-height: 1.45; } +.update-progress { height: 4px; overflow: hidden; border-radius: 99px; background: rgba(255,255,255,.1); } +.update-progress span { display: block; height: 100%; border-radius: inherit; background: var(--accent-strong); transition: width .18s ease-out; } +.update-actions { grid-column: auto; } +.modal header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; } +.modal header small { color: var(--accent-strong); font-weight: 750; letter-spacing: .09em; } +.modal h2 { margin: 4px 0 0; font-size: 21px; letter-spacing: -.02em; } +.modal footer { display: flex; justify-content: flex-end; gap: 8px; padding-top: 3px; } +.form-row, .color-settings { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } +.color-field { display: grid; grid-template-columns: 42px 1fr; gap: 8px; } +.color-field input[type="color"] { height: 38px; padding: 4px; cursor: pointer; } +.modal-copy { margin: -5px 0 0; color: var(--muted); font-size: 13px; line-height: 1.5; } + +.color-control { position: relative; display: block; } +.color-trigger { width: 100%; height: 38px; display: flex; align-items: center; gap: 10px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 6px; color: #eee; background: #171717; cursor: pointer; } +.color-trigger:hover { border-color: rgba(255,255,255,.25); } +.color-preview { width: 25px; height: 25px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(255,255,255,.3); } +.color-popover { position: absolute; z-index: 30; right: 0; bottom: calc(100% + 7px); width: 236px; display: grid; gap: 11px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: #242424; box-shadow: 0 15px 40px rgba(0,0,0,.5); } +.swatch-grid { display: grid; grid-template-columns: repeat(5, 32px); justify-content: space-between; gap: 8px; } +.color-swatch { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; padding: 0; border: 2px solid transparent; border-radius: 50%; color: #151515; cursor: pointer; box-shadow: inset 0 0 0 1px rgba(255,255,255,.15); } +.color-swatch:hover { transform: scale(1.08); } +.color-swatch.active { border-color: #fff; box-shadow: 0 0 0 2px #111; } +.custom-color { display: flex; align-items: center; justify-content: space-between; font-weight: 600; } +.custom-color input[type="color"] { width: 42px; height: 30px; padding: 2px; cursor: pointer; } +.color-hex { height: 33px; padding-block: 6px; text-transform: uppercase; } + +body.sorting { cursor: grabbing !important; user-select: none; } +body.sorting * { cursor: grabbing !important; } +.drag-ghost { --ghost-color: #3a3a3a; position: fixed; z-index: 100; min-height: 44px; display: flex; align-items: center; gap: 9px; padding: 10px 12px; pointer-events: none; border: 1px solid rgba(255,255,255,.24); border-radius: 8px; color: #f7f7f7; background: #333; box-shadow: 0 18px 42px rgba(0,0,0,.48); transform: rotate(1.2deg) scale(1.015); opacity: .96; } +.drag-ghost.card-drag-ghost { color: var(--card-text, #111); background: var(--ghost-color); } +.drag-ghost.stack-drag-ghost { min-height: 46px; border-color: rgba(0,130,201,.6); background: #292929; } +.drag-ghost strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; } +.ghost-check { width: 20px; height: 20px; flex: 0 0 auto; border: 2px solid currentColor; border-radius: 6px; opacity: .58; } + +.sidebar-collapsed { grid-template-columns: 0 minmax(0, 1fr); } +.sidebar-collapsed .sidebar { display: none; } + +@media (max-width: 700px) { + .app-shell, .sidebar-collapsed { grid-template-columns: 0 minmax(0, 1fr); } + .sidebar { display: none; } + .workspace-tools { grid-template-columns: 1fr auto; gap: 10px; padding-inline: 12px; } + .workspace-tools .search-box { grid-column: 1 / -1; grid-row: 2; } + .workspace-tools { padding-block: 7px; } + .board-canvas { padding: 10px 12px 18px; } + .form-row, .color-settings { grid-template-columns: 1fr; } +} + +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; } + .drag-ghost { transform: none; } +} diff --git a/app/src/lib/color.ts b/app/src/lib/color.ts new file mode 100644 index 0000000..c323165 --- /dev/null +++ b/app/src/lib/color.ts @@ -0,0 +1,17 @@ +export function normalizeColor(value?: string | null): string { + const normalized = (value ?? '').trim().replace(/^#/, '').toUpperCase(); + return /^[0-9A-F]{6}$/.test(normalized) ? normalized : 'D9DEE8'; +} + +export function textColor(background?: string | null): string { + const color = normalizeColor(background); + const red = Number.parseInt(color.slice(0, 2), 16); + const green = Number.parseInt(color.slice(2, 4), 16); + const blue = Number.parseInt(color.slice(4, 6), 16); + const luminance = (0.2126 * red + 0.7152 * green + 0.0722 * blue) / 255; + return luminance > 0.58 ? '#11151d' : '#ffffff'; +} + +export function cssColor(value?: string | null): string { + return `#${normalizeColor(value)}`; +} diff --git a/app/src/lib/credentials.ts b/app/src/lib/credentials.ts new file mode 100644 index 0000000..f5d5e87 --- /dev/null +++ b/app/src/lib/credentials.ts @@ -0,0 +1,16 @@ +import { invoke } from '@tauri-apps/api/core'; + +export async function loadPassword(server: string, username: string): Promise { + if (!server || !username || !('__TAURI_INTERNALS__' in window)) return ''; + return (await invoke('get_credential', { server, username })) ?? ''; +} + +export async function savePassword(server: string, username: string, password: string): Promise { + if (!('__TAURI_INTERNALS__' in window)) return; + await invoke('set_credential', { server, username, password }); +} + +export async function removePassword(server: string, username: string): Promise { + if (!('__TAURI_INTERNALS__' in window)) return; + await invoke('delete_credential', { server, username }); +} diff --git a/app/src/lib/deck-api.test.ts b/app/src/lib/deck-api.test.ts new file mode 100644 index 0000000..f6b3c4b --- /dev/null +++ b/app/src/lib/deck-api.test.ts @@ -0,0 +1,99 @@ +import { describe, expect, it, vi } from 'vitest'; +import { cardUpdateFrom, DeckApiClient, type FetchLike } from './deck-api'; +import type { Card } from './types'; + +const options = { serverUrl: 'https://cloud.example.test', username: 'admin', appPassword: 'secret' }; +const json = (body: unknown, status = 200) => new Response(JSON.stringify(body), { status, headers: { 'Content-Type': 'application/json' } }); + +describe('DeckApiClient', () => { + it('sends required authentication headers', async () => { + const fetchImpl = vi.fn().mockImplementation(async () => json([])); + const client = await DeckApiClient.connect(options, fetchImpl); + await client.getBoards(); + const headers = new Headers(fetchImpl.mock.calls[1][1]?.headers); + expect(headers.get('OCS-APIRequest')).toBe('true'); + expect(headers.get('Authorization')).toMatch(/^Basic /); + }); + + it('falls back to the rewrite-friendly API path', async () => { + const fetchImpl = vi.fn().mockImplementation(async (input) => + String(input).includes('/index.php/') ? json({ message: 'not found' }, 404) : json([]) + ); + const client = await DeckApiClient.connect(options, fetchImpl); + expect(client.apiBaseUrl.toString()).toBe('https://cloud.example.test/apps/deck/api/v1.0/'); + }); + + it('preserves complete card fields and normalizes object owners', () => { + const card: Card = { + id: 1, + stackId: 2, + title: 'Task', + description: 'Details', + type: 'plain', + owner: { uid: 'admin' }, + order: 3, + done: null, + color: '#aabbcc' + }; + expect(cardUpdateFrom(card, { done: '2026-01-01T00:00:00Z' })).toMatchObject({ + owner: 'admin', + description: 'Details', + order: 3, + done: '2026-01-01T00:00:00Z', + color: 'AABBCC' + }); + }); + + it('can explicitly clear description, due date, and completion', () => { + const card: Card = { + id: 1, stackId: 2, title: 'Task', description: 'Old', type: 'plain', owner: 'admin', order: 0, + duedate: '2026-01-01T00:00:00Z', done: '2026-01-01T00:00:00Z', color: 'ABCDEF' + }; + expect(cardUpdateFrom(card, { description: null, duedate: null, done: null })).toMatchObject({ + description: null, duedate: null, done: null, color: 'ABCDEF' + }); + }); + + it('retries cross-stack movement through the destination route when Deck ignores the body stack', async () => { + let puts = 0; + const fetchImpl = vi.fn().mockImplementation(async (input, init) => { + const url = String(input); + if (url.endsWith('/boards')) return json([]); + if (init?.method === 'PUT') { + puts += 1; + return json(true); + } + if (url.includes('/stacks/8/')) { + return puts > 1 + ? json({ id: 11, stackId: 8, title: 'Moved', owner: 'admin' }) + : json({ status: 404 }, 404); + } + return json({ id: 11, stackId: 7, title: 'Not moved', owner: 'admin' }); + }); + const client = await DeckApiClient.connect(options, fetchImpl); + + const moved = await client.reorderCard(2, 7, 11, 8, 0); + + expect(moved.stackId).toBe(8); + expect(puts).toBe(2); + }); + + it('reorders a stack through the same OCS endpoint as the Nextcloud web client and verifies persistence', async () => { + const fetchImpl = vi.fn().mockImplementation(async (input) => { + const url = String(input); + if (url.endsWith('/boards')) return json([]); + if (url.includes('/ocs/v2.php/')) return json({ ocs: { meta: { status: 'ok' }, data: [] } }); + return json([ + { id: 8, boardId: 2, title: 'Earlier', order: 0, cards: [] }, + { id: 7, boardId: 2, title: 'Today', order: 1, cards: [] } + ]); + }); + const client = await DeckApiClient.connect(options, fetchImpl); + await client.reorderStack(2, 7, 1); + const [url, init] = fetchImpl.mock.calls[1]; + expect(String(url)).toBe('https://cloud.example.test/ocs/v2.php/apps/deck/api/v1.0/stacks/7/reorder?format=json'); + expect(init?.method).toBe('PUT'); + expect(JSON.parse(String(init?.body))).toEqual({ order: 1, boardId: 2 }); + expect(String(fetchImpl.mock.calls[2][0])).toContain('/boards/2/stacks'); + }); +}); diff --git a/app/src/lib/deck-api.ts b/app/src/lib/deck-api.ts new file mode 100644 index 0000000..fb0fb17 --- /dev/null +++ b/app/src/lib/deck-api.ts @@ -0,0 +1,212 @@ +import { fetch as tauriFetch } from '@tauri-apps/plugin-http'; +import { normalizeColor } from './color'; +import type { Board, Card, CardDraft, DeckUser, Stack } from './types'; + +export const DOCUMENTED_API_PATH = 'index.php/apps/deck/api/v1.0/'; +export const REWRITTEN_API_PATH = 'apps/deck/api/v1.0/'; + +export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise; + +export class DeckApiError extends Error { + constructor( + public readonly status: number, + public readonly url: string, + public readonly responseBody: string + ) { + super(`Deck request failed with ${status}${responseBody ? `: ${responseBody}` : ''}`); + } +} + +export interface ConnectionOptions { + serverUrl: string; + username: string; + appPassword: string; + apiPath?: string; +} + +export interface CardUpdate { + title: string; + type: string; + owner: string; + description: string | null; + order: number; + duedate: string | null; + startdate: string | null; + archived: boolean; + done: string | null; + color: string; +} + +function encodeBasicAuth(username: string, password: string): string { + const bytes = new TextEncoder().encode(`${username}:${password}`); + let binary = ''; + for (const byte of bytes) binary += String.fromCharCode(byte); + return btoa(binary); +} + +function normalizeServerUrl(value: string): URL { + const url = new URL(value.trim()); + const isLocal = url.hostname === 'localhost' || url.hostname === '127.0.0.1'; + if (url.protocol !== 'https:' && !(isLocal && url.protocol === 'http:')) { + throw new Error('Decky requires HTTPS except when connecting to localhost.'); + } + url.pathname = `${url.pathname.replace(/\/+$/, '')}/`; + url.search = ''; + url.hash = ''; + return url; +} + +function ownerId(owner: string | DeckUser): string { + if (typeof owner === 'string') return owner; + return owner.uid || owner.primaryKey || ''; +} + +export function cardUpdateFrom(card: Card, changes: Partial = {}): CardUpdate { + return { + title: changes.title ?? card.title, + type: changes.type ?? card.type ?? 'plain', + owner: changes.owner ?? ownerId(card.owner), + description: changes.description !== undefined ? changes.description : card.description ?? null, + order: changes.order ?? card.order, + duedate: changes.duedate !== undefined ? changes.duedate : card.duedate ?? null, + startdate: changes.startdate !== undefined ? changes.startdate : card.startdate ?? null, + archived: changes.archived ?? card.archived ?? false, + done: changes.done !== undefined ? changes.done : card.done ?? null, + color: normalizeColor(changes.color ?? card.color) + }; +} + +export class DeckApiClient { + private constructor( + private readonly options: ConnectionOptions, + public readonly apiBaseUrl: URL, + private readonly fetchImpl: FetchLike + ) {} + + static async connect(options: ConnectionOptions, fetchImpl: FetchLike = tauriFetch): Promise { + if (!options.username.trim() || !options.appPassword) throw new Error('Username and app password are required.'); + const server = normalizeServerUrl(options.serverUrl); + const paths = [...new Set([options.apiPath, DOCUMENTED_API_PATH, REWRITTEN_API_PATH].filter(Boolean))] as string[]; + let lastError: unknown; + + for (const path of paths) { + const client = new DeckApiClient(options, new URL(path.replace(/^\/+/, ''), server), fetchImpl); + try { + await client.getBoards(); + return client; + } catch (error) { + lastError = error; + if (!(error instanceof DeckApiError) || ![404, 405].includes(error.status)) throw error; + } + } + throw lastError ?? new Error('The Nextcloud Deck API could not be reached.'); + } + + getBoards(): Promise { + return this.request('boards'); + } + + getStacks(boardId: number): Promise { + return this.request(`boards/${boardId}/stacks`); + } + + updateStack(boardId: number, stackId: number, title: string, order: number): Promise { + return this.request(`boards/${boardId}/stacks/${stackId}`, { + method: 'PUT', + body: JSON.stringify({ title, order }) + }); + } + + async reorderStack(boardId: number, stackId: number, order: number): Promise { + const server = normalizeServerUrl(this.options.serverUrl); + const url = new URL(`ocs/v2.php/apps/deck/api/v1.0/stacks/${stackId}/reorder`, server); + url.searchParams.set('format', 'json'); + await this.requestUrl(url, { + method: 'PUT', + body: JSON.stringify({ order, boardId }) + }); + + const stacks = (await this.getStacks(boardId)) + .filter((stack) => !stack.deletedAt) + .sort((a, b) => a.order - b.order); + const actualIndex = stacks.findIndex((stack) => stack.id === stackId); + if (actualIndex !== order) { + throw new Error(`Nextcloud did not persist the stack reorder (expected position ${order + 1}, received ${actualIndex + 1}).`); + } + return stacks; + } + + getCard(boardId: number, stackId: number, cardId: number): Promise { + return this.request(`boards/${boardId}/stacks/${stackId}/cards/${cardId}`); + } + + createCard(boardId: number, stackId: number, draft: CardDraft): Promise { + return this.request(`boards/${boardId}/stacks/${stackId}/cards`, { + method: 'POST', + body: JSON.stringify({ + title: draft.title, + type: 'plain', + order: 999, + description: draft.description || null, + duedate: draft.dueDate ? new Date(draft.dueDate).toISOString() : null, + color: normalizeColor(draft.color) + }) + }); + } + + updateCard(boardId: number, stackId: number, cardId: number, update: CardUpdate): Promise { + return this.request(`boards/${boardId}/stacks/${stackId}/cards/${cardId}`, { + method: 'PUT', + body: JSON.stringify(update) + }); + } + + deleteCard(boardId: number, stackId: number, cardId: number): Promise { + return this.request(`boards/${boardId}/stacks/${stackId}/cards/${cardId}`, { method: 'DELETE' }); + } + + async reorderCard(boardId: number, sourceStackId: number, cardId: number, stackId: number, order: number): Promise { + const body = JSON.stringify({ stackId, order }); + await this.request(`boards/${boardId}/stacks/${sourceStackId}/cards/${cardId}/reorder`, { method: 'PUT', body }); + let card = await this.resolveMovedCard(boardId, sourceStackId, stackId, cardId); + if (sourceStackId !== stackId && card.stackId === sourceStackId) { + await this.request(`boards/${boardId}/stacks/${stackId}/cards/${cardId}/reorder`, { method: 'PUT', body }); + card = await this.resolveMovedCard(boardId, sourceStackId, stackId, cardId); + } + return card; + } + + private async resolveMovedCard(boardId: number, sourceStackId: number, targetStackId: number, cardId: number): Promise { + try { + return await this.getCard(boardId, targetStackId, cardId); + } catch (error) { + if (error instanceof DeckApiError && error.status === 404 && sourceStackId !== targetStackId) { + return this.getCard(boardId, sourceStackId, cardId); + } + throw error; + } + } + + private async request(relativePath: string, init: RequestInit = {}): Promise { + const url = new URL(relativePath, this.apiBaseUrl).toString(); + return this.requestUrl(url, init); + } + + private async requestUrl(url: string | URL, init: RequestInit = {}): Promise { + const urlString = url.toString(); + const response = await this.fetchImpl(urlString, { + ...init, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'OCS-APIRequest': 'true', + Authorization: `Basic ${encodeBasicAuth(this.options.username, this.options.appPassword)}`, + ...init.headers + } + }); + if (!response.ok) throw new DeckApiError(response.status, urlString, await response.text()); + if (response.status === 204) return undefined as T; + const text = await response.text(); + return (text ? JSON.parse(text) : undefined) as T; + } +} diff --git a/app/src/lib/reorder.test.ts b/app/src/lib/reorder.test.ts new file mode 100644 index 0000000..750e686 --- /dev/null +++ b/app/src/lib/reorder.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from 'vitest'; +import { moveCard, moveStack } from './reorder'; +import type { Stack } from './types'; + +const stacks: Stack[] = [ + { id: 1, boardId: 9, title: 'One', order: 0, cards: [ + { id: 10, stackId: 1, title: 'A', type: 'plain', owner: 'admin', order: 0 }, + { id: 11, stackId: 1, title: 'B', type: 'plain', owner: 'admin', order: 1 } + ] }, + { id: 2, boardId: 9, title: 'Two', order: 1, cards: [ + { id: 20, stackId: 2, title: 'C', type: 'plain', owner: 'admin', order: 0 } + ] }, + { id: 3, boardId: 9, title: 'Three', order: 2, cards: [] } +]; + +describe('reorder helpers', () => { + it('moves a card between stacks and assigns contiguous order values', () => { + const result = moveCard(stacks, 10, 1, 2, 1)!; + expect(result.targetIndex).toBe(1); + expect(result.stacks[0].cards.map((card) => [card.title, card.order])).toEqual([['B', 0]]); + expect(result.stacks[1].cards.map((card) => [card.title, card.stackId, card.order])).toEqual([ + ['C', 2, 0], ['A', 2, 1] + ]); + }); + + it('accounts for the removed item when reordering inside one stack', () => { + const result = moveCard(stacks, 10, 1, 1, 2)!; + expect(result.targetIndex).toBe(1); + expect(result.stacks[0].cards.map((card) => card.title)).toEqual(['B', 'A']); + }); + + it('moves stacks before or after the selected target', () => { + const result = moveStack(stacks, 1, 2, true)!; + expect(result.targetIndex).toBe(1); + expect(result.stacks.map((stack) => [stack.title, stack.order])).toEqual([ + ['Two', 0], ['One', 1], ['Three', 2] + ]); + }); + + it('supports consecutive card previews while a drag crosses multiple positions', () => { + const firstPreview = moveCard(stacks, 10, 1, 2, 1)!; + const secondPreview = moveCard(firstPreview.stacks, 10, 2, 2, 0)!; + + expect(secondPreview.stacks[1].cards.map((card) => [card.title, card.order])).toEqual([ + ['A', 0], ['C', 1] + ]); + }); + + it('supports consecutive stack previews while a drag crosses multiple stacks', () => { + const firstPreview = moveStack(stacks, 1, 2, true)!; + const secondPreview = moveStack(firstPreview.stacks, 1, 3, true)!; + + expect(secondPreview.stacks.map((stack) => [stack.title, stack.order])).toEqual([ + ['Two', 0], ['Three', 1], ['One', 2] + ]); + }); +}); diff --git a/app/src/lib/reorder.ts b/app/src/lib/reorder.ts new file mode 100644 index 0000000..cb07e8f --- /dev/null +++ b/app/src/lib/reorder.ts @@ -0,0 +1,44 @@ +import type { Stack } from './types'; + +export function moveCard( + stacks: Stack[], + cardId: number, + sourceStackId: number, + targetStackId: number, + requestedIndex: number +): { stacks: Stack[]; targetIndex: number } | null { + const source = stacks.find((stack) => stack.id === sourceStackId); + const sourceIndex = source?.cards.findIndex((card) => card.id === cardId) ?? -1; + const card = source?.cards[sourceIndex]; + if (!source || !card || sourceIndex < 0) return null; + + const next = stacks.map((stack) => ({ ...stack, cards: [...(stack.cards ?? [])] })); + const nextSource = next.find((stack) => stack.id === sourceStackId)!; + nextSource.cards.splice(sourceIndex, 1); + const nextTarget = next.find((stack) => stack.id === targetStackId); + if (!nextTarget) return null; + + let targetIndex = requestedIndex; + if (sourceStackId === targetStackId && sourceIndex < targetIndex) targetIndex -= 1; + targetIndex = Math.max(0, Math.min(targetIndex, nextTarget.cards.length)); + nextTarget.cards.splice(targetIndex, 0, { ...card, stackId: targetStackId }); + next.forEach((stack) => stack.cards.forEach((item, order) => { item.order = order; })); + return { stacks: next, targetIndex }; +} + +export function moveStack( + stacks: Stack[], + stackId: number, + targetStackId: number, + after: boolean +): { stacks: Stack[]; targetIndex: number } | null { + const moved = stacks.find((stack) => stack.id === stackId); + if (!moved || !stacks.some((stack) => stack.id === targetStackId) || stackId === targetStackId) return null; + const next = stacks.filter((stack) => stack.id !== stackId).map((stack) => ({ ...stack })); + let targetIndex = next.findIndex((stack) => stack.id === targetStackId); + if (after) targetIndex += 1; + targetIndex = Math.max(0, targetIndex); + next.splice(targetIndex, 0, { ...moved }); + next.forEach((stack, order) => { stack.order = order; }); + return { stacks: next, targetIndex }; +} diff --git a/app/src/lib/settings.ts b/app/src/lib/settings.ts new file mode 100644 index 0000000..ab69091 --- /dev/null +++ b/app/src/lib/settings.ts @@ -0,0 +1,31 @@ +import type { AppSettings } from './types'; + +const key = 'decky.settings.v2'; + +export const defaultSettings: AppSettings = { + serverUrl: '', + username: '', + sidebarCollapsed: false, + boardViews: {}, + activeColor: 'E69A88', + completedColor: '80C3A5' +}; + +export function loadSettings(): AppSettings { + try { + const value = localStorage.getItem(key); + if (!value) return structuredClone(defaultSettings); + const parsed = JSON.parse(value) as Partial; + return { + ...structuredClone(defaultSettings), + ...parsed, + boardViews: parsed.boardViews ?? {} + }; + } catch { + return structuredClone(defaultSettings); + } +} + +export function saveSettings(settings: AppSettings): void { + localStorage.setItem(key, JSON.stringify(settings)); +} diff --git a/app/src/lib/types.ts b/app/src/lib/types.ts new file mode 100644 index 0000000..d60ebe8 --- /dev/null +++ b/app/src/lib/types.ts @@ -0,0 +1,63 @@ +export type BoardOrientation = 'horizontal' | 'vertical'; + +export interface DeckUser { + primaryKey?: string; + uid?: string; + displayname?: string; +} + +export interface Board { + id: number; + title: string; + owner?: DeckUser; + color?: string | null; + archived?: boolean; + lastModified?: number; + deletedAt?: number; +} + +export interface Stack { + id: number; + boardId: number; + title: string; + order: number; + deletedAt?: number; + cards: Card[]; +} + +export interface Card { + id: number; + stackId: number; + title: string; + description?: string | null; + type: string; + owner: string | DeckUser; + order: number; + archived?: boolean; + done?: string | null; + duedate?: string | null; + startdate?: string | null; + color?: string | null; + lastModified?: number; +} + +export interface CardDraft { + title: string; + description: string; + dueDate: string; + color: string; +} + +export interface BoardViewSettings { + orientation: BoardOrientation; +} + +export interface AppSettings { + serverUrl: string; + username: string; + selectedBoardId?: number; + sidebarCollapsed: boolean; + boardViews: Record; + activeColor: string; + completedColor: string; +} diff --git a/app/src/main.ts b/app/src/main.ts new file mode 100644 index 0000000..2b99320 --- /dev/null +++ b/app/src/main.ts @@ -0,0 +1,5 @@ +import { mount } from 'svelte'; +import App from './App.svelte'; +import './app.css'; + +mount(App, { target: document.getElementById('app')! }); diff --git a/app/src/vite-env.d.ts b/app/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/app/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/app/svelte.config.js b/app/svelte.config.js new file mode 100644 index 0000000..21b9399 --- /dev/null +++ b/app/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + preprocess: vitePreprocess() +}; diff --git a/app/tsconfig.json b/app/tsconfig.json new file mode 100644 index 0000000..95b0a61 --- /dev/null +++ b/app/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "bundler", + "resolveJsonModule": true, + "sourceMap": true, + "strict": true + }, + "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.svelte", "vite.config.ts"] +} diff --git a/app/vite.config.ts b/app/vite.config.ts new file mode 100644 index 0000000..35bdeb6 --- /dev/null +++ b/app/vite.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +export default defineConfig({ + plugins: [svelte()], + clearScreen: false, + server: { + port: 1420, + strictPort: true, + host: '127.0.0.1' + }, + envPrefix: ['VITE_', 'TAURI_ENV_*'], + build: { target: 'es2022' } +}); diff --git a/installer/Decky.appinstaller.template b/installer/Decky.appinstaller.template deleted file mode 100644 index f378564..0000000 --- a/installer/Decky.appinstaller.template +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/installer/README.md b/installer/README.md index 47ebfd9..e2001f8 100644 --- a/installer/README.md +++ b/installer/README.md @@ -1,15 +1,6 @@ -# Packaging and updates +# Retired MSIX prototype -`Decky.appinstaller.template` is the stable update-feed template. The release -pipeline will replace its placeholders after producing and signing a versioned -MSIX bundle. +The original WinUI/MSIX packaging design was retired when Decky moved to Tauri +2. Windows releases now use Tauri's per-user NSIS installer and signed updater. -The final `PUBLIC_BASE_URL` must be an HTTPS location that Windows App Installer -can read without an interactive sign-in. Package name and publisher must remain -stable across releases, and `VERSION` must be a monotonically increasing -four-part MSIX version such as `1.2.0.0`. - -The application project is temporarily configured as unpackaged so the first -read-only shell can be developed before signing identity and public artifact URL -are chosen. MSIX packaging becomes the release configuration, not a different -application or update mechanism. +See [`app/UPDATES.md`](../app/UPDATES.md) and the scripts in [`scripts/`](../scripts/). diff --git a/releases/latest.json b/releases/latest.json new file mode 100644 index 0000000..dd38344 --- /dev/null +++ b/releases/latest.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "notes": "First realistic-testing release of Decky with Nextcloud Deck editing, live drag-and-drop, and signed in-app updates.", + "pub_date": "2026-07-19T22:25:48.1776589+00:00", + "platforms": { + "windows-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVTSHZBY0NPTW9uRERoeFMyZWZLU2pRWmFudFh1ZWJKZVhJOUFRd2pMSVZGdmFYdUxwQUt5ZFFGcnQ5ek5FNGRZMmluMWIzdUJVZEIvTU15OGw1QXEySmh1ZWFJL2ZNUWdjPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg0NDk5ODgyCWZpbGU6RGVja3lfMC4yLjBfeDY0LXNldHVwLmV4ZQpKK1F2dFg0QWdoZ3dZcHpoTm9jTmIvaDVjeHJuQ1dhWTh3L0NJUEpQcnBmTmRWTk1Va3prSkVBdHo3V2RIMVlvMkxYMDdsZTY5M095Zjg0NjMrTHRBdz09Cg==", + "url": "https://git.elijahkuntz.com/Elijah/Decky/releases/download/v0.2.0/Decky_0.2.0_x64-setup.exe" + } + } +} diff --git a/scripts/Prepare-Release.ps1 b/scripts/Prepare-Release.ps1 new file mode 100644 index 0000000..601fe76 --- /dev/null +++ b/scripts/Prepare-Release.ps1 @@ -0,0 +1,94 @@ +#requires -Version 5.1 +[CmdletBinding()] +param( + [Parameter(Mandatory)] + [ValidatePattern('^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$')] + [string]$Version, + + [string]$Notes = "Decky $Version", + [string]$ForgejoBaseUrl = 'https://git.elijahkuntz.com', + [string]$Repository = 'Elijah/Decky', + [string]$SigningKeyPath = "$env:USERPROFILE\.tauri\decky.key", + [string]$SigningKeyPasswordPath = "$env:USERPROFILE\.tauri\decky.key.password", + [switch]$SkipValidation, + [switch]$SkipBuild +) + +$ErrorActionPreference = 'Stop' +$repositoryRoot = Split-Path -Parent $PSScriptRoot +$appRoot = Join-Path $repositoryRoot 'app' +$tauriConfigPath = Join-Path $appRoot 'src-tauri\tauri.conf.json' +$cargoManifestPath = Join-Path $appRoot 'src-tauri\Cargo.toml' +$packagePath = Join-Path $appRoot 'package.json' +$releaseDirectory = Join-Path $repositoryRoot "artifacts\release\v$Version" + +$packageVersion = (Get-Content -Raw -LiteralPath $packagePath | ConvertFrom-Json).version +$tauriVersion = (Get-Content -Raw -LiteralPath $tauriConfigPath | ConvertFrom-Json).version +$cargoVersion = [regex]::Match((Get-Content -Raw -LiteralPath $cargoManifestPath), '(?m)^version\s*=\s*"([^"]+)"').Groups[1].Value +if (@($packageVersion, $tauriVersion, $cargoVersion) | Where-Object { $_ -ne $Version }) { + throw "Version mismatch. package.json=$packageVersion, tauri.conf.json=$tauriVersion, Cargo.toml=$cargoVersion; expected $Version." +} + +if (-not $env:TAURI_SIGNING_PRIVATE_KEY) { + if (-not (Test-Path -LiteralPath $SigningKeyPath)) { + throw "Updater signing key not found at $SigningKeyPath. Do not generate a replacement after shipping a release." + } + $env:TAURI_SIGNING_PRIVATE_KEY = $SigningKeyPath +} +if (-not $env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD -and (Test-Path -LiteralPath $SigningKeyPasswordPath)) { + $env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = (Get-Content -Raw -LiteralPath $SigningKeyPasswordPath) +} + +if (-not $SkipBuild) { + Push-Location $appRoot + try { + if (-not $SkipValidation) { + & npm.cmd ci + if ($LASTEXITCODE) { throw 'npm ci failed.' } + & npm.cmd run check + if ($LASTEXITCODE) { throw 'Svelte validation failed.' } + & npm.cmd test + if ($LASTEXITCODE) { throw 'Tests failed.' } + } + & npm.cmd run tauri build + if ($LASTEXITCODE) { throw 'Tauri release build failed.' } + } finally { + Pop-Location + } +} + +$nsisDirectory = Join-Path $appRoot 'src-tauri\target\release\bundle\nsis' +$installer = Get-ChildItem -LiteralPath $nsisDirectory -Filter '*-setup.exe' | Sort-Object LastWriteTimeUtc -Descending | Select-Object -First 1 +if (-not $installer) { throw "No NSIS installer was found under $nsisDirectory." } +$signaturePath = "$($installer.FullName).sig" +if (-not (Test-Path -LiteralPath $signaturePath)) { throw "Updater signature was not generated: $signaturePath" } + +New-Item -ItemType Directory -Path $releaseDirectory -Force | Out-Null +$publishedInstaller = Join-Path $releaseDirectory $installer.Name +$publishedSignature = "$publishedInstaller.sig" +Copy-Item -LiteralPath $installer.FullName -Destination $publishedInstaller -Force +Copy-Item -LiteralPath $signaturePath -Destination $publishedSignature -Force + +$tag = "v$Version" +$escapedInstallerName = [Uri]::EscapeDataString($installer.Name) +$downloadUrl = "$($ForgejoBaseUrl.TrimEnd('/'))/$Repository/releases/download/$tag/$escapedInstallerName" +$metadata = [ordered]@{ + version = $Version + notes = $Notes + pub_date = [DateTimeOffset]::UtcNow.ToString('o') + platforms = [ordered]@{ + 'windows-x86_64' = [ordered]@{ + signature = (Get-Content -Raw -LiteralPath $signaturePath).Trim() + url = $downloadUrl + } + } +} +$latestJsonPath = Join-Path $releaseDirectory 'latest.json' +$metadataJson = $metadata | ConvertTo-Json -Depth 6 +[IO.File]::WriteAllText($latestJsonPath, $metadataJson, (New-Object Text.UTF8Encoding($false))) + +$hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $publishedInstaller).Hash +Write-Host "Release prepared: $releaseDirectory" +Write-Host "Installer: $publishedInstaller" +Write-Host "SHA256: $hash" +Write-Host "Updater metadata: $latestJsonPath" diff --git a/scripts/Publish-ForgejoRelease.ps1 b/scripts/Publish-ForgejoRelease.ps1 new file mode 100644 index 0000000..bf44158 --- /dev/null +++ b/scripts/Publish-ForgejoRelease.ps1 @@ -0,0 +1,78 @@ +#requires -Version 5.1 +[CmdletBinding()] +param( + [Parameter(Mandatory)] + [ValidatePattern('^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$')] + [string]$Version, + + [string]$Notes = "Decky $Version", + [string]$ForgejoBaseUrl = 'https://git.elijahkuntz.com', + [string]$Repository = 'Elijah/Decky', + [string]$Token = $env:FORGEJO_TOKEN +) + +$ErrorActionPreference = 'Stop' +if (-not $Token) { throw 'FORGEJO_TOKEN is required. Store it as a Forgejo Actions secret or set it only for this process.' } + +$repositoryRoot = Split-Path -Parent $PSScriptRoot +$releaseDirectory = Join-Path $repositoryRoot "artifacts\release\v$Version" +$latestJsonPath = Join-Path $releaseDirectory 'latest.json' +if (-not (Test-Path -LiteralPath $latestJsonPath)) { throw "Run Prepare-Release.ps1 first: $latestJsonPath is missing." } + +$headers = @{ Authorization = "token $Token"; Accept = 'application/json' } +$apiRoot = "$($ForgejoBaseUrl.TrimEnd('/'))/api/v1/repos/$Repository" +$tag = "v$Version" +$releaseBody = @{ + tag_name = $tag + target_commitish = 'main' + name = "Decky $Version" + body = $Notes + draft = $false + prerelease = $Version.Contains('-') +} | ConvertTo-Json + +try { + $release = Invoke-RestMethod -Method Get -Uri "$apiRoot/releases/tags/$tag" -Headers $headers +} catch { + if ($_.Exception.Response.StatusCode.value__ -ne 404) { throw } + $release = Invoke-RestMethod -Method Post -Uri "$apiRoot/releases" -Headers $headers -ContentType 'application/json' -Body $releaseBody +} + +$assets = Get-ChildItem -LiteralPath $releaseDirectory -File +foreach ($asset in $assets) { + $existing = @($release.assets | Where-Object name -eq $asset.Name) + if ($existing.Count) { + Write-Host "Release asset already exists, skipping: $($asset.Name)" + continue + } + Add-Type -AssemblyName System.Net.Http + $client = New-Object Net.Http.HttpClient + try { + $client.DefaultRequestHeaders.Authorization = New-Object Net.Http.Headers.AuthenticationHeaderValue('token', $Token) + $form = New-Object Net.Http.MultipartFormDataContent + $fileContent = New-Object Net.Http.ByteArrayContent(,[IO.File]::ReadAllBytes($asset.FullName)) + $fileContent.Headers.ContentType = New-Object Net.Http.Headers.MediaTypeHeaderValue('application/octet-stream') + $form.Add($fileContent, 'attachment', $asset.Name) + $response = $client.PostAsync("$apiRoot/releases/$($release.id)/assets?name=$([Uri]::EscapeDataString($asset.Name))", $form).GetAwaiter().GetResult() + if (-not $response.IsSuccessStatusCode) { throw "Asset upload failed ($([int]$response.StatusCode)): $($response.Content.ReadAsStringAsync().GetAwaiter().GetResult())" } + } finally { + if ($form) { $form.Dispose() } + $client.Dispose() + } + Write-Host "Uploaded $($asset.Name)" +} + +$encodedMetadata = [Convert]::ToBase64String([IO.File]::ReadAllBytes($latestJsonPath)) +$contentsUri = "$apiRoot/contents/releases/latest.json?ref=main" +$sha = $null +try { $sha = (Invoke-RestMethod -Method Get -Uri $contentsUri -Headers $headers).sha } catch { + if ($_.Exception.Response.StatusCode.value__ -ne 404) { throw } +} +$contentBody = @{ + branch = 'main' + message = "chore(release): publish Decky $Version updater metadata" + content = $encodedMetadata +} +if ($sha) { $contentBody.sha = $sha } +Invoke-RestMethod -Method Put -Uri "$apiRoot/contents/releases/latest.json" -Headers $headers -ContentType 'application/json' -Body ($contentBody | ConvertTo-Json) | Out-Null +Write-Host "Published Decky $Version and updated releases/latest.json." diff --git a/scripts/Set-Version.ps1 b/scripts/Set-Version.ps1 new file mode 100644 index 0000000..cef37b5 --- /dev/null +++ b/scripts/Set-Version.ps1 @@ -0,0 +1,31 @@ +#requires -Version 5.1 +[CmdletBinding()] +param( + [Parameter(Mandatory)] + [ValidatePattern('^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$')] + [string]$Version +) + +$ErrorActionPreference = 'Stop' +$repositoryRoot = Split-Path -Parent $PSScriptRoot +$appRoot = Join-Path $repositoryRoot 'app' + +Push-Location $appRoot +try { + & npm.cmd version $Version --no-git-tag-version --allow-same-version + if ($LASTEXITCODE) { throw 'npm could not update package.json and package-lock.json.' } +} finally { + Pop-Location +} + +$tauriConfigPath = Join-Path $appRoot 'src-tauri\tauri.conf.json' +$tauriConfig = Get-Content -Raw -LiteralPath $tauriConfigPath +$tauriConfig = [regex]::Replace($tauriConfig, '(?m)(^\s*"version"\s*:\s*")[^"]+("\s*,)', "`${1}$Version`${2}", 1) +[IO.File]::WriteAllText($tauriConfigPath, $tauriConfig, (New-Object Text.UTF8Encoding($false))) + +$cargoManifestPath = Join-Path $appRoot 'src-tauri\Cargo.toml' +$cargoManifest = Get-Content -Raw -LiteralPath $cargoManifestPath +$cargoManifest = [regex]::Replace($cargoManifest, '(?m)(^version\s*=\s*")[^"]+("\s*$)', "`${1}$Version`${2}", 1) +[IO.File]::WriteAllText($cargoManifestPath, $cargoManifest, (New-Object Text.UTF8Encoding($false))) + +Write-Host "Decky version set to $Version in npm, Tauri, and Cargo manifests." diff --git a/src/Decky.ApiSpike/Program.cs b/src/Decky.ApiSpike/Program.cs index 70172a8..2ed77d1 100644 --- a/src/Decky.ApiSpike/Program.cs +++ b/src/Decky.ApiSpike/Program.cs @@ -1,4 +1,5 @@ using System.Net; +using System.Text.Json; using Decky.Core.Api; using Decky.Core.Api.Models; using Decky.Core.Api.Requests; @@ -26,23 +27,43 @@ try var boards = await client.GetBoardsAsync(); Console.WriteLine($"Connected through {client.ApiBaseUri}"); - Console.WriteLine($"Found {boards.Count} accessible board(s).\n"); + Console.WriteLine($"Found {boards.Count} board entry/entries.\n"); + var readableBoards = new List(); foreach (var board in boards.OrderBy(board => board.Title, StringComparer.CurrentCultureIgnoreCase)) { - var stacks = await client.GetStacksAsync(board.Id); - var cardCount = stacks.Sum(stack => stack.Cards.Count); - Console.WriteLine($"[{board.Id}] {board.Title}: {stacks.Count} stack(s), {cardCount} card(s)"); + if (board.Archived || board.DeletedAt != 0) + { + Console.WriteLine($"[{board.Id}] {board.Title}: skipped ({(board.Archived ? "archived" : "deleted")})"); + continue; + } + + try + { + var stacks = await client.GetStacksAsync(board.Id); + var cardCount = stacks.Sum(stack => stack.Cards.Count); + readableBoards.Add(board); + Console.WriteLine($"[{board.Id}] {board.Title}: {stacks.Count} stack(s), {cardCount} card(s)"); + } + catch (DeckApiException exception) when (exception.StatusCode == HttpStatusCode.Forbidden) + { + Console.WriteLine($"[{board.Id}] {board.Title}: unavailable (403 Permission denied)"); + } } - Console.WriteLine("\nPASS Authentication, board retrieval, stack retrieval, and card-list retrieval"); + if (readableBoards.Count == 0) + { + throw new InvalidOperationException("Nextcloud did not return any boards whose stacks can be read."); + } + + Console.WriteLine($"\nPASS Authentication and read access to {readableBoards.Count} board(s)"); Console.WriteLine("\nOptional write tests create and delete one temporary card, but can reorder that card"); Console.WriteLine("inside the selected board. Use a disposable board with at least two stacks."); Console.Write("Type WRITE to run mutation compatibility checks, or press Enter to finish: "); if (string.Equals(Console.ReadLine(), "WRITE", StringComparison.Ordinal)) { - var writeTestsPassed = await RunWriteProbeAsync(client, boards); + var writeTestsPassed = await RunWriteProbeAsync(client, readableBoards); Environment.ExitCode = writeTestsPassed ? 0 : 2; } else @@ -50,7 +71,8 @@ try Console.WriteLine("\nRead-only API compatibility checks passed."); } } -catch (Exception exception) when (exception is DeckApiException or HttpRequestException or ArgumentException) +catch (Exception exception) when ( + exception is DeckApiException or HttpRequestException or ArgumentException or JsonException or InvalidOperationException) { Console.Error.WriteLine($"\nCompatibility check failed: {exception.Message}"); Environment.ExitCode = 1; @@ -161,7 +183,7 @@ static async Task RunWriteProbeAsync(DeckApiClient client, IReadOnlyList WriteStartupError(args.Exception); InitializeComponent(); } protected override void OnLaunched(LaunchActivatedEventArgs args) { - _window = new MainWindow(); - _window.Activate(); + try + { + _window = new MainWindow(); + _window.Activate(); + } + catch (Exception exception) + { + WriteStartupError(exception); + throw; + } + } + + private static void WriteStartupError(Exception exception) + { + try + { + var logPath = Path.Combine(Path.GetDirectoryName(AppDataPaths.SettingsFile)!, "startup-error.log"); + Directory.CreateDirectory(Path.GetDirectoryName(logPath)!); + File.WriteAllText(logPath, $"{DateTimeOffset.Now:O}{Environment.NewLine}{exception}"); + } + catch + { + // Startup logging must never replace the original exception. + } } } - diff --git a/src/Decky.App/Decky.App.csproj b/src/Decky.App/Decky.App.csproj index 657b180..aff7bb4 100644 --- a/src/Decky.App/Decky.App.csproj +++ b/src/Decky.App/Decky.App.csproj @@ -11,6 +11,8 @@ true None true + true + true diff --git a/src/Decky.App/MainWindow.xaml b/src/Decky.App/MainWindow.xaml index be74d58..2149913 100644 --- a/src/Decky.App/MainWindow.xaml +++ b/src/Decky.App/MainWindow.xaml @@ -82,7 +82,18 @@ Background="{ThemeResource CardBackgroundFillColorDefaultBrush}" VerticalAlignment="Top"> - + + + + + + + + @@ -93,6 +104,16 @@ Foreground="{Binding Color, Converter={StaticResource DeckColorToTextBrush}}" /> + + + + diff --git a/src/Decky.App/MainWindow.xaml.cs b/src/Decky.App/MainWindow.xaml.cs index 8e3f7d1..54a288a 100644 --- a/src/Decky.App/MainWindow.xaml.cs +++ b/src/Decky.App/MainWindow.xaml.cs @@ -1,6 +1,8 @@ using System.ComponentModel; using Decky.App.Services; using Decky.App.ViewModels; +using Decky.App.Views; +using Decky.Core.Api.Models; using Decky.Core.Services; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; @@ -32,6 +34,65 @@ public sealed partial class MainWindow : Window _viewModel.AppPassword = ((PasswordBox)sender).Password; } + private async void NewCardButton_OnClick(object sender, RoutedEventArgs e) + { + if (((Button)sender).DataContext is not StackDto stack) + { + return; + } + + var editor = new CardEditorDialog(); + var result = await editor.ShowForResultAsync(RootGrid.XamlRoot); + if (result is not null) + { + await _viewModel.CreateCardAsync(stack.Id, result); + } + } + + private async void EditCardButton_OnClick(object sender, RoutedEventArgs e) + { + if (((Button)sender).DataContext is not CardDto card) + { + return; + } + + var fullCard = await _viewModel.GetCardDetailsAsync(card); + if (fullCard is null) + { + return; + } + + var editor = new CardEditorDialog(fullCard); + var result = await editor.ShowForResultAsync(RootGrid.XamlRoot); + if (result is not null) + { + await _viewModel.UpdateCardAsync(fullCard, result); + } + } + + private async void DeleteCardButton_OnClick(object sender, RoutedEventArgs e) + { + if (((Button)sender).DataContext is not CardDto card) + { + return; + } + + var confirmation = new ContentDialog + { + XamlRoot = RootGrid.XamlRoot, + Title = "Delete card?", + Content = $"“{card.Title}” will be deleted from Nextcloud.", + PrimaryButtonText = "Delete", + CloseButtonText = "Cancel", + DefaultButton = ContentDialogButton.Close, + }; + + if (await confirmation.ShowAsync() == ContentDialogResult.Primary) + { + await _viewModel.DeleteCardAsync(card); + } + } + private void ViewModel_OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(MainViewModel.AppPassword) && diff --git a/src/Decky.App/ViewModels/CardEditorResult.cs b/src/Decky.App/ViewModels/CardEditorResult.cs new file mode 100644 index 0000000..bdd8bd5 --- /dev/null +++ b/src/Decky.App/ViewModels/CardEditorResult.cs @@ -0,0 +1,9 @@ +namespace Decky.App.ViewModels; + +public sealed record CardEditorResult( + string Title, + string Description, + DateTimeOffset? DueDate, + string Color, + bool IsCompleted); + diff --git a/src/Decky.App/ViewModels/MainViewModel.cs b/src/Decky.App/ViewModels/MainViewModel.cs index 709735e..ca86c0c 100644 --- a/src/Decky.App/ViewModels/MainViewModel.cs +++ b/src/Decky.App/ViewModels/MainViewModel.cs @@ -1,9 +1,12 @@ using System.Collections.ObjectModel; +using System.Collections.Concurrent; using System.Runtime.InteropServices; +using System.Text.Json; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Decky.Core.Api; using Decky.Core.Api.Models; +using Decky.Core.Api.Requests; using Decky.Core.Configuration; using Decky.Core.Models; using Decky.Core.Services; @@ -15,6 +18,7 @@ public partial class MainViewModel : ObservableObject, IDisposable private readonly HttpClient _httpClient = new() { Timeout = TimeSpan.FromSeconds(30) }; private readonly ISettingsService _settingsService; private readonly ICredentialService _credentialService; + private readonly ConcurrentDictionary _mutationLocks = new(); private DeckApiClient? _apiClient; private CancellationTokenSource? _loadCancellation; private AppSettings _settings = new(); @@ -160,7 +164,9 @@ public partial class MainViewModel : ObservableObject, IDisposable var boards = await _apiClient.GetBoardsAsync(); Boards.Clear(); - foreach (var board in boards.Where(board => !board.Archived).OrderBy(board => board.Title)) + foreach (var board in boards + .Where(board => !board.Archived && board.DeletedAt == 0) + .OrderBy(board => board.Title)) { Boards.Add(board); } @@ -184,7 +190,8 @@ public partial class MainViewModel : ObservableObject, IDisposable await SaveSelectedBoardAsync(boardToOpen.Id); } } - catch (Exception exception) when (exception is DeckApiException or HttpRequestException or ArgumentException) + catch (Exception exception) when ( + exception is DeckApiException or HttpRequestException or ArgumentException or JsonException) { IsConnected = false; StatusMessage = exception.Message; @@ -261,6 +268,126 @@ public partial class MainViewModel : ObservableObject, IDisposable private bool CanRefresh() => !IsBusy && _apiClient is not null && SelectedBoard is not null; + public async Task GetCardDetailsAsync(CardDto card) + { + if (_apiClient is null || SelectedBoard is null) + { + return null; + } + + IsBusy = true; + StatusMessage = $"Loading {card.Title}…"; + try + { + return await _apiClient.GetCardAsync(SelectedBoard.Id, card.StackId, card.Id); + } + catch (Exception exception) when (IsApiException(exception)) + { + StatusMessage = $"Card details could not be loaded: {exception.Message}"; + return null; + } + finally + { + IsBusy = false; + } + } + + public Task CreateCardAsync(int stackId, CardEditorResult editor) => + RunBoardMutationAsync( + async (client, boardId) => + { + var stack = Stacks.FirstOrDefault(item => item.Id == stackId) + ?? throw new InvalidOperationException("The destination stack is no longer loaded."); + var nextOrder = stack.Cards.Count == 0 ? 0 : stack.Cards.Max(card => card.Order) + 1; + var created = await client.CreateCardAsync( + boardId, + stackId, + new CreateCardRequest + { + Title = editor.Title, + Description = editor.Description, + DueDate = editor.DueDate, + Color = editor.Color, + Order = nextOrder, + }); + + if (editor.IsCompleted) + { + var fullCard = await client.GetCardAsync(boardId, stackId, created.Id); + await client.UpdateCardAsync( + boardId, + stackId, + created.Id, + CardUpdateRequest.FromCard( + fullCard, + done: DateTimeOffset.UtcNow, + replaceDone: true)); + } + }, + "Card created"); + + public Task UpdateCardAsync(CardDto card, CardEditorResult editor) => + RunBoardMutationAsync( + async (client, boardId) => + { + DateTimeOffset? done = editor.IsCompleted ? card.Done ?? DateTimeOffset.UtcNow : null; + var request = CardUpdateRequest.FromCard( + card, + title: editor.Title, + description: editor.Description, + replaceDescription: true, + dueDate: editor.DueDate, + replaceDueDate: true, + done: done, + replaceDone: true, + color: editor.Color); + await client.UpdateCardAsync(boardId, card.StackId, card.Id, request); + }, + "Card updated"); + + public Task DeleteCardAsync(CardDto card) => + RunBoardMutationAsync( + (client, boardId) => client.DeleteCardAsync(boardId, card.StackId, card.Id), + "Card deleted"); + + private async Task RunBoardMutationAsync( + Func mutation, + string successMessage) + { + var client = _apiClient; + var board = SelectedBoard; + if (client is null || board is null) + { + StatusMessage = "Connect and select a board before editing cards."; + return false; + } + + var mutationLock = _mutationLocks.GetOrAdd(board.Id, _ => new SemaphoreSlim(1, 1)); + await mutationLock.WaitAsync(); + IsBusy = true; + StatusMessage = "Saving card…"; + try + { + await mutation(client, board.Id); + await LoadBoardAsync(board); + StatusMessage = successMessage; + return true; + } + catch (Exception exception) when (IsApiException(exception) || exception is InvalidOperationException) + { + StatusMessage = $"The card change failed: {exception.Message}"; + return false; + } + finally + { + IsBusy = false; + mutationLock.Release(); + } + } + + private static bool IsApiException(Exception exception) => + exception is DeckApiException or HttpRequestException or JsonException or ArgumentException; + private async Task LoadBoardAsync(BoardDto board) { if (_apiClient is null) @@ -296,7 +423,7 @@ public partial class MainViewModel : ObservableObject, IDisposable catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested) { } - catch (Exception exception) when (exception is DeckApiException or HttpRequestException) + catch (Exception exception) when (exception is DeckApiException or HttpRequestException or JsonException) { StatusMessage = $"Offline · {exception.Message}"; } @@ -319,6 +446,11 @@ public partial class MainViewModel : ObservableObject, IDisposable disposableSettingsService.Dispose(); } + foreach (var mutationLock in _mutationLocks.Values) + { + mutationLock.Dispose(); + } + GC.SuppressFinalize(this); } } diff --git a/src/Decky.App/Views/CardEditorDialog.cs b/src/Decky.App/Views/CardEditorDialog.cs new file mode 100644 index 0000000..34defc0 --- /dev/null +++ b/src/Decky.App/Views/CardEditorDialog.cs @@ -0,0 +1,179 @@ +using Decky.App.ViewModels; +using Decky.Core.Api.Models; +using Decky.Core.Utilities; +using Microsoft.UI; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Media; +using Windows.UI; + +namespace Decky.App.Views; + +public sealed class CardEditorDialog : ContentDialog +{ + private readonly TextBox _titleBox; + private readonly TextBox _descriptionBox; + private readonly CalendarDatePicker _dueDatePicker; + private readonly ColorPicker _colorPicker; + private readonly TextBox _hexColorBox; + private readonly CheckBox _completedBox; + private readonly TextBlock _errorText; + private bool _synchronizingColor; + + public CardEditorDialog(CardDto? card = null) + { + Title = card is null ? "Create card" : "Edit card"; + PrimaryButtonText = card is null ? "Create" : "Save"; + CloseButtonText = "Cancel"; + DefaultButton = ContentDialogButton.Primary; + + _titleBox = new TextBox + { + Header = "Title", + Text = card?.Title ?? string.Empty, + MaxLength = 255, + }; + _descriptionBox = new TextBox + { + Header = "Description", + Text = card?.Description ?? string.Empty, + AcceptsReturn = true, + TextWrapping = TextWrapping.Wrap, + Height = 110, + }; + _dueDatePicker = new CalendarDatePicker + { + Header = "Due date", + Date = card?.DueDate, + IsGroupLabelVisible = true, + }; + + var initialColor = DeckColor.Normalize(card?.Color) ?? "E5E7EB"; + _colorPicker = new ColorPicker + { + IsAlphaEnabled = false, + IsAlphaSliderVisible = false, + IsAlphaTextInputVisible = false, + Color = ParseColor(initialColor), + }; + _hexColorBox = new TextBox + { + Header = "Hex color", + Text = $"#{initialColor}", + MaxLength = 7, + }; + _completedBox = new CheckBox + { + Content = "Completed", + IsChecked = card?.Done is not null, + }; + _errorText = new TextBlock + { + Foreground = new SolidColorBrush(Colors.IndianRed), + TextWrapping = TextWrapping.Wrap, + }; + + _colorPicker.ColorChanged += (_, args) => + { + if (_synchronizingColor) + { + return; + } + + _synchronizingColor = true; + _hexColorBox.Text = $"#{args.NewColor.R:X2}{args.NewColor.G:X2}{args.NewColor.B:X2}"; + _synchronizingColor = false; + }; + _hexColorBox.TextChanged += (_, _) => + { + if (_synchronizingColor) + { + return; + } + + try + { + var normalized = DeckColor.Normalize(_hexColorBox.Text); + if (normalized is null) + { + return; + } + + _synchronizingColor = true; + _colorPicker.Color = ParseColor(normalized); + _synchronizingColor = false; + _errorText.Text = string.Empty; + } + catch (ArgumentException) + { + // Validation is shown when Save is pressed so typing is not interrupted. + } + }; + + Content = new ScrollViewer + { + MaxHeight = 620, + Content = new StackPanel + { + Spacing = 12, + MinWidth = 390, + Children = + { + _titleBox, + _descriptionBox, + _dueDatePicker, + new TextBlock { Text = "Color" }, + _colorPicker, + _hexColorBox, + _completedBox, + _errorText, + }, + }, + }; + + PrimaryButtonClick += ValidateAndCaptureResult; + } + + public CardEditorResult? Result { get; private set; } + + public async Task ShowForResultAsync(XamlRoot xamlRoot) + { + XamlRoot = xamlRoot; + var dialogResult = await ShowAsync(); + return dialogResult == ContentDialogResult.Primary ? Result : null; + } + + private void ValidateAndCaptureResult(ContentDialog sender, ContentDialogButtonClickEventArgs args) + { + var title = _titleBox.Text.Trim(); + if (string.IsNullOrWhiteSpace(title)) + { + args.Cancel = true; + _errorText.Text = "A card title is required."; + return; + } + + try + { + var color = DeckColor.Normalize(_hexColorBox.Text)!; + Result = new CardEditorResult( + title, + _descriptionBox.Text, + _dueDatePicker.Date, + color, + _completedBox.IsChecked == true); + _errorText.Text = string.Empty; + } + catch (ArgumentException exception) + { + args.Cancel = true; + _errorText.Text = exception.Message; + } + } + + private static Color ParseColor(string color) => Color.FromArgb( + 255, + Convert.ToByte(color[..2], 16), + Convert.ToByte(color[2..4], 16), + Convert.ToByte(color[4..], 16)); +} diff --git a/src/Decky.Core/Api/DeckApiClient.cs b/src/Decky.Core/Api/DeckApiClient.cs index 3e0076d..7794945 100644 --- a/src/Decky.Core/Api/DeckApiClient.cs +++ b/src/Decky.Core/Api/DeckApiClient.cs @@ -118,17 +118,51 @@ public sealed class DeckApiClient request, cancellationToken); - public Task ReorderCardAsync( + public async Task ReorderCardAsync( int boardId, int sourceStackId, int cardId, ReorderCardRequest request, - CancellationToken cancellationToken = default) => - SendJsonAsync( - HttpMethod.Put, - $"boards/{boardId}/stacks/{sourceStackId}/cards/{cardId}/reorder", - request, - cancellationToken); + CancellationToken cancellationToken = default) + { + await SendReorderAsync(sourceStackId).ConfigureAwait(false); + var card = await ResolveReorderedCardAsync().ConfigureAwait(false); + + if (request.StackId != sourceStackId && card.StackId == sourceStackId) + { + // Deck 1.16.x binds the route stackId over the JSON body stackId. In + // that version the route value is passed straight to CardService as + // the destination, so retrying with the requested destination in the + // route safely works around the server bug. + await SendReorderAsync(request.StackId).ConfigureAwait(false); + card = await ResolveReorderedCardAsync().ConfigureAwait(false); + } + + return card; + + async Task SendReorderAsync(int routeStackId) + { + using var response = await SendAsync( + HttpMethod.Put, + $"boards/{boardId}/stacks/{routeStackId}/cards/{cardId}/reorder", + request, + cancellationToken).ConfigureAwait(false); + } + + async Task ResolveReorderedCardAsync() + { + try + { + return await GetCardAsync(boardId, request.StackId, cardId, cancellationToken).ConfigureAwait(false); + } + catch (DeckApiException exception) when ( + exception.StatusCode == System.Net.HttpStatusCode.NotFound && + request.StackId != sourceStackId) + { + return await GetCardAsync(boardId, sourceStackId, cardId, cancellationToken).ConfigureAwait(false); + } + } + } public async Task DeleteCardAsync( int boardId, diff --git a/src/Decky.Core/Api/Models/DeckDtos.cs b/src/Decky.Core/Api/Models/DeckDtos.cs index 829367d..b7dc3a2 100644 --- a/src/Decky.Core/Api/Models/DeckDtos.cs +++ b/src/Decky.Core/Api/Models/DeckDtos.cs @@ -1,5 +1,6 @@ using System.Text.Json; using System.Text.Json.Serialization; +using Decky.Core.Api.Serialization; namespace Decky.Core.Api.Models; @@ -44,6 +45,8 @@ public sealed record BoardDto public long LastModified { get; init; } + public long DeletedAt { get; init; } + public BoardPermissionsDto? Permissions { get; init; } [JsonExtensionData] @@ -62,6 +65,8 @@ public sealed record StackDto public long LastModified { get; init; } + public long DeletedAt { get; init; } + public IReadOnlyList Cards { get; init; } = []; [JsonExtensionData] @@ -80,6 +85,7 @@ public sealed record CardDto public string Type { get; init; } = "plain"; + [JsonConverter(typeof(CardOwnerJsonConverter))] public string Owner { get; init; } = string.Empty; public int Order { get; init; } @@ -101,4 +107,3 @@ public sealed record CardDto [JsonExtensionData] public Dictionary? AdditionalData { get; init; } } - diff --git a/src/Decky.Core/Api/Requests/CardRequests.cs b/src/Decky.Core/Api/Requests/CardRequests.cs index c7d599e..bd780a8 100644 --- a/src/Decky.Core/Api/Requests/CardRequests.cs +++ b/src/Decky.Core/Api/Requests/CardRequests.cs @@ -48,6 +48,7 @@ public sealed record CardUpdateRequest CardDto card, string? title = null, string? description = null, + bool replaceDescription = false, DateTimeOffset? dueDate = null, bool replaceDueDate = false, DateTimeOffset? done = null, @@ -61,7 +62,7 @@ public sealed record CardUpdateRequest Title = title ?? card.Title, Type = card.Type, Owner = card.Owner, - Description = description ?? card.Description, + Description = replaceDescription ? description : description ?? card.Description, Order = card.Order, DueDate = replaceDueDate ? dueDate : card.DueDate, StartDate = card.StartDate, @@ -78,4 +79,3 @@ public sealed record ReorderCardRequest public required int StackId { get; init; } } - diff --git a/src/Decky.Core/Api/Serialization/CardOwnerJsonConverter.cs b/src/Decky.Core/Api/Serialization/CardOwnerJsonConverter.cs new file mode 100644 index 0000000..f9e2e91 --- /dev/null +++ b/src/Decky.Core/Api/Serialization/CardOwnerJsonConverter.cs @@ -0,0 +1,55 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Decky.Core.Api.Serialization; + +public sealed class CardOwnerJsonConverter : JsonConverter +{ + public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.String) + { + return reader.GetString() ?? string.Empty; + } + + if (reader.TokenType == JsonTokenType.Null) + { + return string.Empty; + } + + if (reader.TokenType != JsonTokenType.StartObject) + { + throw new JsonException($"A card owner must be a string or user object, not {reader.TokenType}."); + } + + using var document = JsonDocument.ParseValue(ref reader); + var owner = document.RootElement; + + if (TryGetString(owner, "uid", out var userId) || + TryGetString(owner, "primaryKey", out userId)) + { + return userId; + } + + throw new JsonException("A card owner object did not contain a string 'uid' or 'primaryKey'."); + } + + public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) + { + writer.WriteStringValue(value); + } + + private static bool TryGetString(JsonElement element, string propertyName, out string value) + { + if (element.TryGetProperty(propertyName, out var property) && + property.ValueKind == JsonValueKind.String && + !string.IsNullOrEmpty(property.GetString())) + { + value = property.GetString()!; + return true; + } + + value = string.Empty; + return false; + } +} diff --git a/tests/Decky.Core.Tests/CardDtoSerializationTests.cs b/tests/Decky.Core.Tests/CardDtoSerializationTests.cs new file mode 100644 index 0000000..c035c24 --- /dev/null +++ b/tests/Decky.Core.Tests/CardDtoSerializationTests.cs @@ -0,0 +1,39 @@ +using System.Text.Json; +using Decky.Core.Api.Models; + +namespace Decky.Core.Tests; + +public sealed class CardDtoSerializationTests +{ + private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web); + + [Fact] + public void Card_owner_accepts_documented_string_shape() + { + var card = JsonSerializer.Deserialize( + """{"id":1,"stackId":2,"title":"Test","owner":"admin"}""", + JsonOptions); + + Assert.Equal("admin", card!.Owner); + } + + [Fact] + public void Card_owner_accepts_embedded_user_object_shape() + { + var card = JsonSerializer.Deserialize( + """{"id":1,"stackId":2,"title":"Test","owner":{"primaryKey":"admin","uid":"admin","displayname":"Elijah"}}""", + JsonOptions); + + Assert.Equal("admin", card!.Owner); + } + + [Fact] + public void Card_owner_falls_back_to_primary_key() + { + var card = JsonSerializer.Deserialize( + """{"id":1,"stackId":2,"title":"Test","owner":{"primaryKey":"admin"}}""", + JsonOptions); + + Assert.Equal("admin", card!.Owner); + } +} diff --git a/tests/Decky.Core.Tests/CardUpdateRequestTests.cs b/tests/Decky.Core.Tests/CardUpdateRequestTests.cs index e6141af..fe03190 100644 --- a/tests/Decky.Core.Tests/CardUpdateRequestTests.cs +++ b/tests/Decky.Core.Tests/CardUpdateRequestTests.cs @@ -36,5 +36,28 @@ public sealed class CardUpdateRequestTests Assert.Equal("2026-07-20T12:00:00+00:00", root.GetProperty("duedate").GetString()); Assert.Equal(JsonValueKind.Null, root.GetProperty("done").ValueKind); } -} + [Fact] + public void FromCard_can_explicitly_clear_description_and_due_date() + { + var card = new CardDto + { + Title = "Card", + Description = "Remove me", + Type = "plain", + Owner = "admin", + DueDate = DateTimeOffset.Parse("2026-07-20T12:00:00Z"), + Color = "D99080", + }; + + var request = CardUpdateRequest.FromCard( + card, + description: string.Empty, + replaceDescription: true, + dueDate: null, + replaceDueDate: true); + + Assert.Equal(string.Empty, request.Description); + Assert.Null(request.DueDate); + } +} diff --git a/tests/Decky.Core.Tests/DeckApiClientTests.cs b/tests/Decky.Core.Tests/DeckApiClientTests.cs index c19fb84..4c02b2e 100644 --- a/tests/Decky.Core.Tests/DeckApiClientTests.cs +++ b/tests/Decky.Core.Tests/DeckApiClientTests.cs @@ -1,6 +1,7 @@ using System.Net; using System.Text; using Decky.Core.Api; +using Decky.Core.Api.Requests; using Decky.Core.Configuration; namespace Decky.Core.Tests; @@ -64,6 +65,78 @@ public sealed class DeckApiClientTests Assert.Equal(2, requestedPaths.Count); } + [Fact] + public async Task ReorderCardAsync_fetches_destination_card_after_boolean_acknowledgement() + { + var handler = new StubHttpMessageHandler(request => + { + if (request.Method == HttpMethod.Put) + { + return JsonResponse("true"); + } + + Assert.Equal( + "/index.php/apps/deck/api/v1.0/boards/2/stacks/8/cards/11", + request.RequestUri!.AbsolutePath); + return JsonResponse("{\"id\":11,\"stackId\":8,\"title\":\"Moved\",\"owner\":\"admin\"}"); + }); + using var httpClient = new HttpClient(handler); + var client = CreateClient(httpClient); + + var card = await client.ReorderCardAsync( + 2, + 7, + 11, + new ReorderCardRequest { Order = 0, StackId = 8 }); + + Assert.Equal(8, card.StackId); + } + + [Fact] + public async Task ReorderCardAsync_retries_with_destination_route_when_body_stack_was_ignored() + { + var putCount = 0; + var handler = new StubHttpMessageHandler(request => + { + if (request.Method == HttpMethod.Put) + { + putCount++; + if (putCount == 2) + { + Assert.Contains("/stacks/8/", request.RequestUri!.AbsolutePath, StringComparison.Ordinal); + } + + return JsonResponse("true"); + } + + if (request.RequestUri!.AbsolutePath.Contains("/stacks/8/", StringComparison.Ordinal)) + { + if (putCount == 2) + { + return JsonResponse("{\"id\":11,\"stackId\":8,\"title\":\"Moved\",\"owner\":\"admin\"}"); + } + + return new HttpResponseMessage(HttpStatusCode.NotFound) + { + Content = new StringContent("{\"status\":404}", Encoding.UTF8, "application/json"), + }; + } + + return JsonResponse("{\"id\":11,\"stackId\":7,\"title\":\"Not moved\",\"owner\":\"admin\"}"); + }); + using var httpClient = new HttpClient(handler); + var client = CreateClient(httpClient); + + var card = await client.ReorderCardAsync( + 2, + 7, + 11, + new ReorderCardRequest { Order = 0, StackId = 8 }); + + Assert.Equal(8, card.StackId); + Assert.Equal(2, putCount); + } + private static HttpResponseMessage JsonResponse(string json) => new(HttpStatusCode.OK) { Content = new StringContent(json, Encoding.UTF8, "application/json"), @@ -80,6 +153,15 @@ public sealed class DeckApiClientTests return clone; } + private static DeckApiClient CreateClient(HttpClient httpClient) + { + var options = DeckConnectionOptions.Create("https://cloud.example.test", "elijah", "app-password"); + return new DeckApiClient( + httpClient, + options, + new Uri("https://cloud.example.test/index.php/apps/deck/api/v1.0/")); + } + private sealed class StubHttpMessageHandler( Func responseFactory) : HttpMessageHandler {