From bf09e3b747d431dd9901334cca592882322f4cff Mon Sep 17 00:00:00 2001 From: Sebastian Frick Date: Fri, 20 Mar 2026 13:58:54 +0100 Subject: [PATCH] =?UTF-8?q?feat(scanner):=20Mobile=20Scanner=20App=20mit?= =?UTF-8?q?=20echten=20Produktionsauftr=C3=A4gen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scanner-App Tauri v2 Android App mit Login, Barcode-Scanner, Consume/Move/Book-Flows und Aufgabenliste. TasksPage lädt echte RELEASED/IN_PROGRESS Produktionsaufträge via API, Consume-Flow nutzt den konkreten Auftrag für korrekte Rezept-Skalierung statt blind den ersten IN_PROGRESS-Auftrag zu nehmen. Backend: FindStockByBatchId Use Case + REST-Endpoint für Stock-Lookup per Chargennummer. --- .../inventory/FindStockByBatchId.java | 28 + .../config/InventoryUseCaseConfiguration.java | 6 + .../repository/JdbcStockRepository.java | 18 + .../web/controller/StockController.java | 19 +- .../security/SecurityConfig.java | 2 +- backend/src/main/resources/application.yml | 2 +- .../inventory/ListStocksBelowMinimumTest.java | 1 + flake.nix | 55 +- frontend/apps/scanner/index.html | 7 +- frontend/apps/scanner/package.json | 20 +- frontend/apps/scanner/src-tauri/Cargo.lock | 512 +++- frontend/apps/scanner/src-tauri/Cargo.toml | 1 + .../src-tauri/capabilities/default.json | 15 +- .../src-tauri/gen/android/.editorconfig | 12 + .../scanner/src-tauri/gen/android/.gitignore | 19 + .../src-tauri/gen/android/app/.gitignore | 6 + .../gen/android/app/build.gradle.kts | 70 + .../gen/android/app/proguard-rules.pro | 21 + .../android/app/src/main/AndroidManifest.xml | 37 + .../java/de/effigenix/scanner/MainActivity.kt | 11 + .../drawable-v24/ic_launcher_foreground.xml | 30 + .../res/drawable/ic_launcher_background.xml | 170 ++ .../app/src/main/res/layout/activity_main.xml | 18 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3524 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 14102 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3524 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3377 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 9081 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3377 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7971 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 18900 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7971 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12392 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 29506 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 12392 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16751 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 40510 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16751 bytes .../app/src/main/res/values-night/themes.xml | 6 + .../app/src/main/res/values/colors.xml | 10 + .../app/src/main/res/values/strings.xml | 4 + .../app/src/main/res/values/themes.xml | 6 + .../app/src/main/res/xml/file_paths.xml | 5 + .../src-tauri/gen/android/build.gradle.kts | 22 + .../gen/android/buildSrc/build.gradle.kts | 23 + .../de/effigenix/scanner/kotlin/BuildTask.kt | 68 + .../de/effigenix/scanner/kotlin/RustPlugin.kt | 85 + .../src-tauri/gen/android/gradle.properties | 26 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../scanner/src-tauri/gen/android/gradlew | 185 ++ .../scanner/src-tauri/gen/android/gradlew.bat | 89 + .../src-tauri/gen/android/settings.gradle | 3 + .../src-tauri/gen/schemas/acl-manifests.json | 2 +- .../src-tauri/gen/schemas/android-schema.json | 2526 +++++++++++++++++ .../src-tauri/gen/schemas/capabilities.json | 2 +- .../src-tauri/gen/schemas/mobile-schema.json | 2526 +++++++++++++++++ frontend/apps/scanner/src-tauri/src/lib.rs | 15 +- .../apps/scanner/src-tauri/tauri.conf.json | 7 +- frontend/apps/scanner/src/App.tsx | 85 +- frontend/apps/scanner/src/api.tsx | 98 + .../apps/scanner/src/components/BottomNav.tsx | 68 + .../scanner/src/components/PageActions.tsx | 15 + .../scanner/src/components/PageHeader.tsx | 30 + .../scanner/src/components/StepIndicator.tsx | 56 + .../scanner/src/components/SuccessScreen.tsx | 25 + .../scanner/src/components/SummaryCard.tsx | 38 + frontend/apps/scanner/src/flow-state.tsx | 76 + frontend/apps/scanner/src/index.css | 77 +- frontend/apps/scanner/src/mock-data.ts | 111 + frontend/apps/scanner/src/navigation.tsx | 77 + .../scanner/src/pages/BatchDetailPage.tsx | 117 + .../scanner/src/pages/BookConfirmPage.tsx | 46 + .../apps/scanner/src/pages/BookFlowPage.tsx | 102 + .../scanner/src/pages/ConsumeConfirmPage.tsx | 48 + .../scanner/src/pages/ConsumeFlowPage.tsx | 119 + .../apps/scanner/src/pages/ConsumeQtyPage.tsx | 254 ++ .../apps/scanner/src/pages/HistoryPage.tsx | 77 + frontend/apps/scanner/src/pages/HomePage.tsx | 140 + frontend/apps/scanner/src/pages/LoginPage.tsx | 87 + .../scanner/src/pages/ManualEntryPage.tsx | 54 + .../scanner/src/pages/MoveConfirmPage.tsx | 45 + .../apps/scanner/src/pages/MoveFlowPage.tsx | 107 + .../apps/scanner/src/pages/ScannerPage.tsx | 151 + frontend/apps/scanner/src/pages/TasksPage.tsx | 163 ++ frontend/apps/scanner/vite.config.ts | 11 +- frontend/packages/api-client/src/client.ts | 3 +- .../api-client/src/resources/stocks.ts | 5 + frontend/packages/config/src/api-config.ts | 2 + frontend/packages/ui/package.json | 1 + .../packages/ui/src/components/Button.tsx | 15 +- frontend/packages/ui/src/theme.css | 6 + frontend/pnpm-lock.yaml | 22 + justfile | 10 + 93 files changed, 8977 insertions(+), 60 deletions(-) create mode 100644 backend/src/main/java/de/effigenix/application/inventory/FindStockByBatchId.java create mode 100644 frontend/apps/scanner/src-tauri/gen/android/.editorconfig create mode 100644 frontend/apps/scanner/src-tauri/gen/android/.gitignore create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/.gitignore create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/build.gradle.kts create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/proguard-rules.pro create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/AndroidManifest.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/java/de/effigenix/scanner/MainActivity.kt create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values-night/themes.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/colors.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/strings.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/themes.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml create mode 100644 frontend/apps/scanner/src-tauri/gen/android/build.gradle.kts create mode 100644 frontend/apps/scanner/src-tauri/gen/android/buildSrc/build.gradle.kts create mode 100644 frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/BuildTask.kt create mode 100644 frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/RustPlugin.kt create mode 100644 frontend/apps/scanner/src-tauri/gen/android/gradle.properties create mode 100644 frontend/apps/scanner/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 frontend/apps/scanner/src-tauri/gen/android/gradlew create mode 100644 frontend/apps/scanner/src-tauri/gen/android/gradlew.bat create mode 100644 frontend/apps/scanner/src-tauri/gen/android/settings.gradle create mode 100644 frontend/apps/scanner/src-tauri/gen/schemas/android-schema.json create mode 100644 frontend/apps/scanner/src-tauri/gen/schemas/mobile-schema.json create mode 100644 frontend/apps/scanner/src/api.tsx create mode 100644 frontend/apps/scanner/src/components/BottomNav.tsx create mode 100644 frontend/apps/scanner/src/components/PageActions.tsx create mode 100644 frontend/apps/scanner/src/components/PageHeader.tsx create mode 100644 frontend/apps/scanner/src/components/StepIndicator.tsx create mode 100644 frontend/apps/scanner/src/components/SuccessScreen.tsx create mode 100644 frontend/apps/scanner/src/components/SummaryCard.tsx create mode 100644 frontend/apps/scanner/src/flow-state.tsx create mode 100644 frontend/apps/scanner/src/mock-data.ts create mode 100644 frontend/apps/scanner/src/navigation.tsx create mode 100644 frontend/apps/scanner/src/pages/BatchDetailPage.tsx create mode 100644 frontend/apps/scanner/src/pages/BookConfirmPage.tsx create mode 100644 frontend/apps/scanner/src/pages/BookFlowPage.tsx create mode 100644 frontend/apps/scanner/src/pages/ConsumeConfirmPage.tsx create mode 100644 frontend/apps/scanner/src/pages/ConsumeFlowPage.tsx create mode 100644 frontend/apps/scanner/src/pages/ConsumeQtyPage.tsx create mode 100644 frontend/apps/scanner/src/pages/HistoryPage.tsx create mode 100644 frontend/apps/scanner/src/pages/HomePage.tsx create mode 100644 frontend/apps/scanner/src/pages/LoginPage.tsx create mode 100644 frontend/apps/scanner/src/pages/ManualEntryPage.tsx create mode 100644 frontend/apps/scanner/src/pages/MoveConfirmPage.tsx create mode 100644 frontend/apps/scanner/src/pages/MoveFlowPage.tsx create mode 100644 frontend/apps/scanner/src/pages/ScannerPage.tsx create mode 100644 frontend/apps/scanner/src/pages/TasksPage.tsx diff --git a/backend/src/main/java/de/effigenix/application/inventory/FindStockByBatchId.java b/backend/src/main/java/de/effigenix/application/inventory/FindStockByBatchId.java new file mode 100644 index 0000000..02174e2 --- /dev/null +++ b/backend/src/main/java/de/effigenix/application/inventory/FindStockByBatchId.java @@ -0,0 +1,28 @@ +package de.effigenix.application.inventory; + +import de.effigenix.domain.inventory.Stock; +import de.effigenix.domain.inventory.StockError; +import de.effigenix.domain.inventory.StockRepository; +import de.effigenix.shared.common.RepositoryError; +import de.effigenix.shared.common.Result; + +import java.util.List; + +public class FindStockByBatchId { + + private final StockRepository stockRepository; + + public FindStockByBatchId(StockRepository stockRepository) { + this.stockRepository = stockRepository; + } + + public Result> execute(String batchId) { + if (batchId == null || batchId.isBlank()) { + return Result.failure(new StockError.InvalidBatchReference("Batch ID must not be blank")); + } + return switch (stockRepository.findAllByBatchId(batchId)) { + case Result.Failure(var err) -> Result.failure(new StockError.RepositoryFailure(err.message())); + case Result.Success(var stocks) -> Result.success(stocks); + }; + } +} diff --git a/backend/src/main/java/de/effigenix/infrastructure/config/InventoryUseCaseConfiguration.java b/backend/src/main/java/de/effigenix/infrastructure/config/InventoryUseCaseConfiguration.java index a8b77ec..c2dfcec 100644 --- a/backend/src/main/java/de/effigenix/infrastructure/config/InventoryUseCaseConfiguration.java +++ b/backend/src/main/java/de/effigenix/infrastructure/config/InventoryUseCaseConfiguration.java @@ -14,6 +14,7 @@ import de.effigenix.application.inventory.BookProductionOutput; import de.effigenix.application.inventory.ConfirmReservation; import de.effigenix.application.inventory.RecordStockMovement; import de.effigenix.application.inventory.ActivateStorageLocation; +import de.effigenix.application.inventory.FindStockByBatchId; import de.effigenix.application.inventory.AddStockBatch; import de.effigenix.application.inventory.BlockStockBatch; import de.effigenix.application.inventory.CheckStockExpiry; @@ -99,6 +100,11 @@ public class InventoryUseCaseConfiguration { return new ListStocks(stockRepository); } + @Bean + public FindStockByBatchId findStockByBatchId(StockRepository stockRepository) { + return new FindStockByBatchId(stockRepository); + } + @Bean public AddStockBatch addStockBatch(StockRepository stockRepository, UnitOfWork unitOfWork) { return new AddStockBatch(stockRepository, unitOfWork); diff --git a/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java b/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java index 386ef51..cd51e6e 100644 --- a/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java +++ b/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java @@ -264,6 +264,24 @@ public class JdbcStockRepository implements StockRepository { } } + @Override + public Result> findAllByBatchId(String batchId) { + try { + var stocks = jdbc.sql(""" + SELECT DISTINCT s.* FROM stocks s + JOIN stock_batches b ON b.stock_id = s.id + WHERE b.batch_id = :batchId + """) + .param("batchId", batchId) + .query(this::mapStockRow) + .list(); + return Result.success(loadChildrenForAll(stocks)); + } catch (Exception e) { + logger.trace("Database error in findAllByBatchId", e); + return Result.failure(new RepositoryError.DatabaseError(e.getMessage())); + } + } + @Override public Result save(Stock stock) { try { diff --git a/backend/src/main/java/de/effigenix/infrastructure/inventory/web/controller/StockController.java b/backend/src/main/java/de/effigenix/infrastructure/inventory/web/controller/StockController.java index 1e418d4..efc04a7 100644 --- a/backend/src/main/java/de/effigenix/infrastructure/inventory/web/controller/StockController.java +++ b/backend/src/main/java/de/effigenix/infrastructure/inventory/web/controller/StockController.java @@ -1,5 +1,6 @@ package de.effigenix.infrastructure.inventory.web.controller; +import de.effigenix.application.inventory.FindStockByBatchId; import de.effigenix.application.inventory.AddStockBatch; import de.effigenix.application.inventory.BlockStockBatch; import de.effigenix.application.inventory.ConfirmReservation; @@ -63,6 +64,7 @@ public class StockController { private final GetStock getStock; private final ListStocks listStocks; private final ListStocksBelowMinimum listStocksBelowMinimum; + private final FindStockByBatchId findStockByBatchId; private final AddStockBatch addStockBatch; private final RemoveStockBatch removeStockBatch; private final BlockStockBatch blockStockBatch; @@ -72,7 +74,7 @@ public class StockController { private final ConfirmReservation confirmReservation; public StockController(CreateStock createStock, UpdateStock updateStock, GetStock getStock, ListStocks listStocks, - ListStocksBelowMinimum listStocksBelowMinimum, + ListStocksBelowMinimum listStocksBelowMinimum, FindStockByBatchId findStockByBatchId, AddStockBatch addStockBatch, RemoveStockBatch removeStockBatch, BlockStockBatch blockStockBatch, UnblockStockBatch unblockStockBatch, ReserveStock reserveStock, ReleaseReservation releaseReservation, @@ -82,6 +84,7 @@ public class StockController { this.getStock = getStock; this.listStocks = listStocks; this.listStocksBelowMinimum = listStocksBelowMinimum; + this.findStockByBatchId = findStockByBatchId; this.addStockBatch = addStockBatch; this.removeStockBatch = removeStockBatch; this.blockStockBatch = blockStockBatch; @@ -109,6 +112,20 @@ public class StockController { }; } + @GetMapping("/by-batch/{batchId}") + @PreAuthorize("hasAuthority('STOCK_READ')") + public ResponseEntity> findByBatchId(@PathVariable String batchId) { + return switch (findStockByBatchId.execute(batchId)) { + case Result.Failure(var err) -> throw new StockDomainErrorException(err); + case Result.Success(var stocks) -> { + var responses = stocks.stream() + .map(StockResponse::from) + .toList(); + yield ResponseEntity.ok(responses); + } + }; + } + // NOTE: Must be declared before /{id} to avoid Spring matching "below-minimum" as path variable @GetMapping("/below-minimum") @PreAuthorize("hasAuthority('STOCK_READ')") diff --git a/backend/src/main/java/de/effigenix/infrastructure/security/SecurityConfig.java b/backend/src/main/java/de/effigenix/infrastructure/security/SecurityConfig.java index 8a5635b..b501114 100644 --- a/backend/src/main/java/de/effigenix/infrastructure/security/SecurityConfig.java +++ b/backend/src/main/java/de/effigenix/infrastructure/security/SecurityConfig.java @@ -79,7 +79,7 @@ public class SecurityConfig { @Bean public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); - configuration.setAllowedOrigins(allowedOrigins); + configuration.setAllowedOriginPatterns(List.of("*")); configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); configuration.setAllowedHeaders(List.of("Authorization", "Content-Type")); configuration.setAllowCredentials(true); diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index b9efcc4..b8521e2 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -54,7 +54,7 @@ logging: # CORS Configuration effigenix: cors: - allowed-origins: ${CORS_ALLOWED_ORIGINS:http://localhost:3000} + allowed-origins: ${CORS_ALLOWED_ORIGINS:http://localhost:3000,http://localhost:1420,tauri://localhost} inventory: expiry-check-cron: "0 0 6 * * *" diff --git a/backend/src/test/java/de/effigenix/application/inventory/ListStocksBelowMinimumTest.java b/backend/src/test/java/de/effigenix/application/inventory/ListStocksBelowMinimumTest.java index 054bf40..a784cd6 100644 --- a/backend/src/test/java/de/effigenix/application/inventory/ListStocksBelowMinimumTest.java +++ b/backend/src/test/java/de/effigenix/application/inventory/ListStocksBelowMinimumTest.java @@ -153,5 +153,6 @@ class ListStocksBelowMinimumTest { @Override public Result> findAllWithExpiryRelevantBatches(LocalDate referenceDate) { return Result.success(List.of()); } @Override public Result> findAllByBatchId(String batchId) { return Result.success(List.of()); } @Override public Result save(Stock stock) { return Result.success(null); } + @Override public Result> findAllByBatchId(String batchId) { return Result.success(List.of()); } } } diff --git a/flake.nix b/flake.nix index 772830a..1ac6f5b 100644 --- a/flake.nix +++ b/flake.nix @@ -14,7 +14,13 @@ flake-utils.lib.eachDefaultSystem (system: let overlays = [ (import rust-overlay) ]; - pkgs = import nixpkgs { inherit system overlays; }; + pkgs = import nixpkgs { + inherit system overlays; + config = { + allowUnfree = true; + android_sdk.accept_license = true; + }; + }; rustToolchain = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" "rust-analyzer" ]; @@ -25,6 +31,23 @@ "x86_64-linux-android" ]; }; + + # ─── Android SDK ────────────────────────── + androidComposition = pkgs.androidenv.composeAndroidPackages { + cmdLineToolsVersion = "8.0"; + platformToolsVersion = "35.0.1"; + buildToolsVersions = [ "34.0.0" "35.0.0" ]; + platformVersions = [ "34" "36" ]; + abiVersions = [ "x86_64" ]; + includeNDK = true; + ndkVersions = [ "27.0.12077973" ]; + includeSystemImages = true; + systemImageTypes = [ "google_apis_playstore" ]; + includeEmulator = true; + useGoogleAPIs = true; + }; + androidSdk = androidComposition.androidsdk; + androidHome = "${androidSdk}/libexec/android-sdk"; in { devShells.default = pkgs.mkShell { @@ -52,6 +75,13 @@ harfbuzz atk + # ─── Backend ───────────────────────── + jdk21 + + # ─── Android ─────────────────────────── + androidSdk + jdk17 + # ─── Tools ───────────────────────────── just jq @@ -68,13 +98,36 @@ openssl ]); + ANDROID_HOME = androidHome; + ANDROID_SDK_ROOT = androidHome; + ANDROID_NDK_ROOT = "${androidHome}/ndk/27.0.12077973"; + JAVA_HOME = "${pkgs.jdk21}"; + + # NixOS: Gradle's aapt2 von Maven ist dynamisch gelinkt und läuft nicht. + # Wir zeigen auf das aapt2 aus den Nix-bereitgestellten build-tools. + GRADLE_OPTS = "-Dandroid.aapt2FromMavenOverride=${androidHome}/build-tools/35.0.0/aapt2"; + shellHook = '' echo "Node $(node --version)" echo "pnpm $(pnpm --version)" echo "rustc $(rustc --version)" echo "cargo $(cargo --version)" + echo "Java $(java --version 2>&1 | head -1)" + echo "" + echo "ANDROID_HOME=$ANDROID_HOME" echo "" echo "just --list für alle Befehle" + + # Tauri mobile dev: Ports 1420 (Vite) + 1421 (HMR) in der NixOS-Firewall öffnen + if [[ "''${EFFIGENIX_OPEN_FW:-}" == "1" ]]; then + echo "" + echo "Opening firewall ports 1420/1421 for Tauri mobile dev..." + sudo iptables -C nixos-fw -p tcp --dport 1420 -j ACCEPT 2>/dev/null \ + || sudo iptables -I nixos-fw 3 -p tcp --dport 1420 -j ACCEPT + sudo iptables -C nixos-fw -p tcp --dport 1421 -j ACCEPT 2>/dev/null \ + || sudo iptables -I nixos-fw 3 -p tcp --dport 1421 -j ACCEPT + echo "Done." + fi ''; }; }); diff --git a/frontend/apps/scanner/index.html b/frontend/apps/scanner/index.html index f17b3eb..48f3058 100644 --- a/frontend/apps/scanner/index.html +++ b/frontend/apps/scanner/index.html @@ -2,16 +2,17 @@ - + + Effigenix Scanner - +
diff --git a/frontend/apps/scanner/package.json b/frontend/apps/scanner/package.json index 5629485..bace656 100644 --- a/frontend/apps/scanner/package.json +++ b/frontend/apps/scanner/package.json @@ -12,22 +12,24 @@ "tauri": "tauri" }, "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0", + "@effigenix/api-client": "workspace:*", + "@effigenix/config": "workspace:*", + "@effigenix/types": "workspace:*", + "@effigenix/ui": "workspace:*", + "@effigenix/validation": "workspace:*", "@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:*" + "@tauri-apps/plugin-http": "^2.5.7", + "lucide-react": "^0.577.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "@tauri-apps/cli": "^2.0.0", "@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 index ea77ad2..09ec568 100644 --- a/frontend/apps/scanner/src-tauri/Cargo.lock +++ b/frontend/apps/scanner/src-tauri/Cargo.lock @@ -300,6 +300,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.44" @@ -334,10 +340,57 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ + "percent-encoding", "time", "version_check", ] +[[package]] +name = "cookie_store" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -361,7 +414,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" dependencies = [ "bitflags 2.11.0", - "core-foundation", + "core-foundation 0.10.1", "core-graphics-types", "foreign-types", "libc", @@ -374,7 +427,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ "bitflags 2.11.0", - "core-foundation", + "core-foundation 0.10.1", "libc", ] @@ -505,6 +558,12 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "data-url" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" + [[package]] name = "deranged" version = "0.5.8" @@ -626,6 +685,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "dom_query" version = "0.27.0" @@ -686,6 +754,7 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-barcode-scanner", + "tauri-plugin-http", ] [[package]] @@ -708,6 +777,15 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -1037,8 +1115,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1048,9 +1128,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 5.3.0", "wasip2", + "wasm-bindgen", ] [[package]] @@ -1214,6 +1296,25 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "h2" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.13.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -1324,6 +1425,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", + "h2", "http", "http-body", "httparse", @@ -1335,6 +1437,23 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + [[package]] name = "hyper-util" version = "0.1.20" @@ -1353,9 +1472,11 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -1721,6 +1842,12 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -1736,6 +1863,12 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "mac" version = "0.1.1" @@ -2454,6 +2587,22 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + [[package]] name = "quick-xml" version = "0.38.4" @@ -2463,6 +2612,61 @@ dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + [[package]] name = "quote" version = "1.0.45" @@ -2509,6 +2713,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -2529,6 +2743,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -2547,6 +2771,15 @@ dependencies = [ "getrandom 0.2.17", ] +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -2640,6 +2873,49 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64 0.22.1", + "bytes", + "cookie", + "cookie_store 0.22.1", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "mime", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + [[package]] name = "reqwest" version = "0.13.2" @@ -2674,6 +2950,20 @@ dependencies = [ "web-sys", ] +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rustc-hash" version = "2.1.1" @@ -2689,12 +2979,53 @@ dependencies = [ "semver", ] +[[package]] +name = "rustls" +version = "0.23.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + [[package]] name = "same-file" version = "1.0.6" @@ -2903,6 +3234,18 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_with" version = "3.18.0" @@ -3141,6 +3484,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "swift-rs" version = "1.0.7" @@ -3194,6 +3543,27 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "system-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -3215,7 +3585,7 @@ checksum = "6e06d52c379e63da659a483a958110bbde891695a0ecb53e48cc7786d5eda7bb" dependencies = [ "bitflags 2.11.0", "block2", - "core-foundation", + "core-foundation 0.10.1", "core-graphics", "crossbeam-channel", "dispatch2", @@ -3292,7 +3662,7 @@ dependencies = [ "percent-encoding", "plist", "raw-window-handle", - "reqwest", + "reqwest 0.13.2", "serde", "serde_json", "serde_repr", @@ -3407,6 +3777,52 @@ dependencies = [ "thiserror 2.0.18", ] +[[package]] +name = "tauri-plugin-fs" +version = "2.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed390cc669f937afeb8b28032ce837bac8ea023d975a2e207375ec05afaf1804" +dependencies = [ + "anyhow", + "dunce", + "glob", + "percent-encoding", + "schemars 0.8.22", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.18", + "toml 0.9.12+spec-1.1.0", + "url", +] + +[[package]] +name = "tauri-plugin-http" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8f069451c4e87e7e2636b7f065a4c52866c4ce5e60e2d53fa1038edb6d184dc" +dependencies = [ + "bytes", + "cookie_store 0.21.1", + "data-url", + "http", + "regex", + "reqwest 0.12.28", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.18", + "tokio", + "url", + "urlpattern", +] + [[package]] name = "tauri-runtime" version = "2.10.1" @@ -3609,6 +4025,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.50.0" @@ -3620,9 +4051,31 @@ dependencies = [ "mio", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys 0.61.2", ] +[[package]] +name = "tokio-macros" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.18" @@ -3904,6 +4357,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.8" @@ -4150,6 +4609,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "web_atoms" version = "0.2.3" @@ -4206,6 +4675,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "webpki-roots" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webview2-com" version = "0.38.2" @@ -4391,6 +4869,17 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -4436,6 +4925,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.59.0" @@ -4924,6 +5422,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + [[package]] name = "zerotrie" version = "0.2.3" diff --git a/frontend/apps/scanner/src-tauri/Cargo.toml b/frontend/apps/scanner/src-tauri/Cargo.toml index abc6b81..8b1283b 100644 --- a/frontend/apps/scanner/src-tauri/Cargo.toml +++ b/frontend/apps/scanner/src-tauri/Cargo.toml @@ -15,6 +15,7 @@ tauri-build = { version = "2", features = [] } tauri = { version = "2", features = [] } serde = { version = "1", features = ["derive"] } serde_json = "1" +tauri-plugin-http = "2" [target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies] tauri-plugin-barcode-scanner = "2" diff --git a/frontend/apps/scanner/src-tauri/capabilities/default.json b/frontend/apps/scanner/src-tauri/capabilities/default.json index 0daf25e..0a9b01b 100644 --- a/frontend/apps/scanner/src-tauri/capabilities/default.json +++ b/frontend/apps/scanner/src-tauri/capabilities/default.json @@ -3,6 +3,19 @@ "description": "Default capabilities for the scanner app", "windows": ["main"], "permissions": [ - "core:default" + "core:default", + "barcode-scanner:allow-scan", + "barcode-scanner:allow-cancel", + "barcode-scanner:allow-check-permissions", + "barcode-scanner:allow-request-permissions", + "barcode-scanner:allow-open-app-settings", + { + "identifier": "http:default", + "allow": [ + { "url": "http://192.168.0.166:8080/**" }, + { "url": "http://192.168.0.*:8080/**" }, + { "url": "https://api.effigenix.de" } + ] + } ] } diff --git a/frontend/apps/scanner/src-tauri/gen/android/.editorconfig b/frontend/apps/scanner/src-tauri/gen/android/.editorconfig new file mode 100644 index 0000000..ebe51d3 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/.gitignore b/frontend/apps/scanner/src-tauri/gen/android/.gitignore new file mode 100644 index 0000000..b248203 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/.gitignore @@ -0,0 +1,19 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +build +/captures +.externalNativeBuild +.cxx +local.properties +key.properties + +/.tauri +/tauri.settings.gradle \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/.gitignore b/frontend/apps/scanner/src-tauri/gen/android/app/.gitignore new file mode 100644 index 0000000..6c4d56b --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/.gitignore @@ -0,0 +1,6 @@ +/src/main/**/generated +/src/main/jniLibs/**/*.so +/src/main/assets/tauri.conf.json +/tauri.build.gradle.kts +/proguard-tauri.pro +/tauri.properties \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/build.gradle.kts b/frontend/apps/scanner/src-tauri/gen/android/app/build.gradle.kts new file mode 100644 index 0000000..0cb4639 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/build.gradle.kts @@ -0,0 +1,70 @@ +import java.util.Properties + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("rust") +} + +val tauriProperties = Properties().apply { + val propFile = file("tauri.properties") + if (propFile.exists()) { + propFile.inputStream().use { load(it) } + } +} + +android { + compileSdk = 36 + namespace = "de.effigenix.scanner" + defaultConfig { + manifestPlaceholders["usesCleartextTraffic"] = "false" + applicationId = "de.effigenix.scanner" + minSdk = 24 + targetSdk = 36 + versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt() + versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0") + } + buildTypes { + getByName("debug") { + manifestPlaceholders["usesCleartextTraffic"] = "true" + isDebuggable = true + isJniDebuggable = true + isMinifyEnabled = false + packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so") + jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so") + jniLibs.keepDebugSymbols.add("*/x86/*.so") + jniLibs.keepDebugSymbols.add("*/x86_64/*.so") + } + } + getByName("release") { + isMinifyEnabled = true + proguardFiles( + *fileTree(".") { include("**/*.pro") } + .plus(getDefaultProguardFile("proguard-android-optimize.txt")) + .toList().toTypedArray() + ) + } + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + buildConfig = true + } +} + +rust { + rootDirRel = "../../../" +} + +dependencies { + implementation("androidx.webkit:webkit:1.14.0") + implementation("androidx.appcompat:appcompat:1.7.1") + implementation("androidx.activity:activity-ktx:1.10.1") + implementation("com.google.android.material:material:1.12.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.4") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0") +} + +apply(from = "tauri.build.gradle.kts") \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/proguard-rules.pro b/frontend/apps/scanner/src-tauri/gen/android/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/AndroidManifest.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e521bca --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/java/de/effigenix/scanner/MainActivity.kt b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/java/de/effigenix/scanner/MainActivity.kt new file mode 100644 index 0000000..b1e63a4 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/java/de/effigenix/scanner/MainActivity.kt @@ -0,0 +1,11 @@ +package de.effigenix.scanner + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge + +class MainActivity : TauriActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() + super.onCreate(savedInstanceState) + } +} diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..4fc2444 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..28f1aa119119336781390c2531c381499576ed59 GIT binary patch literal 3524 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 Z9~XahTOvo#1qKEN22WQ%mvv4FO#rfh!>|AV literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..85d0c88af65bcef008faba29bfc02688883dda8c GIT binary patch literal 14102 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 aXFiqO`1@Xh+inI11_n=8KbLh*2~7YM_F_T+ literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..28f1aa119119336781390c2531c381499576ed59 GIT binary patch literal 3524 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 Z9~XahTOvo#1qKEN22WQ%mvv4FO#rfh!>|AV literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..73e48dbfb7dc31ed1e951b77820af88b93fcc418 GIT binary patch literal 3377 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 SUll)4?$PyyJ8ZtpjV2Rd> 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

