From ef50eb8279023d5b779769e968b7641edfdb56e7 Mon Sep 17 00:00:00 2001 From: Sebastian Frick Date: Thu, 19 Mar 2026 16:45:47 +0100 Subject: [PATCH] feat(frontend): Tauri Apps, Shared UI Library und Nix Flake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - packages/ui: Shared React Component Library (Button, Card, Badge, Input) mit Tailwind v4 @theme Design Tokens (oklch) - apps/web: ERP Web-UI (Vite + React + Tailwind v4, API-Proxy :8080) - apps/scanner: Tauri v2 Mobile App mit Barcode-Scanner Plugin (cfg(mobile) für Desktop-Kompatibilität) - flake.nix: Nix Flake mit rust-overlay, Tauri System-Deps (GTK, WebKitGTK, libsoup, OpenSSL), ersetzt shell.nix - justfile: Dev-Befehle für alle Projekte (backend, cli, web, scanner) - frontend/CLAUDE.md: Agent Guide mit Base UI Docs Referenz --- .gitignore | 7 + flake.lock | 82 + flake.nix | 81 + frontend/CLAUDE.md | 22 + frontend/apps/scanner/index.html | 18 + frontend/apps/scanner/package.json | 35 + frontend/apps/scanner/src-tauri/Cargo.lock | 4964 +++++++++++++++++ frontend/apps/scanner/src-tauri/Cargo.toml | 20 + frontend/apps/scanner/src-tauri/build.rs | 3 + .../src-tauri/capabilities/default.json | 8 + .../src-tauri/gen/schemas/acl-manifests.json | 1 + .../src-tauri/gen/schemas/capabilities.json | 1 + .../src-tauri/gen/schemas/desktop-schema.json | 2244 ++++++++ .../src-tauri/gen/schemas/linux-schema.json | 2244 ++++++++ .../apps/scanner/src-tauri/icons/128x128.png | Bin 0 -> 1838 bytes .../scanner/src-tauri/icons/128x128@2x.png | Bin 0 -> 3513 bytes .../apps/scanner/src-tauri/icons/32x32.png | Bin 0 -> 687 bytes .../apps/scanner/src-tauri/icons/64x64.png | Bin 0 -> 967 bytes .../src-tauri/icons/Square107x107Logo.png | Bin 0 -> 1485 bytes .../src-tauri/icons/Square142x142Logo.png | Bin 0 -> 1927 bytes .../src-tauri/icons/Square150x150Logo.png | Bin 0 -> 2032 bytes .../src-tauri/icons/Square284x284Logo.png | Bin 0 -> 3948 bytes .../src-tauri/icons/Square30x30Logo.png | Bin 0 -> 629 bytes .../src-tauri/icons/Square310x310Logo.png | Bin 0 -> 4351 bytes .../src-tauri/icons/Square44x44Logo.png | Bin 0 -> 796 bytes .../src-tauri/icons/Square71x71Logo.png | Bin 0 -> 1029 bytes .../src-tauri/icons/Square89x89Logo.png | Bin 0 -> 1209 bytes .../scanner/src-tauri/icons/StoreLogo.png | Bin 0 -> 827 bytes .../android/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../icons/android/mipmap-hdpi/ic_launcher.png | Bin 0 -> 970 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2161 bytes .../android/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 1113 bytes .../icons/android/mipmap-mdpi/ic_launcher.png | Bin 0 -> 951 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1472 bytes .../android/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1115 bytes .../android/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1373 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2954 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 1668 bytes .../android/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 2077 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 4451 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 2507 bytes .../android/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 2690 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 6015 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 3272 bytes .../android/values/ic_launcher_background.xml | 4 + .../apps/scanner/src-tauri/icons/icon.icns | Bin 0 -> 38592 bytes .../apps/scanner/src-tauri/icons/icon.ico | Bin 0 -> 7621 bytes .../apps/scanner/src-tauri/icons/icon.png | Bin 0 -> 7496 bytes .../src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin 0 -> 476 bytes .../icons/ios/AppIcon-20x20@2x-1.png | Bin 0 -> 733 bytes .../src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin 0 -> 733 bytes .../src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin 0 -> 860 bytes .../src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin 0 -> 675 bytes .../icons/ios/AppIcon-29x29@2x-1.png | Bin 0 -> 913 bytes .../src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin 0 -> 913 bytes .../src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin 0 -> 1249 bytes .../src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin 0 -> 733 bytes .../icons/ios/AppIcon-40x40@2x-1.png | Bin 0 -> 1128 bytes .../src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin 0 -> 1128 bytes .../src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin 0 -> 1670 bytes .../src-tauri/icons/ios/AppIcon-512@2x.png | Bin 0 -> 9842 bytes .../src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin 0 -> 1670 bytes .../src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin 0 -> 2391 bytes .../src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin 0 -> 1097 bytes .../src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin 0 -> 2167 bytes .../icons/ios/AppIcon-83.5x83.5@2x.png | Bin 0 -> 2231 bytes frontend/apps/scanner/src-tauri/src/lib.rs | 11 + frontend/apps/scanner/src-tauri/src/main.rs | 5 + .../apps/scanner/src-tauri/tauri.conf.json | 37 + frontend/apps/scanner/src/App.tsx | 29 + frontend/apps/scanner/src/index.css | 4 + frontend/apps/scanner/src/main.tsx | 10 + frontend/apps/scanner/src/vite-env.d.ts | 1 + frontend/apps/scanner/tsconfig.json | 15 + frontend/apps/scanner/vite.config.ts | 22 + frontend/apps/web/index.html | 18 + frontend/apps/web/package.json | 31 + frontend/apps/web/src/App.tsx | 43 + frontend/apps/web/src/index.css | 4 + frontend/apps/web/src/main.tsx | 10 + frontend/apps/web/src/vite-env.d.ts | 1 + frontend/apps/web/tsconfig.json | 15 + frontend/apps/web/vite.config.ts | 16 + frontend/package.json | 2 + frontend/packages/ui/package.json | 60 + frontend/packages/ui/src/components/Badge.tsx | 34 + .../packages/ui/src/components/Button.tsx | 48 + frontend/packages/ui/src/components/Card.tsx | 19 + frontend/packages/ui/src/components/Input.tsx | 22 + frontend/packages/ui/src/index.ts | 5 + frontend/packages/ui/src/lib/cn.ts | 6 + frontend/packages/ui/src/theme.css | 88 + frontend/packages/ui/tsconfig.json | 11 + frontend/pnpm-lock.yaml | 1300 ++++- justfile | 91 + shell.nix | 1 + 96 files changed, 11682 insertions(+), 16 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 frontend/CLAUDE.md create mode 100644 frontend/apps/scanner/index.html create mode 100644 frontend/apps/scanner/package.json create mode 100644 frontend/apps/scanner/src-tauri/Cargo.lock create mode 100644 frontend/apps/scanner/src-tauri/Cargo.toml create mode 100644 frontend/apps/scanner/src-tauri/build.rs create mode 100644 frontend/apps/scanner/src-tauri/capabilities/default.json create mode 100644 frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json create mode 100644 frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json create mode 100644 frontend/apps/scanner/src-tauri/gen/schemas/desktop-schema.json create mode 100644 frontend/apps/scanner/src-tauri/gen/schemas/linux-schema.json create mode 100644 frontend/apps/scanner/src-tauri/icons/128x128.png create mode 100644 frontend/apps/scanner/src-tauri/icons/128x128@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/32x32.png create mode 100644 frontend/apps/scanner/src-tauri/icons/64x64.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square107x107Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square142x142Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square150x150Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square284x284Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square30x30Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square310x310Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square44x44Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square71x71Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/Square89x89Logo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/StoreLogo.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/icons/android/values/ic_launcher_background.xml create mode 100644 frontend/apps/scanner/src-tauri/icons/icon.icns create mode 100644 frontend/apps/scanner/src-tauri/icons/icon.ico create mode 100644 frontend/apps/scanner/src-tauri/icons/icon.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@1x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@2x-1.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@3x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@1x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@2x-1.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@3x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@1x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@2x-1.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@3x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-512@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-60x60@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-60x60@3x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-76x76@1x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-76x76@2x.png create mode 100644 frontend/apps/scanner/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png create mode 100644 frontend/apps/scanner/src-tauri/src/lib.rs create mode 100644 frontend/apps/scanner/src-tauri/src/main.rs create mode 100644 frontend/apps/scanner/src-tauri/tauri.conf.json create mode 100644 frontend/apps/scanner/src/App.tsx create mode 100644 frontend/apps/scanner/src/index.css create mode 100644 frontend/apps/scanner/src/main.tsx create mode 100644 frontend/apps/scanner/src/vite-env.d.ts create mode 100644 frontend/apps/scanner/tsconfig.json create mode 100644 frontend/apps/scanner/vite.config.ts create mode 100644 frontend/apps/web/index.html create mode 100644 frontend/apps/web/package.json create mode 100644 frontend/apps/web/src/App.tsx create mode 100644 frontend/apps/web/src/index.css create mode 100644 frontend/apps/web/src/main.tsx create mode 100644 frontend/apps/web/src/vite-env.d.ts create mode 100644 frontend/apps/web/tsconfig.json create mode 100644 frontend/apps/web/vite.config.ts create mode 100644 frontend/packages/ui/package.json create mode 100644 frontend/packages/ui/src/components/Badge.tsx create mode 100644 frontend/packages/ui/src/components/Button.tsx create mode 100644 frontend/packages/ui/src/components/Card.tsx create mode 100644 frontend/packages/ui/src/components/Input.tsx create mode 100644 frontend/packages/ui/src/index.ts create mode 100644 frontend/packages/ui/src/lib/cn.ts create mode 100644 frontend/packages/ui/src/theme.css create mode 100644 frontend/packages/ui/tsconfig.json create mode 100644 justfile diff --git a/.gitignore b/.gitignore index 13a8666..becad5d 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,10 @@ frontend/**/pnpm-lock.yaml # Legacy bin directory bin/ + +# Rust / Tauri +frontend/apps/scanner/src-tauri/target/ + +# Nix / direnv +result +.direnv/ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c89d708 --- /dev/null +++ b/flake.lock @@ -0,0 +1,82 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1773628058, + "narHash": "sha256-hpXH0z3K9xv0fHaje136KY872VT2T5uwxtezlAskQgY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f8573b9c935cfaa162dd62cc9e75ae2db86f85df", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773889863, + "narHash": "sha256-tSsmZOHBgq4qfu5MNCAEsKZL1cI4avNLw2oUTXWeb74=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "dbfd51be2692cb7022e301d14c139accb4ee63f0", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..772830a --- /dev/null +++ b/flake.nix @@ -0,0 +1,81 @@ +{ + description = "Effigenix ERP – Dev Environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, flake-utils, rust-overlay, ... }: + flake-utils.lib.eachDefaultSystem (system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { inherit system overlays; }; + + rustToolchain = pkgs.rust-bin.stable.latest.default.override { + extensions = [ "rust-src" "rust-analyzer" ]; + targets = [ + "aarch64-linux-android" + "armv7-linux-androideabi" + "i686-linux-android" + "x86_64-linux-android" + ]; + }; + in + { + devShells.default = pkgs.mkShell { + name = "effigenix"; + + buildInputs = with pkgs; [ + # ─── Frontend ─────────────────────────── + nodejs_22 + nodePackages.pnpm + + # ─── Rust / Tauri ─────────────────────── + rustToolchain + cargo-tauri + + # Tauri v2 system deps (Linux/GTK) + pkg-config + openssl + gtk3 + webkitgtk_4_1 + libsoup_3 + glib + gdk-pixbuf + cairo + pango + harfbuzz + atk + + # ─── Tools ───────────────────────────── + just + jq + curl + postgresql + rainfrog + ]; + + # Tauri braucht diese zur Laufzeit + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath (with pkgs; [ + gtk3 + webkitgtk_4_1 + libsoup_3 + openssl + ]); + + shellHook = '' + echo "Node $(node --version)" + echo "pnpm $(pnpm --version)" + echo "rustc $(rustc --version)" + echo "cargo $(cargo --version)" + echo "" + echo "just --list für alle Befehle" + ''; + }; + }); +} diff --git a/frontend/CLAUDE.md b/frontend/CLAUDE.md new file mode 100644 index 0000000..13800e9 --- /dev/null +++ b/frontend/CLAUDE.md @@ -0,0 +1,22 @@ +# Effigenix Frontend – Agent Guide + +## Stack +pnpm Workspaces Monorepo, React 18, TypeScript 5, Tailwind v4, Vite 6, tsup, Tauri v2 + +## Packages +- `packages/ui` – Shared React Component Library mit Tailwind v4 Theme (Design Tokens) +- `packages/types` – TypeScript Types (OpenAPI-generiert) +- `packages/config` – Shared Configuration Constants +- `packages/validation` – Zod Validation Schemas +- `packages/api-client` – Type-safe HTTP Client + +## Apps +- `apps/cli` – Terminal UI (Ink + React) +- `apps/web` – ERP Web-UI (Vite + React + Tailwind v4) +- `apps/scanner` – Tauri v2 Mobile App (QR-Scanner) + +## Dokumentation + +### Base UI (Headless Component Library) +Für komplexere UI-Komponenten (Dialog, Select, Combobox etc.) wird Base UI verwendet. +AI-optimierte Dokumentation: https://base-ui.com/llms.txt diff --git a/frontend/apps/scanner/index.html b/frontend/apps/scanner/index.html new file mode 100644 index 0000000..f17b3eb --- /dev/null +++ b/frontend/apps/scanner/index.html @@ -0,0 +1,18 @@ + + + + + + + + + Effigenix Scanner + + +
+ + + diff --git a/frontend/apps/scanner/package.json b/frontend/apps/scanner/package.json new file mode 100644 index 0000000..5629485 --- /dev/null +++ b/frontend/apps/scanner/package.json @@ -0,0 +1,35 @@ +{ + "name": "@effigenix/scanner", + "version": "0.1.0", + "private": true, + "description": "Effigenix mobile scanner app (Tauri v2)", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "typecheck": "tsc --noEmit", + "tauri": "tauri" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "@tauri-apps/api": "^2.0.0", + "@tauri-apps/plugin-barcode-scanner": "^2.0.0", + "@effigenix/ui": "workspace:*", + "@effigenix/api-client": "workspace:*", + "@effigenix/types": "workspace:*", + "@effigenix/validation": "workspace:*", + "@effigenix/config": "workspace:*" + }, + "devDependencies": { + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "@tailwindcss/vite": "^4.0.0", + "@tauri-apps/cli": "^2.0.0", + "tailwindcss": "^4.0.0", + "typescript": "^5.3.3", + "vite": "^6.0.0" + } +} diff --git a/frontend/apps/scanner/src-tauri/Cargo.lock b/frontend/apps/scanner/src-tauri/Cargo.lock new file mode 100644 index 0000000..ea77ad2 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/Cargo.lock @@ -0,0 +1,4964 @@ +# 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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +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.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +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.11.0", + "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +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.18", +] + +[[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.2.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +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 = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.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.11.0", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.0", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[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.29.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.10.1", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[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 0.13.1", + "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.117", +] + +[[package]] +name = "ctor" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[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.117", +] + +[[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.117", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + +[[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.117", +] + +[[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.11.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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.117", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser 0.36.0", + "foldhash 0.2.0", + "html5ever 0.38.0", + "precomputed-hash", + "selectors 0.36.1", + "tendril 0.5.0", +] + +[[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 = "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 = "effigenix-scanner" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-barcode-scanner", +] + +[[package]] +name = "embed-resource" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47ec73ddcf6b7f23173d5c3c5a32b5507dc0a734de7730aa14abc5d5e296bb5f" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.9.12+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.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.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[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.117", +] + +[[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 = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.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.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + +[[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.11.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 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.117", +] + +[[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.117", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[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.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" +dependencies = [ + "log", + "mac", + "markup5ever 0.14.1", + "match_token", +] + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever 0.38.0", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +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.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +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.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.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 = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[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", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +dependencies = [ + "once_cell", + "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.11.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.8-speedreader" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" +dependencies = [ + "cssparser 0.29.6", + "html5ever 0.29.1", + "indexmap 2.13.0", + "selectors 0.24.0", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[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.183" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" + +[[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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +dependencies = [ + "libc", +] + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[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.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "markup5ever" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +dependencies = [ + "log", + "phf 0.11.3", + "phf_codegen 0.11.3", + "string_cache 0.8.9", + "string_cache_codegen 0.5.4", + "tendril 0.4.3", +] + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril 0.5.0", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.18", + "windows-sys 0.60.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.11.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-conv" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" + +[[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.117", +] + +[[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.11.0", + "block2", + "objc2", + "objc2-core-foundation", + "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.11.0", + "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.11.0", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[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.11.0", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.11.0", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.11.0", + "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.11.0", + "objc2", + "objc2-core-foundation", + "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.11.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_shared 0.8.0", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.2", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.2", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plist" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +dependencies = [ + "base64 0.22.1", + "indexmap 2.13.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 = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[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.5+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-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +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.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[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.11.0", +] + +[[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.18", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "reqwest" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.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.117", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" +dependencies = [ + "bitflags 1.3.2", + "cssparser 0.29.6", + "derive_more 0.99.20", + "fxhash", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc 0.2.0", + "smallvec", +] + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.11.0", + "cssparser 0.36.0", + "derive_more 2.1.1", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen 0.13.1", + "precomputed-hash", + "rustc-hash", + "servo_arc 0.4.3", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +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.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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.117", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.13.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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.117", +] + +[[package]] +name = "servo_arc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +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.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[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 0.13.1", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.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", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +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.117", +] + +[[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.34.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d52c379e63da659a483a958110bbde891695a0ecb53e48cc7786d5eda7bb" +dependencies = [ + "bitflags 2.11.0", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "parking_lot", + "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.117", +] + +[[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.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.18", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "toml 0.9.12+spec-1.1.0", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.117", + "tauri-utils", + "thiserror 2.0.18", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "toml 0.9.12+spec-1.1.0", + "walkdir", +] + +[[package]] +name = "tauri-plugin-barcode-scanner" +version = "2.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "485cbcf227f04117e930be748ea71d835900466dcd1d455d5ec284d36107a305" +dependencies = [ + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", +] + +[[package]] +name = "tauri-runtime" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dunce", + "glob", + "html5ever 0.29.1", + "http", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.3", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 0.9.12+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0" +dependencies = [ + "dunce", + "embed-resource", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "tendril" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" +dependencies = [ + "new_debug_unreachable", + "utf-8", +] + +[[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.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[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.117", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[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.13.0", + "serde_core", + "serde_spanned 1.0.4", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[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.0.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b320e741db58cac564e26c607d3cc1fdc4a88fd36c879568c07856ed83ff3e9" +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.13.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.13.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca1a40644a28bce036923f6a431df0b34236949d111cc07cb6dca830c9ef2e1" +dependencies = [ + "indexmap 2.13.0", + "toml_datetime 1.0.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.0", +] + +[[package]] +name = "toml_parser" +version = "1.0.10+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df25b4befd31c4816df190124375d5a20c6b6921e2cad937316de3fccd63420" +dependencies = [ + "winnow 1.0.0", +] + +[[package]] +name = "toml_writer" +version = "1.0.7+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17aaa1c6e3dc22b1da4b6bba97d066e354c7945cac2f7852d4e4e7ca7a6b56d" + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags 2.11.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[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.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.18", + "windows-sys 0.60.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.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[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.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[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 = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[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.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +dependencies = [ + "getrandom 0.4.2", + "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.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[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.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" +dependencies = [ + "cfg-if", + "futures-util", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.117", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder", + "wasmparser", +] + +[[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 = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576" +dependencies = [ + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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.18", + "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.117", +] + +[[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.117", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" +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.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "wry" +version = "0.54.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/frontend/apps/scanner/src-tauri/Cargo.toml b/frontend/apps/scanner/src-tauri/Cargo.toml new file mode 100644 index 0000000..abc6b81 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "effigenix-scanner" +version = "0.1.0" +description = "Effigenix mobile scanner app" +edition = "2021" + +[lib] +name = "effigenix_scanner_lib" +crate-type = ["lib", "cdylib", "staticlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +tauri = { version = "2", features = [] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +[target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies] +tauri-plugin-barcode-scanner = "2" diff --git a/frontend/apps/scanner/src-tauri/build.rs b/frontend/apps/scanner/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/frontend/apps/scanner/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/frontend/apps/scanner/src-tauri/capabilities/default.json b/frontend/apps/scanner/src-tauri/capabilities/default.json new file mode 100644 index 0000000..0daf25e --- /dev/null +++ b/frontend/apps/scanner/src-tauri/capabilities/default.json @@ -0,0 +1,8 @@ +{ + "identifier": "default", + "description": "Default capabilities for the scanner app", + "windows": ["main"], + "permissions": [ + "core:default" + ] +} diff --git a/frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json b/frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json new file mode 100644 index 0000000..43da9ef --- /dev/null +++ b/frontend/apps/scanner/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"]},"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-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-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-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-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-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-internal-toggle-maximize"]},"permissions":{"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-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-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-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}} \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json b/frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json new file mode 100644 index 0000000..c3101b5 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json @@ -0,0 +1 @@ +{"default":{"identifier":"default","description":"Default capabilities for the scanner app","local":true,"windows":["main"],"permissions":["core:default"]}} \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/schemas/desktop-schema.json b/frontend/apps/scanner/src-tauri/gen/schemas/desktop-schema.json new file mode 100644 index 0000000..260dbe0 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/schemas/desktop-schema.json @@ -0,0 +1,2244 @@ +{ + "$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": [ + { + "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`", + "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`" + }, + { + "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 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 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-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-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_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_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-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-internal-toggle-maximize`" + }, + { + "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 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 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 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." + } + ] + }, + "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/frontend/apps/scanner/src-tauri/gen/schemas/linux-schema.json b/frontend/apps/scanner/src-tauri/gen/schemas/linux-schema.json new file mode 100644 index 0000000..260dbe0 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/schemas/linux-schema.json @@ -0,0 +1,2244 @@ +{ + "$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": [ + { + "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`", + "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`" + }, + { + "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 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 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-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-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_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_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-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-internal-toggle-maximize`" + }, + { + "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 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 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 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." + } + ] + }, + "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/frontend/apps/scanner/src-tauri/icons/128x128.png b/frontend/apps/scanner/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..98f1d11510fc9b800959bf801b4ef877b72afb2b GIT binary patch literal 1838 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/32x32.png b/frontend/apps/scanner/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..32c3f2b9d75ff91a16ea7bd2621cb295c9a7cfa9 GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANM!Wu7jMAr-gYhVRW2b`+R* zGx~M`tNo%*k)@n_7)*tnY#3yDbLEe#@E&6a^*}f{9o<1T~6jg@9*;rt|13nuPt6v{^jps>0iJ8 ziEcb=omjjA3}nTtm`%|TcCBK;kt>Dez4S)pH6%~wtcw&r#frj z+_GZFqP+ZfY|q0Ne_eg%%hJ>n+RF|fy?ovO#hc59GYfUM#dL3PyYpwxtKIz>-ydj9 z*|4~QDgR2xoI`yl5@jsQHp@p|nDBV>dG#wk`!BpWSGQ|-qPkD#l@nJjDlV!`>DbtE z=BmoaA{ z&o|9-UUc6g(e6Ss<-L>B8sEQW*nZ;pLC!7LFFZWecG2~)>*0>aYLAm%%@*9vtmBH-F+Om7iH_tU{*qsm1j( z>^a8QZpt;=C*tIe|88Rc8$Q0=ExxFDPORU~-)B2c{+*@imeXb`={r-|)NTb=NxOIR z@_ct5X^{l^ZPS9Q=gS*S`Ex70YjybMwbmcl~)jXIqr;wWMp zdiQhBk&A(klq4QGec1Sg{|NglKYNAw58RYAcAfOPv*U{Xg|&K08aqC)-(fLv>A30B z(bl0jbLN?n>EFYy@8DQ*+4k;Bxgu_@ZU_JCw%-G{pSS%t{pY5Gig9*)KZO`r7#JNG z1R#{hwkd6k<~}!4TVnt4AoGGP?HjJUZ8*OC#K|hw7ea4~dJQ=E1Q?bIyx9^sZ`Q#h zH?u!TU*37+{{O3o-hHwziPpZb^^}5|5nDqK|L$0m_4f{UzUB^yv%Ige?8E(<{SET@ z^3GGWZn`nF+g8u(wXgi#SzT`*{(I`Ti+etGd^&LWyE*^EtB;p9OZ_UI(KYvFd4QE! z^Ua@6Pke5RTe9bla>L?D+=pIW?w-Qu9q{zkh1NiR`JYmXqBiF$&F)p%p+niEH8at zKE678#;(sy?&t1H*$E}-%&j_SeSY)DYU%8W*Wb*QDYowazAY-E-n4zgUt^=pO&(@xe) zdv5g_I59OaC@^p^AgBhVdcOW+=l=Yi?bIvDP?nH+Y2n$e_m1m|&Ezkbmn79abIyj# zg={;{Keo8-XP3!vJJ&f}Jx{w1=W9RCVY($fIl7_Jp|2&1`RYq= z3xlXV0oNbMGa1V)?6S5ijCkyO@fXAF^{f&Lyp*SiF=$O%Dw6NI@&5h1)N$cz&sHmvvb3MukpO%VrsK$MapPpKjWk_g=d3 z>j%%={P_#Cwnp@Qd|bMtF%+aoyZG}b=2vCjJJ}hf_kaAQSK5;(3SX+2;3dzr12iYSBBEHOG=1gQ{~i@1Ktp^STtd=D9GB z-`^+lHI1RkKc_NzqzbQcaevSJ;^{ID^F|Z2p#OM1KfB>XX{nnVCj$cmgQu&X%Q~lo FCIEf_%BlbW literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/Square107x107Logo.png b/frontend/apps/scanner/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..78c81434e5758b0ed3fc5f2553fe7363a7e9d016 GIT binary patch literal 1485 zcmeAS@N?(olHy`uVBq!ia0y~yV8{kx4mJh`hJyVyJPZu1Q#@T9Ln>~)oqIl8HdN&J z`MEQve~%No9ik$&R&2NCw1)1kh=m-nTC9Z^L%DZp?<#m%|L~M+p<-)OkRtcXAPo*J z*OgH$3%M2@*>XjGg30@t)AyJc+upB!estTU8%NJPIk)Hi^gT;jK3J986`!;Hey9AM zXWky;)Yet4Lid;sE#m0jpn;pr;yAry{h#Q+sT)t`Nwb}HN&1qydEt$V8%}+k`umQn zu3@3~%$E&0QRNYC>>{34HwuzFms?+&6)j+F`nK`v#RH#SZ#&$$WUsx-+wZPQe_xe- zogSH&TiU#I8jDkAeekaK`IC1(exCB{gSXK8=m{DxuU!B9^!yCp?I~Aw>q_sh(aa9N zKmA|td6lf=UTdE&oLcDZ{j)^a;o#Gk!DjWZVl4|Ey*=jtuY6tXl-u6VOKwOfO)Aqo zFezxx&L|NF*_y|j&e(k3RLmPz-(Kmx-?V*#bU0hO{_noIQ&;{}-c<8%N%2G>_14`- zR#YtRQn@W*)yzmh&YTSfA*?#kj9te(%Febzj{!g2bjsIzC<^Vo`c@q2wF zbiXUltBZ*G&EK^oa^XBxEi*2W?GM&|wpukqMC9FJpMU}}F-9zJ$ z(walh?B{P=m3RHH$i4}=c56N^o3}1{RsX-W|Nk?`D7Ue5-+X1$ZV~Y>$}GR``8MTK zy)hzv&wkwMmz(cV+3DR*r@XdH=GB&jU0bi;x$O3;NIr@56Gp{Pme|xi zn{>pupM_nAvoM=~LD+h|m+Lm^ZMc0k&hhCJ>%>i)7VEk-Z#@~#x+D1jk6W+Nr505m^S~C@2$4iWq^j@#DWNwu_Yk(Gb#j zZLwpnL+`cfOSW59xc}O-tyWAl@omKX)RI-EOtRSEDPRvq&$KE@AI~VZF%w_}!UbP8#a)XNx{|7h3Y*vE-sf{a+ln zOPd5b=JyqjMznl5GtXWN~`RV#?)|?Nn?y%%} z9H?NSB>PzA-`CA|{(R`U7aBahbXsX{=Y_Xyz9HAv*T4By`Xf%|+5P=1e`m}5R8*Z7 zeP#W7+38=-y-$jo8}#krsmzlme#c%3x2tKrINLal|Ak5e^Q+lPF0~wL2JQ#H9$X}| zLT7E@|25UuWG3b>Y7*VCt;Ru}Q6?b1nt#PS=7*Mx>{x_nEPmI=@p`&+$-6`BvH`dL zU*6fd%qKR&-Sur>_ph93W-1eB^Rw)WO}ac`f}MRyr0&X9?fRKTt0NMXrYq@mZQ$s} eO}^Uyi(Mu@IGVrrr8@%y1B0ilpUXO@geCxBgV3G; literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/Square142x142Logo.png b/frontend/apps/scanner/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..da37034c0ff3358f21b0ebec28411817d6a1df55 GIT binary patch literal 1927 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/Square284x284Logo.png b/frontend/apps/scanner/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..99239111209065d923dc89c443216431b992c1e7 GIT binary patch literal 3948 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 lh^gzCIb<3hKm5 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/Square30x30Logo.png b/frontend/apps/scanner/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4d7cd7b1fb081efda676ac465c96a5e1200653 GIT binary patch literal 629 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 HP6~)oqaxA*iq#8 z{WEH_<=1XoCgS+QH^Aj!GyB&F$A#wo|5#te2fVRg@W_+v-XC@r|2UhK3b!U#1hiDG z7WZzQ!Dg6w>CBIP#?sLToA18KG5e~!B~d@|+vfMR_h*~mpK@(_vUkznuUec;jmiZq zeFp?BnA{(5$TTX43s`tPjAxYVEO)*p#?se!C+SVz^b;Ztz0bl!R(;rgDdlWJPk}_w z%aV@kj!%yikI7|P1@bACDm#%ufG6`PkCe|UrW?Wu6^V#%wqG18E_1|5(wpo-dB-KI9 zw{4lXs!IFbZx2VaL2S`}Vn*S)^NOCUa@XZpMqGc2dBSzYvp=ji9dbC^MNg$dGyQ8q z6HSkE8Zvjj>UEhswdBO6S__kch%LG;F)w+Hj{bUb!twQ?!;bX}mG*xrHg9xWYrfj##g;$w)LoCS3ef!dyW}ay*|Oh}0>Vc(iKwadlZ z7k};Qka~8p?t6<^p6&9L!PjFpi)$VAdbnyusb)h5YNU^y9b><@(Bk8nKQGKq zoxP#x`=FlReQDWSxebh$@15hio)+h>vUn$-PBl|>C*wi3mgZx9yca(FJaq0=_pt>t z5+;>?-B-Kp-ZiV0MKuZTEB%U_GHnTL0U>#42g_#j4*OQQ7^T*H?GSTJSqQ`zL#@Kw?4pzPf_4upMU3 z=BfWzb$ftPmhkZ@>zix$AC+gz`1bSAIj-x^cB~dUA}-Y&;&i0Kpp0kfoX=LPuE(tU zYGyxi>rssWf%_S&=4nkedRyFf)$3@e{<+p4d#6fD`fT%EpnIr)?Gk4(cnmxd0x?^5 b*D}QJn(zrbytJq9m{X_Kg>=GqgHf0kPi@u zW(f~Ec&+QwGT+H(zRs(je5pj)qTI-M=JyG00$yp)PR{&ZH~06k_<1L_om`~s1Q?7I zlo=!^FiJ9>Xy{=`abQbfQD8PwP!8gZ?vZb;nb-Kw*u34WaC%m_+@$bzOa1hkjgT$JO@Dd(4)Z7Nrx!StozpkuJ&9?npxGTUOEj zKI6|UCN+2Vzj?Wgmnq5nns(^fz3V)Vt~kjo#Z@dmbM9^dg_$pW_--vUeLw$~)?Oax zutr9OUxhN4eFY?2*8HCTb^ZH{;+Li?)9xCwxE|6E_<2Ni)tp&x=H{JdNtqlu>6+NP z%dh?{&Y1O8?{w?(sxM{jeE# zwznVIB#q3A=J@Cc-rdPJFQm(FV$CDhS!d6GW;2?2s!uJNcUgu}#s3RU!n<}}HJdjg;)O-$+ql_o12(+bKmCkNAAX_ z-|x~}bg}hwh+U`0C2C0C)%@hrR{nTz%s-|n^l z_2|&_+g3Lxo@$e6mgt?@?{{i>YQ%ZDZBr7D3!6PLh*e!0H2-*6$cl`|m%VFiYdjr$ ziWW9*O6QM0wc&B+-QvqWh8emdYh^#by8b);%8zYJ6sNy+TNDw?wB;{T^|uX6d93Gc zP&}@evp7xZVr~E5W-+<0>-%*sy}DyN>1a&)hAAA?GDh=kb2Jb4spp(HSSOhIvbw`| z<{8N|4UtM`Ok2(*eg1i_j%o4cxvTeXO_uS$F`@adQqNq+L(SEKcTQ|%lkU7Ad1tO} zNz<{f?|UTTEpj!JW&MMaz6sn&Ymv6R_TXKOS5o`cH5Zk_RqXYXqdR}xZ)KU*p%HW7 z&x&ndwcNK$@gCTx;UkbJ#s`jLaF&O~F(}>xkH;HMsqo!=H){<80|SGntDnm{r-UW| DWp68w literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/StoreLogo.png b/frontend/apps/scanner/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4a6184f05386c860843b7174bb5aa88f1b021b GIT binary patch literal 827 zcmeAS@N?(olHy`uVBq!ia0y~yU@!t<4mJh`208nVjSLLTOr9=|Ar-gYMjq_C;vlg0 zU5b(Mx<~8Ytm9~s6Zyl!`u%~pMqSGWr8u!K(l*?WPVx(UedMk&@5tot?gy^2X|Ap} z3)N2ykJkOR(`c+-qMt>i}tT7Fujy7 zpK0{RWz%iNM^A2ssBdFkxM|9@_4W&<_U@juabA2{s_?ImuMBzP^F%{0dIq0uXz*LX z;xK1d+4^T2{Igs+*Ty_;IoYw#Zm;tviHvD~zsqH2<$Pgz(cVZL z=IwOIGBOIf$>8$pn45owRj5LZ{+qxct;pR+45wV)RJb{s-Tt+S@U#6o-}~mCt$mYo z;?~38A&mDNrzWc_oN_S8^=3pbMR{xiv>Avn2!AT94%#Y|H;d3-4l~}UB3BU z`qkTh#lC!};fyv>%@r&H`|s~xma#G?Xtrvl(mPElo87L@x8K_uDY(>_+iIZ@gW{ug zd)*#YFJ3xj)5Y>r$M^rxty{FC{F+_yHRY;r?yjl=9bZpRnmpls@tsZU+A_A@yn4oK z>&+8<&nGgdFmO6BO=x9OdKR#EThPA~SM~KG88`9vsPbwvl?L#x_*rA*KxufiO3 zzfV(RFqrc2=(S@_@zXc1%MrYl^1Zq5V9B$I%h(TzwlCz-FPl|*WBRGfp^=OCoIh{w zpYbPkw#y}RwF^FLZLY7g;7P66xWTZqe(%~zMGS@&g|kzHq9vscy|UiD>A^)2neh zIX?5}i#n)>I5kfYwEVRupjd3(kCYvUXTO>7p5J!U{q?-O+aHH#{_FDVx77Y)UOlg} qu0La<#5rX~4+fzI7KO9d;+Gdk-M*dLy@G*(fx*+&&t;ucLK6W01BRyn literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml b/frontend/apps/scanner/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..2ffbf24 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1e72a00987b158ef9ff955f502702d0d30618c81 GIT binary patch literal 970 zcmeAS@N?(olHy`uVBq!ia0y~yU@!z>4mJh`hT=JnG7JpN6FprVLn>~)jkL`db`+R< z^Y)F6u1qZA8h;qHS~OM!T~dgW^5QxY&k*R)D!|Ljy1$7jFyO+1KP)cJ?u`=^4l-&g z{@W$}?CrddmK*zb|2S8;$T~CGb>HpT=AYBbp545pxg&>l5tE_2zEB{5OLf}>;l zG|}#NovtxL92Is#T;IQGSlnK;pwRJu|EE3qPAma&Jf7+8zxLNn$h>mJGb&%@6wi@o ztO|+qqs-+mo!V;sYG>QxgFaij=1+H=US_{<+1u~_qSHT?lsa&+Fmfp}F)~gLU3O?6V-1r)tIvR=>RGlj{_tH7JkmQcy%W7}KkeaRlTI(4jXsn2HcwyW_;CLGd19GzA?h2}242YV)#tK#A7=CI z#kptPS@jhww*=-cb9MVy4%@XEOF zrf4dp%y2fC%{%wQ$B<)Mmrk-MP7MfX)OhzOSddeXr&Bj;ONr~XAH@zqt2f@W)LCm; zy`;$D$a0-3#VtY>orM#Y&J$+1d9_-axprL~$L2R{l2xPFOp0H$UhsOL(pNp{qtPkl zV#Wt|j@jl~>ixWT(zo!T;iZ$33hQP%>pzL&bQhmFhh0k5-HWHCtX{gD_qrbW*vhPy8|d#ZxpOzs`y~eHG8$ML*XsjTpU;}Lv8~DY zY($`DaCdLxgA%i?Q6E?B5MJ?_f3>^an?9|>;h$Zu3C;edooXs_)>x=puGe#$VW@E# g>msI!d;T${@k}vjXnb;*fq{X+)78&qol`;+08Svf9{>OV literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bed6d7e25c84fcfbc3730068590b65ac582c43 GIT binary patch literal 2161 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7746d8e81b0d44e329ed771ee92189ed7c6b464b GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F>nVxXA-p6%;(uNeK`Epl2tZo6c zdF>r>;vXV+{M#=TarMRTw@zM{;~$7}B=ID?-NdQD$bayd^M<#1MQLv8Gj`wl5hdEX zpjqGoAJ^K9u10=^cUv5<&lbqN&me2|Vvnw5HLJxN$M3hLqpIbb++0*1-BI!Rw}z9o z=I@hAi^A`MF0-e7YOAE*Y+ydcvNOx+`C)m6vflyuv85B$Kb&BBam?w-gVKr0wR5L# z>5LLrytRvOoB4tpEdRPAismi$YfpNYbte9kSnj?{ss%6gj;&7ow4_wG=<3_u9d~D$ zEp;%s%Pj2RIC0<1RSOI4ohT-n9)HCUW);*4tb z`$bWnw+fy}{y8_<+ThRMnPF?J6N2>>3kv1W9Fx4U=X=kqmt7^ZPuA$Gv6Sp&dlb~A zeExyy*Mi&?R)>0;?YosE{{3XSyIx=Yng-XM)iWM%DV+G+d`54p-Q;7^5>|(<&OA{N z!u{BMX1vQwiy3p%UK;|+2*Xtrc=D?|DTx8pjLg+p)7)9 zv5V@;Gy9rFj8!uGJ|?hos0cM|>bvp zTV~Y>_vxJ9kimV!DDBm{H7W|;UW#S>ZpLeD{#{8>o@DV{!eXV<)Xyy}J6Nq>h@MiK zd%Yy-e%o69GX5zxRpx9~g=STAzn6cqs#J2>xBL6NB|o)|_imOK_jhDEn$5kjJ@Iw(U1qrh9~V4+z?3DT3QjD1HOe1b zro5LbP*!noubut3U;ot4uJ%8!ezTR@t~LE`cx{$rHFLwWn|HRh)?PenZnTP1=WXXN z$)amzopr E07Nvle*gdg literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..350d609f79049e23aca5357a8c01b33f42019d20 GIT binary patch literal 1472 zcmeAS@N?(olHy`uVBq!ia0y~yV8{Vs4mJh`hW@nhvkVNZ?Vc`3$61HwC?Ec@Q&S8U?_A_Z-=1k zogWOQ9xS3QK64DtJifQH|J|oQukDJC8x%0#tzEtQe|=Ht9`2dAanJ%k}$f zBNuWl?ud0r5NQl#al=W59BrIAsbs#czJYKH-xS}Z-1H#6xMMQ;;d~66+1uDMlOOqo zui2))LXvaZtfdd8^7N}%zOwdnO!oAV=shSZGJ{j8v)@X{W#N|jJ2lpB7GJXMV@u1~ z-ws8JYO0|L?$wv}m&Wqd{S5k6|1aiIUij^8Yc90i{F)iIe3{G|Klf?!m4Rk@bvj?! z=V@&H_mKZ#{>*MU5onFEl zeKbw?>IuIISvx%4h0TsGt_@3lKI6CawcAz|;ckBIAL|~=cszZYHcQiMNwcKSq4U}z zje-$s8|TaTuJNp094(uW_kYm>pBeAj&nKT(HJE9>=jp!1D<7TfQ`!4hWQq1YLn16{Xrd8%Eex@UXw z?ccCf>!iZ8xBB;_zE6mc6{&d2o7J9pwn_5HnL{1&j%VJtr?Y+C_2u8si)X)hp6ET` zHzT&dz%4s$!-awcz15RS%J+8PaoNY_zxTzGm)F^x6M|MWFPf7m(kLk5nt)F3ZaAR9 zw3wp@g*Sfg7C91b#+3`U)%aeSg1XkD`-BSGXN;ibbRdY%T`n;I^{ZypN z<+=O5%=P|R7^$Lmdda?zx^}zLe9tN*NG>~bPuN7|^3`|t%H3x+s%@xlG@E_({k4fa z={KH8Mx3^34ejaO{BUn*Pl*87<5M5@tx>qkFh_Fw_8Y5f;z};rU-@lkwfOe7wa2$- z-L89dD*8;^q4>QsTfGF$RbIY0P`bStoYP?$Z)f$a7xe{-d>HP`h~egxy>&xm%WRr z_AlH2^GK-0sYN=WQ_dzx?-F;LDlgLKs4FyO`vjwTKMVdlrL!4smRXawIO6Gww7qU2 z&zwOna;)SIH(Yq{+rPZKm3tg_y!*iRFd^Y=QJTTwTZuE7XYcwI_4K%C-^HgqPjv$f z7yfAVUVA(JU}?KK2Rn0i*tDxZi#kgz^aJ-E%~<*_CN5^J`5W0O%UGtaG*wyEzvtkZ z#HZr3f<7m{EvVu-;IeRv+KNWU8OaR_Q6AcnFPjg>gOZYx0W#TjfTKsr07iDL|Iffb YVOs7klNE~@7#J8lUHx3vIVCg!04KV~#{d8T literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a54b09637aeb1cfcce4802b3d033903bc57524 GIT binary patch literal 1115 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FpiQTy;jh?&yP)5 z_inm*XrrD(CVQek`YTk%`htQMG*@MRlp-^BJ* z+x+0n)oH7muCH?bdpbL#?mw5`&LhFQ!*=(W%@9A`{ee6D{ee$!moGTK?g@k91Jk+# z_fE5aczw6{!d0W!7vx?FTU<(%{CqD^xa+yzq1NhrNBuQS6Q_6cD`>s=bFX!7x^%&o z-Mr`iWT=MdymPH9i#WLFfSZo~p~W_pt6m&1bbC=(CuF_RZZpr+uhDzd;*)Q*1zKqw z$&#+=x@Gt5qI^Zo=MK^0x3Pyf)-EbeI6p5<*JN|wos87U9vWYY7c`%?da>cC4txD{ zQ#-Tt_nY|xce^aV{Ak;5<+;uI4r|$FyYOBQUGvhAgHTA>6TkP_2 z2hN+%{qOxAatgbX|mG z1%JC&>=XOzKf>;>@}&2*Fedl-d$9Mzd)i_^VX+u1%V(g`vCrm!1+-BMDLQ>k1duRn3l-pexul>SUwWfUo}DDLM(C8x~l9mziR9?Mkxmh7^U zYc=@d*L%MAo4U!T*QU>Mm3naNAn)63mv#=WphJkwGl zbk9vDaL$wtr^C|4Ezb=6-ZfP3U~j*@-a+(etkucczgA4k*x|MCcZ;F$CC>`!kQq&0 zl5Xn@%mkCNUmKc~+ZkDhcNRDuJ|(+l*{++P^7e8ry;^$sHpkbAya!#`KF94oH|_qX z*7fH;U)vq_C&Q^|J44>$JdfovGhCTx&wFaDTHfpy_uxp${BbP0l+XkK3^E2X literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cc3924c44d5c59705d4f6e95ddb7a2925a54ce36 GIT binary patch literal 1373 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^SBRXklBLn>~)jkV2*aTS<% zcYAqy^MqPIpMWO`<%&TrT1rbDy_i`|Wm#XY5Y+IUHN{gnh^3Q>QAjmbYl@bO=A;WO zt_lvDSTz33Xn1>L+T7jM`7>wMrb`E?OxpAHt=xT+e-q!`efRzBxpQyMohfFKTxsFJ zz~sQd!qULN!NI^dfrspMmtV@^szL{-7|1=)v2kzc2tUn5$?0?kiTX7_5 z;orrvtPzYI%nl4^_`?`D8X6b`7$mEidN`NMA6wGdCSHH|y8ZD^2F5!PpPJ=<)_Lyp z60Vn1nmJANvDK31JIqRV=AG$M56aC8`WQ0ZiramqsjdIA4Axw4=Bi`W4$W8RXS{wV zE4AkC;-p1q|LawBG#|G$@oQjU-5;`ce$`9fS(ZQfO8MlxZ>fEswr`>R`hD)J&FxbD zNY>oGX!*pwVTSCr8pitj+UXhpSEo16O!YNh6}a+fd7{tT^!^LQ>+2onGPh^G{FFJ* zZKv(@GaMVT%3MB+*09~%9Bb-o{ZjP7>3u>MYk%gxx*NUZ>FVhx>}(}-MQ=ph(wAO$ zqsGws;6V@h8rfZMe78`>9u;dK$-F0v**MIL59}OAKuq} zQp>IRTPZO!KaaITe}CO`E?Jwen!As`iP|*N`=HEDlMnh=-*i0V{*m`<=Byg5z# z`jWVB{rG3KHl}`lTD*0<{cX4VDaHy1+RsjOJ=53cVN&*C!Oiy%jOz|3dcOaDRA6TJ zx8D;V&u3uV?O!&06Fo2cnS&( zEDjC~918;D`Ht)``1tc%*Mhw}M5WUf&P>#ung5OZ$xJg_r5K^7j+0D|PJcGZYSGLS zf2vnp{&Y6>l=SlRd1udjtlh9WICz3+pn7n7t45{uBrBzx+(nIkp~bIb4$QasqU1Zj zB76EyV+93><>+z~1Mc;&dLikzn54Sh#Ux^g-IP;60^Pr9gNS4FH_gOCw zqd(`LFMAYJ7hc&Sa(PSbI;WkPUJsT_vTJvV!(95o99?O$x>21c% zJ=`XT+-8{z?tA4fyRZ9dsY^`t%e@n_*WM8L{O?r1;#QOOi#gWEx-a?I`Xx@_y;{hE zbfr?p;}8DnZ~1!ImvfP3Shu)zF6)QDrV`nS$HZ@|+lJb6f2fu8dHzXUe8vCc=To95 zOMdH0=$$xC|5B-oRJ_Og*8T6fJ7>vWtLYSdSN~H`H-5KA+96ln(9*!&{+S2wI_&QA zc+CBBufo&+n%y&GFV-;L|I9e4P*~C8%q8Bh3-9-BshPM=IXk{~*VLof5!z z^-rP36|v$YE-hBNvvX1&w6{JIv`*>$rm;vZ$!3?wgCIF@{5CW&NWCsUVRO>^ltKif z0>h;Pg(hbNT&rixg*oV*+!?`Icu%!+`^slu%tAT#CFVdQ&MBb@033#MzyJUM literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..28c919df1841c98ddf1fe896828afa764ae750ce GIT binary patch literal 2954 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c41f27b9f598d8602e0b34f54f0d76b81f9c3f0a GIT binary patch literal 1668 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 I&MBb@0BAMH{r~^~ literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..de63333cdacb195f77d05d3c20ab853912c6e4fe GIT binary patch literal 4451 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/frontend/apps/scanner/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ced506f0994f4060aa06b7b5466f67074b9bc8bf GIT binary patch literal 3272 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 + + #fff + \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/icons/icon.icns b/frontend/apps/scanner/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..5f981e0c076a7b01fe438ade1216fa4d7df26d2f GIT binary patch literal 38592 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/icon.ico b/frontend/apps/scanner/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d0dc4f92b303e82c5615b270bd6ba1dab6f2cf55 GIT binary patch literal 7621 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 O1B0ilpUXO@geCwG{-kdJ literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@1x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa582a66c8ac47f09c4093cff28032877b5f81b GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqrn#hxyXAr-gQh8*-_HWZk9 zbJ@n}RTtxIIFt6Slz+VNhxoid-2WGu^ZykQbaWBOS9;+XvS#<~9^;d0yYHrD3otKK z-Te8J(fhM2b{G48==XN@H}pQO_E}nC*ZZzYA-Pq&{W8oc2Ej!g4*lP>r-|rgUMNaG zqgP*BaM6b~VCx^vgXdm~v>g{-;2I~p&8z1f)0@nS{rg&$zf9>&e3tF@)cnO-TkdDV zZ=R*=zI_#Q?ZXF_U$>Lboprt&8qJgVOqi?gQqsR;$8E*UxlgdozVN(zu9~Xwxmhf? z7hMr#tlne6G`Zd=A&gPtz(0nv^Xqn;dpvc{j#Hs$TV}EbTRmCewBQdn&+(*$yLMaF zzqd@gQq?%;r_dUU1l|Yn;pN^N7=nzmg}A)*%KT;xCT-juRW%Sv}={8_(!P5*33 z5&iEmQnG6N*FIn1W&b&`?2v)XqB}aqjLP41kF_(muAFFpzbx4_ai(OHU}o*>&Rs8= irwR4Q&OEa6HG4tYcH#C;o68Ig3=E#GelF{r5}E+h=hHI) literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@2x-1.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e2e21f34c0a4bdd392a2884e3837aafe5a259b GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2zymUy~2hE&{oJL7EE6$gQa z)m5L2`(AinloZu}Lb?bJujKG`+&kl0t+a~Z=+zB|@SRFjy$VelXGvGi+ z!=s&ZqB2kPykK`LyTvep^+FQg0+E*KkvbFw?`Mvkmra;m(wq{d=l!&rGJTb52(m#2wbO zpFFLitc*X^W|gV?$$!ZPr`os`LfMvF{ru}Vr^J4Sz|i?6X=jeDyiy^%L}p3l#YflG zXVh08w%?odw^LKyT42upeX^UjdQ58m{V7F!QZw@b$B(C!xjy;zKX|qHxZMsXw4F~c>hLn?ZQV(ue3k;AdnUxpXs2zcyUC}v!(N{&1nSdyCDa z!|pqIUtC@*w}JhQfPlH%zM%8&-viH1lZ^YX;-quk?9M+Md*_!uzZX?INHeNz^ZGG~ zW1+q%OLC+1oKK}uQ>S0-W%K1#Y>ZD@-Ll@N`!=U*F_U;-e(4OI2W%dFtF3;R`)+^5 z_~_M4Gv}bAmkNUq?FxFdlR0SGgQBln|NJ@_|LmBQROI=d3`65iWy>onMl)WAY4R@p zwaK)FEq7tJ&dH8P^Q#U1{}T&&V9j*vkf!COrHNbqJ94vRuWGw{$ans|$GnXkU7O-` z?#PRH+zXs=DZs{1yI{q~ZA~*mP1Fm%a+hakDL?rBeEL~)(IPvIG~MRa+s@3m6x4b+ tsK5Awz~#%^#Im$EoKLGd@Spz!|E$!c$4XI2-3$y244$rjF6*2UngFDUQ=I?+ literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@2x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e2e21f34c0a4bdd392a2884e3837aafe5a259b GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2zymUy~2hE&{oJL7EE6$gQa z)m5L2`(AinloZu}Lb?bJujKG`+&kl0t+a~Z=+zB|@SRFjy$VelXGvGi+ z!=s&ZqB2kPykK`LyTvep^+FQg0+E*KkvbFw?`Mvkmra;m(wq{d=l!&rGJTb52(m#2wbO zpFFLitc*X^W|gV?$$!ZPr`os`LfMvF{ru}Vr^J4Sz|i?6X=jeDyiy^%L}p3l#YflG zXVh08w%?odw^LKyT42upeX^UjdQ58m{V7F!QZw@b$B(C!xjy;zKX|qHxZMsXw4F~c>hLn?ZQV(ue3k;AdnUxpXs2zcyUC}v!(N{&1nSdyCDa z!|pqIUtC@*w}JhQfPlH%zM%8&-viH1lZ^YX;-quk?9M+Md*_!uzZX?INHeNz^ZGG~ zW1+q%OLC+1oKK}uQ>S0-W%K1#Y>ZD@-Ll@N`!=U*F_U;-e(4OI2W%dFtF3;R`)+^5 z_~_M4Gv}bAmkNUq?FxFdlR0SGgQBln|NJ@_|LmBQROI=d3`65iWy>onMl)WAY4R@p zwaK)FEq7tJ&dH8P^Q#U1{}T&&V9j*vkf!COrHNbqJ94vRuWGw{$ans|$GnXkU7O-` z?#PRH+zXs=DZs{1yI{q~ZA~*mP1Fm%a+hakDL?rBeEL~)(IPvIG~MRa+s@3m6x4b+ tsK5Awz~#%^#Im$EoKLGd@Spz!|E$!c$4XI2-3$y244$rjF6*2UngFDUQ=I?+ literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@3x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ece414ccec5dee1e4c583e6eb8b56c843f8695 GIT binary patch literal 860 zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?P~l|5Y?Ln>~)on@Ub>?qKX z{{EU8pQ53{qc(>X4P2aE9$Px@iL(A-uu^ex^z@hf#~{KHC6}t=)xsj!!K8RGp|R%? zhoj8tkB`e{&a~!sF134aD|Fs7yL|WOw{On8IkV?L1`roW96lIey>1<~Edm{6vBtQRkxeYw0zm|T`{>*UD z;0{OnfgK$$zdyWi()*#I+gYvsbD}c>>pDdPR?TbLdG)l0bY8>roh)H*djDIk_!InM zB1_f6W1Cjakeb%rzWQ|I)`KO-r~Pf-&fjpdc<}8~+&Je)s>VwoRHd z=W)A?iN{jy4HXZiUcBlm&UpK!Px_$Qwd)J6=P>->{3C6+*z`|Lsl4C)D(0ohtNj*k zwZ7NTZMOw}>?r1O!TgvF88WAF4y11LkZj!={ z+>JSAX%-(IF*UC)~2F2~MoCeYdB7 zyH4)0=4&Bw6$a7z?-sP(UZ~?|YLnHGynOCF$$;mzA66gSy~apR`K+0IeEa?U`5S!9 zrmFM*x2;`p&f0YGPW#ylA5J=Z$x!X=r(kyJB{I{Ld?)jk+vPs_lH=KIZ$C3_dH3Nh z0#fF@P$4GhQs{9`bvY*l#A)Ktg7z`)??>gTe~ HDWM4fiUp1F literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@1x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4246d9cd868962fc5bba73255896ebf107bcc3d4 GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0y~yV2}l24mJh`hOo)${0t0CS)MMAAr-gYhV9K0b`+Qw zIsbg2P{1k=mK75k*eY60mUL8bS&AacPF*m-S^W|%$%nSW!m;VR;nFpv9`PCJ_c5ePN;rp-f;sCJ) z0w?(0Q-81G{g+qz^zuu~uM3zYmI+7RUz*K7f5PkcC*AHdU6|4ILI0H=iv3weo$c zf8O00+uqAudiOW^)ANM0Q{7j&D)VVBbu-3Gts}+P7>2ux^9V8p+?}EF>d2poaD)#jY zOi|-1wOpGg`P$gT?w5eq;S~XKRZna?_I=Bt6A@J#LoZPEf%6~Co{d$;_?HZJ(jO8?_4K#<)Fsa zg}FvACkrR<%9?jdlv!AwS>m(6n{GE-VEaF7HEA)KCAp} zVV|W>ciUp#DN0TZzdmj_dG=tMl9-q4yt=y3<#(65_H$fk3_Ejq!O<%>-(5GWdKvI# lU+UL$=6>t*eoWuQZ5L~+wO(<5DFXuogQu&X%Q~loCIDLnJWv1t literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@2x-1.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-29x29@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..77ba3ce01d6a352c0c7ebc3b9988f516a6d10fe0 GIT binary patch literal 913 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@1x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e2e21f34c0a4bdd392a2884e3837aafe5a259b GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2zymUy~2hE&{oJL7EE6$gQa z)m5L2`(AinloZu}Lb?bJujKG`+&kl0t+a~Z=+zB|@SRFjy$VelXGvGi+ z!=s&ZqB2kPykK`LyTvep^+FQg0+E*KkvbFw?`Mvkmra;m(wq{d=l!&rGJTb52(m#2wbO zpFFLitc*X^W|gV?$$!ZPr`os`LfMvF{ru}Vr^J4Sz|i?6X=jeDyiy^%L}p3l#YflG zXVh08w%?odw^LKyT42upeX^UjdQ58m{V7F!QZw@b$B(C!xjy;zKX|qHxZMsXw4F~c>hLn?ZQV(ue3k;AdnUxpXs2zcyUC}v!(N{&1nSdyCDa z!|pqIUtC@*w}JhQfPlH%zM%8&-viH1lZ^YX;-quk?9M+Md*_!uzZX?INHeNz^ZGG~ zW1+q%OLC+1oKK}uQ>S0-W%K1#Y>ZD@-Ll@N`!=U*F_U;-e(4OI2W%dFtF3;R`)+^5 z_~_M4Gv}bAmkNUq?FxFdlR0SGgQBln|NJ@_|LmBQROI=d3`65iWy>onMl)WAY4R@p zwaK)FEq7tJ&dH8P^Q#U1{}T&&V9j*vkf!COrHNbqJ94vRuWGw{$ans|$GnXkU7O-` z?#PRH+zXs=DZs{1yI{q~ZA~*mP1Fm%a+hakDL?rBeEL~)(IPvIG~MRa+s@3m6x4b+ tsK5Awz~#%^#Im$EoKLGd@Spz!|E$!c$4XI2-3$y244$rjF6*2UngFDUQ=I?+ literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@2x-1.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-40x40@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cfd4f88665d10032ad5f82e5f8b8cbde5c44ac GIT binary patch literal 1128 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 Ao&W#< literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-512@2x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0976fb3536c17eea80cd96f836a0cfaffa76c GIT binary patch literal 9842 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 Rz|{isfv2mV%Q~loCIGG=zZU=i literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-60x60@2x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb4ef00a07db04bd583f3795b510e701e008643 GIT binary patch literal 1670 zcmeAS@N?(olHy`uVBq!ia0y~yV5k6L4mJh`2Fnz)OAHKbzMd|QAr-gY&fT3K<0^9O z{2lAvukU_U=Jey>d%zTChb@hFzm{<9>3M$7x_ZBUp`72uy`Og*7e705=I577 zPFDp?HeJeKVrXNKU`pUE;%xjVsZE@dwmhWY!TJQbuDp%9w)NCuo17k}0*Sak` zy(`^Q_*L$j3*WZNuc-ZMQ<}df$mZDF1*^Z^cVpYoWwLax*h;UdeRluFe9!K8o9g_1 zT9%%V+4{@3j`qLkKl)wcW>oS8Ub(H+|8C#=ez3f8_MM!-x92QpRX&xu+Gl^G{&euW zEt!^W8B6bQ9DB9)uhZ%D_yyml=4<5rXn!MaU_a$%Uhvl&GH2)Qa|rx9VQxL^uDLT# zsmyEgx%E`7@bbm;@8>VMHubZ}_1AxD>kpScF%5dQJ-99PyjTQ<4m z?R@_|za(F-%*des#d?^>7BULt(_H|w13;oQ_cUmu+awmPh4m@@bEqizwO|E^nw`*)NUcf3xReWc-Aj)FR2-;3o!vHTRmg$q<;sa~oBk$nG!&nB{cLI;OTzpZ)$O{R zjd!GO-RNcXJlrOf@FGFUck|?TKGw6J^fj+|^RGT`joa4Fxl>l#E?B_u<3OMLhx1?G zpS#q%-hRouSN>(oPkl0#WZ8LaY5dnGJid0ngk&`K4ejxBc@^6EtkYAG}(*>~!|?X}9}U1YO@!_OMuL z_w(3Yk6#-9wcNSmtb}NF|DCrRPHb4S>aTD2mU=D2>FbZ=-8k+$PjBDfiXTkB=Bv92 z7Sz{GZt!{*W34lLi@<#EPsjIu&92#(wey4KO@?O=jvn(~Z4jg_FxV-Tt7|ph3sf zu+L`egS=~}Kg>;?D$97LcpcAa=Ib*Ansj8l79RBzH1eH#cr&ZUF)_u9g&($6{B2UV zoMyyxw%Un3vd;X#tceUfj0Pb)CjHAunDRw^$`^j|f>{ms_h2y`~Pu$+MW=@az`Kpbk|dQ{_I3*yY|nLj{<4lH}CJaIm~wJQkdES1#i18>w-3IO|yNSyZ+s5<>|$Z zId8b_Zan_?b+UNo?_Z(s_VTVT-Ej4i)72k$w_LAbTIAaMTYh`>u17VtH>OJdW!-%9 zD&IHjJH@Q;j(v|0xRdc`tt=CZP0O9UNRYF{pJyAo>s{Y-dn+jLE){QXm@WC>;K$ip zu5X<8H7Q%~-1VfsH-Cz?Tg&xt_J{VI*}m!A)TI+#P74K`oTGhs)5#TGwP_9QzgO-_ z5dsh3=9kmp00i_>zopr07PLq Ao&W#< literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-60x60@3x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c32ddcf2f912771c19d5e7b6622b74e437cfe5 GIT binary patch literal 2391 zcmeAS@N?(olHy`uVBq!ia0y~yVAuk}9Bd2>47O+4j2IX=~)o$KEddR6kk z{@>64%C}jZDLKWlGC+EY-i2ASLb5Ig1V6f>7h{rmm@Dk=6^YgzDbL${SHC>ADdl01 zXUbKPDAQagbKYevOO*}0*mNS&@6G=H{NCfA=k^+Z&YF-_`>68!zq*u9la9Zd_j~vK zzvs&L701;)%(%+o;MgI_F4p& zXQ%gj|Gs3|`6{dI=s)+S3-PlIiUge}g)FNp3t3iQcV?OR)|w@gb?UGASe+=gmk7PL z(Qw;CH?8v5XQ!vUydpUJU8%~IjJbRQzr0W0+0Gn3cf!u*^d|`tNFFzm-242%C-Ds3Us{8(|hJ?b^QZ2p^3Hu)~j|M5ZaoS za{HmVN=}ZDOb$LsTwRinJZoRCSTGjGThhf!)M_$EIXA3HgGuzg;3LKwS ztDnNE)}M8Gq5kQcyO>sVt3{=&S^eI3VXEtsXMcY$+4wgx`c(8+wXYm|SLWQPS+nu+ z$DE5Qz8&ZGxxd_#a=oe`?o!>iHrE%uk0xY`UU>Ru&#z9yf8t;6q(9zwJjTEGqsrS3 zTh05s9WUPN`MOU3!~WM7gJ#~!4CmY2sU%qS`0vwQ&$e95$XIjWdswjdl{u3(*v(w3 zAa`fSjp>=2w>9LIoK5_4BO~{=_vRouO?HuGZRs!C+muq}7@e3EOc$9)+N{gp{ePt9?;(O^P=<8-YbQY#c6vlO3e&SyPGNJzva%dnE3wfzm!~h->59+_m`Vi z@!2f%?X7sPm4}Vw@|R}JS~$^iO{$T&a%)%2vW;JEZGO$aZc2`Ibi}SMH-Vj;3!a^s zl_ui&>|ux(f6$w{4}E+0UA{Rzv+IJZ-G%6jpp?*E71DH$)0#VfYSH0BP4(8OS;m9It1U`Uu-p+%(sR;P%-72dB810 zqrLxUv~1-p&uu-o_Qb-kf_-m#{c>9FX-D(#QIel$qa$_XP*m|6eQ)LBMMn0OE@t*s zCv11LR{d7^GPh}_>5XUSs~$f-dpqUj*7T*n4_g1adV|$u^7AvZ(tQ5Eicl+_mTjP^ zGyQ7hlDxOK^sVRpZeJ5)p*y#Ad&-B8p}%WqMJD~3|2NarS-oMFarUf-L0am@PScHo zR$uwG(rJzFl4Ipn1{$fe8ZXTEwKoyDy&`81|H*PKPq(GhB^S2ezZ>?Zp%GkCg9&)i zE%1Jpr%luZr;G{fceuO^z3=hnwAb8?zNTpxTqhKAU+_G?df)2{)1Q?X8%)yCf4Vru zAl0Ub*YlS7+jH~%H_bIF-TUO`tzNOex$f!w<*FTD z<)m8V>S|l3wtZP2Kk@13_0P|~;=K05TDau%ysJm|d;gBFpSB_D^giboiOYLe@4RDE zU9;k&+#jF$n=@)YpD8r7eSCEWci-M5?G_iCfgTq~u!+0WnFU0WsX@FC-TQpm>8UjHYzR=4k&v%CG? z)TTELGvnOF{B2ZEo+>qOaLKAy+Ptaa(ez8vQ5$v^7yo@A*YeNiO-cZN?aR9n6Ta7f zSN>gj(KTysi9z6>G_{7q6Mvq1U!T=qW1$?l`DN&;jcx@GGp_#FDQ&%t`Np&j8$HwJ z*F~zyTmHDe-mdok)E|F3*O#(hkO)sNTe@?P&2r1l%Os^{)=s^dz3_V9+ewb+uPuAq zXs~yT(|TRSUCtcVc@EOI<)>Y1{`~IC zg;Q7jq;;36Y%tB4UN5|6|DnpH$WYH};}Xm0aE8*0F0apkiuz+85~p+6c4e$xf9T#S z+Zh3$n8j8LT~psIQ~h^}`Hy=46PHh{?sdC0`{A_B$%Wl&H#viu7apuXGTHSzOW13n z-G@*0&fcK%w*K;5^F!MgmYr?gx{Kv&uc4gy%;TF6#{XW{9#?JkyG@Y&_4%HS8(3ez u+iu9Tft6c8ieVumn1E7bvX8a+Gj0sFoTeh5rpmy;z~JfX=d#Wzp$PztGmHoT literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-76x76@1x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1643081b1b83e91998707ae02c98c8cde31d8e GIT binary patch literal 1097 zcmeAS@N?(olHy`uVBq!ia0y~yVDJH94mJh`hU3!%wHX*#1Uy|FLn>~)oxML>#8Kq< z{WtGo^OT=)v>fSB>JSqX3v0U3p^&w_H$nLyd(=(0KjK^ZdRrIx=BW5eISObyI!y~;Da>h0F&s*S5-92~!uJx{xCUJ$Nx=iZz2`+I(#`z^R4<9H(b%KT z?^9u?VjVln+rXOt;F(3c#Aa;QQcDkgwSVcXkUcy3{=T1|sa2=UGV_Qq%d&){w_`J8 zZ1{?wPgAfdV*68YZ6)i>FJ=pVKa?y9%Xi-Xm1)n*fY>v9zA3%!oXpwJj-=kGe_N<2 z^KE+j^@qnl|9;?~zTHHB_4z}o9n+>Bnp9{X{(RQ+PfK>L-1z>Kk&nDBZ{hmY^A2w3 z^qFw}Q0k0BLUm`~Oj^h5SnR#%pDr#fPpJ^YG7Y`t>Jq z!ryuK?sjiCaJLtUW#6JX`Ja_~FGhRtGMu`q216LNvFrXWLmm)#JqvUiG~2J^SWg z|0iZ+{zW{|YyHEe+>{}~}7Xm`rF#3a8a0|T~W z&5fW~J|H2%{P-YfBbfywtf`bz$qJ^j@DQ zvhmfvRgVw*{1coGmT>0mF4R4EXR?m=*U5)gcU+cN%U$Z%`gHHYo`|B-l89Fecz67H z(#0OY7pbUy<#IXLnvty6{+;^8Qb@5HU($^#_cEiNr+NUkHQ}$2xjDLC1 zf7z>;CX)I#Fi-o_vOR)Ch(p}3_^2#{qA2-y(VA4Z+E=`?QC>;zeQs`(1MjR>yK`~Nr5ax58SCb% pUe1l$bm=)PI^el+16Tk3Ii?>RZe`cJWnf@n@O1TaS?83{1OTQ-4Qc=Y literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-76x76@2x.png b/frontend/apps/scanner/src-tauri/icons/ios/AppIcon-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..95860513c17eb0e52a57bb33f7ed2da378a42add GIT binary patch literal 2167 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 +
+