3uBjFJbu_ET&aP3j=_wL_CLO;JdfAU{lrqJ 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1d98044f13bdd3afc7cb426644ae118688c03c14 GIT binary patch literal 7971 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^T&UU|AWhE&XX8_Ql1l6q}l zsn;Y={T36ijD->+FMY#zT@pFkv`#64A=WkIg1q+X?C=d6!cq=$X~{-*eYxkYARy%N z{^XaPZ|$G&E;mq_oT9emXU@CHl|gBF)=zEUYu@L*x@l{UZuIGE5bB%#&WrV5yO(GF zSd_`OfA@bq?XGWj`zoJ4=K3RR*0m=}B;Y!Cn|7MytfTU-o)ZJ_?UQ5v_WXmzrZpZ# z!rG7Z7c;Q+%w#;+eBo%P%-UOdgrZkbGPQs z{9gI(wDv!ZyN&WK-*e(8csIwc=kZ{B=eSv|Z{eIxspl4*dHKF({{OjRD`vJeElFF* za3rUqP=TfJ*4o6w|7^`4rgN-nY>E^TP|J|l*=Kb8`lH6{-#ghDobRvN{%!KrGu)dErzPHH zSFK+(A?DEU6OAcf6qW^D3hNb0J!AMIq0ifQW3H^l=Q}U{2wi0SaDwaW8kSuvTlwQ< zJltcx^xwE?EZ0@%t|er!wUwdUW@(k=LeoRfEyDQS4KnzYG^Qj>Ji{Pvru*Pk&%ZUC z_nv#M5KCRMXo`k|&cPpNuT=1H>D)icUbw5rPhnRO-+9#FZ7sTIc?>SBiZaiW4**2E2Da z_wB5{=+R$2oW9E#%x}*$RIItP=x1)ds5c91(}tkA9|W@)LL<}!Sn{WP@4p@K=cssg z_p~=wiI$v9-+%2{Fk!;)w)T5m8`IK$`_=93bhk*IsIgT|m8E#s#H@MhCSL- za<$^~^uUJOz3gS*-*0&Q`P}k`(hnWGuSP0;D)c*FFyrmNJ^OyV4c~Y2=k=4_eM;YL z1?<)r)=Zid%Uf)+vG7Nr8s~wjHZ!YIa(?VEm(Tp0RyZDg zwoi3;ceC>>VP#$K`)LVFi)@3=(&t~79lRNN&X)cBtsu*<7N6ozG2fAV_PqE}eASP8 zE2cAkXPx)?Oqs(EA^BsQt;?q9$=d6`{g<@4<@e(49h25*T(5c@u;FpQ!5_cRa0(`i z+ll`-W+{qm`&`9!;lz~&k(q)D zA_AN4O;&&Kp2;bYL;R9f!{zmN;&yfJb<~qQ?yvzkjX5f z^YCcv$2%vLpY{Hgvo1H+;#isF9In35Sz)2jx!AI_s56&V3YxdyQN5Ykn)u?>z0T`O zM*nog#Si_|y&JJdO4wm(U)+TZu7da{ht!kr`}CNraPv*QX`m+7>Ua3;v^n18GIxuw zY$`n6w@Gxf-II=q4FYZC zfPeREm**Zomu}f@^Y;1-1J36zYD-+4Bp)669($hAJDWRjIhU*26^oYVc5#zFKRUy2 zByJM+bJw{u?ECBg^xvpF^)T)fzy9{h_uCj9_xc>uy3kp0_~G-JRv~s<)%eP`S-d@Z z?Wu*tn~%SRx4Ylzysn+&DK^!MKZ+5P_+i-nTOiG5=t?!=h zkCMKe+~hq``@7-+UyvvjYpPcczqIE zZt5{nxv4TW;QxZ#D!Wxe`&duhlBn;~)E3ffVk&#IrEUF`ErG&@TLku0OTK5;T&d%o z_u%SQ-yXwnudW~8Rr}e@P<`_ZjfGYt*`yaeS+e|H&m3{yYpcv&Xc}!$n$mf6 z{~L|iZ)ema_2bTopW1sg>-$FQqc4@u>-c)Ldh@wF4b7<+V*O$GW}@)4-s|=?Wh&P; zimZ~)&=f@jR$0N zDy$1Xeh^%Ed1JNOPLZp#ugqQ?`N8zmk-%?E;nyap2j^QB9Gmti*E8}o>yqaG@3uT^ zd(Cw0gxSwkJTtGXZ&(_+CMfLpZvWDjd5vdlW8=D)O#Hy^p>aB}!BnH>|3c-eqcz{| ze%kRgJNU3%?JL{b-F(g&^Omo%He0W9==k|-Nq^t1dbytaR;@uz#fg&idEOIPSu>VI z%{eR{6d}^KI-)?*H|NYcSK0EC-0Tjght-p9Hb(Jn_}Y=G&H6#DTI0*f03m*kXHn&z z21l|>ZmTcOD_~t9;n5p3$tC&xJ=w?mem-43!_}Mb$9MT6^DTS7Bo!{yxcye|O`nCI z?Ctej)7SCN7tCI|`@fh`%9|G()LWSxFMV#Y+$bmFn%ty%BPC~DOa14XLrzTcQDJeX z-B|cscRSB8s@9mA+#1SuV)5d`KPt8d&FW=p;3ztgl`(f-*PPu6b#KhI&o>CYW6%yy z;eNpS#5iHK%mi0CJNKP>OO~xDkKO!r@|DP?o#!9K2)yuH$?Mk`^-5*)iZ5P#GgwkT zsI*MGwdX+YM|J&Mmo;ZUNxHf#^lA3wiJT4x`d4zVF`vQYuwjo<*CNH0?oNmNXMbzG zWB*t5XjW><>c}In#E&qa^Ywq29Sk2vC zmdW}K?!n2wSb49nnY!}mzmug7xvN;TmZYY9SQoWpk<)7tG3loKCYJ-BTonucJV`9{ z4xj(*@$D~S-CV3cb}!=mr?pZ*xXfxzQ02;{W~>=!MYS{!3LKw(L!dzB)a`>hQORx% z*XQ0@zD~40;k2gEn@WL%!n}@EY6lK&{4+a_@l_2cOLQd9Jfpw+!q)Hozgvl`uIsEC zlgvlcUFyEpnQfwbEm$qv<~LrP=(am(`6H9}r`s1wFLU@EvT(&K+lDhQOt&&QG}v(2 zf7y7G-)--gZ$Ufv^eDy5Pu(e1;J8RdP%}&6&$88TW%6SD&KEv)*1o(lRC{kw)1sY@ zGhI)W-R?Gzt`IohKFdNjw0Zl%RLfZ*j4YoS%bN1`m)HDA-n@U(r(%Jq1&0D;?Uap$ zT%*=MzcHb}tMG>2;k8#!oxPiSKltUho;5PzT)Z>hIlFgp^&1vNndM|Z`u;QiY2B3R?<|%XZ?t+b z%`!X5egl8X5gpV2r{~->TkccTdCMrw+}kTF`GwaJkW9J1ny&vVtcF}-UT z)-DkL`bfHa$F;(@DecTR`NHRZxcNZ9@5G)h|3BSVFVXz<ma*>L^`>l%xczIgOp?B|;Q^-lGsyKUK>D`x53-i7OSleZI7-@R}#C@paW5@X&518w}mlpAgcik1Cy6(g)=_B10 zxnWz}tCO#6TyH(U(Y`fd`L3d?Q?@Ae@>GA@lUsgiiZSy8u8mr%*Ik+Isu|YK-2MN+ z>~=%7$&AU4qOMI162S_o_qP1X7TI@;_jBBjC!cpr66x=K*QV<>M~8jA(joQk;F(ox zlP5lPSNPMB&=>VNZTHm+jLlxFm8!HNCkrsEPB8yJ`MZAP*)uP9^{xIT({i%KHmB`% zH9xc3r%o)p zwJG(l{)HX)9iO?q(p7o<3*aw*F^8X8L)?| zH)2vRiA}ZD_oyigY}puJuDoE? zWB%^nlE=GR%8o5`+8J^8gv~nbWj7uAq>LZOoG<--sz2`aEW=~ztP75A$((F% zhI?ocV}Za-GYO5~6aPwYIO|b$=w5EhRPQ5irpNWo*!{rUB5y-Ph{6f6%^J~bg-Xt- ztlZ+#vaB~{&%*aBb}Y^AlbBSkD)6wnzE8W!eNVZ++x=_yE1thx8tbRF#gIqzY?AM5 z(FM6&^wCH;WPs2em%lK^`Q>-pMs$3|yNlt9< zA;sx_HHNv1?mmq*-Rc-2u#@|LLztX@?=B+QJY z63(iI-9NH&1xp`mMAP46HXRe%H6wg=^>UeV z;+A3m^COH5G8Yb|Zk!yq%i@*CD%tWhuUbuunI~R*lY!Y`);zv4v1DoYiKfe(!;^n1 zX|=W49qI|c-0rNLuJ065yY9+L>FLu_W4AUrNgDM`_Hn2XWWJNfvq8vp#ZrA9J{1;` zt0#_cscDQfYY$2K0g)yWb(`QgKYwH>RCeRcF_ESm z<3mS6e!@Z9bGdi7mf9|T7JRR;O492toAOhO+8pVSsIx7rt{M6E-haHfB+w#3HT!R@ ztLPq%47XxO8GhE>&$s8N+D@`DeHyl+Xj)cn3!7k_tc}B7`whE%bgkFUVrEE8`}3z+ zA-rSpo{J16c@w|h_?BbO={tM=%>@D>Nx20rZ>AkQv*XKg)%O*h|DQ0wP5v_1KzQ<& zAX6hy`eeml~0&jf)|d-Kb!me61}F^|D08Ndl~bQ zU)h@OJLWFVpLC!1gzndWYvjalayAA1x!v~2wRzd{5=qnNhZY~#yYbo5)ZujRMyt!_ z{1?RRIA%(Ur>x#75*;wL)g`;};*HJU?`ypYlAd#7#=~8gfYTlgb#4t_f9x@R;3?{JM-h09L z%C3oTHh=gybLWel0Tn{79czWQT{)=yP$tJ?#yOL!Lnp3rPuJ;>-}X#Gpu^*>m{clf z{@gInxW;@;lZ!3E|x0f_WIR4r*Male~@h0uBi!v8a ze3UHoi0AI4>fhhxjqX$={}&AK_i~so!2PMnSnb{&F|AE~$38V!O;x(1d+byE{{Kb= zZ_Qh=EmALA% zuQVszLr7Wk#qJYk3Hg5PoR2Jwn0H$=n%v<}{bH0qBXsi71}-r_y$wHR_y1qnC>hSn zq7h)dNa^{$f80B&%RLswxN!C=)co1`b@%-BPlRu&bz9El%gNT#6R(`d(y5v8lEJ@6 zv%@GqYWI!GUq@6=9p~&@_OZc!Z-ek=z2~oPm1U&9xVKrHC9ZMZ4B;J`vJp0aV$-Ee z|H=Kn$egV>@pNE!>DT;Ji$Y%}9gE~Mi}Lq>mbb~76v7oU^ZHAV{SLGDTzKcGR`9rF z$}^kKCuBG6JmbdWow>)LbnRx-Bd56T*T1b?xkE!fZ_@V}zmjGL3Ah9}1)N!a`Ww67 zj%ty0D-_?oPh7A)ue?clSIRHH2TF_o3h%r9!TP|tl$BdN*1VIM5$n9jT~z<)n@Gji zL5l0X?A*k$^JaB}SntPY3s^I!pY}e_-X~=*c_(I>EwAswuPe_M&&_ z*Xc^BTzK*<^OX7P;7(ibs2Q8A4y5k-`fcIb`@fSm>*?)Vo}wpwve1@0K7qNp;`hhq z*PoxAo3&Od`SHK+J=x(5c^%UkT+dxT?*ICckW;U1{+o8*;{L}PD_G{dDY~JVyuPlP z*}ZQ!chvNm>#j@@DUuPf^Ih#<6)=C1SA3)4r-sC~!2kSg&sarXC87X_oq`WfC8b5~BsW&=S zFsv|ieQ8zljz_h5UqIpB&VJt)EqggvoJ%?!zNXaI=-NG>#*lm7oAdRfH|D6$yv1g* zXjaDR>(5ztzLb}i$?E!@_EazSx8GgHBnQr|7yKGnuCO|>=~W)8W3qDzDYO*5nX|3w z$s7fnX&?DNFl%4Gm{JygZ0peveZgw0!>?Roj6H0*VavhHL;Iy${?`U`@4qLy;F81D zxeJ?KvU6T=i+#S1dFdmkBgx0QHwtcA<0Q+lOj78KcAL=xO{s&7;!xb)!a!9TsDdme7TdSQ;|=hwCg5)K`L5)*#CXWv`BgSEDmG1O;4mc9KEG0&6= z+v9BQ2HR}wbZg$qEBSWyh;0NmtTA6zyF6^%Cd6J z8O=A>c>KJQC*^zneCdv4&h?KYRxmmW_-jY~`FA4K2^lyO(=&$E($!Lhb9+#h%=rz51$oFVh|Mkd<1M zH5&iU9Y50gLn7;$<4mI0YaSN4Et@cX?lUjz`D&t~H?)39UW(;7a5nD4*%K@h zTLr?;3Wx0pT)NBt^dHsy{gtu2jk0a~ggRcnTC9Ii@ooI~El88jpt4A0#j?O|Hv+llD(flI(K4!Z;~~ zMYJ)L#bNrr1j!>jM?F%eo@e)QGVz|-<5P2e+OsD|B=oMnocMV2t;j{QRX)4*FOaC{ zE6cS^C>NX3DJrHMJSqIeN&7j^_4IUvWefJ+Z=T%D&lK=z{s*?psr(8dz6>&A;ycwc zZkZY%{qip1rP&(ylCafk$L8tImbiT^^5(KVQ+t>5m^hyl4@}_MGiTH7#}l~w=a$a5 z30Hc&SJ%(;FcrZ&4*M6h^WzcA{^;HEV)vOHrX4z&vFi;(%K^r}2f3sQCOx)zwJxwz zdHrkoa`&+5D^_cAXD_ue@)Gb0S=!VS#PwEjhVHCywf8#KI>(6wc4jmd>+t8BGOe&U zkUX>EQ~hl1eRKA2DmmDtE6Toy;Yq}-w)4{tCE4k#e>iYx!@X8U>ti2I^q$;qZ(&xM z<&&K3&eHp6LLgJei}ZyLrCWXmn!M-v#}Ht_kSfxx)O&01_N<%7S9?9*yLC^++}q6d zES)Ud7asWAvL$P`4g<@o#x~L93&$8A1Tf4w$uLJf`BKl!DY1)Kw(A)3tYyf!@oSE- zfY*_4j2n+_6#J3E>^#@$Q7X{_K*)Uk}%(ocVb=KI#1xl|Bw`A)y05|1#vV83amP>*@&1$*+qvseN_l z@_WXLbGLZ}8CVMyED8=4+AizOH+i!3_w1T8E*oDq`A%_sr19co%P-@MZ4$?i6kqul zyDin+zW&p>c>f)z9^9<>F;hTG>+K|Ff%8KA-bT%~8(++P<{wv{`^e{%TF{~u92P$l zzgZZ0$Vl!`=X(WW8xgo8rF@PUpLVGB&M|$`si!g`Iz*D}PYg zX`la!AFr2snqG)sqaV+If3acO^$7~QR2ZI^>h0dXO(m~#^;@;YQ{O6Dr7-S0&%UF< z^k9>lnyJ3)Ny8gi{R|F!=4~RWX;&7s zdapZS{o3wf!Rh1Wa%J;$w|Bbgc;DXInPR(0==Rd3I|HMX?wgo4W{b`}V9uI%yg^Z* zLSMBiMe?equ*Cf(4?chDwE6zkTy=fl+`^h&T1!G+N-zec-;x$n zL1A?cYZwFyNI1}ZGroDy=xlNWj?n@ z@#=v;-~Vo&ynIjHFXoyuhG_zf6Y?1zC9FNtTO7ULY(f2-!%j0_h*zY{JaWs@tZk{t z?2<3d`QCBA&Zo1=H!k^D@w_8gwbi_B>5omP1s~jd8!fL z8(MZd%#>uA-4etvzIffSeLM%!Eg1gVo}VxA;hnjv{Z;du64Mwy`CU45GPAz=Q{$KO zEkTY>(I@m*CMQ{J2%f_|UCj3Hn?J?tW$j;2H2HdBq1WLh`nFe^rr8~8=yDP7)%oyY z-o=^g{W3o#9bb2iGi0gDiNm|RlvCD8vg}wRQnL4R!13DSb5!H5$}wJWeKSvRZ?aL? zxy-q1ccd6ET^93WPqk@u`@@E(wlg2cSiU?O{5|JJaOo{>8HXO0NtzkgTFgIRoZbE9 z&5|qo?TmMR+%4k2oTJQ>#b}G4Lep!GIa8k&7tPVOx)QT%Rhc0om!sG`TWmVdKR6gMnaPZ&;rVM()&6+Xw=bC8{dQ}2KIEOp!(!TO z_c6S<)vGp5&(-)};LyHe-Ac)2W=+9vk1jvw?K}Uz@MO~BXUodYChc65 zY9E@D9N454a$#w}30C3kn>%+HPfdU4vDr&iiw#-^Z| z4tMR;UM~GNck!i%e=W=%Y zyt#;d&%e-%=L>x0mdsM|k+`u_4?TH+hFAHn$%#>(Ln5hvq$LjT! z1OEH;e~TV$*3!N*PxzqErx_Am(LcSPKKqu*w#>W##ld-6o}WTx8S@n`8y)3&BXX7P z&M*E()8#J|c6lW-D!A_T|M^(mIL^!8G={P0@%bhF=FcVeY6KOldWoENF8Oyd{BvH- z)6a+GokVR+=S@{I?O0H^@8`~>zc1ch%$;pwT*lfaJGV8;vE|;}2Z1WtvkVU>3zs)F z&J*_06#0~Ab6V(~i`-T7ZEwv#N6AmgQJQu}<6iakRko?7D>y>9!)zyrJAYw%Cb>Q$ z@Xw(a>V4-M?w*~@G}l05_Qy-20(=kaVlUL~zj$Ix^M*A~yp3cYw)OB-KblgU+&!C* zZ&AoWHTK6Fo$cM-Oj({0QR01Kis`Adg*Ge)&d%WD4}LOjF6+;Ca~3bZ z`+K`=(VNv9yxX^@TYsv%m41J1uDD^$sqX?d4baYQne|~RIL0ETe(9RP~8>ZYc zvkNQn@bf&GlPYOZSmAWv|Jszi#O#nIF=j$1q~D+NFm#cRzM{zfVtYtRcBR~n^0{mySO~nn|t$7>+AKNKbA)*CfSv* zm7c%h)>U>~iZR4vC$0?D}u z=Sr~yi%?TwZ{Ky6-Yl2)YIPnKyJP>lv|SkIEzf!J;D_M>{*!hRS5#*9c0OFh^~rYs zza6`?RnNyY z_C`OKRC2dDfB9#_667P|-Kb?hVakbe2LCN#nk~AS65NO1StrD^HC{8Eb>PBPKCVd4 zC!v<9p_4xE6;)l$|8$r41!l+hE`dugw?;3{SS{Ui*728W!iLb^>6+pvI=?l|y!t3+ z7o+smotJe_>t5;!IWKonSyg@IveYa_IbMgw!P1hG_TLQo_ity=#f9a+vLjp`Z#^e^ zYW^~f3o6kwO`4kyxRe@+uQk;ArSl*^&L>F6{p-twmu4GQZ=HSdfC;;122=maKR+VR zD?W%Vdv~hvN#%R#rAy?>+QXH;XC!yt-?-qe;L)`zk1k)`)@G3&V{_c6_TiO|o!(tx zg;v$ciGi=07ILf&`0(c~tDMaP=II_G28&wnr&*r5u`gJ7_Pcx4Gd9*f*Y4H5ZE||=+g#ap}y2+@ih1QWu;Efw=Xx3&B#l6 z;dN8RVT;eA-~0Dlzp->_Ufyx<(XrmA@;&w6j?}U)UGzY=;)*kupX6kds(Y7bo<3^i zcxjXBf0+uYl@))M6g$6;=HqLdd0}b@k37S|ct7R>m5Dl1xkkYZv+N9$^L8D*v-G%! znW5%nCqV3~wUbiGfIh-%yV8@fn4{cAfpP$S4$D2A`;-K%OZ#TOoHY}OH zNJD#zVq?0$d~x3E%I^;svMz11z2I|DDoZEv_@6S%g!@-k9edEOu`?qu9`! zbhH1??MbbB9yQmtXYnLA%NqO6eDX8nl@PnYOXuT-TvZ`5>c{W@JaD5&^)=tIyLIQI zKl}|#@|?J$!bW9zbJBsVWtpahT>tc~WtYC2<81jV>F0924Bbor*Y96$d+u1FE^EKe z6;T^gha=oenM_jx?kJn{cfW7oV_da~VObkP+VjNYay|bw?Pe%?C_mJ13ORG7?5Zk{ zLg=dn6Lp#b@7O%u2uLyQyKl-0^jJY3uYkyVupf3C+=&zG~-v#2Ks5@O}-NeRB(KfQil!S^fMQ`_$@v5-~z)AKj@LCE8F4~6n? z|2EH3`5f*u`TM~<*%iLU2PXUSL;zUDTg-NN@v_@S{yP!4^XcYB561Ne8XNSa(^Gp( zr%YPsa3%c&1IG_(xf70xXaNeWySK}4Qa;%^_jBt1cm9eAA3MC1Y-(lRe!lIImfU$ysAF~d2M2=? zA>X;{J$!2m?|Btm{^x3({5fa+IbD)HbXM1f2zUID zR++AG{Zvl&!)r}J8y#HveP5=!U!Tu%Xy4>XDu!v?Q_WtVUGEsBaxjatl#RbjOhJ0) zj0nCjzKI{})9+Vj-Pyo*bp5^$VvPKD!3<^H)Ak=uSod|m_%nO|$O*T<)Ne8@Ip}P0 zIP!_*zfX@2m77jrn{>@_3A@0gx2DZ2!aUU;S3Af$3z&toCR(gA$Yo!?&)~VJ-D21H zn@>d!B&?ggUG=n*P*+Y2Q}EZvv&xI|cP;ZhDXqVkS&^@^#r#UhwT90VUDr0e|GK{G zTJEove{${SCEGSV`sluZQ>enL(B^A@`MG=1A$nCzYlXh%_0D^%b9ZCqa{V})#bHMR zkBUAr^i^mT7xons7qkDii}UcJ^?U1Pg#>C{zZ&YkyVFd<@-ciMT0+HVJMzyB&@ z9mIJ3SzxN7py#GZUuQ`~u|8UB?0+|W=KIL>j>kLxU)9~ zOr3k`d%)gzb~UBn9DfHfFrQ>Sbof=u*1)OXuQ;`?dZ($I#2$K#;X>c@72oa7?SFsn z|C4hILy~P2@;WabxU@YuWVf2+vU8K7*O{6!@3m#SGJS2#8QW;3If@U$4tX$D1}ihz z{7;%JZ5nR#&g!Nuhn<<(yyE9Ff4*J$+Pry=_4awnLF`v&>acDNn5nXaxueK$_tA6Z zGP@qWW&Qcx(Pwo>|8q+p;iVftIjP;OouS#`TEipFy2!LMz1zD*_pzMat;g@Cf4&#i zpSqOE?$o4`{)+N?>&ob|$5z?*t>vpb)$3d)T$H@9nMZ3yoP=7-!t1HB z1*z>Xvj6>B5fis;)n+RXIWxWk#R>NxT`uqYD}7|=hrc=#t-hKFxI`8EJlz-m`CeUS z;loAk$5s7zSZV*-^(DnQ-P>k5!-a&z(z{bt5ABR~mx-R1wjb6KPZ)*Y)m1Dj zx2^f>!y=cwk*VU_x>KK<+Mn(@`Q@wCmUUlQc#fanr7btBT59jg^4VraGmI|tcrMt) zBd}=0^CvsGxmTZFlc~!dHGM)ynZt$>->@^HXQO8QR|-|=e(0?yaQ0#1e(CRFxtAE0 zuD-%2)nIbYeG}i_w1$^mao4>?pBhc-u-hwnMVKYja^;?q`!B2Wr2a}*sBApQx9I5H zo`i&qt-U;6%l0_+bH^<|Z~pU&@xzU4BF_KP{=k1Ct>(|PDVk4Su&n(_0D^jCE{w(<|zgT5r$+=I3OAXHU1*e=Wdv|fSyZ6)7MYHZ{ zwH?tsmUUT6DKy3H_1`snJ%S6*{=W3}Mc&#|p)yzXx4F)bGZa?c?V=L&_B&TGr`+xH z`@`1i>4y)pSx3{xL!&#qn&$Zs*!<+e#SQ zQZ2TA-0|=9+W*eREIQX3!+R5wlcX}YdB1%m_BiFDVaU@}|M$MItJ%AE*ck3=rH_MQE>-DPoyCwFXIjkaY?Pk42qa>1LDEce6Lv}z4@ z`P~fr`(F3_Mj7kE@1;H26Qkm$3Cvh?>neM+Lt@|tmF)S4C!FUIG)Qze>eI2QTf9{&prN!r=OD$L7-YyFNMGSi&BD{K{5$`D0R(HKvJrpSXYJ z+X0tfH?(q7<@egg=NG`7QFV_vT6AaAd#`72EZ$f&@@`bota#r3l1m|f z+nk?WYZS8%&E?NqtmEBdI%{+O%?*c&-+Zuq^zO9P3jL{1)gLfMHFVA`xZNAr+~#kP zvgHNqyf~wp`y3C1QkO4|IbmISVPERwPhIE5&xoIUGHudazJ==&j^EN-vMt~fL&X~D zXWQ<%6qZ<@3|`Khdgbxi*rJcz^5T0|=z0bGH2%xrQpBs$`HXkU%H->H5wc#t7YJ>T z6HsAHjo<&v+qaAL+_uY4IHD%Km9WlxwBZQ5-0b7a&GOWD-xawh{*mYEzTg$xCh@Gj z#b;9b%FLkbj;?>0-tR|0A64p~3!LNU+WnMO*2SXq#<}p|=#vVS*O)7;m?~Io1dd&Q z-SA}6PnUT!KOekVpQNmnUp;HVz1{1+@!t?`6I&}ht9G9i`++GQfm^pF1iw}g+45^LNKtl=|?Pb!_<(cIn&4YY#d1KC_?rkvDrm@GFfH;FY@qG(}kQBO$jl{ z|I^oY?np5*__Vv8EAyU1_< zYTYxbrCXd$mz~%eF1zCE8@E$i%dd+mb^lqP9{!%uR@2~s@cWr%!H1Uoo+sAL&0t~k zw)mf54$~B;pw!lOe_!cIpU#}l&oW^?2`iy>MqzAY)ZX-PYf%0+LHM1)a3YxUqMm`CT&> zN6+8Kmc{?ce5f~3(QWsVXzk*~`twi!IlpS>TK*;GhH=VMxGGv2ovv^E#q5~T@p#AE zXf1I&oA+m|J1)*rcWLKs*u%kOzEiVR)O4%<>?XsUn@>gV-u%5aCief;>C+keXB%X4 zC3kwM8Jbu%xcN1R-^^R?FzM`qvuQ$4c)vW*Ex7n}pX}mU_5X4{NA4Eia$eG0>*N2F z>1PgdM?b&1Q=EapwV^^he&YL^w*PJlPwvP{d0Az9&GCDU!p*l{7u9aHXL)Y;3 z<9O36-&gbhsod=D^z^xMKwI6bOj>lq5r(bo=bb+K&f?#g@^|Ux+QYa0wupQ^zd)@u z;{N_iug*IDO@6PODwwd` zRhdvVXVW2q5eKSuZ9Xo-NQ3YX$cGmmvLa)(V%TWsF`#`G$Kvpz%S z+|m@2l%G~Nxe}bi|JOC#+oZFcbqUvh1M3A+wt8G0$3hI&XfE2vw4qtz*Y-Uc``_{N zrd?z3**jHt{+BDAb=+Z7-yPm|n76WJ`M!f8QBOZggvrCfRD7#lTJ-NBwa~_-Tj>jeOP9dqK(JF51gX$*;iS9DH&%R#Z>Zacx4hDTW zVKU7|z{aS~XGP1|B|j|s^iP!jHK=%X(XhQJ*6i%F%nv!fdsQyvuQ86jdt}A8WBn>o zszYQF@iGVk72)+~{e=D1+T6F1J7$0fnMiBFCn zU+uQJ`1`iIU6%u0R$F>lahNJtJq$Xx*V^pY4o$r!EGK_&C{#aw@#L+r)k|khnd7&l z;9|sg|EG3#*5yB5sQ1}F4De4+abmTp@>+1eN4{Vox5nEiC!^}+RrrO4XLB%~c_L-B z@||<<{EhP#x1Wx^`FsCSF{6Lq*jF`r%`}wQ`29lQ?`5U-tEASx`_&zG{#ZcNa_PlU zW`@fWoLlT~t8vJzT{rJ(l4aHFzEkGb_ov;h`?l!NdqXp~Sqn}tEPc0Sp4%32hxD3% zwOb4=?j1@`G2;$!RVegeh~D?%?sWqP?o~a!E?g63a|L05Rz1nxDD<51J)?+`v%H6N^(aOtK zY{6H(cYb?o!@1x?<~qaA0>zCAP4{nBPh}9Bv&DSF+Q^OPx7B^kj!81&)w*P_96XKn zSjr>YO7(Kl{r?`t^*}u7qtpd`feV%qL;gayNBO5fClM^lM8q+_0w!JMk zd#d%apDoPJ_CL0zNN;OC*yQTSB|BBrhtows`R3d9tvN2szMV`BND6$m&i2>JZjpqm z`@=p3eYkS?@?Cen+_Yp+SId8{%0wPRleVXslW)%Ze`E@0k?Tw;v5%8gzt0n}*s$7^ zd$vvEHL(k;7gctgI$k8x;C^H4`mCEAYjx#T(87B3|nz(2l;n%r- zw)Z=m(_Qv&GNE_$*d^wRt=iUN_PUMNbT-I$T^nd3|=egF~<*v?Z`lZUar7b|{ zT4`!&$1bVIZ;r8?YuOxBbZ+nG-SJxc>(VPfKAQjSc7OH#rb?Tr*jkOpZuJb6;;|N! zXRC{f%cegTvT|GyvQuMohmyw^jhG-W?c(k8_O80N{+<)x`K#ybzlKju% zKKI$2>xjjt=&v{gm)mGr^JVnO*{3SKv(@h`W+Liq{{-@rqWOnxZbv8kZ->X-2 zRJ1>5PWO6u^V+1FDn|vX6XLIax_Ub|`}(^LYkxm&`0FsUif`tvdYL^Yd!>!89KSGq z=TTX{ZBCQT#m@ChndAsr^7QSjaOaCrc*7X7Gw0)*KlOgKHWOs)?=@fbaP5^Wj6J_2 z`hAs1QtI^!Y{fdUpB0=<+-&6f3qHM=_UXL%p1_Y+)#DZSE;wFWalYEWBTZK`;c?3R zqR^{s6x{RPtTO>apHTn{lm8r3`>~Vs~!QwYpZY+Fz zw5i5%`{P|#txVtC@+#Z9v37ZibK2{?W#8sTYc7)DJ+n1hN7Lrzovpd^e;?Q<+;wZa z*Yz%*qO$6(-&>xaOuja!=WUDrkCrDUSvsylsa;&Q>$Oh^acnd5*|Rfz|1{tG|Ba%z zg@1fe6a%y64xfl>56R-koo)8P9*s*pSB?WQ2QW8R+)T-}mC@ z#~W5XEA4t`x#@WaRzOi_pA-ZXn&1B@ zklcG{Ux(4sB@+UCn# zysTlD?8Tgmr}%d~Nr`h#I5BVC*%!9KDch^>OnLmA*V|KTg?^~mjK9x|PPHwY`8WCa zeY2)ZSx-yrql!Llj#?V^_Y$AqD*kHb#sf*&8gEbdeO1Zg^p`L)$)7pn#|8U$Cx6s@ zJ)dd(eC-skE*_`2bGKz4Uy;w3qK|C-SzLtT5d6O-Novv~r%P zch~oMQpP)Gzu6ERvNyzxm0xFz*3FDV1uM+1R$iKMK0{L4^uwvfYX=V>pJ`Pl%eyCZ zPs-{g2Gc6uoz(oBb6@Z7Bi*z6Y8aLriRHwPBfk!!p51D>q$k{P|Gs zR)UeoQrF%7cMZ1e-qz`KOPbqjvM-N+LS}#NS@ZV{`;EPhsLkAJ{!-zU|2mE3kMj2w zPy2iPsZWo!tHp#)A{vZ?3#|hzS{OBj`JDck!iYTr?0uqz9cFAM(ig4&UX*k zF79cZsHT&e2R{FQrrY#qY6n6tua^NQl!H@mL3Gynd^cwUnS*DtXXx(jnVHuAiw zb(w7E$`hQ-8)ACipmpc=o~+lFlVarxW|r5!nZ6)KR9o+W=yYxE1asYr&W%x;^IxA% z6n3g`W+}7Me!G?b%BcX3p7t!|6;cltc9^q1@SJP;oiq4(-s7WxjGH2&l$t_BJEh!J z7DgVaI=yDK`G)Pzvva?G+Q}hzw_1huY#8UY3potmC%&mQR6cg+MAYKoPQ{na-d)Gk zD^e$|%x%{>CKdbiN9NzOMR~QkqIU#-9Gq4o(9yg5=X-Otd)9ArSMCuB4mD6b>n&^` ze$p)9#Cy#m!wnyW71cUg*}NaF&^RH=@PovXUK zURi(0`rviWVq4A)$Cz6Ivm;VCP72POBw+pT+eA(Oy*om>A87CMswjDSa7NlG`@aco zxko3-o4ynl`>WW@rO@k=GH3U8`7M0AR@qO#wnOyk#|}HOzZbO*W-MRK#`9M@*I*jM z_AlIRY97LE0R`_3pEznRQ4G7&;(2|!jd8W5+(S>5rR!UJ9pVl4G)_L{wfVg7>>6#U z>md>?2Cvv1rd%tLDcM=^?o8i|z{l^JIg>QEer(b=<8AT?V{n;f$GrZjakSAl-t6ni zQ{;DNm^{%_eVY`r+t07|-`3y4?`oeUGtIM-d)TQcwm|R2qw8@yj_xdeZI~qA+WBRr zID=rbl*^{)S3WxFX-01N@~V7k&i3vt{Cg&puXUKO`QVe*w7k7+%oBDwe-NG-wS3hj ziB)k+1@kyerZsMUG%0xImj8QxmYrF#(f_fh%d96Wxhq)A)cQ96-}CS7qWb^E>%=Z` zWN!c4-yLjU#-tgYb|y_V`Q)zoJFXn74~)^<*q45U`Jujt#lr*F=4n>_+<9`UxA@vi zOJv-CJ!0Lwd|{Oo+iO*`JSo5z(8zwd<-#*{noo4^J#k%^w z=lU826}8NVs}DO(C}26QaU(x)GS9Mik-b9d{&NLQGj50ktexSl@=I|0;X7foe0>(3 z^V_X`dRx)UZv_gx(r&GDm!GomJ7FKpC%j+%*R1{bl)@((KYq=U^5`g|L(1}C!?Z0g zWUBxAewU8g;wQ@eY4g!T#YAeE9XvSMJyYT9`FE=>F_iC^V)lCf`UYJ?UmZQ6*F_@FSg$m?G^BJc z+Mvd>!{>%{eDauY_Ia+cxvyg*~Cg$*Z@;p0)kOWBC0| zwdnL2cesp2pK3{S1qM#`+p_;b;$z{;=Y6`~e*SXyeg~T-8f>YS5_7OvHCsf3VbOo4 zj(67`j<6N@b3IF5yw_>7&FP3UB4?#F6Sjyd7@y}z|Lk{)&wbwS1M`#^ns`6obFh_E zd?%Lss>W4F!un;*W3{sfJo3AacMD%gXo>l7;>iY^Hr^-qvYOJ5zC3B(ckIRt^Je3i zgO>{!RNkC zt~I60&*s>;dvR8hjcTCRkE-Z}+KuOK@7~mtqAbu9DjHw=Nix}Ju5syGOBN>uwS;w{ z^W5ft+go*7hI6%lgWH1#^PZl1Kh1_!>vh@ph0RN|3Pd~)d4GO$eL@KDtho-~wruom zKX$U;-u(2WtN+8kOgbQXe2&sjrCy;|!H+ytPF~1J%It1!nsAD%ZzBE+Pa&oxO?MERmE=-u`zFVc}P!HI#3*}BR0!$ zrl#WmFWV-W$5m}hI+=cd;(f(eVG|F{RN$#+sBC}rYVziYiKjdFKFnuc?A}v(qsH~x zSCJM~5qD7*led(2adw=244H>>~<1W3@ zTEiH!_8No7jal%GCv)vhlLA$vb8VVgVW&ZpmP z0RpRAGOYZIYnlXis0ze)GAQ_@7zbyCu50PN_;9b;4!6$V9~zTx#)YbdhV2m1wflCP zp?RJRhmVwD%&%h~pE57F??-KUw5HD|y%n2#uC7c>dPee_MVlkO+)1ddIV#_!2 z;(6s|ar4vOhr622yZYYsgOKDzLHvm6@qfni@*awtG7ZES7#J8lUHx3vIVCg!02Jz} ANB{r; literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a838e7b550ac82b12e73d71427c6ffea06a944 GIT binary patch literal 29506 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

{ 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 ANB{r; literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b18bceb64d257ed31d50e65d7f2b98abcfb21158 GIT binary patch literal 16751 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8a57f38e0273699c8cdd1012042bffdc38abce GIT binary patch literal 40510 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 Q7#J8lUHx3vIVCg!0M#u<-~a#s literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b18bceb64d257ed31d50e65d7f2b98abcfb21158 GIT binary patch literal 16751 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 literal 0 HcmV?d00001 diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values-night/themes.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..fee9922 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values-night/themes.xml @@ -0,0 +1,6 @@ + + + + diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/colors.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/strings.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..2ed9ee0 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + Effigenix Scanner + Effigenix Scanner + \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/themes.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..fee9922 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/values/themes.xml @@ -0,0 +1,6 @@ + + + + diff --git a/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..782d63b --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/frontend/apps/scanner/src-tauri/gen/android/build.gradle.kts b/frontend/apps/scanner/src-tauri/gen/android/build.gradle.kts new file mode 100644 index 0000000..607240b --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/build.gradle.kts @@ -0,0 +1,22 @@ +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.android.tools.build:gradle:8.11.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25") + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +tasks.register("clean").configure { + delete("build") +} + diff --git a/frontend/apps/scanner/src-tauri/gen/android/buildSrc/build.gradle.kts b/frontend/apps/scanner/src-tauri/gen/android/buildSrc/build.gradle.kts new file mode 100644 index 0000000..5c55bba --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/buildSrc/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + `kotlin-dsl` +} + +gradlePlugin { + plugins { + create("pluginsForCoolKids") { + id = "rust" + implementationClass = "RustPlugin" + } + } +} + +repositories { + google() + mavenCentral() +} + +dependencies { + compileOnly(gradleApi()) + implementation("com.android.tools.build:gradle:8.11.0") +} + diff --git a/frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/BuildTask.kt b/frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/BuildTask.kt new file mode 100644 index 0000000..f764e2a --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/BuildTask.kt @@ -0,0 +1,68 @@ +import java.io.File +import org.apache.tools.ant.taskdefs.condition.Os +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.logging.LogLevel +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction + +open class BuildTask : DefaultTask() { + @Input + var rootDirRel: String? = null + @Input + var target: String? = null + @Input + var release: Boolean? = null + + @TaskAction + fun assemble() { + val executable = """pnpm"""; + try { + runTauriCli(executable) + } catch (e: Exception) { + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + // Try different Windows-specific extensions + val fallbacks = listOf( + "$executable.exe", + "$executable.cmd", + "$executable.bat", + ) + + var lastException: Exception = e + for (fallback in fallbacks) { + try { + runTauriCli(fallback) + return + } catch (fallbackException: Exception) { + lastException = fallbackException + } + } + throw lastException + } else { + throw e; + } + } + } + + fun runTauriCli(executable: String) { + val rootDirRel = rootDirRel ?: throw GradleException("rootDirRel cannot be null") + val target = target ?: throw GradleException("target cannot be null") + val release = release ?: throw GradleException("release cannot be null") + val args = listOf("tauri", "android", "android-studio-script"); + + project.exec { + workingDir(File(project.projectDir, rootDirRel)) + executable(executable) + args(args) + if (project.logger.isEnabled(LogLevel.DEBUG)) { + args("-vv") + } else if (project.logger.isEnabled(LogLevel.INFO)) { + args("-v") + } + if (release) { + args("--release") + } + args(listOf("--target", target)) + }.assertNormalExitValue() + } +} \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/RustPlugin.kt b/frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/RustPlugin.kt new file mode 100644 index 0000000..4aa7fca --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/buildSrc/src/main/java/de/effigenix/scanner/kotlin/RustPlugin.kt @@ -0,0 +1,85 @@ +import com.android.build.api.dsl.ApplicationExtension +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.get + +const val TASK_GROUP = "rust" + +open class Config { + lateinit var rootDirRel: String +} + +open class RustPlugin : Plugin { + private lateinit var config: Config + + override fun apply(project: Project) = with(project) { + config = extensions.create("rust", Config::class.java) + + val defaultAbiList = listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64"); + val abiList = (findProperty("abiList") as? String)?.split(',') ?: defaultAbiList + + val defaultArchList = listOf("arm64", "arm", "x86", "x86_64"); + val archList = (findProperty("archList") as? String)?.split(',') ?: defaultArchList + + val targetsList = (findProperty("targetList") as? String)?.split(',') ?: listOf("aarch64", "armv7", "i686", "x86_64") + + extensions.configure { + @Suppress("UnstableApiUsage") + flavorDimensions.add("abi") + productFlavors { + create("universal") { + dimension = "abi" + ndk { + abiFilters += abiList + } + } + defaultArchList.forEachIndexed { index, arch -> + create(arch) { + dimension = "abi" + ndk { + abiFilters.add(defaultAbiList[index]) + } + } + } + } + } + + afterEvaluate { + for (profile in listOf("debug", "release")) { + val profileCapitalized = profile.replaceFirstChar { it.uppercase() } + val buildTask = tasks.maybeCreate( + "rustBuildUniversal$profileCapitalized", + DefaultTask::class.java + ).apply { + group = TASK_GROUP + description = "Build dynamic library in $profile mode for all targets" + } + + tasks["mergeUniversal${profileCapitalized}JniLibFolders"].dependsOn(buildTask) + + for (targetPair in targetsList.withIndex()) { + val targetName = targetPair.value + val targetArch = archList[targetPair.index] + val targetArchCapitalized = targetArch.replaceFirstChar { it.uppercase() } + val targetBuildTask = project.tasks.maybeCreate( + "rustBuild$targetArchCapitalized$profileCapitalized", + BuildTask::class.java + ).apply { + group = TASK_GROUP + description = "Build dynamic library in $profile mode for $targetArch" + rootDirRel = config.rootDirRel + target = targetName + release = profile == "release" + } + + buildTask.dependsOn(targetBuildTask) + tasks["merge$targetArchCapitalized${profileCapitalized}JniLibFolders"].dependsOn( + targetBuildTask + ) + } + } + } + } +} \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/gradle.properties b/frontend/apps/scanner/src-tauri/gen/android/gradle.properties new file mode 100644 index 0000000..9925b58 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/gradle.properties @@ -0,0 +1,26 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true +android.nonFinalResIds=false +# Use Nix-provided aapt2 instead of Maven-downloaded one (NixOS compatibility) +android.aapt2FromMavenOverride=/nix/store/n6f18hhmk8c1mf9d2p4ks6ljw3nnzaqy-androidsdk/libexec/android-sdk/build-tools/35.0.0/aapt2 \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties b/frontend/apps/scanner/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..c5f9a53 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue May 10 19:22:52 CST 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/frontend/apps/scanner/src-tauri/gen/android/gradlew b/frontend/apps/scanner/src-tauri/gen/android/gradlew new file mode 100755 index 0000000..4f906e0 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/frontend/apps/scanner/src-tauri/gen/android/gradlew.bat b/frontend/apps/scanner/src-tauri/gen/android/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/frontend/apps/scanner/src-tauri/gen/android/settings.gradle b/frontend/apps/scanner/src-tauri/gen/android/settings.gradle new file mode 100644 index 0000000..3939116 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/android/settings.gradle @@ -0,0 +1,3 @@ +include ':app' + +apply from: 'tauri.settings.gradle' diff --git a/frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json b/frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json index 43da9ef..3b8ef93 100644 --- a/frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json +++ b/frontend/apps/scanner/src-tauri/gen/schemas/acl-manifests.json @@ -1 +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 +{"barcode-scanner":{"default_permission":{"identifier":"default","description":"This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n","permissions":["allow-cancel","allow-check-permissions","allow-open-app-settings","allow-request-permissions","allow-scan","allow-vibrate"]},"permissions":{"allow-cancel":{"identifier":"allow-cancel","description":"Enables the cancel command without any pre-configured scope.","commands":{"allow":["cancel"],"deny":[]}},"allow-check-permissions":{"identifier":"allow-check-permissions","description":"Enables the check_permissions command without any pre-configured scope.","commands":{"allow":["check_permissions"],"deny":[]}},"allow-open-app-settings":{"identifier":"allow-open-app-settings","description":"Enables the open_app_settings command without any pre-configured scope.","commands":{"allow":["open_app_settings"],"deny":[]}},"allow-request-permissions":{"identifier":"allow-request-permissions","description":"Enables the request_permissions command without any pre-configured scope.","commands":{"allow":["request_permissions"],"deny":[]}},"allow-scan":{"identifier":"allow-scan","description":"Enables the scan command without any pre-configured scope.","commands":{"allow":["scan"],"deny":[]}},"allow-vibrate":{"identifier":"allow-vibrate","description":"Enables the vibrate command without any pre-configured scope.","commands":{"allow":["vibrate"],"deny":[]}},"deny-cancel":{"identifier":"deny-cancel","description":"Denies the cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["cancel"]}},"deny-check-permissions":{"identifier":"deny-check-permissions","description":"Denies the check_permissions command without any pre-configured scope.","commands":{"allow":[],"deny":["check_permissions"]}},"deny-open-app-settings":{"identifier":"deny-open-app-settings","description":"Denies the open_app_settings command without any pre-configured scope.","commands":{"allow":[],"deny":["open_app_settings"]}},"deny-request-permissions":{"identifier":"deny-request-permissions","description":"Denies the request_permissions command without any pre-configured scope.","commands":{"allow":[],"deny":["request_permissions"]}},"deny-scan":{"identifier":"deny-scan","description":"Denies the scan command without any pre-configured scope.","commands":{"allow":[],"deny":["scan"]}},"deny-vibrate":{"identifier":"deny-vibrate","description":"Denies the vibrate command without any pre-configured scope.","commands":{"allow":[],"deny":["vibrate"]}}},"permission_sets":{},"global_scope_schema":null},"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},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-send","allow-fetch-read-body","allow-fetch-cancel-body"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-cancel-body":{"identifier":"allow-fetch-cancel-body","description":"Enables the fetch_cancel_body command without any pre-configured scope.","commands":{"allow":["fetch_cancel_body"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-cancel-body":{"identifier":"deny-fetch-cancel-body","description":"Denies the fetch_cancel_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel_body"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}}} \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/schemas/android-schema.json b/frontend/apps/scanner/src-tauri/gen/schemas/android-schema.json new file mode 100644 index 0000000..ba6abf9 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/schemas/android-schema.json @@ -0,0 +1,2526 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + }, + "deny": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n\n#### This default permission set includes:\n\n- `allow-cancel`\n- `allow-check-permissions`\n- `allow-open-app-settings`\n- `allow-request-permissions`\n- `allow-scan`\n- `allow-vibrate`", + "type": "string", + "const": "barcode-scanner:default", + "markdownDescription": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n\n#### This default permission set includes:\n\n- `allow-cancel`\n- `allow-check-permissions`\n- `allow-open-app-settings`\n- `allow-request-permissions`\n- `allow-scan`\n- `allow-vibrate`" + }, + { + "description": "Enables the cancel command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-cancel", + "markdownDescription": "Enables the cancel command without any pre-configured scope." + }, + { + "description": "Enables the check_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-check-permissions", + "markdownDescription": "Enables the check_permissions command without any pre-configured scope." + }, + { + "description": "Enables the open_app_settings command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-open-app-settings", + "markdownDescription": "Enables the open_app_settings command without any pre-configured scope." + }, + { + "description": "Enables the request_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-request-permissions", + "markdownDescription": "Enables the request_permissions command without any pre-configured scope." + }, + { + "description": "Enables the scan command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-scan", + "markdownDescription": "Enables the scan command without any pre-configured scope." + }, + { + "description": "Enables the vibrate command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-vibrate", + "markdownDescription": "Enables the vibrate command without any pre-configured scope." + }, + { + "description": "Denies the cancel command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-cancel", + "markdownDescription": "Denies the cancel command without any pre-configured scope." + }, + { + "description": "Denies the check_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-check-permissions", + "markdownDescription": "Denies the check_permissions command without any pre-configured scope." + }, + { + "description": "Denies the open_app_settings command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-open-app-settings", + "markdownDescription": "Denies the open_app_settings command without any pre-configured scope." + }, + { + "description": "Denies the request_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-request-permissions", + "markdownDescription": "Denies the request_permissions command without any pre-configured scope." + }, + { + "description": "Denies the scan command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-scan", + "markdownDescription": "Denies the scan command without any pre-configured scope." + }, + { + "description": "Denies the vibrate command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-vibrate", + "markdownDescription": "Denies the vibrate command without any pre-configured scope." + }, + { + "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." + }, + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + } + ] + }, + "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/capabilities.json b/frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json index c3101b5..01f2942 100644 --- a/frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json +++ b/frontend/apps/scanner/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"default":{"identifier":"default","description":"Default capabilities for the scanner app","local":true,"windows":["main"],"permissions":["core:default"]}} \ No newline at end of file +{"default":{"identifier":"default","description":"Default capabilities for the scanner app","local":true,"windows":["main"],"permissions":["core:default","barcode-scanner:allow-scan","barcode-scanner:allow-cancel","barcode-scanner:allow-check-permissions","barcode-scanner:allow-request-permissions","barcode-scanner:allow-open-app-settings",{"identifier":"http:default","allow":[{"url":"http://192.168.0.166:8080/**"},{"url":"http://192.168.0.*:8080/**"},{"url":"https://api.effigenix.de"}]}]}} \ No newline at end of file diff --git a/frontend/apps/scanner/src-tauri/gen/schemas/mobile-schema.json b/frontend/apps/scanner/src-tauri/gen/schemas/mobile-schema.json new file mode 100644 index 0000000..ba6abf9 --- /dev/null +++ b/frontend/apps/scanner/src-tauri/gen/schemas/mobile-schema.json @@ -0,0 +1,2526 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + }, + "deny": { + "items": { + "title": "HttpScopeEntry", + "description": "HTTP scope entry.", + "anyOf": [ + { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + }, + { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", + "type": "string" + } + } + } + ] + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n\n#### This default permission set includes:\n\n- `allow-cancel`\n- `allow-check-permissions`\n- `allow-open-app-settings`\n- `allow-request-permissions`\n- `allow-scan`\n- `allow-vibrate`", + "type": "string", + "const": "barcode-scanner:default", + "markdownDescription": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n\n#### This default permission set includes:\n\n- `allow-cancel`\n- `allow-check-permissions`\n- `allow-open-app-settings`\n- `allow-request-permissions`\n- `allow-scan`\n- `allow-vibrate`" + }, + { + "description": "Enables the cancel command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-cancel", + "markdownDescription": "Enables the cancel command without any pre-configured scope." + }, + { + "description": "Enables the check_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-check-permissions", + "markdownDescription": "Enables the check_permissions command without any pre-configured scope." + }, + { + "description": "Enables the open_app_settings command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-open-app-settings", + "markdownDescription": "Enables the open_app_settings command without any pre-configured scope." + }, + { + "description": "Enables the request_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-request-permissions", + "markdownDescription": "Enables the request_permissions command without any pre-configured scope." + }, + { + "description": "Enables the scan command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-scan", + "markdownDescription": "Enables the scan command without any pre-configured scope." + }, + { + "description": "Enables the vibrate command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:allow-vibrate", + "markdownDescription": "Enables the vibrate command without any pre-configured scope." + }, + { + "description": "Denies the cancel command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-cancel", + "markdownDescription": "Denies the cancel command without any pre-configured scope." + }, + { + "description": "Denies the check_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-check-permissions", + "markdownDescription": "Denies the check_permissions command without any pre-configured scope." + }, + { + "description": "Denies the open_app_settings command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-open-app-settings", + "markdownDescription": "Denies the open_app_settings command without any pre-configured scope." + }, + { + "description": "Denies the request_permissions command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-request-permissions", + "markdownDescription": "Denies the request_permissions command without any pre-configured scope." + }, + { + "description": "Denies the scan command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-scan", + "markdownDescription": "Denies the scan command without any pre-configured scope." + }, + { + "description": "Denies the vibrate command without any pre-configured scope.", + "type": "string", + "const": "barcode-scanner:deny-vibrate", + "markdownDescription": "Denies the vibrate command without any pre-configured scope." + }, + { + "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." + }, + { + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`", + "type": "string", + "const": "http:default", + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-send`\n- `allow-fetch-read-body`\n- `allow-fetch-cancel-body`" + }, + { + "description": "Enables the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch", + "markdownDescription": "Enables the fetch command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel", + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Enables the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-cancel-body", + "markdownDescription": "Enables the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-read-body", + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Enables the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:allow-fetch-send", + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." + }, + { + "description": "Denies the fetch command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch", + "markdownDescription": "Denies the fetch command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel", + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." + }, + { + "description": "Denies the fetch_cancel_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-cancel-body", + "markdownDescription": "Denies the fetch_cancel_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_read_body command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-read-body", + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." + }, + { + "description": "Denies the fetch_send command without any pre-configured scope.", + "type": "string", + "const": "http:deny-fetch-send", + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." + } + ] + }, + "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/src/lib.rs b/frontend/apps/scanner/src-tauri/src/lib.rs index 05f3417..40e5cb5 100644 --- a/frontend/apps/scanner/src-tauri/src/lib.rs +++ b/frontend/apps/scanner/src-tauri/src/lib.rs @@ -1,11 +1,24 @@ +use tauri::Manager; + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - let builder = tauri::Builder::default(); + let builder = tauri::Builder::default() + .plugin(tauri_plugin_http::init()); #[cfg(mobile)] let builder = builder.plugin(tauri_plugin_barcode_scanner::init()); builder + .setup(|app| { + // Desktop: Zoom-Faktor erhöhen, damit die Mobile-UI + // auf einem 1× Bildschirm nicht winzig aussieht. + #[cfg(desktop)] + { + let webview = app.get_webview_window("main").unwrap(); + let _ = webview.set_zoom(1.5); + } + Ok(()) + }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/frontend/apps/scanner/src-tauri/tauri.conf.json b/frontend/apps/scanner/src-tauri/tauri.conf.json index a8d0ad0..7fb093c 100644 --- a/frontend/apps/scanner/src-tauri/tauri.conf.json +++ b/frontend/apps/scanner/src-tauri/tauri.conf.json @@ -14,9 +14,10 @@ "windows": [ { "title": "Effigenix Scanner", - "width": 400, - "height": 700, - "resizable": true + "width": 645, + "height": 1305, + "resizable": true, + "zoomHotkeysEnabled": true } ], "security": { diff --git a/frontend/apps/scanner/src/App.tsx b/frontend/apps/scanner/src/App.tsx index aea4b47..2852d25 100644 --- a/frontend/apps/scanner/src/App.tsx +++ b/frontend/apps/scanner/src/App.tsx @@ -1,29 +1,66 @@ -import { Button, Card } from '@effigenix/ui'; +import { NavigationProvider, useNavigation, type Page } from './navigation'; +import { FlowStateProvider } from './flow-state'; +import { ApiProvider } from './api'; +import { LoginPage } from './pages/LoginPage'; +import { HomePage } from './pages/HomePage'; +import { ScannerPage } from './pages/ScannerPage'; +import { ManualEntryPage } from './pages/ManualEntryPage'; +import { BatchDetailPage } from './pages/BatchDetailPage'; +import { MoveFlowPage } from './pages/MoveFlowPage'; +import { MoveConfirmPage } from './pages/MoveConfirmPage'; +import { ConsumeFlowPage } from './pages/ConsumeFlowPage'; +import { ConsumeQtyPage } from './pages/ConsumeQtyPage'; +import { ConsumeConfirmPage } from './pages/ConsumeConfirmPage'; +import { BookFlowPage } from './pages/BookFlowPage'; +import { BookConfirmPage } from './pages/BookConfirmPage'; +import { TasksPage } from './pages/TasksPage'; +import { HistoryPage } from './pages/HistoryPage'; + +const pages: Record JSX.Element> = { + login: () => , + home: () => , + scan: () => , + 'manual-entry': () => , + 'batch-detail': () => , + 'move-flow': () => , + 'move-confirm': () => , + 'consume-flow': () => , + 'consume-qty': () => , + 'consume-confirm': () => , + 'book-flow': () => , + 'book-confirm': () => , + tasks: () => , + history: () => , +}; + +function Router() { + const { page } = useNavigation(); + const render = pages[page]; + return render ? render() : ; +} + +function StatusBar() { + return ( +

+ ); +} export function App() { return ( -
-
-

Effigenix Scanner

- - -

Chargen-Scanner

-

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

- -
-
-
+ + + +
+ +
+ +
+
+
+
+
); } diff --git a/frontend/apps/scanner/src/api.tsx b/frontend/apps/scanner/src/api.tsx new file mode 100644 index 0000000..6c60d43 --- /dev/null +++ b/frontend/apps/scanner/src/api.tsx @@ -0,0 +1,98 @@ +import { createContext, useContext, useMemo, useState, useCallback, type ReactNode } from 'react'; +import { createEffigenixClient, type EffigenixClient, type TokenProvider } from '@effigenix/api-client'; +import { fetch as tauriFetch } from '@tauri-apps/plugin-http'; + +const API_BASE = import.meta.env.VITE_API_URL || 'http://localhost:8080'; + +/** + * Axios adapter that delegates to Tauri's HTTP plugin. + * Bypasses CORS restrictions on mobile webviews. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const tauriAdapter = async (config: any) => { + const url = new URL(config.url || '', config.baseURL); + + const headers: Record = {}; + if (config.headers) { + const raw = typeof config.headers.toJSON === 'function' ? config.headers.toJSON(false) : config.headers; + for (const [key, value] of Object.entries(raw)) { + if (value != null) headers[key] = String(value); + } + } + + const response = await tauriFetch(url.toString(), { + method: (config.method || 'GET').toUpperCase(), + headers, + body: config.data != null + ? (typeof config.data === 'string' ? config.data : JSON.stringify(config.data)) + : undefined, + }); + + let data: unknown; + const contentType = response.headers.get('content-type') || ''; + if (contentType.includes('application/json')) { + data = await response.json(); + } else { + data = await response.text(); + } + + return { + data, + status: response.status, + statusText: response.statusText, + headers: Object.fromEntries(response.headers.entries()), + config, + }; +}; + +interface ApiState { + client: EffigenixClient; + login: (username: string, password: string) => Promise; + isAuthenticated: boolean; +} + +const ApiContext = createContext(null); + +export function ApiProvider({ children }: { children: ReactNode }) { + const [tokens, setTokens] = useState<{ access: string; refresh: string } | null>(null); + + const tokenProvider = useMemo(() => ({ + getAccessToken: async () => tokens?.access ?? null, + getRefreshToken: async () => tokens?.refresh ?? null, + saveTokens: async (accessToken, refreshToken) => { + setTokens({ access: accessToken, refresh: refreshToken }); + }, + clearTokens: async () => setTokens(null), + }), [tokens]); + + const client = useMemo(() => createEffigenixClient(tokenProvider, { + baseUrl: API_BASE, + adapter: tauriAdapter, + }), [tokenProvider]); + + const login = useCallback(async (username: string, password: string) => { + const res = await tauriFetch(`${API_BASE}/api/auth/login`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username, password }), + }); + if (!res.ok) { + const text = await res.text(); + throw new Error(`${res.status}: ${text}`); + } + const data = await res.json(); + setTokens({ access: data.accessToken, refresh: data.refreshToken }); + }, []); + + return ( + + {children} + + ); +} + +export function useApi() { + const ctx = useContext(ApiContext); + if (!ctx) throw new Error('useApi must be used within ApiProvider'); + return ctx; +} diff --git a/frontend/apps/scanner/src/components/BottomNav.tsx b/frontend/apps/scanner/src/components/BottomNav.tsx new file mode 100644 index 0000000..19e6fbf --- /dev/null +++ b/frontend/apps/scanner/src/components/BottomNav.tsx @@ -0,0 +1,68 @@ +import { + Home, + ClipboardList, + ScanLine, + History, + Settings, + type LucideIcon, +} from 'lucide-react'; +import { cn } from '@effigenix/ui'; +import { useNavigation, type Page } from '../navigation'; + +interface NavItem { + icon: LucideIcon; + label: string; + page: Page; +} + +const items: NavItem[] = [ + { icon: Home, label: 'Start', page: 'home' }, + { icon: ClipboardList, label: 'Aufgaben', page: 'tasks' }, + // scan button goes here (rendered separately) + { icon: History, label: 'Verlauf', page: 'history' }, + { icon: Settings, label: 'Mehr', page: 'home' }, +]; + +export function BottomNav() { + const { page, navigate, setFlowType } = useNavigation(); + + function handleScan() { + setFlowType('info'); + navigate('scan'); + } + + return ( +
+ {items.slice(0, 2).map((item) => ( + navigate(item.page)} /> + ))} + + + + {items.slice(2).map((item) => ( + navigate(item.page)} /> + ))} +
+ ); +} + +function NavTab({ item, active, onPress }: { item: NavItem; active: boolean; onPress: () => void }) { + const Icon = item.icon; + return ( + + ); +} diff --git a/frontend/apps/scanner/src/components/PageActions.tsx b/frontend/apps/scanner/src/components/PageActions.tsx new file mode 100644 index 0000000..d5927e6 --- /dev/null +++ b/frontend/apps/scanner/src/components/PageActions.tsx @@ -0,0 +1,15 @@ +import type { ReactNode } from 'react'; +import { cn } from '@effigenix/ui'; + +interface PageActionsProps { + children: ReactNode; + className?: string; +} + +export function PageActions({ children, className }: PageActionsProps) { + return ( +
+ {children} +
+ ); +} diff --git a/frontend/apps/scanner/src/components/PageHeader.tsx b/frontend/apps/scanner/src/components/PageHeader.tsx new file mode 100644 index 0000000..8fd548f --- /dev/null +++ b/frontend/apps/scanner/src/components/PageHeader.tsx @@ -0,0 +1,30 @@ +import { ArrowLeft } from 'lucide-react'; +import { useNavigation } from '../navigation'; +import { type ReactNode } from 'react'; + +interface PageHeaderProps { + title: string; + subtitle?: ReactNode; + right?: ReactNode; + onBack?: () => void; +} + +export function PageHeader({ title, subtitle, right, onBack }: PageHeaderProps) { + const { goBack } = useNavigation(); + + return ( +
+ +
+

{title}

+ {subtitle &&

{subtitle}

} +
+ {right} +
+ ); +} diff --git a/frontend/apps/scanner/src/components/StepIndicator.tsx b/frontend/apps/scanner/src/components/StepIndicator.tsx new file mode 100644 index 0000000..c7f306d --- /dev/null +++ b/frontend/apps/scanner/src/components/StepIndicator.tsx @@ -0,0 +1,56 @@ +import { Check } from 'lucide-react'; +import { cn } from '@effigenix/ui'; + +export interface Step { + label: string; + state: 'done' | 'active' | 'pending'; +} + +interface StepIndicatorProps { + steps: Step[]; +} + +export function StepIndicator({ steps }: StepIndicatorProps) { + return ( +
+
+ {steps.map((step, i) => ( +
+
+ {step.state === 'done' ? : i + 1} +
+ {i < steps.length - 1 && ( +
+ )} +
+ ))} +
+
+ {steps.map((step, i) => ( + + {step.label} + + ))} +
+
+ ); +} diff --git a/frontend/apps/scanner/src/components/SuccessScreen.tsx b/frontend/apps/scanner/src/components/SuccessScreen.tsx new file mode 100644 index 0000000..6cb31fd --- /dev/null +++ b/frontend/apps/scanner/src/components/SuccessScreen.tsx @@ -0,0 +1,25 @@ +import { CheckCircle2 } from 'lucide-react'; +import { type ReactNode } from 'react'; + +interface SuccessScreenProps { + title: string; + subtitle: string; + children?: ReactNode; + actions: ReactNode; +} + +export function SuccessScreen({ title, subtitle, children, actions }: SuccessScreenProps) { + return ( +
+
+
+ +
+

{title}

+

{subtitle}

+ {children &&
{children}
} +
{actions}
+
+
+ ); +} diff --git a/frontend/apps/scanner/src/components/SummaryCard.tsx b/frontend/apps/scanner/src/components/SummaryCard.tsx new file mode 100644 index 0000000..345e128 --- /dev/null +++ b/frontend/apps/scanner/src/components/SummaryCard.tsx @@ -0,0 +1,38 @@ +import { Card } from '@effigenix/ui'; + +interface SummaryRow { + label: string; + value: string; + mono?: boolean; + highlight?: 'success' | 'danger'; +} + +interface SummaryCardProps { + rows: SummaryRow[]; +} + +export function SummaryCard({ rows }: SummaryCardProps) { + return ( + +
+ {rows.map((row) => ( +
+ {row.label} + + {row.value} + +
+ ))} +
+
+ ); +} diff --git a/frontend/apps/scanner/src/flow-state.tsx b/frontend/apps/scanner/src/flow-state.tsx new file mode 100644 index 0000000..120e320 --- /dev/null +++ b/frontend/apps/scanner/src/flow-state.tsx @@ -0,0 +1,76 @@ +import { createContext, useContext, useCallback, useState, type ReactNode } from 'react'; + +export interface ConsumeItem { + name: string; + batch: string; + location: string; + quantity: number; + unit: string; + required: number | null; + requiredUnit: string | null; +} + +export interface ScaledIngredient { + articleId: string; + quantity: number; + uom: string; +} + +export interface ProductionOrderContext { + orderId: string; + recipeId: string; + batchNumber: string | null; + articleName: string; + plannedQuantity: number; + plannedQuantityUnit: string; +} + +interface FlowState { + consumeItems: ConsumeItem[]; + consumeScanIndex: number; + scaledIngredients: ScaledIngredient[]; + productionOrder: ProductionOrderContext | null; + addConsumeItem: (item: ConsumeItem) => void; + nextConsumeScan: () => void; + resetConsume: () => void; + setScaledIngredients: (ingredients: ScaledIngredient[]) => void; + setProductionOrder: (order: ProductionOrderContext) => void; +} + +const FlowStateContext = createContext(null); + +export function FlowStateProvider({ children }: { children: ReactNode }) { + const [consumeItems, setConsumeItems] = useState([]); + const [consumeScanIndex, setConsumeScanIndex] = useState(0); + const [scaledIngredients, setScaledIngredients] = useState([]); + const [productionOrder, setProductionOrder] = useState(null); + + const addConsumeItem = useCallback((item: ConsumeItem) => { + setConsumeItems((prev) => [...prev, item]); + }, []); + + const nextConsumeScan = useCallback(() => { + setConsumeScanIndex((i) => i + 1); + }, []); + + const resetConsume = useCallback(() => { + setConsumeItems([]); + setConsumeScanIndex(0); + setScaledIngredients([]); + setProductionOrder(null); + }, []); + + return ( + + {children} + + ); +} + +export function useFlowState() { + const ctx = useContext(FlowStateContext); + if (!ctx) throw new Error('useFlowState must be used within FlowStateProvider'); + return ctx; +} diff --git a/frontend/apps/scanner/src/index.css b/frontend/apps/scanner/src/index.css index 24b3f8b..14e46b5 100644 --- a/frontend/apps/scanner/src/index.css +++ b/frontend/apps/scanner/src/index.css @@ -1,4 +1,79 @@ @import 'tailwindcss'; @import '@effigenix/ui/theme.css'; -@source '../../packages/ui/src/**/*.{ts,tsx}'; +@source '../../../packages/ui/src/**/*.{ts,tsx}'; + +/* + * Mobile Typography Scale + * + * Überschreibt die Tailwind-Defaults für Touch-optimierte Lesbarkeit. + * Gilt für die gesamte Scanner-App inkl. shared UI-Komponenten. + * + * | Klasse | Default | Mobile | Verwendung | + * |-----------|---------|--------|-----------------------------------| + * | text-2xs | – | 11px | Timestamps, Mikro-Labels, % | + * | text-xs | 12px | 13px | Captions, Subtitles | + * | text-sm | 14px | 15px | Body, Listentext, Badges | + * | text-base | 16px | 16px | Card-Titel, Inputs | + * | text-lg | 18px | 20px | Seitenüberschriften | + * | text-xl | 20px | 24px | Große Überschriften | + * | text-2xl | 24px | 28px | Hero / Login-Titel | + */ +@theme { + --text-2xs: 0.6875rem; + --text-2xs--line-height: 1rem; + + --text-xs: 0.8125rem; + --text-xs--line-height: 1.125rem; + + --text-sm: 0.9375rem; + --text-sm--line-height: 1.375rem; + + --text-base: 1rem; + --text-base--line-height: 1.5rem; + + --text-lg: 1.25rem; + --text-lg--line-height: 1.625rem; + + --text-xl: 1.5rem; + --text-xl--line-height: 1.75rem; + + --text-2xl: 1.75rem; + --text-2xl--line-height: 2rem; +} + +@keyframes fade-in { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes scan-line { + 0% { top: 10%; } + 50% { top: 85%; } + 100% { top: 10%; } +} + +@utility animate-fade-in { + animation: fade-in 0.2s ease; +} + +@utility animate-scan-line { + animation: scan-line 2.5s ease-in-out infinite; +} + +/* Mobile defaults */ +html, body { + background-color: #faf9f7; +} + +body { + -webkit-tap-highlight-color: transparent; + overscroll-behavior: none; + user-select: none; + -webkit-user-select: none; +} + +input, textarea, select { + user-select: text; + -webkit-user-select: text; +} diff --git a/frontend/apps/scanner/src/mock-data.ts b/frontend/apps/scanner/src/mock-data.ts new file mode 100644 index 0000000..bd6cddf --- /dev/null +++ b/frontend/apps/scanner/src/mock-data.ts @@ -0,0 +1,111 @@ +export interface MockBatch { + id: string; + article: string; + articleCode: string; + category: string; + quantity: number; + unit: string; + location: string; + bestBefore: string; + status: 'planned' | 'in-production' | 'completed'; +} + +export interface MockActivity { + type: 'move' | 'consume' | 'production-start' | 'production-complete' | 'goods-receipt'; + batchId: string; + description: string; + detail: string; + time: string; +} + +export interface MockMaterial { + name: string; + batch: string; + location: string; + available: number; + unit: string; + recipeQty: number; +} + +export interface MockLocation { + name: string; + temperature: string; + icon: 'cold' | 'frozen' | 'scan'; +} + +export const BATCH: MockBatch = { + id: 'P-2026-03-19-003', + article: 'Wiener Würstchen', + articleCode: 'ART-001', + category: 'Wurstwaren', + quantity: 118, + unit: 'kg', + location: 'Kühlhaus 1', + bestBefore: '29.03.2026', + status: 'completed', +}; + +export const ACTIVITIES: MockActivity[] = [ + { + type: 'move', + batchId: 'P-003', + description: 'P-2026-03-19-003 → Kühlhaus 1', + detail: 'Umlagerung · 118 kg · vor 23 min', + time: '11:05', + }, + { + type: 'consume', + batchId: 'P-003', + description: '54 kg Schweinefleisch S1 → P-003', + detail: 'Verbrauch · vor 1 Std', + time: '10:00', + }, + { + type: 'goods-receipt', + batchId: 'WE-001', + description: 'WE-2026-03-18-001 → Kühlhaus 1', + detail: 'Wareneingang · 500 kg · vor 3 Std', + time: '08:30', + }, +]; + +export const MATERIALS: MockMaterial[] = [ + { name: 'Schweinefleisch S1', batch: 'WE-2026-03-18-001', location: 'Kühlhaus 1', available: 145, unit: 'kg', recipeQty: 32 }, + { name: 'Schweinefett (Speck)', batch: 'WE-2026-03-17-003', location: 'Kühlhaus 1', available: 80, unit: 'kg', recipeQty: 20 }, + { name: 'Leberkäse-Gewürz', batch: 'WE-2026-03-10-014', location: 'Trockenlager', available: 8, unit: 'kg', recipeQty: 1.4 }, +]; + +export const LOCATIONS: MockLocation[] = [ + { name: 'Kühlhaus 1', temperature: '2–4 °C', icon: 'cold' }, + { name: 'Kühlhaus 2', temperature: '0–2 °C', icon: 'cold' }, + { name: 'Tiefkühler A', temperature: '-18 bis -22 °C', icon: 'frozen' }, +]; + +export const HISTORY_ENTRIES: Array<{ time: string; entries: MockActivity[] }> = [ + { + time: '11:05', + entries: [ + { type: 'move', batchId: 'P-003', description: 'Umlagerung', detail: 'P-003 · 118 kg → KH 2', time: '11:05' }, + ], + }, + { + time: '10:45', + entries: [ + { type: 'production-complete', batchId: 'P-003', description: 'Produktion abgeschlossen', detail: 'P-003 · Wiener · 118 kg', time: '10:45' }, + ], + }, + { + time: '09:15', + entries: [ + { type: 'consume', batchId: 'P-003', description: 'Verbrauch', detail: '54 kg Schweinefleisch → P-003', time: '09:15' }, + { type: 'consume', batchId: 'P-003', description: 'Verbrauch', detail: '24 kg Speck → P-003', time: '09:15' }, + { type: 'consume', batchId: 'P-003', description: 'Verbrauch', detail: '2.2 kg Nitritpökelsalz → P-003', time: '09:15' }, + ], + }, + { + time: '07:30', + entries: [ + { type: 'production-start', batchId: 'P-003', description: 'Produktion gestartet', detail: 'P-003 · Wiener Würstchen', time: '07:30' }, + ], + }, +]; diff --git a/frontend/apps/scanner/src/navigation.tsx b/frontend/apps/scanner/src/navigation.tsx new file mode 100644 index 0000000..b285442 --- /dev/null +++ b/frontend/apps/scanner/src/navigation.tsx @@ -0,0 +1,77 @@ +import { createContext, useContext, useCallback, useState, type ReactNode } from 'react'; + +export type Page = + | 'login' + | 'home' + | 'scan' + | 'manual-entry' + | 'batch-detail' + | 'move-flow' + | 'move-confirm' + | 'consume-flow' + | 'consume-qty' + | 'consume-confirm' + | 'book-flow' + | 'book-confirm' + | 'tasks' + | 'history'; + +export type FlowType = 'move' | 'consume' | 'book' | 'info'; + +interface NavEntry { + page: Page; + params: Record; +} + +interface NavigationState { + page: Page; + params: Record; + flowType: FlowType; + navigate: (page: Page, params?: Record) => void; + goBack: () => void; + setFlowType: (flow: FlowType) => void; + resetTo: (page: Page) => void; +} + +const NavigationContext = createContext(null); + +export function NavigationProvider({ children }: { children: ReactNode }) { + const [history, setHistory] = useState([{ page: 'login', params: {} }]); + const [flowType, setFlowType] = useState('info'); + + const current = history[history.length - 1]; + + const navigate = useCallback((page: Page, params: Record = {}) => { + setHistory((h) => [...h, { page, params }]); + }, []); + + const goBack = useCallback(() => { + setHistory((h) => (h.length > 1 ? h.slice(0, -1) : h)); + }, []); + + const resetTo = useCallback((page: Page) => { + setHistory([{ page, params: {} }]); + }, []); + + return ( + + {children} + + ); +} + +export function useNavigation() { + const ctx = useContext(NavigationContext); + if (!ctx) throw new Error('useNavigation must be used within NavigationProvider'); + return ctx; +} diff --git a/frontend/apps/scanner/src/pages/BatchDetailPage.tsx b/frontend/apps/scanner/src/pages/BatchDetailPage.tsx new file mode 100644 index 0000000..ec1a4ab --- /dev/null +++ b/frontend/apps/scanner/src/pages/BatchDetailPage.tsx @@ -0,0 +1,117 @@ +import { Beef, Check, FlaskConical, Calendar, ArrowRightLeft, PackageMinus } from 'lucide-react'; +import { Card, Badge, Button } from '@effigenix/ui'; +import { PageHeader } from '../components/PageHeader'; +import { useNavigation } from '../navigation'; +import { BATCH } from '../mock-data'; + +export function BatchDetailPage() { + const { navigate, setFlowType } = useNavigation(); + + return ( +
+ Abgeschlossen} + /> + +
+ {/* Product Info */} + +
+
+ +
+
+
{BATCH.article}
+
+ {BATCH.articleCode} · {BATCH.category} +
+
+
+
+ + + +
+
+ + {/* Status Timeline */} + +