Effigenix Scanner

+ + +

Chargen-Scanner

+

+ QR-Code oder Barcode scannen, um Chargen-Details anzuzeigen. +

+ +
+
+ + ); +} diff --git a/frontend/apps/scanner/src/index.css b/frontend/apps/scanner/src/index.css new file mode 100644 index 0000000..24b3f8b --- /dev/null +++ b/frontend/apps/scanner/src/index.css @@ -0,0 +1,4 @@ +@import 'tailwindcss'; +@import '@effigenix/ui/theme.css'; + +@source '../../packages/ui/src/**/*.{ts,tsx}'; diff --git a/frontend/apps/scanner/src/main.tsx b/frontend/apps/scanner/src/main.tsx new file mode 100644 index 0000000..3ba44f1 --- /dev/null +++ b/frontend/apps/scanner/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { App } from './App'; +import './index.css'; + +createRoot(document.getElementById('root')!).render( + + + +); diff --git a/frontend/apps/scanner/src/vite-env.d.ts b/frontend/apps/scanner/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/apps/scanner/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/apps/scanner/tsconfig.json b/frontend/apps/scanner/tsconfig.json new file mode 100644 index 0000000..0cb037f --- /dev/null +++ b/frontend/apps/scanner/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "noUnusedLocals": false, + "noUnusedParameters": false, + "composite": false, + "declaration": false, + "declarationMap": false, + "incremental": true + }, + "include": ["src"] +} diff --git a/frontend/apps/scanner/vite.config.ts b/frontend/apps/scanner/vite.config.ts new file mode 100644 index 0000000..9cfb1d1 --- /dev/null +++ b/frontend/apps/scanner/vite.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import tailwindcss from '@tailwindcss/vite'; + +const host = process.env.TAURI_DEV_HOST; + +export default defineConfig({ + plugins: [tailwindcss(), react()], + clearScreen: false, + server: { + port: 1420, + strictPort: true, + host: host || false, + hmr: host + ? { + protocol: 'ws', + host, + port: 1421, + } + : undefined, + }, +}); diff --git a/frontend/apps/web/index.html b/frontend/apps/web/index.html new file mode 100644 index 0000000..232b243 --- /dev/null +++ b/frontend/apps/web/index.html @@ -0,0 +1,18 @@ + + + + + + + + + Effigenix ERP + + +
+ + + diff --git a/frontend/apps/web/package.json b/frontend/apps/web/package.json new file mode 100644 index 0000000..4ca1a6d --- /dev/null +++ b/frontend/apps/web/package.json @@ -0,0 +1,31 @@ +{ + "name": "@effigenix/web", + "version": "0.1.0", + "private": true, + "description": "Effigenix ERP Web UI", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "@effigenix/ui": "workspace:*", + "@effigenix/api-client": "workspace:*", + "@effigenix/types": "workspace:*", + "@effigenix/validation": "workspace:*", + "@effigenix/config": "workspace:*" + }, + "devDependencies": { + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "@tailwindcss/vite": "^4.0.0", + "tailwindcss": "^4.0.0", + "typescript": "^5.3.3", + "vite": "^6.0.0" + } +} diff --git a/frontend/apps/web/src/App.tsx b/frontend/apps/web/src/App.tsx new file mode 100644 index 0000000..660a23e --- /dev/null +++ b/frontend/apps/web/src/App.tsx @@ -0,0 +1,43 @@ +import { Button, Card, Badge, Input } from '@effigenix/ui'; + +export function App() { + return ( +
+
+

Effigenix ERP

+ + +

Buttons

+
+ + + + + +
+
+ + +

Badges

+
+ Aktiv + Ausstehend + Fehler + Info + Neutral +
+
+ + +

Input

+
+ + +
+
+
+
+ ); +} diff --git a/frontend/apps/web/src/index.css b/frontend/apps/web/src/index.css new file mode 100644 index 0000000..24b3f8b --- /dev/null +++ b/frontend/apps/web/src/index.css @@ -0,0 +1,4 @@ +@import 'tailwindcss'; +@import '@effigenix/ui/theme.css'; + +@source '../../packages/ui/src/**/*.{ts,tsx}'; diff --git a/frontend/apps/web/src/main.tsx b/frontend/apps/web/src/main.tsx new file mode 100644 index 0000000..3ba44f1 --- /dev/null +++ b/frontend/apps/web/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { App } from './App'; +import './index.css'; + +createRoot(document.getElementById('root')!).render( + + + +); diff --git a/frontend/apps/web/src/vite-env.d.ts b/frontend/apps/web/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/apps/web/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/apps/web/tsconfig.json b/frontend/apps/web/tsconfig.json new file mode 100644 index 0000000..0cb037f --- /dev/null +++ b/frontend/apps/web/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "noUnusedLocals": false, + "noUnusedParameters": false, + "composite": false, + "declaration": false, + "declarationMap": false, + "incremental": true + }, + "include": ["src"] +} diff --git a/frontend/apps/web/vite.config.ts b/frontend/apps/web/vite.config.ts new file mode 100644 index 0000000..c4f1e6a --- /dev/null +++ b/frontend/apps/web/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [tailwindcss(), react()], + server: { + port: 3000, + proxy: { + '/api': { + target: 'http://localhost:8080', + changeOrigin: true, + }, + }, + }, +}); diff --git a/frontend/package.json b/frontend/package.json index 297e58e..da6d5df 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,6 +6,8 @@ "scripts": { "build": "pnpm run --recursive build", "dev": "pnpm run --filter @effigenix/cli dev", + "dev:web": "pnpm run --filter @effigenix/web dev", + "dev:scanner": "pnpm run --filter @effigenix/scanner dev", "test": "pnpm run --recursive test", "test:coverage": "pnpm run --recursive test:coverage", "typecheck": "pnpm run --recursive typecheck", diff --git a/frontend/packages/ui/package.json b/frontend/packages/ui/package.json new file mode 100644 index 0000000..ca4cb3d --- /dev/null +++ b/frontend/packages/ui/package.json @@ -0,0 +1,60 @@ +{ + "name": "@effigenix/ui", + "version": "0.1.0", + "private": true, + "description": "Shared React component library with Tailwind v4 theme", + "type": "module", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "./theme.css": "./src/theme.css" + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist", + "src/theme.css" + ], + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "typecheck": "tsc --noEmit", + "clean": "rm -rf dist" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "clsx": "^2.1.1", + "tailwind-merge": "^2.6.0", + "tsup": "^8.0.1", + "typescript": "^5.3.3" + }, + "dependencies": { + "clsx": "^2.1.1", + "tailwind-merge": "^2.6.0" + }, + "tsup": { + "entry": [ + "src/index.ts" + ], + "format": [ + "esm" + ], + "dts": true, + "clean": true, + "sourcemap": true, + "splitting": false, + "external": [ + "react", + "react-dom" + ] + } +} diff --git a/frontend/packages/ui/src/components/Badge.tsx b/frontend/packages/ui/src/components/Badge.tsx new file mode 100644 index 0000000..e07bac0 --- /dev/null +++ b/frontend/packages/ui/src/components/Badge.tsx @@ -0,0 +1,34 @@ +import { forwardRef, type HTMLAttributes } from 'react'; +import { cn } from '../lib/cn'; + +type BadgeVariant = 'success' | 'warning' | 'danger' | 'info' | 'neutral'; + +export interface BadgeProps extends HTMLAttributes { + variant?: BadgeVariant; +} + +const variantStyles: Record = { + success: 'bg-success-100 text-success-800 border-success-300', + warning: 'bg-warning-100 text-warning-800 border-warning-300', + danger: 'bg-danger-100 text-danger-800 border-danger-300', + info: 'bg-info-100 text-info-800 border-info-300', + neutral: 'bg-warm-100 text-warm-700 border-warm-300', +}; + +export const Badge = forwardRef( + ({ className, variant = 'neutral', ...props }, ref) => { + return ( + + ); + } +); + +Badge.displayName = 'Badge'; diff --git a/frontend/packages/ui/src/components/Button.tsx b/frontend/packages/ui/src/components/Button.tsx new file mode 100644 index 0000000..638b280 --- /dev/null +++ b/frontend/packages/ui/src/components/Button.tsx @@ -0,0 +1,48 @@ +import { forwardRef, type ButtonHTMLAttributes } from 'react'; +import { cn } from '../lib/cn'; + +type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'; +type ButtonSize = 'sm' | 'md' | 'lg'; + +export interface ButtonProps extends ButtonHTMLAttributes { + variant?: ButtonVariant; + size?: ButtonSize; +} + +const variantStyles: Record = { + primary: + 'bg-brand-600 text-white hover:bg-brand-700 active:bg-brand-800 focus-visible:ring-brand-500', + secondary: + 'bg-warm-100 text-warm-800 hover:bg-warm-200 active:bg-warm-300 focus-visible:ring-warm-400 border border-warm-300', + ghost: 'text-warm-700 hover:bg-warm-100 active:bg-warm-200 focus-visible:ring-warm-400', + danger: + 'bg-danger-600 text-white hover:bg-danger-700 active:bg-danger-800 focus-visible:ring-danger-500', +}; + +const sizeStyles: Record = { + sm: 'px-3 py-1.5 text-sm', + md: 'px-4 py-2 text-sm', + lg: 'px-5 py-2.5 text-base', +}; + +export const Button = forwardRef( + ({ className, variant = 'primary', size = 'md', disabled, ...props }, ref) => { + return ( +