Status

+
+ + + + +
+
+ + {/* Actions */} +
+ + +
+
+
+ ); +} + +function StatBox({ label, value }: { label: string; value: string }) { + return ( +
+
{label}
+
{value}
+
+ ); +} + +const colorClasses = { + success: { bg: 'bg-success-100', text: 'text-success-600' }, + info: { bg: 'bg-info-100', text: 'text-info-600' }, + warm: { bg: 'bg-warm-100', text: 'text-warm-500' }, +}; + +function TimelineEntry({ + icon: Icon, + color, + title, + detail, +}: { + icon: typeof Check; + color: keyof typeof colorClasses; + title: string; + detail: string; +}) { + return ( +
+
+ +
+
+
{title}
+
{detail}
+
+
+ ); +} diff --git a/frontend/apps/scanner/src/pages/BookConfirmPage.tsx b/frontend/apps/scanner/src/pages/BookConfirmPage.tsx new file mode 100644 index 0000000..41fba5d --- /dev/null +++ b/frontend/apps/scanner/src/pages/BookConfirmPage.tsx @@ -0,0 +1,46 @@ +import { ScanLine, Home } from 'lucide-react'; +import { Button } from '@effigenix/ui'; +import { SuccessScreen } from '../components/SuccessScreen'; +import { SummaryCard } from '../components/SummaryCard'; +import { useNavigation } from '../navigation'; + +export function BookConfirmPage() { + const { navigate, setFlowType } = useNavigation(); + + return ( + + + + + } + > + + + ); +} diff --git a/frontend/apps/scanner/src/pages/BookFlowPage.tsx b/frontend/apps/scanner/src/pages/BookFlowPage.tsx new file mode 100644 index 0000000..00f6193 --- /dev/null +++ b/frontend/apps/scanner/src/pages/BookFlowPage.tsx @@ -0,0 +1,102 @@ +import { FlaskConical, PackageCheck } from 'lucide-react'; +import { Card, Badge, Button, Input } from '@effigenix/ui'; +import { PageActions } from '../components/PageActions'; +import { PageHeader } from '../components/PageHeader'; +import { useNavigation } from '../navigation'; +import { useFlowState } from '../flow-state'; +import { useState } from 'react'; + +export function BookFlowPage() { + const { navigate, goBack } = useNavigation(); + const { productionOrder } = useFlowState(); + const [actualQty, setActualQty] = useState('78'); + const [waste, setWaste] = useState('2.1'); + + const plannedQty = productionOrder?.plannedQuantity ?? 0; + const plannedUnit = productionOrder?.plannedQuantityUnit ?? 'kg'; + const target = parseFloat(actualQty) || 0; + const yieldPct = plannedQty > 0 ? ((target / plannedQty) * 100).toFixed(1) : '0'; + + return ( +
+ + +
+ {/* Batch card */} + +
+
+ +
+
+
{productionOrder?.batchNumber ?? '–'}
+
+ {productionOrder?.articleName ?? '–'} · Soll: {plannedQty} {plannedUnit} +
+
+ In Produktion +
+
3 Verbräuche erfasst
+
+ + {/* Actual quantity */} +
+ + setActualQty(e.target.value)} + /> +
+ Soll: {plannedQty} {plannedUnit} + + Ausbeute: {yieldPct}% + +
+
+ + {/* Waste */} +
+ + setWaste(e.target.value)} + /> +
+ + {/* Target location */} +
+ + +
+ + {/* Notes */} +
+ +