A photo manager for VRChat.

Compare changes

Choose any two refs to compare.

+2 -1
.gitignore
··· 1 1 node_modules 2 - dist 2 + dist 3 + builds/
+10 -17
README.md
··· 1 1 # VRChat Photo Manager (BETA) 2 2 3 - Install [here](https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe) 3 + Windows users: Download the setup.exe file [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest) 4 4 5 - This is the rust rewrite. 5 + Linux Users: 6 + - I publish .deb, .rpm and .AppImage files [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest) 7 + - I also publish an [AUR](https://aur.archlinux.org/packages/vrchat-photo-manager) package 6 8 7 9 ## Feedback / Bug Reports 8 10 ··· 10 12 11 13 Also for bug reports if you can, please try replicating the issue with a debug variant of the app and sending the logs along with your issue 12 14 13 - You can download the debug EXEs using this url format: 14 - https://cdn.phaz.uk/vrcpm/builds/debug/vrcpm-[YOUR-APP-VERSION]-debug.exe 15 + You can download the debug EXEs [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases) 15 16 16 17 You can find your app version under appllication settings. 17 - 18 - (Please note that there are not debug releases for versions: 0.1.0, 0.1.1, 0.1.2, 0.1.3) 19 18 20 19 ## A photo manager for VRChat. 21 20 22 - Install [here](https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe) 21 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/bc702ee6-8891-463d-a987-c2db1dc24678" /> 23 22 24 - ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/c573e27f-52e6-4608-a8ea-a8a83336fbb9) 23 + Files with VRCX metadata + Fetches world information from VRChat: 25 24 26 - Support for: 27 - - Files with VRCX metadata ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/06f44b67-083f-487e-b8b4-84c87d07604f) 28 - - Fetches world information from [VRCList](https://vrclist.com) 29 - - Cloud backups ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/db703c66-09cc-4120-9ba6-81fe3ef8c87d) 30 - - Searching for photos taken in specific worlds / with specific users ![image](https://github.com/user-attachments/assets/ea67c4ef-c7e8-4f93-a29a-74aff5f35903) 31 - - And much more in the works! 32 - 33 - ### Linux Support 25 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/aae88c53-aab6-4520-bb89-d6f2bca1c51a" /> 34 26 35 - **While VRCPM does "support" linux, Updates for windows will take priority over updates for linux as most VR users are running on windows.** 27 + Searching for photos taken in specific worlds / with specific users: 36 28 29 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/f9af1724-5bb2-4276-bc32-e818dab31750" />
+24
build-release.sh
··· 1 + #!/bin/bash 2 + 3 + VERSION=0.2.7-hot1 4 + 5 + # Linux builds 6 + NO_STRIP=true pnpm tauri build 7 + 8 + # Windows builds 9 + pnpm tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc 10 + pnpm tauri build --debug --runner cargo-xwin --target x86_64-pc-windows-msvc 11 + 12 + # Move Files 13 + 14 + mkdir builds 15 + mkdir builds/$VERSION 16 + 17 + mv "src-tauri/target/release/bundle/appimage/VRChat Photo Manager_0.0.1_amd64.AppImage" builds/$VERSION/vrcpm-$VERSION.AppImage 18 + mv "src-tauri/target/release/bundle/deb/VRChat Photo Manager_0.0.1_amd64.deb" builds/$VERSION/vrcpm-$VERSION.deb 19 + mv "src-tauri/target/release/bundle/rpm/VRChat Photo Manager-0.0.1-1.x86_64.rpm" builds/$VERSION/vrcpm-$VERSION.rpm 20 + 21 + mv src-tauri/target/x86_64-pc-windows-msvc/release/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION.exe 22 + mv src-tauri/target/x86_64-pc-windows-msvc/debug/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION-debug.exe 23 + 24 + mv "src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/VRChat Photo Manager_0.0.1_x64-setup.exe" builds/$VERSION/vrcpm-$VERSION-setup.exe
+48 -3
changelog
··· 78 78 v0.2.4: 79 79 - Refactor loading system to not load all photos at the start 80 80 (should help with large numbers of photos) 81 - - Update UI to work on linux 81 + - Update UI to work on webkitgtk 82 82 - Opening files on linux now works 83 - - Fixed not rendering properly on linux 83 + - Fixed not rendering properly when using webkitgtk 84 84 - Switch world data api to vrchat 85 + - Fixed icons being MASSIVE when using webkitgtk 85 86 - Photos are in the correct order on linux now 87 + - Fixed photos not rendering if the window isn't resized or reopened when using webkitgtk 88 + - Fixed scrolling being more and more snappy when the window is closed and reopened when using webkitgtk 89 + - Fixed render being called multiple times per frame when using webkitgtk 86 90 87 91 Dev Stuff: 88 - - Implemented a view transition handler, should help with transitions when the app is scaled 92 + - Implemented a view transition handler, should help with transitions when the app is scaled 93 + 94 + v0.2.5: 95 + - Fixed the "Start with windows" button appearing on linux 96 + - Fixed linux tray icon title 97 + - Fixed build-release.sh script outputting the wrong names for windows builds 98 + - Fixed clipboard on linux ( and sped it up on windows ) 99 + - Fixed some icons not fading out when moving to the settings menu 100 + - Removed the auto updater 101 + - Removed account login stuff 102 + - Fixed app name on windows 103 + - Update styles 104 + - Fixed filters removing photos without metadata 105 + 106 + v0.2.6: 107 + - Fixed photos not being loaded if they're too low resolution 108 + - Fixed "Open in folder" not selecting files on linux 109 + - Fixed scroll to top button not animating out 110 + - Fixed scroll to top button being ontop of filters menu 111 + - Fixed photo ordering 112 + - Fixed broken legacy named photos 113 + - Fixed photos being loaded with the wrong resolution 114 + 115 + - Added support for multilayer photos 116 + - Added close to tray toggle 117 + - Added update available prompt 118 + 119 + - Remove all sync stuff 120 + - Removed automatic updates 121 + 122 + Hotfix 1: 123 + - Fixed loading when an image file is corrupted 124 + - Fixed update prompt when not connected to internet 125 + 126 + v0.2.7: 127 + - Fixed image resizing when window is thinner than image 128 + - Fixed closing settings with keybinds 129 + - Fixed the behaviour of changing the photo path 130 + - Fixed loading photos in folders that aren't VRChat folders 131 + 132 + Hotfix 1: 133 + - Fixed resizing images (again)
+12 -12
package.json
··· 12 12 }, 13 13 "license": "MIT", 14 14 "dependencies": { 15 - "@tauri-apps/api": "2.0.0-rc.0", 16 - "@tauri-apps/plugin-deep-link": "^2.4.1", 17 - "@tauri-apps/plugin-http": "2.0.0-rc.1", 18 - "@tauri-apps/plugin-process": "2.0.0-rc.0", 19 - "@tauri-apps/plugin-shell": "2.0.0-rc.0", 20 - "@types/animejs": "^3.1.13", 21 - "animejs": "^3.2.2", 22 - "solid-js": "^1.9.7" 15 + "@tauri-apps/api": "2.9.0", 16 + "@tauri-apps/plugin-deep-link": "^2.4.5", 17 + "@tauri-apps/plugin-http": "2.5.4", 18 + "@tauri-apps/plugin-process": "2.3.1", 19 + "@tauri-apps/plugin-shell": "2.3.3", 20 + "animejs": "^4.2.2", 21 + "solid-js": "^1.9.10" 23 22 }, 24 23 "devDependencies": { 25 - "@tauri-apps/cli": "2.0.0-rc.5", 26 - "typescript": "^5.8.3", 27 - "vite": "^5.4.19", 28 - "vite-plugin-solid": "^2.11.8" 24 + "@tauri-apps/cli": "2.9.3", 25 + "@types/animejs": "^3.1.13", 26 + "typescript": "^5.9.3", 27 + "vite": "^7.2.2", 28 + "vite-plugin-solid": "^2.11.10" 29 29 } 30 30 }
+562 -464
pnpm-lock.yaml
··· 9 9 .: 10 10 dependencies: 11 11 '@tauri-apps/api': 12 - specifier: 2.0.0-rc.0 13 - version: 2.0.0-rc.0 12 + specifier: 2.9.0 13 + version: 2.9.0 14 14 '@tauri-apps/plugin-deep-link': 15 - specifier: ^2.4.1 16 - version: 2.4.1 15 + specifier: ^2.4.5 16 + version: 2.4.5 17 17 '@tauri-apps/plugin-http': 18 - specifier: 2.0.0-rc.1 19 - version: 2.0.0-rc.1 18 + specifier: 2.5.4 19 + version: 2.5.4 20 20 '@tauri-apps/plugin-process': 21 - specifier: 2.0.0-rc.0 22 - version: 2.0.0-rc.0 21 + specifier: 2.3.1 22 + version: 2.3.1 23 23 '@tauri-apps/plugin-shell': 24 - specifier: 2.0.0-rc.0 25 - version: 2.0.0-rc.0 26 - '@types/animejs': 27 - specifier: ^3.1.13 28 - version: 3.1.13 24 + specifier: 2.3.3 25 + version: 2.3.3 29 26 animejs: 30 - specifier: ^3.2.2 31 - version: 3.2.2 27 + specifier: ^4.2.2 28 + version: 4.2.2 32 29 solid-js: 33 - specifier: ^1.9.7 34 - version: 1.9.7 30 + specifier: ^1.9.10 31 + version: 1.9.10 35 32 devDependencies: 36 33 '@tauri-apps/cli': 37 - specifier: 2.0.0-rc.5 38 - version: 2.0.0-rc.5 34 + specifier: 2.9.3 35 + version: 2.9.3 36 + '@types/animejs': 37 + specifier: ^3.1.13 38 + version: 3.1.13 39 39 typescript: 40 - specifier: ^5.8.3 41 - version: 5.8.3 40 + specifier: ^5.9.3 41 + version: 5.9.3 42 42 vite: 43 - specifier: ^5.4.19 44 - version: 5.4.19 43 + specifier: ^7.2.2 44 + version: 7.2.2 45 45 vite-plugin-solid: 46 - specifier: ^2.11.8 47 - version: 2.11.8(solid-js@1.9.7)(vite@5.4.19) 46 + specifier: ^2.11.10 47 + version: 2.11.10(solid-js@1.9.10)(vite@7.2.2) 48 48 49 49 packages: 50 50 51 - '@ampproject/remapping@2.3.0': 52 - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 53 - engines: {node: '>=6.0.0'} 54 - 55 51 '@babel/code-frame@7.27.1': 56 52 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 57 53 engines: {node: '>=6.9.0'} 58 54 59 - '@babel/compat-data@7.28.0': 60 - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} 55 + '@babel/compat-data@7.28.5': 56 + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} 61 57 engines: {node: '>=6.9.0'} 62 58 63 - '@babel/core@7.28.0': 64 - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} 59 + '@babel/core@7.28.5': 60 + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} 65 61 engines: {node: '>=6.9.0'} 66 62 67 - '@babel/generator@7.28.0': 68 - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} 63 + '@babel/generator@7.28.5': 64 + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 69 65 engines: {node: '>=6.9.0'} 70 66 71 67 '@babel/helper-compilation-targets@7.27.2': ··· 84 80 resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 85 81 engines: {node: '>=6.9.0'} 86 82 87 - '@babel/helper-module-transforms@7.27.3': 88 - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} 83 + '@babel/helper-module-transforms@7.28.3': 84 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 89 85 engines: {node: '>=6.9.0'} 90 86 peerDependencies: 91 87 '@babel/core': ^7.0.0 ··· 98 94 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 99 95 engines: {node: '>=6.9.0'} 100 96 101 - '@babel/helper-validator-identifier@7.27.1': 102 - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 97 + '@babel/helper-validator-identifier@7.28.5': 98 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 103 99 engines: {node: '>=6.9.0'} 104 100 105 101 '@babel/helper-validator-option@7.27.1': 106 102 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 107 103 engines: {node: '>=6.9.0'} 108 104 109 - '@babel/helpers@7.28.2': 110 - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} 105 + '@babel/helpers@7.28.4': 106 + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 111 107 engines: {node: '>=6.9.0'} 112 108 113 - '@babel/parser@7.28.0': 114 - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} 109 + '@babel/parser@7.28.5': 110 + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 115 111 engines: {node: '>=6.0.0'} 116 112 hasBin: true 117 113 ··· 125 121 resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 126 122 engines: {node: '>=6.9.0'} 127 123 128 - '@babel/traverse@7.28.0': 129 - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} 124 + '@babel/traverse@7.28.5': 125 + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} 130 126 engines: {node: '>=6.9.0'} 131 127 132 - '@babel/types@7.28.2': 133 - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 128 + '@babel/types@7.28.5': 129 + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 134 130 engines: {node: '>=6.9.0'} 135 131 136 - '@esbuild/aix-ppc64@0.21.5': 137 - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 138 - engines: {node: '>=12'} 132 + '@esbuild/aix-ppc64@0.25.12': 133 + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 134 + engines: {node: '>=18'} 139 135 cpu: [ppc64] 140 136 os: [aix] 141 137 142 - '@esbuild/android-arm64@0.21.5': 143 - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 144 - engines: {node: '>=12'} 138 + '@esbuild/android-arm64@0.25.12': 139 + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 140 + engines: {node: '>=18'} 145 141 cpu: [arm64] 146 142 os: [android] 147 143 148 - '@esbuild/android-arm@0.21.5': 149 - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 150 - engines: {node: '>=12'} 144 + '@esbuild/android-arm@0.25.12': 145 + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 146 + engines: {node: '>=18'} 151 147 cpu: [arm] 152 148 os: [android] 153 149 154 - '@esbuild/android-x64@0.21.5': 155 - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 156 - engines: {node: '>=12'} 150 + '@esbuild/android-x64@0.25.12': 151 + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 152 + engines: {node: '>=18'} 157 153 cpu: [x64] 158 154 os: [android] 159 155 160 - '@esbuild/darwin-arm64@0.21.5': 161 - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 162 - engines: {node: '>=12'} 156 + '@esbuild/darwin-arm64@0.25.12': 157 + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 158 + engines: {node: '>=18'} 163 159 cpu: [arm64] 164 160 os: [darwin] 165 161 166 - '@esbuild/darwin-x64@0.21.5': 167 - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 168 - engines: {node: '>=12'} 162 + '@esbuild/darwin-x64@0.25.12': 163 + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 164 + engines: {node: '>=18'} 169 165 cpu: [x64] 170 166 os: [darwin] 171 167 172 - '@esbuild/freebsd-arm64@0.21.5': 173 - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 174 - engines: {node: '>=12'} 168 + '@esbuild/freebsd-arm64@0.25.12': 169 + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 170 + engines: {node: '>=18'} 175 171 cpu: [arm64] 176 172 os: [freebsd] 177 173 178 - '@esbuild/freebsd-x64@0.21.5': 179 - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 180 - engines: {node: '>=12'} 174 + '@esbuild/freebsd-x64@0.25.12': 175 + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 176 + engines: {node: '>=18'} 181 177 cpu: [x64] 182 178 os: [freebsd] 183 179 184 - '@esbuild/linux-arm64@0.21.5': 185 - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 186 - engines: {node: '>=12'} 180 + '@esbuild/linux-arm64@0.25.12': 181 + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 182 + engines: {node: '>=18'} 187 183 cpu: [arm64] 188 184 os: [linux] 189 185 190 - '@esbuild/linux-arm@0.21.5': 191 - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 192 - engines: {node: '>=12'} 186 + '@esbuild/linux-arm@0.25.12': 187 + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 188 + engines: {node: '>=18'} 193 189 cpu: [arm] 194 190 os: [linux] 195 191 196 - '@esbuild/linux-ia32@0.21.5': 197 - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 198 - engines: {node: '>=12'} 192 + '@esbuild/linux-ia32@0.25.12': 193 + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 194 + engines: {node: '>=18'} 199 195 cpu: [ia32] 200 196 os: [linux] 201 197 202 - '@esbuild/linux-loong64@0.21.5': 203 - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 204 - engines: {node: '>=12'} 198 + '@esbuild/linux-loong64@0.25.12': 199 + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 200 + engines: {node: '>=18'} 205 201 cpu: [loong64] 206 202 os: [linux] 207 203 208 - '@esbuild/linux-mips64el@0.21.5': 209 - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 210 - engines: {node: '>=12'} 204 + '@esbuild/linux-mips64el@0.25.12': 205 + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 206 + engines: {node: '>=18'} 211 207 cpu: [mips64el] 212 208 os: [linux] 213 209 214 - '@esbuild/linux-ppc64@0.21.5': 215 - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 216 - engines: {node: '>=12'} 210 + '@esbuild/linux-ppc64@0.25.12': 211 + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 212 + engines: {node: '>=18'} 217 213 cpu: [ppc64] 218 214 os: [linux] 219 215 220 - '@esbuild/linux-riscv64@0.21.5': 221 - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 222 - engines: {node: '>=12'} 216 + '@esbuild/linux-riscv64@0.25.12': 217 + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 218 + engines: {node: '>=18'} 223 219 cpu: [riscv64] 224 220 os: [linux] 225 221 226 - '@esbuild/linux-s390x@0.21.5': 227 - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 228 - engines: {node: '>=12'} 222 + '@esbuild/linux-s390x@0.25.12': 223 + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 224 + engines: {node: '>=18'} 229 225 cpu: [s390x] 230 226 os: [linux] 231 227 232 - '@esbuild/linux-x64@0.21.5': 233 - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 234 - engines: {node: '>=12'} 228 + '@esbuild/linux-x64@0.25.12': 229 + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 230 + engines: {node: '>=18'} 235 231 cpu: [x64] 236 232 os: [linux] 237 233 238 - '@esbuild/netbsd-x64@0.21.5': 239 - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 240 - engines: {node: '>=12'} 234 + '@esbuild/netbsd-arm64@0.25.12': 235 + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 236 + engines: {node: '>=18'} 237 + cpu: [arm64] 238 + os: [netbsd] 239 + 240 + '@esbuild/netbsd-x64@0.25.12': 241 + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 242 + engines: {node: '>=18'} 241 243 cpu: [x64] 242 244 os: [netbsd] 243 245 244 - '@esbuild/openbsd-x64@0.21.5': 245 - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 246 - engines: {node: '>=12'} 246 + '@esbuild/openbsd-arm64@0.25.12': 247 + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 248 + engines: {node: '>=18'} 249 + cpu: [arm64] 250 + os: [openbsd] 251 + 252 + '@esbuild/openbsd-x64@0.25.12': 253 + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 254 + engines: {node: '>=18'} 247 255 cpu: [x64] 248 256 os: [openbsd] 249 257 250 - '@esbuild/sunos-x64@0.21.5': 251 - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 252 - engines: {node: '>=12'} 258 + '@esbuild/openharmony-arm64@0.25.12': 259 + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 260 + engines: {node: '>=18'} 261 + cpu: [arm64] 262 + os: [openharmony] 263 + 264 + '@esbuild/sunos-x64@0.25.12': 265 + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 266 + engines: {node: '>=18'} 253 267 cpu: [x64] 254 268 os: [sunos] 255 269 256 - '@esbuild/win32-arm64@0.21.5': 257 - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 258 - engines: {node: '>=12'} 270 + '@esbuild/win32-arm64@0.25.12': 271 + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 272 + engines: {node: '>=18'} 259 273 cpu: [arm64] 260 274 os: [win32] 261 275 262 - '@esbuild/win32-ia32@0.21.5': 263 - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 264 - engines: {node: '>=12'} 276 + '@esbuild/win32-ia32@0.25.12': 277 + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 278 + engines: {node: '>=18'} 265 279 cpu: [ia32] 266 280 os: [win32] 267 281 268 - '@esbuild/win32-x64@0.21.5': 269 - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 270 - engines: {node: '>=12'} 282 + '@esbuild/win32-x64@0.25.12': 283 + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 284 + engines: {node: '>=18'} 271 285 cpu: [x64] 272 286 os: [win32] 273 287 274 - '@jridgewell/gen-mapping@0.3.12': 275 - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} 288 + '@jridgewell/gen-mapping@0.3.13': 289 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 290 + 291 + '@jridgewell/remapping@2.3.5': 292 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 276 293 277 294 '@jridgewell/resolve-uri@3.1.2': 278 295 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 279 296 engines: {node: '>=6.0.0'} 280 297 281 - '@jridgewell/sourcemap-codec@1.5.4': 282 - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} 298 + '@jridgewell/sourcemap-codec@1.5.5': 299 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 283 300 284 - '@jridgewell/trace-mapping@0.3.29': 285 - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} 301 + '@jridgewell/trace-mapping@0.3.31': 302 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 286 303 287 - '@rollup/rollup-android-arm-eabi@4.46.2': 288 - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} 304 + '@rollup/rollup-android-arm-eabi@4.52.5': 305 + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 289 306 cpu: [arm] 290 307 os: [android] 291 308 292 - '@rollup/rollup-android-arm64@4.46.2': 293 - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} 309 + '@rollup/rollup-android-arm64@4.52.5': 310 + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 294 311 cpu: [arm64] 295 312 os: [android] 296 313 297 - '@rollup/rollup-darwin-arm64@4.46.2': 298 - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} 314 + '@rollup/rollup-darwin-arm64@4.52.5': 315 + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 299 316 cpu: [arm64] 300 317 os: [darwin] 301 318 302 - '@rollup/rollup-darwin-x64@4.46.2': 303 - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} 319 + '@rollup/rollup-darwin-x64@4.52.5': 320 + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 304 321 cpu: [x64] 305 322 os: [darwin] 306 323 307 - '@rollup/rollup-freebsd-arm64@4.46.2': 308 - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} 324 + '@rollup/rollup-freebsd-arm64@4.52.5': 325 + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 309 326 cpu: [arm64] 310 327 os: [freebsd] 311 328 312 - '@rollup/rollup-freebsd-x64@4.46.2': 313 - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} 329 + '@rollup/rollup-freebsd-x64@4.52.5': 330 + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 314 331 cpu: [x64] 315 332 os: [freebsd] 316 333 317 - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': 318 - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} 334 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 335 + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 319 336 cpu: [arm] 320 337 os: [linux] 321 338 322 - '@rollup/rollup-linux-arm-musleabihf@4.46.2': 323 - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} 339 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 340 + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 324 341 cpu: [arm] 325 342 os: [linux] 326 343 327 - '@rollup/rollup-linux-arm64-gnu@4.46.2': 328 - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} 344 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 345 + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 329 346 cpu: [arm64] 330 347 os: [linux] 331 348 332 - '@rollup/rollup-linux-arm64-musl@4.46.2': 333 - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} 349 + '@rollup/rollup-linux-arm64-musl@4.52.5': 350 + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 334 351 cpu: [arm64] 335 352 os: [linux] 336 353 337 - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': 338 - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} 354 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 355 + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 339 356 cpu: [loong64] 340 357 os: [linux] 341 358 342 - '@rollup/rollup-linux-ppc64-gnu@4.46.2': 343 - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} 359 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 360 + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 344 361 cpu: [ppc64] 345 362 os: [linux] 346 363 347 - '@rollup/rollup-linux-riscv64-gnu@4.46.2': 348 - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} 364 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 365 + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 349 366 cpu: [riscv64] 350 367 os: [linux] 351 368 352 - '@rollup/rollup-linux-riscv64-musl@4.46.2': 353 - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} 369 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 370 + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 354 371 cpu: [riscv64] 355 372 os: [linux] 356 373 357 - '@rollup/rollup-linux-s390x-gnu@4.46.2': 358 - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} 374 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 375 + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 359 376 cpu: [s390x] 360 377 os: [linux] 361 378 362 - '@rollup/rollup-linux-x64-gnu@4.46.2': 363 - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} 379 + '@rollup/rollup-linux-x64-gnu@4.52.5': 380 + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 364 381 cpu: [x64] 365 382 os: [linux] 366 383 367 - '@rollup/rollup-linux-x64-musl@4.46.2': 368 - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} 384 + '@rollup/rollup-linux-x64-musl@4.52.5': 385 + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 369 386 cpu: [x64] 370 387 os: [linux] 371 388 372 - '@rollup/rollup-win32-arm64-msvc@4.46.2': 373 - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} 389 + '@rollup/rollup-openharmony-arm64@4.52.5': 390 + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 391 + cpu: [arm64] 392 + os: [openharmony] 393 + 394 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 395 + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 374 396 cpu: [arm64] 375 397 os: [win32] 376 398 377 - '@rollup/rollup-win32-ia32-msvc@4.46.2': 378 - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} 399 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 400 + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 379 401 cpu: [ia32] 380 402 os: [win32] 381 403 382 - '@rollup/rollup-win32-x64-msvc@4.46.2': 383 - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} 404 + '@rollup/rollup-win32-x64-gnu@4.52.5': 405 + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 384 406 cpu: [x64] 385 407 os: [win32] 386 408 387 - '@tauri-apps/api@2.0.0-rc.0': 388 - resolution: {integrity: sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==} 389 - engines: {node: '>= 18.18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} 409 + '@rollup/rollup-win32-x64-msvc@4.52.5': 410 + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 411 + cpu: [x64] 412 + os: [win32] 390 413 391 - '@tauri-apps/api@2.7.0': 392 - resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==} 414 + '@tauri-apps/api@2.9.0': 415 + resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==} 393 416 394 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 395 - resolution: {integrity: sha512-EoduJ5SeMfBKCe7I291JBH+lkrf2E0+mQF1rP+Jq4CjWPer11OeEcUSFtHURB3Z3ItzObQ7ALPulMGhMe6E9rg==} 417 + '@tauri-apps/cli-darwin-arm64@2.9.3': 418 + resolution: {integrity: sha512-W8FQXZXQmQ0Fmj9UJXNrm2mLdIaLLriKVY7o/FzmizyIKTPIvHjfZALTNybbpTQRbJvKoGHLrW1DNzAWVDWJYg==} 396 419 engines: {node: '>= 10'} 397 420 cpu: [arm64] 398 421 os: [darwin] 399 422 400 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 401 - resolution: {integrity: sha512-GdphvNgQWAbVGoD6e2Z5auWFXBcmmbhiwf9UNoKpBQPLfFO6EEJHjXbACr/hAZsqT0nNpZLRoh/5v5HGTmU0XQ==} 423 + '@tauri-apps/cli-darwin-x64@2.9.3': 424 + resolution: {integrity: sha512-zDwu40rlshijt3TU6aRvzPUyVpapsx1sNfOlreDMTaMelQLHl6YoQzSRpLHYwrHrhimxyX2uDqnKIiuGel0Lhg==} 402 425 engines: {node: '>= 10'} 403 426 cpu: [x64] 404 427 os: [darwin] 405 428 406 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 407 - resolution: {integrity: sha512-S47KwAfyRsO2qTqSoadHP4a1cjO9kfQi4QWkoaDjb0BEETdrhPM94qp43cnKP7QWW+msOToMTdlks9HYlhRUww==} 429 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 430 + resolution: {integrity: sha512-+Oc2OfcTRwYtW93VJqd/HOk77buORwC9IToj/qsEvM7bTMq6Kda4alpZprzwrCHYANSw+zD8PgjJdljTpe4p+g==} 408 431 engines: {node: '>= 10'} 409 432 cpu: [arm] 410 433 os: [linux] 411 434 412 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 413 - resolution: {integrity: sha512-Ii9aP/24Rtlci5MaeSaqb6JOLt3cUBA4z4XmGz5VOLLZ+ntRxpfd3xNpLki04V2MOgbAu9BxLAp5UTzELc1/Rg==} 435 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 436 + resolution: {integrity: sha512-59GqU/J1n9wFyAtleoQOaU0oVIo+kwQynEw4meFDoKRXszKGor6lTsbsS3r0QKLSPbc0o/yYGJhqqCtkYjb/eg==} 414 437 engines: {node: '>= 10'} 415 438 cpu: [arm64] 416 439 os: [linux] 417 440 418 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 419 - resolution: {integrity: sha512-noV2sDusI+DsEHl0uMOZ04sQmj65Jo9yjfSg2iv1fnfjBYVbwi6Qj/MaCqyApXESQrpv1XZB3kYI+CkyPnjj2Q==} 441 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 442 + resolution: {integrity: sha512-fzvG+jEn5/iYGNH6Z2IRMheYFC4pJdXa19BR9fFm6Bdn2cuajRLDKdUcEME/DCtwqclphXtFZTrT4oezY5vI/A==} 420 443 engines: {node: '>= 10'} 421 444 cpu: [arm64] 422 445 os: [linux] 423 446 424 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 425 - resolution: {integrity: sha512-iTe9gKO+qgFRjU1sxBvbI8bIRbkOedWvFm/yh8RFi1iJcFwbVnsHWQ8z7BwoNMJLnL2dseZgrGntmS5n9/xSSQ==} 447 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 448 + resolution: {integrity: sha512-qV8DZXI/fZwawk6T3Th1g6smiNC2KeQTk7XFgKvqZ6btC01z3UTsQmNGvI602zwm3Ld1TBZb4+rEWu2QmQimmw==} 449 + engines: {node: '>= 10'} 450 + cpu: [riscv64] 451 + os: [linux] 452 + 453 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 454 + resolution: {integrity: sha512-tquyEONCNRfqEBWEe4eAHnxFN5yY5lFkCuD4w79XLIovUxVftQ684+xLp7zkhntkt4y20SMj2AgJa/+MOlx4Kg==} 426 455 engines: {node: '>= 10'} 427 456 cpu: [x64] 428 457 os: [linux] 429 458 430 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 431 - resolution: {integrity: sha512-R7EyfvfdMtRAKC3QxPn5jVGEH56R4g6hSnR5xXkFnEpioND7SNru5UMBGgseGJ22h/hdjFfqS2vc19291gkVsg==} 459 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 460 + resolution: {integrity: sha512-v2cBIB/6ji8DL+aiL5QUykU3ZO8OoJGyx50/qv2HQVzkf85KdaYSis3D/oVRemN/pcDz+vyCnnL3XnzFnDl4JQ==} 432 461 engines: {node: '>= 10'} 433 462 cpu: [x64] 434 463 os: [linux] 435 464 436 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 437 - resolution: {integrity: sha512-EE7CF//hMWsVZpu9IWXGLDDdMhAiNfHwfLnW4Na1INHKBBb/ynhOd4gKRC3Mi/kgcMfXJAq0nBJFw1mal1q7jg==} 465 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 466 + resolution: {integrity: sha512-ZGvBy7nvrHPbE0HeKp/ioaiw8bNgAHxWnb7JRZ4/G0A+oFj0SeSFxl9k5uU6FKnM7bHM23Gd1oeaDex9g5Fceg==} 438 467 engines: {node: '>= 10'} 439 468 cpu: [arm64] 440 469 os: [win32] 441 470 442 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 443 - resolution: {integrity: sha512-zJosPEw1X1H9nTNsrYVSypRLdMLOiLAY8hlBrgsmw7dmN61lOMLyItWsbiAezYeKIpaFeADurR+5qMHHwzbqeg==} 471 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 472 + resolution: {integrity: sha512-UsgIwOnpCoY9NK9/65QiwgmWVIE80LE7SwRYVblGtmlY9RYfsYvpbItwsovA/AcHMTiO+OCvS/q9yLeqS3m6Sg==} 444 473 engines: {node: '>= 10'} 445 474 cpu: [ia32] 446 475 os: [win32] 447 476 448 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 449 - resolution: {integrity: sha512-PqxbL/e6GraazdwEKN1oX33gYCRf0ns6yuaxHafHM5+Zsv0MZpyPTPLDot/JLKvNBefk6QXZn5fKAIETVtQaGg==} 477 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 478 + resolution: {integrity: sha512-fmw7NrrHE5m49idCvJAx9T9bsupjdJ0a3p3DPCNCZRGANU6R1tA1L+KTlVuUtdAldX2NqU/9UPo2SCslYKgJHQ==} 450 479 engines: {node: '>= 10'} 451 480 cpu: [x64] 452 481 os: [win32] 453 482 454 - '@tauri-apps/cli@2.0.0-rc.5': 455 - resolution: {integrity: sha512-JtFfJg8ZNOrj+S+8RKpcrNIcU5hw0X8JSNs2tUjQq0OZgqIGnRSILYjg7BaZDPEakQXUKsDEufbjbYVNJDIp8g==} 483 + '@tauri-apps/cli@2.9.3': 484 + resolution: {integrity: sha512-BQ7iLUXTQcyG1PpzLWeVSmBCedYDpnA/6Cm/kRFGtqjTf/eVUlyYO5S2ee07tLum3nWwDBWTGFZeruO8yEukfA==} 456 485 engines: {node: '>= 10'} 457 486 hasBin: true 458 487 459 - '@tauri-apps/plugin-deep-link@2.4.1': 460 - resolution: {integrity: sha512-I8Bo+spcAKGhIIJ1qN/gapp/Ot3mosQL98znxr975Zn2ODAkUZ++BQ9FnTpR7PDwfIl5ANSGdIW/YU01zVTcJw==} 488 + '@tauri-apps/plugin-deep-link@2.4.5': 489 + resolution: {integrity: sha512-Zf2RTj1D9IQQ45/jqW8XTKvql24HqlPjcpv0mV/O2jHQkNe11HOTZBVj6IK37qs+MWV7xZzcmazx/QVZnhAwaQ==} 461 490 462 - '@tauri-apps/plugin-http@2.0.0-rc.1': 463 - resolution: {integrity: sha512-j4WdTEKx0CFa6u8ubke0mo75pCrnu6XtrFtvjsh+zjuNYgMG/l0+A1woWXHm73f2Levskhs+KbKcLQA/nr8k2w==} 491 + '@tauri-apps/plugin-http@2.5.4': 492 + resolution: {integrity: sha512-/i4U/9za3mrytTgfRn5RHneKubZE/dwRmshYwyMvNRlkWjvu1m4Ma72kcbVJMZFGXpkbl+qLyWMGrihtWB76Zg==} 464 493 465 - '@tauri-apps/plugin-process@2.0.0-rc.0': 466 - resolution: {integrity: sha512-Z12D/kmQzG1vCVf+jLXPhPDUA0pEjFrsg4p0uwO2sotVLM9287IuTM+aIz9cuAYOxFLKcsnDG7amSCL9IfA1gw==} 494 + '@tauri-apps/plugin-process@2.3.1': 495 + resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} 467 496 468 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 469 - resolution: {integrity: sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==} 497 + '@tauri-apps/plugin-shell@2.3.3': 498 + resolution: {integrity: sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==} 470 499 471 500 '@types/animejs@3.1.13': 472 501 resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==} ··· 480 509 '@types/babel__template@7.4.4': 481 510 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 482 511 483 - '@types/babel__traverse@7.20.7': 484 - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} 512 + '@types/babel__traverse@7.28.0': 513 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 485 514 486 515 '@types/estree@1.0.8': 487 516 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 488 517 489 - animejs@3.2.2: 490 - resolution: {integrity: sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ==} 518 + animejs@4.2.2: 519 + resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==} 491 520 492 - babel-plugin-jsx-dom-expressions@0.39.8: 493 - resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} 521 + babel-plugin-jsx-dom-expressions@0.40.3: 522 + resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==} 494 523 peerDependencies: 495 524 '@babel/core': ^7.20.12 496 525 497 - babel-preset-solid@1.9.6: 498 - resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} 526 + babel-preset-solid@1.9.10: 527 + resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==} 499 528 peerDependencies: 500 529 '@babel/core': ^7.0.0 530 + solid-js: ^1.9.10 531 + peerDependenciesMeta: 532 + solid-js: 533 + optional: true 501 534 502 - browserslist@4.25.1: 503 - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} 535 + baseline-browser-mapping@2.8.25: 536 + resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==} 537 + hasBin: true 538 + 539 + browserslist@4.27.0: 540 + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} 504 541 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 505 542 hasBin: true 506 543 507 - caniuse-lite@1.0.30001731: 508 - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} 544 + caniuse-lite@1.0.30001754: 545 + resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} 509 546 510 547 convert-source-map@2.0.0: 511 548 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} ··· 513 550 csstype@3.1.3: 514 551 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 515 552 516 - debug@4.4.1: 517 - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 553 + debug@4.4.3: 554 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 518 555 engines: {node: '>=6.0'} 519 556 peerDependencies: 520 557 supports-color: '*' ··· 522 559 supports-color: 523 560 optional: true 524 561 525 - electron-to-chromium@1.5.193: 526 - resolution: {integrity: sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA==} 562 + electron-to-chromium@1.5.248: 563 + resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==} 527 564 528 565 entities@6.0.1: 529 566 resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 530 567 engines: {node: '>=0.12'} 531 568 532 - esbuild@0.21.5: 533 - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 534 - engines: {node: '>=12'} 569 + esbuild@0.25.12: 570 + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 571 + engines: {node: '>=18'} 535 572 hasBin: true 536 573 537 574 escalade@3.2.0: 538 575 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 539 576 engines: {node: '>=6'} 577 + 578 + fdir@6.5.0: 579 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 580 + engines: {node: '>=12.0.0'} 581 + peerDependencies: 582 + picomatch: ^3 || ^4 583 + peerDependenciesMeta: 584 + picomatch: 585 + optional: true 540 586 541 587 fsevents@2.3.3: 542 588 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} ··· 582 628 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 583 629 hasBin: true 584 630 585 - node-releases@2.0.19: 586 - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 631 + node-releases@2.0.27: 632 + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} 587 633 588 634 parse5@7.3.0: 589 635 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} ··· 591 637 picocolors@1.1.1: 592 638 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 593 639 640 + picomatch@4.0.3: 641 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 642 + engines: {node: '>=12'} 643 + 594 644 postcss@8.5.6: 595 645 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 596 646 engines: {node: ^10 || ^12 || >=14} 597 647 598 - rollup@4.46.2: 599 - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} 648 + rollup@4.52.5: 649 + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 600 650 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 601 651 hasBin: true 602 652 ··· 604 654 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 605 655 hasBin: true 606 656 607 - seroval-plugins@1.3.2: 608 - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} 657 + seroval-plugins@1.3.3: 658 + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} 609 659 engines: {node: '>=10'} 610 660 peerDependencies: 611 661 seroval: ^1.0 ··· 614 664 resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 615 665 engines: {node: '>=10'} 616 666 617 - solid-js@1.9.7: 618 - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} 667 + solid-js@1.9.10: 668 + resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} 619 669 620 670 solid-refresh@0.6.3: 621 671 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 626 676 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 627 677 engines: {node: '>=0.10.0'} 628 678 629 - typescript@5.8.3: 630 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 679 + tinyglobby@0.2.15: 680 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 681 + engines: {node: '>=12.0.0'} 682 + 683 + typescript@5.9.3: 684 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 631 685 engines: {node: '>=14.17'} 632 686 hasBin: true 633 687 634 - update-browserslist-db@1.1.3: 635 - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 688 + update-browserslist-db@1.1.4: 689 + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} 636 690 hasBin: true 637 691 peerDependencies: 638 692 browserslist: '>= 4.21.0' 639 693 640 - validate-html-nesting@1.2.3: 641 - resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} 642 - 643 - vite-plugin-solid@2.11.8: 644 - resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==} 694 + vite-plugin-solid@2.11.10: 695 + resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==} 645 696 peerDependencies: 646 697 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 647 698 solid-js: ^1.7.2 ··· 650 701 '@testing-library/jest-dom': 651 702 optional: true 652 703 653 - vite@5.4.19: 654 - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} 655 - engines: {node: ^18.0.0 || >=20.0.0} 704 + vite@7.2.2: 705 + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} 706 + engines: {node: ^20.19.0 || >=22.12.0} 656 707 hasBin: true 657 708 peerDependencies: 658 - '@types/node': ^18.0.0 || >=20.0.0 659 - less: '*' 709 + '@types/node': ^20.19.0 || >=22.12.0 710 + jiti: '>=1.21.0' 711 + less: ^4.0.0 660 712 lightningcss: ^1.21.0 661 - sass: '*' 662 - sass-embedded: '*' 663 - stylus: '*' 664 - sugarss: '*' 665 - terser: ^5.4.0 713 + sass: ^1.70.0 714 + sass-embedded: ^1.70.0 715 + stylus: '>=0.54.8' 716 + sugarss: ^5.0.0 717 + terser: ^5.16.0 718 + tsx: ^4.8.1 719 + yaml: ^2.4.2 666 720 peerDependenciesMeta: 667 721 '@types/node': 722 + optional: true 723 + jiti: 668 724 optional: true 669 725 less: 670 726 optional: true ··· 679 735 sugarss: 680 736 optional: true 681 737 terser: 738 + optional: true 739 + tsx: 740 + optional: true 741 + yaml: 682 742 optional: true 683 743 684 744 vitefu@1.1.1: ··· 694 754 695 755 snapshots: 696 756 697 - '@ampproject/remapping@2.3.0': 698 - dependencies: 699 - '@jridgewell/gen-mapping': 0.3.12 700 - '@jridgewell/trace-mapping': 0.3.29 701 - 702 757 '@babel/code-frame@7.27.1': 703 758 dependencies: 704 - '@babel/helper-validator-identifier': 7.27.1 759 + '@babel/helper-validator-identifier': 7.28.5 705 760 js-tokens: 4.0.0 706 761 picocolors: 1.1.1 707 762 708 - '@babel/compat-data@7.28.0': {} 763 + '@babel/compat-data@7.28.5': {} 709 764 710 - '@babel/core@7.28.0': 765 + '@babel/core@7.28.5': 711 766 dependencies: 712 - '@ampproject/remapping': 2.3.0 713 767 '@babel/code-frame': 7.27.1 714 - '@babel/generator': 7.28.0 768 + '@babel/generator': 7.28.5 715 769 '@babel/helper-compilation-targets': 7.27.2 716 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) 717 - '@babel/helpers': 7.28.2 718 - '@babel/parser': 7.28.0 770 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) 771 + '@babel/helpers': 7.28.4 772 + '@babel/parser': 7.28.5 719 773 '@babel/template': 7.27.2 720 - '@babel/traverse': 7.28.0 721 - '@babel/types': 7.28.2 774 + '@babel/traverse': 7.28.5 775 + '@babel/types': 7.28.5 776 + '@jridgewell/remapping': 2.3.5 722 777 convert-source-map: 2.0.0 723 - debug: 4.4.1 778 + debug: 4.4.3 724 779 gensync: 1.0.0-beta.2 725 780 json5: 2.2.3 726 781 semver: 6.3.1 727 782 transitivePeerDependencies: 728 783 - supports-color 729 784 730 - '@babel/generator@7.28.0': 785 + '@babel/generator@7.28.5': 731 786 dependencies: 732 - '@babel/parser': 7.28.0 733 - '@babel/types': 7.28.2 734 - '@jridgewell/gen-mapping': 0.3.12 735 - '@jridgewell/trace-mapping': 0.3.29 787 + '@babel/parser': 7.28.5 788 + '@babel/types': 7.28.5 789 + '@jridgewell/gen-mapping': 0.3.13 790 + '@jridgewell/trace-mapping': 0.3.31 736 791 jsesc: 3.1.0 737 792 738 793 '@babel/helper-compilation-targets@7.27.2': 739 794 dependencies: 740 - '@babel/compat-data': 7.28.0 795 + '@babel/compat-data': 7.28.5 741 796 '@babel/helper-validator-option': 7.27.1 742 - browserslist: 4.25.1 797 + browserslist: 4.27.0 743 798 lru-cache: 5.1.1 744 799 semver: 6.3.1 745 800 ··· 747 802 748 803 '@babel/helper-module-imports@7.18.6': 749 804 dependencies: 750 - '@babel/types': 7.28.2 805 + '@babel/types': 7.28.5 751 806 752 807 '@babel/helper-module-imports@7.27.1': 753 808 dependencies: 754 - '@babel/traverse': 7.28.0 755 - '@babel/types': 7.28.2 809 + '@babel/traverse': 7.28.5 810 + '@babel/types': 7.28.5 756 811 transitivePeerDependencies: 757 812 - supports-color 758 813 759 - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': 814 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': 760 815 dependencies: 761 - '@babel/core': 7.28.0 816 + '@babel/core': 7.28.5 762 817 '@babel/helper-module-imports': 7.27.1 763 - '@babel/helper-validator-identifier': 7.27.1 764 - '@babel/traverse': 7.28.0 818 + '@babel/helper-validator-identifier': 7.28.5 819 + '@babel/traverse': 7.28.5 765 820 transitivePeerDependencies: 766 821 - supports-color 767 822 ··· 769 824 770 825 '@babel/helper-string-parser@7.27.1': {} 771 826 772 - '@babel/helper-validator-identifier@7.27.1': {} 827 + '@babel/helper-validator-identifier@7.28.5': {} 773 828 774 829 '@babel/helper-validator-option@7.27.1': {} 775 830 776 - '@babel/helpers@7.28.2': 831 + '@babel/helpers@7.28.4': 777 832 dependencies: 778 833 '@babel/template': 7.27.2 779 - '@babel/types': 7.28.2 834 + '@babel/types': 7.28.5 780 835 781 - '@babel/parser@7.28.0': 836 + '@babel/parser@7.28.5': 782 837 dependencies: 783 - '@babel/types': 7.28.2 838 + '@babel/types': 7.28.5 784 839 785 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': 840 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': 786 841 dependencies: 787 - '@babel/core': 7.28.0 842 + '@babel/core': 7.28.5 788 843 '@babel/helper-plugin-utils': 7.27.1 789 844 790 845 '@babel/template@7.27.2': 791 846 dependencies: 792 847 '@babel/code-frame': 7.27.1 793 - '@babel/parser': 7.28.0 794 - '@babel/types': 7.28.2 848 + '@babel/parser': 7.28.5 849 + '@babel/types': 7.28.5 795 850 796 - '@babel/traverse@7.28.0': 851 + '@babel/traverse@7.28.5': 797 852 dependencies: 798 853 '@babel/code-frame': 7.27.1 799 - '@babel/generator': 7.28.0 854 + '@babel/generator': 7.28.5 800 855 '@babel/helper-globals': 7.28.0 801 - '@babel/parser': 7.28.0 856 + '@babel/parser': 7.28.5 802 857 '@babel/template': 7.27.2 803 - '@babel/types': 7.28.2 804 - debug: 4.4.1 858 + '@babel/types': 7.28.5 859 + debug: 4.4.3 805 860 transitivePeerDependencies: 806 861 - supports-color 807 862 808 - '@babel/types@7.28.2': 863 + '@babel/types@7.28.5': 809 864 dependencies: 810 865 '@babel/helper-string-parser': 7.27.1 811 - '@babel/helper-validator-identifier': 7.27.1 866 + '@babel/helper-validator-identifier': 7.28.5 867 + 868 + '@esbuild/aix-ppc64@0.25.12': 869 + optional: true 870 + 871 + '@esbuild/android-arm64@0.25.12': 872 + optional: true 873 + 874 + '@esbuild/android-arm@0.25.12': 875 + optional: true 812 876 813 - '@esbuild/aix-ppc64@0.21.5': 877 + '@esbuild/android-x64@0.25.12': 814 878 optional: true 815 879 816 - '@esbuild/android-arm64@0.21.5': 880 + '@esbuild/darwin-arm64@0.25.12': 817 881 optional: true 818 882 819 - '@esbuild/android-arm@0.21.5': 883 + '@esbuild/darwin-x64@0.25.12': 820 884 optional: true 821 885 822 - '@esbuild/android-x64@0.21.5': 886 + '@esbuild/freebsd-arm64@0.25.12': 823 887 optional: true 824 888 825 - '@esbuild/darwin-arm64@0.21.5': 889 + '@esbuild/freebsd-x64@0.25.12': 826 890 optional: true 827 891 828 - '@esbuild/darwin-x64@0.21.5': 892 + '@esbuild/linux-arm64@0.25.12': 829 893 optional: true 830 894 831 - '@esbuild/freebsd-arm64@0.21.5': 895 + '@esbuild/linux-arm@0.25.12': 832 896 optional: true 833 897 834 - '@esbuild/freebsd-x64@0.21.5': 898 + '@esbuild/linux-ia32@0.25.12': 835 899 optional: true 836 900 837 - '@esbuild/linux-arm64@0.21.5': 901 + '@esbuild/linux-loong64@0.25.12': 838 902 optional: true 839 903 840 - '@esbuild/linux-arm@0.21.5': 904 + '@esbuild/linux-mips64el@0.25.12': 841 905 optional: true 842 906 843 - '@esbuild/linux-ia32@0.21.5': 907 + '@esbuild/linux-ppc64@0.25.12': 844 908 optional: true 845 909 846 - '@esbuild/linux-loong64@0.21.5': 910 + '@esbuild/linux-riscv64@0.25.12': 847 911 optional: true 848 912 849 - '@esbuild/linux-mips64el@0.21.5': 913 + '@esbuild/linux-s390x@0.25.12': 850 914 optional: true 851 915 852 - '@esbuild/linux-ppc64@0.21.5': 916 + '@esbuild/linux-x64@0.25.12': 853 917 optional: true 854 918 855 - '@esbuild/linux-riscv64@0.21.5': 919 + '@esbuild/netbsd-arm64@0.25.12': 856 920 optional: true 857 921 858 - '@esbuild/linux-s390x@0.21.5': 922 + '@esbuild/netbsd-x64@0.25.12': 859 923 optional: true 860 924 861 - '@esbuild/linux-x64@0.21.5': 925 + '@esbuild/openbsd-arm64@0.25.12': 862 926 optional: true 863 927 864 - '@esbuild/netbsd-x64@0.21.5': 928 + '@esbuild/openbsd-x64@0.25.12': 865 929 optional: true 866 930 867 - '@esbuild/openbsd-x64@0.21.5': 931 + '@esbuild/openharmony-arm64@0.25.12': 868 932 optional: true 869 933 870 - '@esbuild/sunos-x64@0.21.5': 934 + '@esbuild/sunos-x64@0.25.12': 871 935 optional: true 872 936 873 - '@esbuild/win32-arm64@0.21.5': 937 + '@esbuild/win32-arm64@0.25.12': 874 938 optional: true 875 939 876 - '@esbuild/win32-ia32@0.21.5': 940 + '@esbuild/win32-ia32@0.25.12': 877 941 optional: true 878 942 879 - '@esbuild/win32-x64@0.21.5': 943 + '@esbuild/win32-x64@0.25.12': 880 944 optional: true 881 945 882 - '@jridgewell/gen-mapping@0.3.12': 946 + '@jridgewell/gen-mapping@0.3.13': 883 947 dependencies: 884 - '@jridgewell/sourcemap-codec': 1.5.4 885 - '@jridgewell/trace-mapping': 0.3.29 948 + '@jridgewell/sourcemap-codec': 1.5.5 949 + '@jridgewell/trace-mapping': 0.3.31 950 + 951 + '@jridgewell/remapping@2.3.5': 952 + dependencies: 953 + '@jridgewell/gen-mapping': 0.3.13 954 + '@jridgewell/trace-mapping': 0.3.31 886 955 887 956 '@jridgewell/resolve-uri@3.1.2': {} 888 957 889 - '@jridgewell/sourcemap-codec@1.5.4': {} 958 + '@jridgewell/sourcemap-codec@1.5.5': {} 890 959 891 - '@jridgewell/trace-mapping@0.3.29': 960 + '@jridgewell/trace-mapping@0.3.31': 892 961 dependencies: 893 962 '@jridgewell/resolve-uri': 3.1.2 894 - '@jridgewell/sourcemap-codec': 1.5.4 963 + '@jridgewell/sourcemap-codec': 1.5.5 895 964 896 - '@rollup/rollup-android-arm-eabi@4.46.2': 965 + '@rollup/rollup-android-arm-eabi@4.52.5': 897 966 optional: true 898 967 899 - '@rollup/rollup-android-arm64@4.46.2': 968 + '@rollup/rollup-android-arm64@4.52.5': 900 969 optional: true 901 970 902 - '@rollup/rollup-darwin-arm64@4.46.2': 971 + '@rollup/rollup-darwin-arm64@4.52.5': 903 972 optional: true 904 973 905 - '@rollup/rollup-darwin-x64@4.46.2': 974 + '@rollup/rollup-darwin-x64@4.52.5': 906 975 optional: true 907 976 908 - '@rollup/rollup-freebsd-arm64@4.46.2': 977 + '@rollup/rollup-freebsd-arm64@4.52.5': 909 978 optional: true 910 979 911 - '@rollup/rollup-freebsd-x64@4.46.2': 980 + '@rollup/rollup-freebsd-x64@4.52.5': 912 981 optional: true 913 982 914 - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': 983 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 915 984 optional: true 916 985 917 - '@rollup/rollup-linux-arm-musleabihf@4.46.2': 986 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 918 987 optional: true 919 988 920 - '@rollup/rollup-linux-arm64-gnu@4.46.2': 989 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 921 990 optional: true 922 991 923 - '@rollup/rollup-linux-arm64-musl@4.46.2': 992 + '@rollup/rollup-linux-arm64-musl@4.52.5': 924 993 optional: true 925 994 926 - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': 995 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 927 996 optional: true 928 997 929 - '@rollup/rollup-linux-ppc64-gnu@4.46.2': 998 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 930 999 optional: true 931 1000 932 - '@rollup/rollup-linux-riscv64-gnu@4.46.2': 1001 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 933 1002 optional: true 934 1003 935 - '@rollup/rollup-linux-riscv64-musl@4.46.2': 1004 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 936 1005 optional: true 937 1006 938 - '@rollup/rollup-linux-s390x-gnu@4.46.2': 1007 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 939 1008 optional: true 940 1009 941 - '@rollup/rollup-linux-x64-gnu@4.46.2': 1010 + '@rollup/rollup-linux-x64-gnu@4.52.5': 942 1011 optional: true 943 1012 944 - '@rollup/rollup-linux-x64-musl@4.46.2': 1013 + '@rollup/rollup-linux-x64-musl@4.52.5': 945 1014 optional: true 946 1015 947 - '@rollup/rollup-win32-arm64-msvc@4.46.2': 1016 + '@rollup/rollup-openharmony-arm64@4.52.5': 948 1017 optional: true 949 1018 950 - '@rollup/rollup-win32-ia32-msvc@4.46.2': 1019 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 951 1020 optional: true 952 1021 953 - '@rollup/rollup-win32-x64-msvc@4.46.2': 1022 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 954 1023 optional: true 955 1024 956 - '@tauri-apps/api@2.0.0-rc.0': {} 1025 + '@rollup/rollup-win32-x64-gnu@4.52.5': 1026 + optional: true 957 1027 958 - '@tauri-apps/api@2.7.0': {} 1028 + '@rollup/rollup-win32-x64-msvc@4.52.5': 1029 + optional: true 959 1030 960 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 1031 + '@tauri-apps/api@2.9.0': {} 1032 + 1033 + '@tauri-apps/cli-darwin-arm64@2.9.3': 961 1034 optional: true 962 1035 963 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 1036 + '@tauri-apps/cli-darwin-x64@2.9.3': 964 1037 optional: true 965 1038 966 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 1039 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 967 1040 optional: true 968 1041 969 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 1042 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 970 1043 optional: true 971 1044 972 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 1045 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 973 1046 optional: true 974 1047 975 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 1048 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 976 1049 optional: true 977 1050 978 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 1051 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 1052 + optional: true 1053 + 1054 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 979 1055 optional: true 980 1056 981 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 1057 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 982 1058 optional: true 983 1059 984 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 1060 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 985 1061 optional: true 986 1062 987 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 1063 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 988 1064 optional: true 989 1065 990 - '@tauri-apps/cli@2.0.0-rc.5': 1066 + '@tauri-apps/cli@2.9.3': 991 1067 optionalDependencies: 992 - '@tauri-apps/cli-darwin-arm64': 2.0.0-rc.5 993 - '@tauri-apps/cli-darwin-x64': 2.0.0-rc.5 994 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.5 995 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.5 996 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.5 997 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.5 998 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.5 999 - '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.5 1000 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.5 1001 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.5 1068 + '@tauri-apps/cli-darwin-arm64': 2.9.3 1069 + '@tauri-apps/cli-darwin-x64': 2.9.3 1070 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.9.3 1071 + '@tauri-apps/cli-linux-arm64-gnu': 2.9.3 1072 + '@tauri-apps/cli-linux-arm64-musl': 2.9.3 1073 + '@tauri-apps/cli-linux-riscv64-gnu': 2.9.3 1074 + '@tauri-apps/cli-linux-x64-gnu': 2.9.3 1075 + '@tauri-apps/cli-linux-x64-musl': 2.9.3 1076 + '@tauri-apps/cli-win32-arm64-msvc': 2.9.3 1077 + '@tauri-apps/cli-win32-ia32-msvc': 2.9.3 1078 + '@tauri-apps/cli-win32-x64-msvc': 2.9.3 1002 1079 1003 - '@tauri-apps/plugin-deep-link@2.4.1': 1080 + '@tauri-apps/plugin-deep-link@2.4.5': 1004 1081 dependencies: 1005 - '@tauri-apps/api': 2.7.0 1082 + '@tauri-apps/api': 2.9.0 1006 1083 1007 - '@tauri-apps/plugin-http@2.0.0-rc.1': 1084 + '@tauri-apps/plugin-http@2.5.4': 1008 1085 dependencies: 1009 - '@tauri-apps/api': 2.7.0 1086 + '@tauri-apps/api': 2.9.0 1010 1087 1011 - '@tauri-apps/plugin-process@2.0.0-rc.0': 1088 + '@tauri-apps/plugin-process@2.3.1': 1012 1089 dependencies: 1013 - '@tauri-apps/api': 2.0.0-rc.0 1090 + '@tauri-apps/api': 2.9.0 1014 1091 1015 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 1092 + '@tauri-apps/plugin-shell@2.3.3': 1016 1093 dependencies: 1017 - '@tauri-apps/api': 2.0.0-rc.0 1094 + '@tauri-apps/api': 2.9.0 1018 1095 1019 1096 '@types/animejs@3.1.13': {} 1020 1097 1021 1098 '@types/babel__core@7.20.5': 1022 1099 dependencies: 1023 - '@babel/parser': 7.28.0 1024 - '@babel/types': 7.28.2 1100 + '@babel/parser': 7.28.5 1101 + '@babel/types': 7.28.5 1025 1102 '@types/babel__generator': 7.27.0 1026 1103 '@types/babel__template': 7.4.4 1027 - '@types/babel__traverse': 7.20.7 1104 + '@types/babel__traverse': 7.28.0 1028 1105 1029 1106 '@types/babel__generator@7.27.0': 1030 1107 dependencies: 1031 - '@babel/types': 7.28.2 1108 + '@babel/types': 7.28.5 1032 1109 1033 1110 '@types/babel__template@7.4.4': 1034 1111 dependencies: 1035 - '@babel/parser': 7.28.0 1036 - '@babel/types': 7.28.2 1112 + '@babel/parser': 7.28.5 1113 + '@babel/types': 7.28.5 1037 1114 1038 - '@types/babel__traverse@7.20.7': 1115 + '@types/babel__traverse@7.28.0': 1039 1116 dependencies: 1040 - '@babel/types': 7.28.2 1117 + '@babel/types': 7.28.5 1041 1118 1042 1119 '@types/estree@1.0.8': {} 1043 1120 1044 - animejs@3.2.2: {} 1121 + animejs@4.2.2: {} 1045 1122 1046 - babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0): 1123 + babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.28.5): 1047 1124 dependencies: 1048 - '@babel/core': 7.28.0 1125 + '@babel/core': 7.28.5 1049 1126 '@babel/helper-module-imports': 7.18.6 1050 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) 1051 - '@babel/types': 7.28.2 1127 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) 1128 + '@babel/types': 7.28.5 1052 1129 html-entities: 2.3.3 1053 1130 parse5: 7.3.0 1054 - validate-html-nesting: 1.2.3 1055 1131 1056 - babel-preset-solid@1.9.6(@babel/core@7.28.0): 1132 + babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10): 1057 1133 dependencies: 1058 - '@babel/core': 7.28.0 1059 - babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0) 1134 + '@babel/core': 7.28.5 1135 + babel-plugin-jsx-dom-expressions: 0.40.3(@babel/core@7.28.5) 1136 + optionalDependencies: 1137 + solid-js: 1.9.10 1060 1138 1061 - browserslist@4.25.1: 1139 + baseline-browser-mapping@2.8.25: {} 1140 + 1141 + browserslist@4.27.0: 1062 1142 dependencies: 1063 - caniuse-lite: 1.0.30001731 1064 - electron-to-chromium: 1.5.193 1065 - node-releases: 2.0.19 1066 - update-browserslist-db: 1.1.3(browserslist@4.25.1) 1143 + baseline-browser-mapping: 2.8.25 1144 + caniuse-lite: 1.0.30001754 1145 + electron-to-chromium: 1.5.248 1146 + node-releases: 2.0.27 1147 + update-browserslist-db: 1.1.4(browserslist@4.27.0) 1067 1148 1068 - caniuse-lite@1.0.30001731: {} 1149 + caniuse-lite@1.0.30001754: {} 1069 1150 1070 1151 convert-source-map@2.0.0: {} 1071 1152 1072 1153 csstype@3.1.3: {} 1073 1154 1074 - debug@4.4.1: 1155 + debug@4.4.3: 1075 1156 dependencies: 1076 1157 ms: 2.1.3 1077 1158 1078 - electron-to-chromium@1.5.193: {} 1159 + electron-to-chromium@1.5.248: {} 1079 1160 1080 1161 entities@6.0.1: {} 1081 1162 1082 - esbuild@0.21.5: 1163 + esbuild@0.25.12: 1083 1164 optionalDependencies: 1084 - '@esbuild/aix-ppc64': 0.21.5 1085 - '@esbuild/android-arm': 0.21.5 1086 - '@esbuild/android-arm64': 0.21.5 1087 - '@esbuild/android-x64': 0.21.5 1088 - '@esbuild/darwin-arm64': 0.21.5 1089 - '@esbuild/darwin-x64': 0.21.5 1090 - '@esbuild/freebsd-arm64': 0.21.5 1091 - '@esbuild/freebsd-x64': 0.21.5 1092 - '@esbuild/linux-arm': 0.21.5 1093 - '@esbuild/linux-arm64': 0.21.5 1094 - '@esbuild/linux-ia32': 0.21.5 1095 - '@esbuild/linux-loong64': 0.21.5 1096 - '@esbuild/linux-mips64el': 0.21.5 1097 - '@esbuild/linux-ppc64': 0.21.5 1098 - '@esbuild/linux-riscv64': 0.21.5 1099 - '@esbuild/linux-s390x': 0.21.5 1100 - '@esbuild/linux-x64': 0.21.5 1101 - '@esbuild/netbsd-x64': 0.21.5 1102 - '@esbuild/openbsd-x64': 0.21.5 1103 - '@esbuild/sunos-x64': 0.21.5 1104 - '@esbuild/win32-arm64': 0.21.5 1105 - '@esbuild/win32-ia32': 0.21.5 1106 - '@esbuild/win32-x64': 0.21.5 1165 + '@esbuild/aix-ppc64': 0.25.12 1166 + '@esbuild/android-arm': 0.25.12 1167 + '@esbuild/android-arm64': 0.25.12 1168 + '@esbuild/android-x64': 0.25.12 1169 + '@esbuild/darwin-arm64': 0.25.12 1170 + '@esbuild/darwin-x64': 0.25.12 1171 + '@esbuild/freebsd-arm64': 0.25.12 1172 + '@esbuild/freebsd-x64': 0.25.12 1173 + '@esbuild/linux-arm': 0.25.12 1174 + '@esbuild/linux-arm64': 0.25.12 1175 + '@esbuild/linux-ia32': 0.25.12 1176 + '@esbuild/linux-loong64': 0.25.12 1177 + '@esbuild/linux-mips64el': 0.25.12 1178 + '@esbuild/linux-ppc64': 0.25.12 1179 + '@esbuild/linux-riscv64': 0.25.12 1180 + '@esbuild/linux-s390x': 0.25.12 1181 + '@esbuild/linux-x64': 0.25.12 1182 + '@esbuild/netbsd-arm64': 0.25.12 1183 + '@esbuild/netbsd-x64': 0.25.12 1184 + '@esbuild/openbsd-arm64': 0.25.12 1185 + '@esbuild/openbsd-x64': 0.25.12 1186 + '@esbuild/openharmony-arm64': 0.25.12 1187 + '@esbuild/sunos-x64': 0.25.12 1188 + '@esbuild/win32-arm64': 0.25.12 1189 + '@esbuild/win32-ia32': 0.25.12 1190 + '@esbuild/win32-x64': 0.25.12 1107 1191 1108 1192 escalade@3.2.0: {} 1109 1193 1194 + fdir@6.5.0(picomatch@4.0.3): 1195 + optionalDependencies: 1196 + picomatch: 4.0.3 1197 + 1110 1198 fsevents@2.3.3: 1111 1199 optional: true 1112 1200 ··· 1134 1222 1135 1223 nanoid@3.3.11: {} 1136 1224 1137 - node-releases@2.0.19: {} 1225 + node-releases@2.0.27: {} 1138 1226 1139 1227 parse5@7.3.0: 1140 1228 dependencies: ··· 1142 1230 1143 1231 picocolors@1.1.1: {} 1144 1232 1233 + picomatch@4.0.3: {} 1234 + 1145 1235 postcss@8.5.6: 1146 1236 dependencies: 1147 1237 nanoid: 3.3.11 1148 1238 picocolors: 1.1.1 1149 1239 source-map-js: 1.2.1 1150 1240 1151 - rollup@4.46.2: 1241 + rollup@4.52.5: 1152 1242 dependencies: 1153 1243 '@types/estree': 1.0.8 1154 1244 optionalDependencies: 1155 - '@rollup/rollup-android-arm-eabi': 4.46.2 1156 - '@rollup/rollup-android-arm64': 4.46.2 1157 - '@rollup/rollup-darwin-arm64': 4.46.2 1158 - '@rollup/rollup-darwin-x64': 4.46.2 1159 - '@rollup/rollup-freebsd-arm64': 4.46.2 1160 - '@rollup/rollup-freebsd-x64': 4.46.2 1161 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 1162 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 1163 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 1164 - '@rollup/rollup-linux-arm64-musl': 4.46.2 1165 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 1166 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 1167 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 1168 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 1169 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 1170 - '@rollup/rollup-linux-x64-gnu': 4.46.2 1171 - '@rollup/rollup-linux-x64-musl': 4.46.2 1172 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 1173 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 1174 - '@rollup/rollup-win32-x64-msvc': 4.46.2 1245 + '@rollup/rollup-android-arm-eabi': 4.52.5 1246 + '@rollup/rollup-android-arm64': 4.52.5 1247 + '@rollup/rollup-darwin-arm64': 4.52.5 1248 + '@rollup/rollup-darwin-x64': 4.52.5 1249 + '@rollup/rollup-freebsd-arm64': 4.52.5 1250 + '@rollup/rollup-freebsd-x64': 4.52.5 1251 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 1252 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 1253 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 1254 + '@rollup/rollup-linux-arm64-musl': 4.52.5 1255 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 1256 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 1257 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 1258 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 1259 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 1260 + '@rollup/rollup-linux-x64-gnu': 4.52.5 1261 + '@rollup/rollup-linux-x64-musl': 4.52.5 1262 + '@rollup/rollup-openharmony-arm64': 4.52.5 1263 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 1264 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 1265 + '@rollup/rollup-win32-x64-gnu': 4.52.5 1266 + '@rollup/rollup-win32-x64-msvc': 4.52.5 1175 1267 fsevents: 2.3.3 1176 1268 1177 1269 semver@6.3.1: {} 1178 1270 1179 - seroval-plugins@1.3.2(seroval@1.3.2): 1271 + seroval-plugins@1.3.3(seroval@1.3.2): 1180 1272 dependencies: 1181 1273 seroval: 1.3.2 1182 1274 1183 1275 seroval@1.3.2: {} 1184 1276 1185 - solid-js@1.9.7: 1277 + solid-js@1.9.10: 1186 1278 dependencies: 1187 1279 csstype: 3.1.3 1188 1280 seroval: 1.3.2 1189 - seroval-plugins: 1.3.2(seroval@1.3.2) 1281 + seroval-plugins: 1.3.3(seroval@1.3.2) 1190 1282 1191 - solid-refresh@0.6.3(solid-js@1.9.7): 1283 + solid-refresh@0.6.3(solid-js@1.9.10): 1192 1284 dependencies: 1193 - '@babel/generator': 7.28.0 1285 + '@babel/generator': 7.28.5 1194 1286 '@babel/helper-module-imports': 7.27.1 1195 - '@babel/types': 7.28.2 1196 - solid-js: 1.9.7 1287 + '@babel/types': 7.28.5 1288 + solid-js: 1.9.10 1197 1289 transitivePeerDependencies: 1198 1290 - supports-color 1199 1291 1200 1292 source-map-js@1.2.1: {} 1201 1293 1202 - typescript@5.8.3: {} 1294 + tinyglobby@0.2.15: 1295 + dependencies: 1296 + fdir: 6.5.0(picomatch@4.0.3) 1297 + picomatch: 4.0.3 1203 1298 1204 - update-browserslist-db@1.1.3(browserslist@4.25.1): 1299 + typescript@5.9.3: {} 1300 + 1301 + update-browserslist-db@1.1.4(browserslist@4.27.0): 1205 1302 dependencies: 1206 - browserslist: 4.25.1 1303 + browserslist: 4.27.0 1207 1304 escalade: 3.2.0 1208 1305 picocolors: 1.1.1 1209 1306 1210 - validate-html-nesting@1.2.3: {} 1211 - 1212 - vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@5.4.19): 1307 + vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.2): 1213 1308 dependencies: 1214 - '@babel/core': 7.28.0 1309 + '@babel/core': 7.28.5 1215 1310 '@types/babel__core': 7.20.5 1216 - babel-preset-solid: 1.9.6(@babel/core@7.28.0) 1311 + babel-preset-solid: 1.9.10(@babel/core@7.28.5)(solid-js@1.9.10) 1217 1312 merge-anything: 5.1.7 1218 - solid-js: 1.9.7 1219 - solid-refresh: 0.6.3(solid-js@1.9.7) 1220 - vite: 5.4.19 1221 - vitefu: 1.1.1(vite@5.4.19) 1313 + solid-js: 1.9.10 1314 + solid-refresh: 0.6.3(solid-js@1.9.10) 1315 + vite: 7.2.2 1316 + vitefu: 1.1.1(vite@7.2.2) 1222 1317 transitivePeerDependencies: 1223 1318 - supports-color 1224 1319 1225 - vite@5.4.19: 1320 + vite@7.2.2: 1226 1321 dependencies: 1227 - esbuild: 0.21.5 1322 + esbuild: 0.25.12 1323 + fdir: 6.5.0(picomatch@4.0.3) 1324 + picomatch: 4.0.3 1228 1325 postcss: 8.5.6 1229 - rollup: 4.46.2 1326 + rollup: 4.52.5 1327 + tinyglobby: 0.2.15 1230 1328 optionalDependencies: 1231 1329 fsevents: 2.3.3 1232 1330 1233 - vitefu@1.1.1(vite@5.4.19): 1331 + vitefu@1.1.1(vite@7.2.2): 1234 1332 optionalDependencies: 1235 - vite: 5.4.19 1333 + vite: 7.2.2 1236 1334 1237 1335 yallist@3.1.1: {}
+1 -1
public/icon/angle-down-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/></svg>
+1 -1
public/icon/angle-up-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"/></svg>
+1 -1
public/icon/arrow-left-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
+1 -1
public/icon/arrow-right-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/></svg>
+1 -1
public/icon/arrows-rotate-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg>
+1 -1
public/icon/caret-down-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg>
+1 -1
public/icon/check-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>
+1 -1
public/icon/clock-regular.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg>
+1 -1
public/icon/copy-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"/></svg>
+1
public/icon/download-solid-full.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M352 96C352 78.3 337.7 64 320 64C302.3 64 288 78.3 288 96L288 306.7L246.6 265.3C234.1 252.8 213.8 252.8 201.3 265.3C188.8 277.8 188.8 298.1 201.3 310.6L297.3 406.6C309.8 419.1 330.1 419.1 342.6 406.6L438.6 310.6C451.1 298.1 451.1 277.8 438.6 265.3C426.1 252.8 405.8 252.8 393.3 265.3L352 306.7L352 96zM160 384C124.7 384 96 412.7 96 448L96 480C96 515.3 124.7 544 160 544L480 544C515.3 544 544 515.3 544 480L544 448C544 412.7 515.3 384 480 384L433.1 384L376.5 440.6C345.3 471.8 294.6 471.8 263.4 440.6L206.9 384L160 384zM464 440C477.3 440 488 450.7 488 464C488 477.3 477.3 488 464 488C450.7 488 440 477.3 440 464C440 450.7 450.7 440 464 440z"/></svg>
+1
public/icon/gear-solid-full.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M259.1 73.5C262.1 58.7 275.2 48 290.4 48L350.2 48C365.4 48 378.5 58.7 381.5 73.5L396 143.5C410.1 149.5 423.3 157.2 435.3 166.3L503.1 143.8C517.5 139 533.3 145 540.9 158.2L570.8 210C578.4 223.2 575.7 239.8 564.3 249.9L511 297.3C511.9 304.7 512.3 312.3 512.3 320C512.3 327.7 511.8 335.3 511 342.7L564.4 390.2C575.8 400.3 578.4 417 570.9 430.1L541 481.9C533.4 495 517.6 501.1 503.2 496.3L435.4 473.8C423.3 482.9 410.1 490.5 396.1 496.6L381.7 566.5C378.6 581.4 365.5 592 350.4 592L290.6 592C275.4 592 262.3 581.3 259.3 566.5L244.9 496.6C230.8 490.6 217.7 482.9 205.6 473.8L137.5 496.3C123.1 501.1 107.3 495.1 99.7 481.9L69.8 430.1C62.2 416.9 64.9 400.3 76.3 390.2L129.7 342.7C128.8 335.3 128.4 327.7 128.4 320C128.4 312.3 128.9 304.7 129.7 297.3L76.3 249.8C64.9 239.7 62.3 223 69.8 209.9L99.7 158.1C107.3 144.9 123.1 138.9 137.5 143.7L205.3 166.2C217.4 157.1 230.6 149.5 244.6 143.4L259.1 73.5zM320.3 400C364.5 399.8 400.2 363.9 400 319.7C399.8 275.5 363.9 239.8 319.7 240C275.5 240.2 239.8 276.1 240 320.3C240.2 364.5 276.1 400.2 320.3 400z"/></svg>
+1
public/icon/layer-group-solid-full.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M296.5 69.2C311.4 62.3 328.6 62.3 343.5 69.2L562.1 170.2C570.6 174.1 576 182.6 576 192C576 201.4 570.6 209.9 562.1 213.8L343.5 314.8C328.6 321.7 311.4 321.7 296.5 314.8L77.9 213.8C69.4 209.8 64 201.3 64 192C64 182.7 69.4 174.1 77.9 170.2L296.5 69.2zM112.1 282.4L276.4 358.3C304.1 371.1 336 371.1 363.7 358.3L528 282.4L562.1 298.2C570.6 302.1 576 310.6 576 320C576 329.4 570.6 337.9 562.1 341.8L343.5 442.8C328.6 449.7 311.4 449.7 296.5 442.8L77.9 341.8C69.4 337.8 64 329.3 64 320C64 310.7 69.4 302.1 77.9 298.2L112 282.4zM77.9 426.2L112 410.4L276.3 486.3C304 499.1 335.9 499.1 363.6 486.3L527.9 410.4L562 426.2C570.5 430.1 575.9 438.6 575.9 448C575.9 457.4 570.5 465.9 562 469.8L343.4 570.8C328.5 577.7 311.3 577.7 296.4 570.8L77.9 469.8C69.4 465.8 64 457.3 64 448C64 438.7 69.4 430.1 77.9 426.2z"/></svg>
+1 -1
public/icon/minus-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg>
+1 -1
public/icon/sliders-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z"/></svg>
+1 -1
public/icon/square-regular.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg>
+1 -1
public/icon/trash-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>
+1 -1
public/icon/user-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg>
+1 -1
public/icon/x-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/></svg>
+26 -9
src/Components/App.tsx
··· 1 - import { onMount } from "solid-js"; 2 - import anime from "animejs"; 3 - import { invoke } from '@tauri-apps/api/core'; 1 + import { createSignal, onMount } from "solid-js"; 4 2 5 - import NavBar from "./NavBar"; 6 3 import PhotoList from "./PhotoList"; 7 4 import PhotoViewer from "./PhotoViewer"; 8 5 import SettingsMenu from "./SettingsMenu"; 6 + import { animate, utils } from "animejs"; 7 + import { listen } from "@tauri-apps/api/event"; 9 8 10 - function App() { 11 - invoke('close_splashscreen') 9 + let App = () => { 10 + let [ errorText, setErrorText ] = createSignal(''); 12 11 13 12 onMount(() => { 14 - anime.set('.settings', 13 + utils.set('.settings', 15 14 { 16 15 display: 'none', 17 16 opacity: 0, 18 17 translateX: '500px' 19 18 }) 19 + 20 + listen<string>('vrcpm-error', ( ev ) => { 21 + setErrorText(ev.payload); 22 + 23 + utils.set('.error-notif', { translateX: '-50%', translateY: '-100px' }); 24 + animate('.error-notif', { 25 + ease: 'outElastic', 26 + opacity: 1, 27 + translateY: '0px' 28 + }); 29 + 30 + setTimeout(() => { 31 + animate('.error-notif', { 32 + ease: 'outElastic', 33 + opacity: 0, 34 + translateY: '-100px' 35 + }); 36 + }, 2000); 37 + }); 20 38 }) 21 39 22 40 return ( 23 41 <div class="container"> 24 - <NavBar /> 25 - 26 42 <PhotoList /> 27 43 <PhotoViewer /> 28 44 29 45 <SettingsMenu /> 30 46 31 47 <div class="copy-notif">Image Copied!</div> 48 + <div class="error-notif">{ errorText() }</div> 32 49 </div> 33 50 ); 34 51 }
-133
src/Components/Managers/AccountManager.tsx
··· 1 - import { invoke } from "@tauri-apps/api/core"; 2 - 3 - import { ProfileData } from "../Structs/ProfileData"; 4 - import { StorageData } from "../Structs/StorageData"; 5 - import { Accessor, createSignal, Setter } from "solid-js"; 6 - 7 - import { listen } from "@tauri-apps/api/event"; 8 - import { fetch } from "@tauri-apps/plugin-http"; 9 - 10 - export class AccountManager{ 11 - public Profile: Accessor<ProfileData | null>; 12 - public Storage: Accessor<StorageData | null>; 13 - 14 - public hasAccount: Accessor<boolean>; 15 - public isLoading: Accessor<boolean>; 16 - 17 - private _setProfile: Setter<ProfileData | null>; 18 - private _setStorage: Setter<StorageData | null>; 19 - 20 - private _setHasAccount: Setter<boolean>; 21 - private _setIsLoading: Setter<boolean>; 22 - 23 - private _loginEventCallbacks: Array<() => void> = []; 24 - 25 - private _emitLoginCallbacks(){ 26 - this._loginEventCallbacks.forEach(e => e()); 27 - } 28 - 29 - constructor(){ 30 - let [ hasAccount, setHasAccount ] = createSignal(false); 31 - let [ isLoading, setIsLoading ] = createSignal(true); 32 - 33 - let [ profile, setProfile ] = createSignal<ProfileData | null>(null); 34 - let [ storage, setStorage ] = createSignal<StorageData | null>(null); 35 - 36 - this.Profile = profile; 37 - this.Storage = storage; 38 - 39 - this.hasAccount = hasAccount; 40 - this.isLoading = isLoading; 41 - 42 - this._setProfile = setProfile; 43 - this._setStorage = setStorage; 44 - 45 - this._setHasAccount = setHasAccount; 46 - this._setIsLoading = setIsLoading; 47 - 48 - invoke('get_config_value_string', { key: 'token' }) 49 - .then(( token: any ) => { 50 - this.verifyToken(token); 51 - }) 52 - 53 - listen('auth-callback', ( event: any ) => { 54 - window.LoadingManager.SetLoading(""); 55 - 56 - let token = event.payload; 57 - this.verifyToken(token); 58 - }) 59 - 60 - listen('auth-denied', () => { 61 - window.LoadingManager.SetLoading(""); 62 - console.warn('Authetication Denied'); 63 - }) 64 - } 65 - 66 - private async verifyToken( token: string ){ 67 - if(!token){ 68 - this._setHasAccount(false); 69 - this._setIsLoading(false); 70 - 71 - return this._emitLoginCallbacks(); 72 - } 73 - 74 - let dat = await fetch('https://photos.phazed.xyz/api/v1/account?token='+token); 75 - if(dat.status !== 200){ 76 - this._setHasAccount(false); 77 - this._setIsLoading(false); 78 - 79 - return this._emitLoginCallbacks(); 80 - } 81 - 82 - let json = await dat.json(); 83 - 84 - let profile = new ProfileData(); 85 - let storage = new StorageData(); 86 - 87 - profile.id = json.user._id; 88 - profile.username = json.user.username; 89 - profile.avatar = json.user.avatar; 90 - profile.serverVersion = json.user.serverVersion; 91 - 92 - storage.used = json.user.used; 93 - storage.total = json.user.storage; 94 - storage.isSyncing = json.user.settings.enableSync; 95 - 96 - this._setProfile(profile); 97 - this._setStorage(storage); 98 - 99 - this._setHasAccount(true); 100 - this._setIsLoading(false); 101 - 102 - this._emitLoginCallbacks(); 103 - } 104 - 105 - public login(){ 106 - window.LoadingManager.SetLoading("Waiting for Authentication"); 107 - invoke('start_user_auth'); 108 - } 109 - 110 - public async logout(){ 111 - let dat = await fetch('https://photos.phazed.xyz/api/v1/deauth?token='+(await invoke('get_config_value_string', { key: 'token' }))!) 112 - if(dat.status !== 200) 113 - throw new Error(dat.statusText); 114 - 115 - let json = await dat.json(); 116 - if(!json.ok) 117 - throw new Error(json.error); 118 - 119 - invoke('set_config_value_string', { key: 'token', value: '' }); 120 - window.location.reload(); 121 - 122 - return json; 123 - } 124 - 125 - public async Refresh(){ 126 - let token: string = await invoke('get_config_value_string', { key: 'token' }); 127 - await this.verifyToken(token); 128 - } 129 - 130 - public onLoginFinish( cb: () => void ){ 131 - this._loginEventCallbacks.push(cb); 132 - } 133 - }
+19 -3
src/Components/Managers/PhotoListRenderingManager.tsx
··· 5 5 6 6 const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 7 7 8 + let multilayerIcon = new Image(); 9 + multilayerIcon.src = '/icon/layer-group-solid-full.svg'; 10 + 8 11 export class PhotoListRenderingManager{ 9 12 private _layout: PhotoListRow[] = []; 10 13 private _canvas!: HTMLCanvasElement; ··· 22 25 23 26 let lastDateString = null; 24 27 let row = new PhotoListRow(); 25 - row.Height = 100; 28 + row.Height = 0; 26 29 27 30 for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) { 28 31 let photo = window.PhotoManager.FilteredPhotos[i]; ··· 60 63 61 64 public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){ 62 65 let currentY = 0; 63 - 66 + 64 67 // Loop through each row 65 68 for (let i = 0; i < this._layout.length; i++) { 66 69 let row = this._layout[i]; ··· 124 127 // ctx.strokeStyle = '#f00'; 125 128 // ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height); 126 129 127 - if(!photo.loaded) 130 + if(photo.error){ 131 + ctx.fillStyle = '#fff'; 132 + ctx.textAlign = 'center'; 133 + ctx.textBaseline = 'middle'; 134 + 135 + photo.x = (rowXPos - row.Width / 2) + canvas.width / 2; 136 + photo.y = currentY - scroll; 137 + 138 + ctx.font = '18px Rubik' 139 + ctx.fillText('Error loading image.', photo.x + photo.scaledWidth! / 2, photo.y + photo.scaledHeight! / 2); 140 + } else if(!photo.loaded) 128 141 // If the photo is not loaded, start a new task and load it in that task 129 142 setTimeout(() => photo.loadImage(), 1); 130 143 else{ ··· 136 149 // Photo is already loaded so we should draw it on the application 137 150 ctx.globalAlpha = photo.frames / 100; 138 151 ctx.drawImage(photo.image!, (rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, photo.scaledHeight!); 152 + 153 + if(photo.isMultiLayer) 154 + ctx.drawImage(multilayerIcon, ((rowXPos - row.Width / 2) + canvas.width / 2) + 5, (currentY - scroll) + 5, 20, 20); 139 155 140 156 if(photo.frames < 100) 141 157 photo.frames += 10;
+86 -24
src/Components/Managers/PhotoManager.tsx
··· 35 35 36 36 let setHasBeenIndexed; 37 37 [ this._hasBeenIndexed, setHasBeenIndexed ] = createSignal(false); 38 - console.log(this._hasBeenIndexed()) 39 38 40 39 listen('photos_loaded', ( event: any ) => { 41 40 let photoPaths = event.payload.photos.reverse(); ··· 44 43 setPhotoCount(photoPaths.length); 45 44 setPhotoSize(event.payload.size); 46 45 47 - let doesHaveLegacy = false; 48 - 49 46 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 50 47 setHasBeenIndexed(true); 51 48 49 + let photoLayers: Photo[] = []; 50 + 52 51 photoPaths.forEach(( path: string, i: number ) => { 53 52 let photo 54 53 55 - if(path.slice(0, 9) === "legacy://"){ 54 + if(path.slice(0, 9) === "legacy://") 56 55 photo = new Photo(path.slice(9), true, i); 57 - doesHaveLegacy = true; 58 - } else 56 + else 59 57 photo = new Photo(path, false, i); 60 58 61 - this.Photos.push(photo); 59 + if(!photo.legacy && photo.splitPath[4]){ 60 + photoLayers.push(photo); 61 + } else 62 + this.Photos.push(photo); 62 63 63 64 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 64 65 photo.loadMeta(); 65 66 }) 66 67 68 + photoLayers.forEach(photo => { 69 + let type = photo.splitPath[4]; 70 + photo.splitPath.pop(); 71 + 72 + let mainPhotoPath = photo.splitPath.join('_') + '.png'; 73 + let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath); 74 + 75 + if(!mainPhoto) 76 + this.Photos.push(photo); 77 + else{ 78 + mainPhoto.isMultiLayer = true; 79 + 80 + switch(type){ 81 + case 'Player.png': 82 + mainPhoto.playerLayer = photo; 83 + break; 84 + case 'Environment.png': 85 + mainPhoto.environmentLayer = photo; 86 + break; 87 + } 88 + } 89 + }); 90 + 67 91 this.Photos = MergeSort(this.Photos); 92 + console.log(this.Photos[0]); 68 93 69 94 console.log(this.Photos.length + ' Photos found.'); 95 + 70 96 if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){ 71 97 console.log('No photos found or over bulk load limit, Skipping loading stage.'); 72 98 ··· 75 101 76 102 this._finishedLoadingCallbacks.forEach(cb => cb()); 77 103 } 78 - 79 - console.log(this._hasBeenIndexed()) 80 104 }); 81 105 82 106 listen('photo_meta_loaded', ( event: any ) => { 83 107 let data: PhotoMetadata = event.payload; 84 - 108 + 85 109 let photo = this.Photos.find(x => x.path === data.path); 86 110 if(!photo)return console.error('Cannot find photo.', data); 111 + // NOTE: this is triggered by multilayer photo layers loading their metadata 112 + // we don't need to store metadata of those photos as they inherit this 113 + // data from the main photo. 87 114 115 + photo.error = data.error; 88 116 this._lastLoaded = photo.index; 89 117 90 118 if(this._onLoadedMeta[photo.index]){ ··· 102 130 103 131 photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1]; 104 132 this._amountLoaded++; 105 - 133 + 134 + photo.loadingMeta = false; 106 135 photo.metaLoaded = true; 107 136 photo.onMetaLoaded(); 137 + 138 + window.PhotoListRenderingManager.ComputeLayout(); 108 139 109 140 if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){ 110 141 this.FilteredPhotos = this.Photos; ··· 116 147 117 148 listen('photo_create', async ( event: any ) => { 118 149 let photo = new Photo(event.payload, false, 0); 119 - 120 - this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 121 - this.Photos.splice(0, 0, photo); 150 + 151 + if(photo.splitPath[4]){ 152 + let type = photo.splitPath[4]; 153 + photo.splitPath.pop(); 154 + 155 + let mainPhotoPath = photo.splitPath.join('_') + '.png'; 156 + let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath); 157 + 158 + if(!mainPhoto){ 159 + this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 160 + this.Photos.splice(0, 0, photo); 161 + } else{ 162 + mainPhoto.isMultiLayer = true; 163 + 164 + switch(type){ 165 + case 'Player.png': 166 + mainPhoto.playerLayer = photo; 167 + break; 168 + case 'Environment.png': 169 + mainPhoto.environmentLayer = photo; 170 + break; 171 + } 172 + } 173 + } else{ 174 + this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 175 + this.Photos.splice(0, 0, photo); 176 + } 122 177 123 178 photo.onMetaLoaded = () => this.ReloadFilters(); 124 179 photo.loadMeta(); 125 - 126 - if(!window.SyncManager.IsSyncing() && window.AccountManager.Storage()?.isSyncing){ 127 - window.SyncManager.TriggerSync(); 128 - } 129 180 }) 130 - 181 + 131 182 listen('photo_remove', ( event: any ) => { 132 183 this.Photos = this.Photos.filter(x => x.path !== event.payload); 133 - this.FilteredPhotos = this.FilteredPhotos.filter(x => x.path !== event.payload); 134 - 184 + 135 185 if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path) 136 186 window.PhotoViewerManager.Close() 137 187 ··· 174 224 public ReloadFilters(){ 175 225 this.FilteredPhotos = []; 176 226 227 + if(this._filter === ''){ 228 + this.FilteredPhotos = this.Photos; 229 + window.PhotoListRenderingManager.ComputeLayout(); 230 + 231 + return; 232 + } 233 + 177 234 switch(this._filterType){ 178 235 case FilterType.USER: 179 236 this.Photos.map(p => { 180 237 if(p.metadata){ 181 238 try{ 182 239 let meta = JSON.parse(p.metadata); 183 - let photo = meta.players.find(( y: any ) => y.displayName.toLowerCase().includes(this._filter) || y.id === this._filter); 240 + let photo = meta.players.find(( y: any ) => 241 + y.displayName.toLowerCase().includes(this._filter) || 242 + y.id === this._filter 243 + ); 184 244 185 245 if(photo)this.FilteredPhotos.push(p); 186 246 } catch(e){} ··· 192 252 if(p.metadata){ 193 253 try{ 194 254 let meta = JSON.parse(p.metadata); 195 - let photo = meta.world.name.toLowerCase().includes(this._filter) || meta.world.id === this._filter; 196 - 255 + let photo = 256 + meta.world.name.toLowerCase().includes(this._filter) || 257 + meta.world.id === this._filter; 258 + 197 259 if(photo)this.FilteredPhotos.push(p); 198 260 } catch(e){} 199 261 }
-56
src/Components/Managers/SyncManager.tsx
··· 1 - import { invoke } from "@tauri-apps/api/core"; 2 - import { listen } from "@tauri-apps/api/event"; 3 - import { Accessor, createSignal, Setter } from "solid-js"; 4 - 5 - export class SyncManager{ 6 - private _setIsSyncing: Setter<boolean>; 7 - private _setSyncPhotoTotal: Setter<number>; 8 - private _setSyncPhotoTransfers: Setter<number>; 9 - private _setSyncType: Setter<string>; 10 - private _setSyncError: Setter<string>; 11 - 12 - public IsSyncing: Accessor<boolean>; 13 - public SyncPhotoTotal: Accessor<number>; 14 - public SyncPhotoTransfers: Accessor<number> 15 - public SyncType: Accessor<string>; 16 - public SyncError: Accessor<string>; 17 - 18 - constructor(){ 19 - [ this.IsSyncing, this._setIsSyncing ] = createSignal(false); 20 - [ this.SyncPhotoTotal, this._setSyncPhotoTotal ] = createSignal(-1); 21 - [ this.SyncPhotoTransfers, this._setSyncPhotoTransfers ] = createSignal(-1); 22 - [ this.SyncType, this._setSyncType ] = createSignal(""); 23 - [ this.SyncError, this._setSyncError ] = createSignal(""); 24 - 25 - listen('photos-upload-meta', ( e: any ) => { 26 - this._setIsSyncing(true); 27 - this._setSyncPhotoTotal(e.payload.photos_total); 28 - this._setSyncPhotoTransfers(e.payload.photos_total - e.payload.photos_uploading); 29 - this._setSyncType('Upload'); 30 - 31 - console.log(e.payload) 32 - }) 33 - 34 - listen('photos-download-meta', ( e: any ) => { 35 - this._setIsSyncing(true); 36 - this._setSyncPhotoTotal(e.payload.photos_total); 37 - this._setSyncPhotoTransfers(e.payload.photos_total - e.payload.photos_uploading); 38 - this._setSyncType('Download'); 39 - 40 - console.log(e.payload) 41 - }) 42 - 43 - listen('sync-finished', () => { 44 - this._setIsSyncing(false); 45 - }) 46 - 47 - listen('sync-failed', ( e: any ) => { 48 - this._setSyncError(e.payload); 49 - }) 50 - } 51 - 52 - public async TriggerSync(){ 53 - this._setIsSyncing(true); 54 - invoke('sync_photos', { token: (await invoke('get_config_value_string', { key: 'token' })) }); 55 - } 56 - }
+1
src/Components/Managers/ViewManager.tsx
··· 9 9 private _eventListeners: { from: ViewState, to: ViewState, cb: () => void }[] = []; 10 10 11 11 public ChangeState( state: ViewState ){ 12 + console.log('From: ' + this._state + ' To: ' + state); 12 13 this._eventListeners.filter(x => x.from === this._state && x.to === state).forEach(c => c.cb()); 13 14 this._state = state; 14 15 }
-153
src/Components/NavBar.tsx
··· 1 - import { invoke } from '@tauri-apps/api/core'; 2 - import { emit } from '@tauri-apps/api/event'; 3 - import { getCurrentWebviewWindow } from '@tauri-apps/api/webviewWindow'; 4 - import anime from 'animejs'; 5 - import { Show, onMount } from 'solid-js'; 6 - import { ViewState } from './Managers/ViewManager'; 7 - 8 - const appWindow = getCurrentWebviewWindow(); 9 - 10 - let NavBar = () => { 11 - let dropdownVisible = false; 12 - let inAnimation = false; 13 - let dropdown: HTMLElement; 14 - 15 - onMount(() => { 16 - anime.set(dropdown, { opacity: 0, translateX: -10 }); 17 - dropdown.style.display = 'none'; 18 - }) 19 - 20 - let setDropdownVisibility = ( visible: boolean ) => { 21 - if(inAnimation)return; 22 - 23 - if(dropdownVisible !== visible){ 24 - dropdownVisible = visible; 25 - inAnimation = true; 26 - 27 - if(visible){ 28 - dropdown.style.display = 'block'; 29 - 30 - anime({ 31 - targets: dropdown, 32 - opacity: 1, 33 - translateX: 0, 34 - easing: 'easeInOutQuad', 35 - duration: 250, 36 - complete: () => { 37 - inAnimation = false; 38 - } 39 - }) 40 - } else{ 41 - anime({ 42 - targets: dropdown, 43 - opacity: 0, 44 - translateX: -10, 45 - easing: 'easeInOutQuad', 46 - duration: 250, 47 - complete: () => { 48 - inAnimation = false; 49 - dropdown.style.display = 'none'; 50 - } 51 - }) 52 - } 53 - } 54 - } 55 - 56 - window.CloseAllPopups.push(() => setDropdownVisibility(false)); 57 - 58 - return ( 59 - <> 60 - <div class="navbar" data-tauri-drag-region> 61 - <div class="tabs" data-tauri-drag-region> 62 - <div class="nav-tab" onClick={() => { 63 - window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 64 - anime( 65 - { 66 - targets: '.settings', 67 - opacity: 0, 68 - translateX: '500px', 69 - easing: 'easeInOutQuad', 70 - duration: 250, 71 - complete: () => { 72 - anime.set('.settings', { display: 'none' }); 73 - } 74 - }) 75 - }}>Photos</div> 76 - </div> 77 - <div class="nav-tab" style={{ width: '200px', "text-align": 'center', background: 'transparent' }} data-tauri-drag-region> 78 - <Show when={window.SyncManager.IsSyncing()}> 79 - <Show when={ window.SyncManager.SyncError() == "" } fallback={ "Error: " + window.SyncManager.SyncError() }> 80 - <div style={{ width: '100%', "text-align": 'center', 'font-size': '14px' }}> 81 - { window.SyncManager.SyncType() }ing: { window.SyncManager.SyncPhotoTransfers () } / { window.SyncManager.SyncPhotoTotal() }<br /> 82 - <div style={{ width: '80%', height: '2px', margin: 'auto', "margin-top": '5px', background: '#111' }}> 83 - <div style={{ height: '2px', width: (window.SyncManager.SyncPhotoTransfers() / window.SyncManager.SyncPhotoTotal()) * 100 + '%', background: '#00ccff' }}></div> 84 - </div> 85 - </div> 86 - </Show> 87 - </Show> 88 - </div> 89 - <div class="account" onClick={() => setDropdownVisibility(!dropdownVisible)}> 90 - <Show when={window.AccountManager.hasAccount()}> 91 - <div class="user-pfp" style={{ background: 92 - `url('https://cdn.phazed.xyz/id/avatars/${window.AccountManager.Profile()?.id}/${window.AccountManager.Profile()?.avatar}.png')` }}></div> 93 - </Show> 94 - <div class="icon"> 95 - <img draggable="false" width="24" height="24" src="/icon/caret-down-solid.svg"></img> 96 - </div> 97 - </div> 98 - <div class="control-lights"> 99 - <div class="light" onClick={() => appWindow.minimize()}> 100 - <img draggable="false" width="24" height="24" src="/icon/minus-solid.svg"></img> 101 - </div> 102 - <div class="light" onClick={() => appWindow.toggleMaximize()}> 103 - <img draggable="false" width="24" height="24" src="/icon/square-regular.svg"></img> 104 - </div> 105 - <div class="light" onClick={() => { appWindow.hide(); emit('hide-window'); } }> 106 - <img draggable="false" width="24" height="24" src="/icon/x-solid.svg"></img> 107 - </div> 108 - </div> 109 - </div> 110 - 111 - <div class="dropdown" ref={( el ) => dropdown = el}> 112 - <div class="dropdown-button" onClick={async () => { 113 - anime.set('.settings', { display: 'block' }); 114 - anime({ 115 - targets: '.settings', 116 - opacity: 1, 117 - translateX: '0px', 118 - easing: 'easeInOutQuad', 119 - duration: 250 120 - }) 121 - 122 - window.ViewManager.ChangeState(ViewState.SETTINGS); 123 - setDropdownVisibility(false); 124 - }}>Settings</div> 125 - 126 - <Show when={!window.AccountManager.hasAccount()} fallback={ 127 - <div class="dropdown-button" onClick={async () => { 128 - window.AccountManager.logout() 129 - .then(data => { 130 - console.log(data); 131 - setDropdownVisibility(false); 132 - }) 133 - .catch(e => { 134 - console.error(e); 135 - 136 - invoke('set_config_value_string', { key: 'token', value: '' }); 137 - window.location.reload(); 138 - 139 - setDropdownVisibility(false); 140 - }) 141 - }}>Sign Out</div> 142 - }> 143 - <div class="dropdown-button" onClick={() => { 144 - window.AccountManager.login(); 145 - setDropdownVisibility(false); 146 - }}>Sign In</div> 147 - </Show> 148 - </div> 149 - </> 150 - ) 151 - } 152 - 153 - export default NavBar;
+111 -77
src/Components/PhotoList.tsx
··· 1 - import { onCleanup, onMount } from "solid-js"; 1 + import { createSignal, onCleanup, onMount, Show } from "solid-js"; 2 2 import { listen } from '@tauri-apps/api/event'; 3 3 import { Window } from "@tauri-apps/api/window"; 4 4 5 - import anime from "animejs"; 6 5 import FilterMenu from "./FilterMenu"; 7 6 import { ViewState } from "./Managers/ViewManager"; 7 + import { invoke } from "@tauri-apps/api/core"; 8 + import { animate, utils } from "animejs"; 8 9 9 10 enum ListPopup{ 10 11 FILTERS, ··· 12 13 } 13 14 14 15 let PhotoList = () => { 15 - let photoTreeLoadingContainer: HTMLElement; 16 - 17 16 let scrollToTop: HTMLElement; 18 17 let scrollToTopActive = false; 19 18 20 19 let photoContainer: HTMLCanvasElement; 21 - let photoContainerBG: HTMLCanvasElement; 22 20 23 21 let filterContainer: HTMLDivElement; 24 22 25 23 let ctx: CanvasRenderingContext2D; 26 - let ctxBG: CanvasRenderingContext2D; 27 24 28 25 let scroll: number = 0; 29 26 let targetScroll: number = 0; ··· 32 29 33 30 let currentPopup = ListPopup.NONE; 34 31 32 + let [ updateAvailable, setUpdateAvailable ] = createSignal(false); 33 + 35 34 Window.getCurrent().isVisible().then(visible => { 36 35 quitRender = !visible; 37 36 }) 38 37 39 38 40 39 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => { 41 - anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 40 + animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 }); 41 + animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 42 + animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 42 43 }); 43 44 44 45 window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => { 45 - anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 46 + animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' }); 47 + animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 48 + animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 46 49 }); 47 50 48 51 49 52 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.PHOTO_VIEWER, () => { 50 - anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 51 - anime({ targets: '.filter-options', opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 52 - anime({ targets: '.reload-photos', opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 53 + animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 }); 54 + animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 55 + animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 53 56 }); 54 57 55 58 window.ViewManager.OnStateTransition(ViewState.PHOTO_VIEWER, ViewState.PHOTO_LIST, () => { 56 - anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 57 - anime({ targets: '.filter-options', opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 58 - anime({ targets: '.reload-photos', opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 59 + animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' }); 60 + animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 61 + animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 59 62 }); 60 63 61 64 ··· 65 68 } 66 69 } 67 70 71 + let onResize = () => { 72 + photoContainer.width = window.innerWidth; 73 + photoContainer.height = window.innerHeight; 74 + 75 + window.PhotoListRenderingManager.ComputeLayout(); 76 + } 77 + 68 78 let closeCurrentPopup = () => { 69 79 switch(currentPopup){ 70 80 case ListPopup.FILTERS: 71 - anime({ 72 - targets: filterContainer!, 81 + animate(filterContainer!, { 73 82 opacity: 0, 83 + translateY: '10px', 74 84 easing: 'easeInOutQuad', 75 85 duration: 100, 76 - complete: () => { 86 + onComplete: () => { 77 87 filterContainer!.style.display = 'none'; 78 88 currentPopup = ListPopup.NONE; 79 89 } ··· 83 93 } 84 94 } 85 95 86 - let render = () => { 96 + let render = () => { 87 97 if(!quitRender) 88 98 requestAnimationFrame(render); 89 99 else ··· 91 101 92 102 if(!scrollToTopActive && scroll > photoContainer.height){ 93 103 scrollToTop.style.display = 'flex'; 94 - anime({ targets: scrollToTop, opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 104 + animate(scrollToTop, { opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 95 105 96 106 scrollToTopActive = true; 97 107 } else if(scrollToTopActive && scroll < photoContainer.height){ 98 - anime({ targets: scrollToTop, opacity: 0, translateY: '-10px', complete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 108 + animate(scrollToTop, { opacity: 0, translateY: '-10px', onComplete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 109 + 99 110 scrollToTopActive = false; 100 111 } 101 112 102 - if(!ctx || !ctxBG)return; 113 + if(!ctx)return; 103 114 ctx.clearRect(0, 0, photoContainer.width, photoContainer.height); 104 - ctxBG.clearRect(0, 0, photoContainerBG.width, photoContainerBG.height); 105 115 106 - scroll = scroll + (targetScroll - scroll) * 0.2; 116 + scroll = scroll + (targetScroll - scroll) * 0.1; 107 117 108 118 window.PhotoListRenderingManager.Render(ctx, photoContainer!, scroll); 109 119 ··· 116 126 117 127 ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2); 118 128 } 119 - 120 - ctxBG.drawImage(photoContainer, 0, 0); 121 129 } 122 130 123 131 listen('hide-window', () => { 124 - console.log('Hide Window'); 125 132 quitRender = true; 133 + console.log('Hide Window'); 126 134 }) 127 135 128 136 listen('show-window', () => { 137 + if(quitRender)quitRender = false; 129 138 console.log('Shown Window'); 130 - quitRender = false; 131 139 132 - if(window.PhotoManager.HasFirstLoaded) 140 + photoContainer.width = window.innerWidth; 141 + photoContainer.height = window.innerHeight; 142 + 143 + if(window.PhotoManager.HasFirstLoaded){ 133 144 requestAnimationFrame(render); 145 + window.PhotoManager.HasFirstLoaded = false; 146 + } 134 147 }) 135 148 136 149 window.PhotoManager.OnLoadingFinished(() => { 137 - anime({ 138 - targets: photoTreeLoadingContainer, 139 - height: 0, 140 - easing: 'easeInOutQuad', 141 - duration: 500, 142 - opacity: 0, 143 - complete: () => { 144 - photoTreeLoadingContainer.style.display = 'none'; 145 - } 146 - }) 150 + invoke('close_splashscreen'); 147 151 148 - anime({ 149 - targets: '.reload-photos', 152 + animate('.reload-photos', { 150 153 opacity: 1, 151 154 duration: 150, 152 155 easing: 'easeInOutQuad' 153 156 }) 154 157 155 158 window.PhotoListRenderingManager.SetCanvas(photoContainer!); 156 - window.PhotoListRenderingManager.ComputeLayout(); 157 - 158 159 render(); 159 160 }); 160 161 161 162 onMount(() => { 163 + // Update Stuff 164 + fetch('https://api.github.com/repos/phaze-the-dumb/VRChat-Photo-Manager/releases/latest') 165 + .then(data => { 166 + if(data.status !== 200)return; 167 + 168 + data.json().then(async data => { 169 + let currentVersion = await invoke('get_version'); 170 + setUpdateAvailable(data.tag_name !== currentVersion); 171 + }) 172 + }) 173 + .catch(e => { 174 + console.error(e); 175 + setUpdateAvailable(false); 176 + }) 177 + 178 + // Other Stuff 162 179 ctx = photoContainer.getContext('2d')!; 163 - ctxBG = photoContainerBG.getContext('2d')!; 164 180 165 181 window.PhotoManager.Load(); 166 182 167 - anime.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 183 + utils.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 168 184 169 - photoContainer.addEventListener('wheel', ( e: WheelEvent ) => { 170 - targetScroll += e.deltaY; 185 + photoContainer.onwheel = ( e: WheelEvent ) => { 186 + targetScroll += e.deltaY * 2; 171 187 172 188 if(targetScroll < 0) 173 189 targetScroll = 0; 174 - }); 190 + }; 175 191 176 192 window.addEventListener('keyup', closeWithKey); 193 + window.addEventListener('resize', onResize); 177 194 178 195 photoContainer.width = window.innerWidth; 179 196 photoContainer.height = window.innerHeight; 180 197 181 - photoContainerBG.width = window.innerWidth; 182 - photoContainerBG.height = window.innerHeight; 183 - 184 - window.addEventListener('resize', () => { 185 - photoContainer.width = window.innerWidth; 186 - photoContainer.height = window.innerHeight; 187 - 188 - photoContainerBG.width = window.innerWidth; 189 - photoContainerBG.height = window.innerHeight; 190 - 191 - window.PhotoListRenderingManager.ComputeLayout(); 192 - }) 193 - 194 - photoContainer.addEventListener('click', ( e: MouseEvent ) => { 198 + photoContainer.onclick = ( e: MouseEvent ) => { 195 199 let photo = window.PhotoManager.FilteredPhotos.find(x => 196 200 e.clientX > x.x && 197 201 e.clientY > x.y && ··· 204 208 window.PhotoViewerManager.OpenPhoto(photo); 205 209 // else 206 210 // currentPhotoIndex = -1; 207 - }) 211 + } 208 212 }) 209 213 210 214 onCleanup(() => { 215 + photoContainer.onwheel = () => {}; 216 + photoContainer.onclick = () => {}; 217 + 211 218 window.removeEventListener('keyup', closeWithKey); 219 + window.removeEventListener('resize', onResize); 212 220 }) 213 221 214 222 return ( 215 223 <div class="photo-list"> 216 - <div ref={filterContainer!} class="filter-container" style={{ 217 - height: window.PhotoManager.HasBeenIndexed() ? '83px' : '110px', 218 - width: window.PhotoManager.HasBeenIndexed() ? '600px' : '650px' 219 - }}> 224 + <div ref={filterContainer!} class="filter-container"> 220 225 <FilterMenu /> 221 226 </div> 222 - 223 - <div class="photo-tree-loading" ref={( el ) => photoTreeLoadingContainer = el}>Scanning Photo Tree...</div> 224 227 225 228 <div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}> 226 229 <div class="icon"> 227 230 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 228 231 </div> 229 232 </div> 230 - <div class="reload-photos" onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("Are you sure you want to reload all photos? This can cause the application to slow down while it is loading...", () => window.location.reload())}> 231 - <div class="icon" style={{ width: '17px' }}> 232 - <img draggable="false" width="17" height="17" src="/icon/arrows-rotate-solid.svg"></img> 233 - </div> 234 - </div> 235 233 236 234 <div class="filter-options"> 237 235 <div> ··· 241 239 242 240 filterContainer!.style.display = 'block'; 243 241 244 - anime({ 245 - targets: filterContainer!, 242 + animate(filterContainer!, { 246 243 opacity: 1, 244 + translateY: 0, 247 245 easing: 'easeInOutQuad', 248 246 duration: 100 249 247 }); 250 - }} class="icon" style={{ width: '20px', height: '20px', padding: '20px' }}> 248 + }} class="icon"> 251 249 <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img> 252 250 </div> 253 251 <div class="icon-label">Filters</div> 254 252 </div> 253 + 254 + <div> 255 + <div onClick={() => { 256 + window.location.reload(); 257 + }} class="icon"> 258 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/arrows-rotate-solid.svg"></img> 259 + </div> 260 + <div class="icon-label">Reload Photos</div> 261 + </div> 262 + 263 + <div> 264 + <div onClick={() => { 265 + utils.set('.settings', { display: 'block' }); 266 + animate('.settings', { 267 + opacity: 1, 268 + translateX: '0px', 269 + easing: 'easeInOutQuad', 270 + duration: 250 271 + }) 272 + 273 + window.ViewManager.ChangeState(ViewState.SETTINGS); 274 + }} class="icon"> 275 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/gear-solid-full.svg"></img> 276 + </div> 277 + <div class="icon-label">Settings</div> 278 + </div> 279 + 280 + <Show when={updateAvailable()}> 281 + <div> 282 + <div onClick={() => { 283 + invoke('open_url', { url: 'https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest' }); 284 + }} class="icon"> 285 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/download-solid-full.svg"></img> 286 + </div> 287 + <div class="icon-label">Update Available</div> 288 + </div> 289 + </Show> 255 290 </div> 256 291 257 292 <canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas> 258 - <canvas class="photo-container-bg" ref={( el ) => photoContainerBG = el}></canvas> 259 293 </div> 260 294 ) 261 295 }
+218 -110
src/Components/PhotoViewer.tsx
··· 1 1 import { For, Show, createEffect, onCleanup, onMount } from "solid-js"; 2 2 import { invoke } from '@tauri-apps/api/core'; 3 - import anime from 'animejs'; 4 3 import { WorldCache } from "./Structs/WorldCache"; 4 + import { animate, JSAnimation, utils } from "animejs"; 5 5 6 6 let PhotoViewer = () => { 7 7 let viewer: HTMLElement; ··· 21 21 let viewerContextMenuButtons: HTMLElement[] = []; 22 22 23 23 let allowedToOpenTray = false; 24 - let trayInAnimation = false; 25 24 26 25 let authorProfileButton: HTMLDivElement; 26 + 27 + let photoLayerManager!: HTMLDivElement; 27 28 28 29 let switchPhotoWithKey = ( e: KeyboardEvent ) => { 29 30 switch(e.key){ ··· 52 53 } 53 54 } 54 55 56 + let trayAnimation: JSAnimation[] = []; 57 + 55 58 let openTray = () => { 56 - if(trayOpen || trayInAnimation)return; 59 + if(trayOpen)return; 60 + trayOpen = true; 57 61 58 - trayOpen = true; 59 - trayInAnimation = true; 62 + trayAnimation.forEach(anim => anim.cancel()); 60 63 61 64 window.CloseAllPopups.forEach(p => p()); 62 - anime({ targets: photoTray, bottom: '0px', duration: 500 }); 65 + trayAnimation[0] = animate(photoTray, { bottom: '-150px', duration: 500, ease: 'outElastic' }); 63 66 64 - anime({ 65 - targets: photoControls, 67 + trayAnimation[1] = animate(photoControls, { 66 68 bottom: '160px', 69 + ease: 'outElastic', 67 70 scale: '0.75', 68 71 opacity: 0, 69 72 duration: 500, 70 - complete: () => { 73 + onComplete: () => { 71 74 photoControls.style.display = 'none'; 72 - trayInAnimation = false; 73 75 } 74 76 }); 75 77 76 78 photoTrayCloseBtn.style.display = 'flex'; 77 - anime({ 78 - targets: photoTrayCloseBtn, 79 + trayAnimation[2] = animate(photoTrayCloseBtn, { 79 80 bottom: '160px', 81 + ease: 'outElastic', 80 82 opacity: 1, 81 83 scale: 1, 82 84 duration: 500 ··· 84 86 } 85 87 86 88 let copyImage = () => { 87 - let canvas = document.createElement('canvas'); 88 - let ctx = canvas.getContext('2d')!; 89 - 90 - canvas.width = window.PhotoViewerManager.CurrentPhoto()?.width || 0; 91 - canvas.height = window.PhotoViewerManager.CurrentPhoto()?.height || 0; 92 - 93 - ctx.drawImage(imageViewer, 0, 0); 94 - 95 - canvas.toBlob(( blob ) => { 96 - navigator.clipboard.write([ 97 - new ClipboardItem({ 98 - 'image/png': blob! 99 - }) 100 - ]); 101 - 102 - canvas.remove(); 89 + let path; 90 + let photo = window.PhotoViewerManager.CurrentPhoto()!; 103 91 104 - anime.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 105 - anime({ 106 - targets: '.copy-notif', 107 - opacity: 1, 108 - translateY: '0px' 109 - }); 92 + switch(layerManagerViewing){ 93 + case LayerManagerView.DEFAULT: 94 + path = photo.path; 95 + break; 96 + case LayerManagerView.ENVIRONMENT: 97 + path = photo.environmentLayer!.path; 98 + break; 99 + case LayerManagerView.PLAYER: 100 + path = photo.playerLayer!.path; 101 + break; 102 + } 110 103 111 - setTimeout(() => { 112 - anime({ 113 - targets: '.copy-notif', 114 - opacity: 0, 115 - translateY: '-100px' 104 + invoke('copy_image', { path }) 105 + .then(() => { 106 + utils.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 107 + animate('.copy-notif', { 108 + ease: 'outElastic', 109 + opacity: 1, 110 + translateY: '0px' 116 111 }); 117 - }, 2000); 118 - }); 112 + 113 + setTimeout(() => { 114 + animate('.copy-notif', { 115 + ease: 'outElastic', 116 + opacity: 0, 117 + translateY: '-100px' 118 + }); 119 + }, 2000); 120 + }) 119 121 } 120 122 121 123 let closeTray = () => { 122 - if(!trayOpen || trayInAnimation)return; 123 - trayInAnimation = true; 124 + if(!trayOpen)return; 125 + trayOpen = false; 126 + 127 + trayAnimation.forEach(anim => anim.cancel()); 124 128 125 129 window.CloseAllPopups.forEach(p => p()); 126 - anime({ targets: photoTray, bottom: '-150px', duration: 500 }); 130 + trayAnimation[0] = animate(photoTray, { bottom: '-300px', duration: 500, ease: 'outElastic' }); 127 131 128 - anime({ 129 - targets: photoTrayCloseBtn, 132 + trayAnimation[2] = animate(photoTrayCloseBtn, { 130 133 bottom: '10px', 131 134 scale: '0.75', 135 + ease: 'outElastic', 132 136 opacity: 0, 133 137 duration: 500, 134 - complete: () => { 138 + onComplete: () => { 135 139 photoTrayCloseBtn.style.display = 'none'; 136 - trayOpen = false; 137 - trayInAnimation = false; 138 140 } 139 141 }); 140 142 141 143 photoControls.style.display = 'flex'; 142 - anime({ 143 - targets: photoControls, 144 + trayAnimation[1] = animate(photoControls, { 144 145 bottom: '10px', 146 + ease: 'outElastic', 145 147 opacity: 1, 146 148 scale: 1, 147 149 duration: 500, 148 150 }) 149 151 } 150 152 153 + let resizeImage = () => { 154 + let dstWidth; 155 + let dstHeight; 156 + 157 + let imgHeight = imageViewer.naturalHeight; 158 + let imgWidth = imageViewer.naturalWidth; 159 + 160 + if( 161 + imgWidth / window.innerWidth < 162 + imgHeight / window.innerHeight 163 + ) { 164 + dstWidth = imgWidth * (window.innerHeight / imgHeight); 165 + dstHeight = window.innerHeight; 166 + } else{ 167 + dstWidth = window.innerWidth; 168 + dstHeight = imgHeight * (window.innerWidth / imgWidth); 169 + } 170 + 171 + imageViewer.style.width = dstWidth + 'px'; 172 + imageViewer.style.height = dstHeight + 'px'; 173 + } 174 + 151 175 onMount(() => { 152 - anime.set(photoControls, { translateX: '-50%' }); 153 - anime.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 176 + utils.set(photoControls, { translateX: '-50%' }); 177 + utils.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 178 + utils.set(photoLayerManager, { translateY: '20px', opacity: 0, display: 'none' }); 154 179 155 180 window.addEventListener('keyup', switchPhotoWithKey); 181 + window.addEventListener('resize', () => resizeImage()); 156 182 157 183 let contextMenuOpen = false; 158 184 window.CloseAllPopups.push(() => { 159 185 contextMenuOpen = false; 160 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 186 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 161 187 162 - anime({ 163 - targets: viewerContextMenu, 188 + animate(viewerContextMenu, { 164 189 opacity: 0, 165 190 easing: 'easeInOutQuad', 166 191 rotate: '30deg', 167 192 duration: 100, 168 - complete: () => { 193 + onComplete: () => { 169 194 viewerContextMenu.style.display = 'none'; 170 195 } 171 196 }) 172 197 }); 173 198 199 + window.CloseAllPopups.push(() => { 200 + layerManagerOpen = false; 201 + if(layerManagerAnimation)layerManagerAnimation.cancel(); 202 + 203 + layerManagerAnimation = animate(photoLayerManager, { translateY: '20px', opacity: 0, duration: 100, onComplete: () => utils.set(photoLayerManager, { display: 'none' }) }); 204 + }); 205 + 174 206 viewerContextMenuButtons[0].onclick = async () => { 175 207 window.CloseAllPopups.forEach(p => p()); 176 208 // Context Menu -> Open file location ··· 189 221 if(contextMenuOpen){ 190 222 contextMenuOpen = false; 191 223 192 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 224 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 193 225 194 - anime({ 195 - targets: viewerContextMenu, 226 + animate(viewerContextMenu, { 196 227 opacity: 0, 197 228 rotate: '30deg', 198 229 easing: 'easeInOutQuad', 199 230 duration: 100, 200 - complete: () => { 231 + onComplete: () => { 201 232 viewerContextMenu.style.display = 'none'; 202 233 } 203 234 }) ··· 208 239 viewerContextMenu.style.left = e.clientX + 'px'; 209 240 viewerContextMenu.style.display = 'block'; 210 241 211 - anime.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 242 + utils.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 212 243 213 - anime({ 214 - targets: viewerContextMenu, 244 + animate(viewerContextMenu, { 215 245 opacity: 1, 216 246 rotate: '0deg', 217 247 easing: 'easeInOutQuad', ··· 230 260 imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full"; 231 261 imageViewer.crossOrigin = 'anonymous'; 232 262 233 - anime({ 234 - targets: imageViewer, 263 + imageViewer.onload = () => { resizeImage(); } 264 + 265 + animate(imageViewer, { 235 266 opacity: 1, 236 267 delay: 50, 237 268 duration: 150, ··· 291 322 let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML; 292 323 293 324 authorProfileButton!.style.display = 'flex'; 294 - authorProfileButton!.onclick = () => 325 + authorProfileButton!.onclick = () => { 326 + console.log(id); 295 327 invoke('open_url', { url: 'https://vrchat.com/home/user/' + id }); 328 + } 296 329 } catch(e){ 297 330 console.error(e); 298 331 console.log('Couldn\'t decode metadata') ··· 305 338 } 306 339 } else{ 307 340 trayButton.style.display = 'none'; 341 + authorProfileButton!.style.display = 'none'; 342 + 308 343 closeTray(); 309 344 } 310 345 } ··· 315 350 if(photo && !isOpen){ 316 351 viewer.style.display = 'flex'; 317 352 318 - anime({ 319 - targets: viewer, 353 + animate(viewer, { 320 354 opacity: 1, 321 355 easing: 'easeInOutQuad', 322 356 duration: 150 323 357 }); 324 - 325 - anime({ 326 - targets: '.navbar', 327 - top: '-50px' 328 - }) 329 358 330 - anime.set('.prev-button', { left: '-50px', top: '50%' }); 331 - anime.set('.next-button', { right: '-50px', top: '50%' }); 359 + utils.set('.prev-button', { left: '-50px', top: '50%' }); 360 + utils.set('.next-button', { right: '-50px', top: '50%' }); 332 361 333 - anime({ targets: '.prev-button', left: '0', easing: 'easeInOutQuad', duration: 100 }); 334 - anime({ targets: '.next-button', right: '0', easing: 'easeInOutQuad', duration: 100 }); 362 + animate('.prev-button', { left: '0', easing: 'easeInOutQuad', duration: 100 }); 363 + animate('.next-button', { right: '0', easing: 'easeInOutQuad', duration: 100 }); 335 364 336 365 window.CloseAllPopups.forEach(p => p()); 337 366 } else if(!photo && isOpen){ 338 - anime({ 339 - targets: viewer, 367 + animate(viewer, { 340 368 opacity: 0, 341 369 easing: 'easeInOutQuad', 342 370 duration: 150, 343 - complete: () => { 371 + onComplete: () => { 344 372 viewer.style.display = 'none'; 345 373 } 346 374 }); 347 - 348 - anime({ 349 - targets: '.navbar', 350 - top: '0px' 351 - }) 352 375 353 376 window.CloseAllPopups.forEach(p => p()); 354 377 355 - anime({ targets: '.prev-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 356 - anime({ targets: '.next-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 378 + animate('.prev-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 379 + animate('.next-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 357 380 } 358 381 359 382 isOpen = photo != null; ··· 394 417 ) 395 418 } 396 419 420 + enum LayerManagerView{ 421 + DEFAULT, 422 + PLAYER, 423 + ENVIRONMENT 424 + } 425 + 426 + let layerManagerOpen = false; 427 + let layerManagerAnimation: null | JSAnimation = null; 428 + let layerManagerViewing = LayerManagerView.DEFAULT; 429 + 430 + let toggleLayerManager = () => { 431 + if(layerManagerOpen){ 432 + // Close 433 + layerManagerOpen = false; 434 + if(layerManagerAnimation)layerManagerAnimation.cancel(); 435 + 436 + layerManagerAnimation = animate(photoLayerManager, { translateY: '20px', opacity: 0, duration: 100, onComplete: () => utils.set(photoLayerManager, { display: 'none' }) }); 437 + } else{ 438 + // Open 439 + layerManagerOpen = true; 440 + if(layerManagerAnimation)layerManagerAnimation.cancel(); 441 + 442 + utils.set(photoLayerManager, { display: 'block' }); 443 + layerManagerAnimation = animate(photoLayerManager, { translateY: '0px', opacity: 1, duration: 100 }); 444 + } 445 + } 446 + 397 447 return ( 398 448 <div class="photo-viewer" ref={( el ) => viewer = el}> 449 + <div class="photo-layer-manager" ref={photoLayerManager}> 450 + <Show when={window.PhotoViewerManager.CurrentPhoto()?.playerLayer}> 451 + <div class="photo-layer-manager-layer" onClick={() => { 452 + let photo = window.PhotoViewerManager.CurrentPhoto()?.playerLayer; 453 + if(!photo)return; 454 + 455 + layerManagerViewing = LayerManagerView.PLAYER; 456 + 457 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full"; 458 + imageViewer.crossOrigin = 'anonymous'; 459 + }}>Player Layer</div> 460 + </Show> 461 + <Show when={window.PhotoViewerManager.CurrentPhoto()?.environmentLayer}> 462 + <div class="photo-layer-manager-layer" onClick={() => { 463 + let photo = window.PhotoViewerManager.CurrentPhoto()?.environmentLayer; 464 + if(!photo)return; 465 + 466 + layerManagerViewing = LayerManagerView.ENVIRONMENT; 467 + 468 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full"; 469 + imageViewer.crossOrigin = 'anonymous'; 470 + }}>Environment Layer</div> 471 + </Show> 472 + <div class="photo-layer-manager-layer" onClick={() => { 473 + let photo = window.PhotoViewerManager.CurrentPhoto(); 474 + if(!photo)return; 475 + 476 + layerManagerViewing = LayerManagerView.DEFAULT; 477 + 478 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full"; 479 + imageViewer.crossOrigin = 'anonymous'; 480 + }}>Default Layer</div> 481 + </div> 482 + 399 483 <div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}> 400 484 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div> 401 485 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div> 402 486 </div> 403 487 404 488 <div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}> 405 - <div class="icon" style={{ width: '10px', margin: '0' }}> 489 + <div class="icon-small" style={{ width: '10px', margin: '0' }}> 406 490 <img draggable="false" src="/icon/x-solid.svg"></img> 407 491 </div> 408 492 </div> 409 - <img class="image-container" ref={( el ) => imageViewer = el} /> 493 + 494 + <div style={{ 495 + width: '100%', 496 + height: '100%', 497 + display: 'flex', 498 + "justify-content": 'center', 499 + 'align-items': 'center' 500 + }}> 501 + <img class="image-container" ref={( el ) => imageViewer = el} /> 502 + </div> 410 503 411 504 <div class="prev-button" onClick={() => { 412 505 window.CloseAllPopups.forEach(p => p()); 413 506 window.PhotoViewerManager.PreviousPhoto(); 414 507 }}> 415 - <div class="icon" style={{ width: '15px', margin: '0' }}> 508 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 416 509 <img draggable="false" src="/icon/arrow-left-solid.svg"></img> 417 510 </div> 418 511 </div> ··· 421 514 window.CloseAllPopups.forEach(p => p()); 422 515 window.PhotoViewerManager.NextPhoto(); 423 516 }}> 424 - <div class="icon" style={{ width: '15px', margin: '0' }}> 517 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 425 518 <img draggable="false" src="/icon/arrow-right-solid.svg"></img> 426 519 </div> 427 520 </div> ··· 432 525 onClick={() => closeTray()} 433 526 ref={( el ) => photoTrayCloseBtn = el} 434 527 > 435 - <div class="icon" style={{ width: '12px', margin: '0' }}> 528 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 436 529 <img draggable="false" src="/icon/angle-down-solid.svg"></img> 437 530 </div> 438 531 </div> 439 532 440 533 <div class="control-buttons" ref={( el ) => photoControls = el}> 441 534 <div class="viewer-button" 442 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 443 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 535 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 536 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 444 537 onClick={() => { copyImage(); }}> 445 - <div class="icon" style={{ width: '12px', margin: '0' }}> 538 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 446 539 <img draggable="false" src="/icon/copy-solid.svg"></img> 447 540 </div> 448 541 </div> 449 542 <div class="viewer-button" style={{ width: '50px' }} 450 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })} 451 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })} 543 + onMouseOver={( el ) => animate(el.currentTarget, { width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })} 544 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })} 452 545 ref={( el ) => trayButton = el} 453 546 onClick={() => openTray()} 454 547 > 455 - <div class="icon" style={{ width: '12px', margin: '0' }}> 548 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 456 549 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 457 550 </div> 458 551 </div> 459 552 460 553 <div class="viewer-button" 461 554 ref={authorProfileButton!} 462 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 463 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 555 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 556 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 464 557 > 465 - <div class="icon" style={{ width: '12px', margin: '0' }}> 558 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 466 559 <img draggable="false" src="/icon/user-solid.svg"></img> 467 560 </div> 468 561 </div> 469 562 563 + <Show when={window.PhotoViewerManager.CurrentPhoto()?.isMultiLayer}> 564 + <div class="viewer-button" 565 + onClick={toggleLayerManager} 566 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 567 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 568 + > 569 + <div class="icon-small" style={{ width: '17px', margin: '0' }}> 570 + <img draggable="false" src="/icon/layer-group-solid-full.svg"></img> 571 + </div> 572 + </div> 573 + </Show> 574 + 470 575 <div class="viewer-button" 471 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 472 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 473 - onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("Are you sure you want to delete this photo?", async () => { invoke("delete_photo", { 474 - path: window.PhotoViewerManager.CurrentPhoto()?.path, 475 - token: (await invoke('get_config_value_string', { key: 'token' })) || "none", 476 - isSyncing: window.AccountManager.hasAccount() ? window.AccountManager.Storage()?.isSyncing : false 477 - }); 576 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 577 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 578 + onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("Are you sure you want to delete this photo?", async () => { 579 + let photo = window.PhotoViewerManager.CurrentPhoto(); 580 + if(!photo)return; 581 + 582 + invoke("delete_photo", { path: photo.path }); 583 + 584 + if(photo.playerLayer)invoke("delete_photo", { path: photo.playerLayer.path }); 585 + if(photo.environmentLayer)invoke("delete_photo", { path: photo.environmentLayer.path }); 478 586 })}> 479 - <div class="icon" style={{ width: '12px', margin: '0' }}> 587 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 480 588 <img draggable="false" src="/icon/trash-solid.svg"></img> 481 589 </div> 482 590 </div>
+191 -208
src/Components/SettingsMenu.tsx
··· 1 1 import { onCleanup, onMount, Show } from "solid-js"; 2 2 import { bytesToFormatted } from "../utils"; 3 3 import { invoke } from '@tauri-apps/api/core'; 4 - import anime from "animejs"; 5 4 import { ViewState } from "./Managers/ViewManager"; 5 + import { animate, utils } from "animejs"; 6 6 7 7 let SettingsMenu = () => { 8 - let sliderBar: HTMLElement; 9 - let settingsContainer: HTMLElement; 10 - let currentButton = 0; 11 - let lastClickedButton = -1; 8 + // let sliderBar: HTMLElement; 9 + // let settingsContainer: HTMLElement; 10 + // let currentButton = 0; 11 + // let lastClickedButton = -1; 12 12 let finalPathConfirm: HTMLElement; 13 13 let finalPathInput: HTMLElement; 14 14 let finalPathData: string; ··· 17 17 let closeWithKey = ( e: KeyboardEvent ) => { 18 18 if(e.key === 'Escape'){ 19 19 window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 20 - anime({ 21 - targets: '.settings', 20 + console.log('h'); 21 + animate('.settings',{ 22 22 opacity: 0, 23 23 translateX: '500px', 24 24 easing: 'easeInOutQuad', 25 25 duration: 250, 26 - complete: () => { 27 - anime.set('.settings', { display: 'none' }); 26 + onComplete: () => { 27 + console.log('h'); 28 + utils.set('.settings', { display: 'none' }); 28 29 } 29 30 }) 30 31 } ··· 34 35 if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){ 35 36 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 36 37 37 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 38 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 38 + animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 39 + animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 39 40 } else{ 40 41 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 41 42 42 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 43 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 43 + animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 44 + animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 44 45 } 45 46 46 - let sliderMouseDown = false; 47 - let mouseStartX = 0; 47 + // let sliderMouseDown = false; 48 + // let mouseStartX = 0; 48 49 49 - let width = window.innerWidth; 50 - let buttons = [ 370, 680 ]; 50 + // let width = window.innerWidth; 51 + // let buttons = [ 370, 680 ]; 51 52 52 - let sliderPos = width / 2 - buttons[currentButton]; 53 - let sliderScale = width / (buttons[1] - buttons[0]); 53 + // let sliderPos = width / 2 - buttons[currentButton]; 54 + // let sliderScale = width / (buttons[1] - buttons[0]); 54 55 55 - let render = () => { 56 - requestAnimationFrame(render); 56 + // let render = () => { 57 + // requestAnimationFrame(render); 57 58 58 - if(!sliderMouseDown){ 59 - sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 60 - anime.set(sliderBar, { translateX: sliderPos }); 59 + // if(!sliderMouseDown){ 60 + // sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 61 + // utils.set(sliderBar, { translateX: sliderPos }); 61 62 62 - settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 63 - } 64 - } 63 + // settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 64 + // } 65 + // } 65 66 66 - render(); 67 - anime.set(sliderBar, { translateX: sliderPos }); 67 + // render(); 68 + // utils.set(sliderBar, { translateX: sliderPos }); 68 69 69 - sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 70 - sliderMouseDown = true; 71 - mouseStartX = e.touches[0].clientX; 72 - }) 70 + // sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 71 + // sliderMouseDown = true; 72 + // mouseStartX = e.touches[0].clientX; 73 + // }) 73 74 74 - window.addEventListener('touchmove', ( e: TouchEvent ) => { 75 - if(sliderMouseDown){ 76 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 77 - settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 78 - } 79 - }) 75 + // window.addEventListener('touchmove', ( e: TouchEvent ) => { 76 + // if(sliderMouseDown){ 77 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 78 + // settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 79 + // } 80 + // }) 80 81 81 82 window.addEventListener('keyup', closeWithKey); 82 83 83 - window.addEventListener('touchend', ( e: TouchEvent ) => { 84 - if(sliderMouseDown){ 85 - sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 84 + // window.addEventListener('touchend', ( e: TouchEvent ) => { 85 + // if(sliderMouseDown){ 86 + // sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 86 87 87 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 88 - sliderMouseDown = false; 88 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 89 + // sliderMouseDown = false; 89 90 90 - if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 91 - let shortestDistance = 0; 92 - let selectedButton = -1; 91 + // if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 92 + // let shortestDistance = 0; 93 + // let selectedButton = -1; 93 94 94 - buttons.forEach(( pos, indx ) => { 95 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 95 + // buttons.forEach(( pos, indx ) => { 96 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 96 97 97 - if(selectedButton === -1){ 98 - shortestDistance = dis; 99 - selectedButton = indx; 100 - } else if(shortestDistance > dis){ 101 - shortestDistance = dis; 102 - selectedButton = indx; 103 - } 104 - }) 98 + // if(selectedButton === -1){ 99 + // shortestDistance = dis; 100 + // selectedButton = indx; 101 + // } else if(shortestDistance > dis){ 102 + // shortestDistance = dis; 103 + // selectedButton = indx; 104 + // } 105 + // }) 105 106 106 - currentButton = selectedButton; 107 - } else if(lastClickedButton != -1){ 108 - currentButton = lastClickedButton; 109 - lastClickedButton = -1 110 - } 111 - } 112 - }) 107 + // currentButton = selectedButton; 108 + // } else if(lastClickedButton != -1){ 109 + // currentButton = lastClickedButton; 110 + // lastClickedButton = -1 111 + // } 112 + // } 113 + // }) 113 114 114 - sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 115 - sliderMouseDown = true; 116 - mouseStartX = e.clientX; 117 - }); 115 + // sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 116 + // sliderMouseDown = true; 117 + // mouseStartX = e.clientX; 118 + // }); 118 119 119 - window.addEventListener('mousemove', ( e: MouseEvent ) => { 120 - if(sliderMouseDown){ 121 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 122 - settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px'; 123 - settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 124 - } 125 - }) 120 + // window.addEventListener('mousemove', ( e: MouseEvent ) => { 121 + // if(sliderMouseDown){ 122 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 123 + // settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px'; 124 + // settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 125 + // } 126 + // }) 126 127 127 - window.addEventListener('mouseup', ( e: MouseEvent ) => { 128 - if(sliderMouseDown){ 129 - sliderPos = sliderPos - (mouseStartX - e.clientX); 128 + // window.addEventListener('mouseup', ( e: MouseEvent ) => { 129 + // if(sliderMouseDown){ 130 + // sliderPos = sliderPos - (mouseStartX - e.clientX); 130 131 131 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 132 - sliderMouseDown = false; 132 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 133 + // sliderMouseDown = false; 133 134 134 - if(Math.abs(mouseStartX - e.clientX) > 50){ 135 - let shortestDistance = 0; 136 - let selectedButton = -1; 135 + // if(Math.abs(mouseStartX - e.clientX) > 50){ 136 + // let shortestDistance = 0; 137 + // let selectedButton = -1; 137 138 138 - buttons.forEach(( pos, indx ) => { 139 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 139 + // buttons.forEach(( pos, indx ) => { 140 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 140 141 141 - if(selectedButton === -1){ 142 - shortestDistance = dis; 143 - selectedButton = indx; 144 - } else if(shortestDistance > dis){ 145 - shortestDistance = dis; 146 - selectedButton = indx; 147 - } 148 - }) 142 + // if(selectedButton === -1){ 143 + // shortestDistance = dis; 144 + // selectedButton = indx; 145 + // } else if(shortestDistance > dis){ 146 + // shortestDistance = dis; 147 + // selectedButton = indx; 148 + // } 149 + // }) 149 150 150 - currentButton = selectedButton; 151 - } else if(lastClickedButton != -1){ 152 - currentButton = lastClickedButton; 153 - lastClickedButton = -1 154 - } 155 - } 156 - }) 151 + // currentButton = selectedButton; 152 + // } else if(lastClickedButton != -1){ 153 + // currentButton = lastClickedButton; 154 + // lastClickedButton = -1 155 + // } 156 + // } 157 + // }) 157 158 158 - window.addEventListener('resize', () => { 159 - width = window.innerWidth; 160 - sliderPos = width / 2 - buttons[currentButton]; 161 - sliderScale = width / (buttons[1] - buttons[0]); 159 + // window.addEventListener('resize', () => { 160 + // width = window.innerWidth; 161 + // sliderPos = width / 2 - buttons[currentButton]; 162 + // sliderScale = width / (buttons[1] - buttons[0]); 162 163 163 - anime.set(sliderBar, { translateX: sliderPos }); 164 - }) 164 + // utils.set(sliderBar, { translateX: sliderPos }); 165 + // }) 165 166 166 - sliderBar.addEventListener('wheel', ( e: WheelEvent ) => { 167 - if(e.deltaY > 0){ 168 - if(buttons[currentButton + 1]) 169 - currentButton++; 170 - } else{ 171 - if(buttons[currentButton - 1]) 172 - currentButton--; 173 - } 174 - }) 167 + // sliderBar.addEventListener('wheel', ( e: WheelEvent ) => { 168 + // if(e.deltaY > 0){ 169 + // if(buttons[currentButton + 1]) 170 + // currentButton++; 171 + // } else{ 172 + // if(buttons[currentButton - 1]) 173 + // currentButton--; 174 + // } 175 + // }) 175 176 }) 176 177 177 178 onCleanup(() => { ··· 180 181 181 182 return ( 182 183 <div class="settings"> 183 - <div class="settings-container" ref={( el ) => settingsContainer = el}> 184 + <div class="settings-close" onClick={() => { 185 + window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 186 + animate('.settings', 187 + { 188 + opacity: 0, 189 + translateX: '500px', 190 + easing: 'easeInOutQuad', 191 + duration: 250, 192 + onComplete: () => { 193 + utils.set('.settings', { display: 'none' }); 194 + } 195 + }) 196 + }}> 197 + <div class="icon"><img draggable="false" src="/icon/x-solid.svg"></img></div> 198 + </div> 199 + {/* <div class="settings-container" ref={( el ) => settingsContainer = el}> */} 200 + <div class="settings-container"> 184 201 <div class="settings-block"> 185 202 <h1>Storage Settings</h1> 186 203 <p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p> ··· 199 216 200 217 <label for="start-in-bg-check"> 201 218 <div class="selection-box"> 202 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 219 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 203 220 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 204 221 </div> 205 222 </div> ··· 207 224 </div> 208 225 209 226 <div class="selector"> 210 - <input type="checkbox" id="start-with-win-check" ref={async ( el ) => { 211 - el.checked = await invoke('get_config_value_string', { key: 'start-with-win' }) === "true" ? true : false; 227 + <input type="checkbox" id="close-to-tray-check" ref={async ( el ) => { 228 + el.checked = await invoke('get_config_value_string', { key: 'close-to-tray' }) === "true" ? true : false; 212 229 }} onChange={( el ) => { 213 230 if(el.target.checked){ 214 - invoke('set_config_value_string', { key: 'start-with-win', value: 'true' }); 215 - invoke("start_with_win", { start: true }); 231 + invoke('set_config_value_string', { key: 'close-to-tray', value: 'true' }); 216 232 } else{ 217 - invoke('set_config_value_string', { key: 'start-with-win', value: 'false' }); 218 - invoke("start_with_win", { start: false }); 233 + invoke('set_config_value_string', { key: 'close-to-tray', value: 'false' }); 219 234 } 220 235 }} /> 221 - Start with windows 236 + Close to tray 222 237 223 - <label for="start-with-win-check"> 238 + <label for="close-to-tray-check"> 224 239 <div class="selection-box"> 225 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 240 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 226 241 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 227 242 </div> 228 243 </div> 229 244 </label> 230 245 </div> 231 246 247 + <Show when={window.OS === 'windows'}> 248 + <div class="selector"> 249 + <input type="checkbox" id="start-with-win-check" ref={async ( el ) => { 250 + el.checked = await invoke('get_config_value_string', { key: 'start-with-win' }) === "true" ? true : false; 251 + }} onChange={( el ) => { 252 + if(el.target.checked){ 253 + invoke('set_config_value_string', { key: 'start-with-win', value: 'true' }); 254 + invoke("start_with_win", { start: true }); 255 + } else{ 256 + invoke('set_config_value_string', { key: 'start-with-win', value: 'false' }); 257 + invoke("start_with_win", { start: false }); 258 + } 259 + }} /> 260 + Start with windows 261 + 262 + <label for="start-with-win-check"> 263 + <div class="selection-box"> 264 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 265 + <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 266 + </div> 267 + </div> 268 + </label> 269 + </div> 270 + </Show> 271 + 232 272 <div class="selector"> 233 273 <input type="checkbox" id="transparent-check" ref={async ( el ) => { 234 274 el.checked = await invoke('get_config_value_string', { key: 'transparent' }) === "true" ? true : false; ··· 236 276 if(el.target.checked){ 237 277 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 238 278 239 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 240 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 279 + animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 280 + animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 241 281 } else{ 242 282 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 243 283 244 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 245 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 284 + animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 285 + animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 246 286 } 247 287 }} /> 248 288 Window Transparency 249 289 250 290 <label for="transparent-check"> 251 291 <div class="selection-box"> 252 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 292 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 253 293 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 254 294 </div> 255 295 </div> ··· 274 314 </span> 275 315 <span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}> 276 316 <span class="path" style={{ color: 'green' }} onClick={async () => { 277 - finalPathPreviousData = finalPathData; 278 - finalPathConfirm.style.display = 'none'; 317 + let changed = await invoke('change_final_path', { newPath: finalPathData }); 279 318 280 - await invoke('change_final_path', { newPath: finalPathData }); 281 - await invoke('relaunch'); 319 + if(changed){ 320 + finalPathPreviousData = finalPathData; 321 + finalPathConfirm.style.display = 'none'; 282 322 283 - anime({ 284 - targets: '.settings', 285 - opacity: 0, 286 - translateX: '500px', 287 - easing: 'easeInOutQuad', 288 - duration: 250, 289 - complete: () => { 290 - anime.set('.settings', { display: 'none' }); 291 - } 292 - }) 323 + window.location.reload(); 293 324 294 - window.location.reload(); 325 + animate('.settings', { 326 + opacity: 0, 327 + translateX: '500px', 328 + easing: 'easeInOutQuad', 329 + duration: 250, 330 + onComplete: () => { 331 + utils.set('.settings', { display: 'none' }); 332 + } 333 + }) 334 + 335 + window.location.reload(); 336 + } 295 337 }}> 296 338 Save 297 339 </span> ··· 314 356 <br /> 315 357 <p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p> 316 358 </div> 317 - <div class="settings-block"> 318 - <h1>Account Settings</h1> 319 - 320 - <Show when={window.AccountManager.hasAccount()} fallback={ 321 - <div> 322 - You aren't logged in. To enable cloud sync and sharing features you need to login to your PhazeID.<br /><br /> 323 - <div class="button" onClick={() => { 324 - window.AccountManager.login(); 325 - }}>Login</div> 326 - </div> 327 - }> 328 - <div class="account-profile"> 329 - <div class="account-pfp" style={{ background: `url('https://cdn.phazed.xyz/id/avatars/${window.AccountManager.Profile()?.id}/${window.AccountManager.Profile()?.avatar}.png')` }}></div> 330 - <div class="account-desc"> 331 - <div class="reload-photos" onClick={() => window.AccountManager.Refresh()} style={{ opacity: 1 }}> 332 - <div class="icon" style={{ width: '17px' }}> 333 - <img draggable="false" width="17" height="17" src="/icon/arrows-rotate-solid.svg"></img> 334 - </div> 335 - </div> 336 - <h2>{ window.AccountManager.Profile()?.username }</h2> 337 - 338 - <Show when={window.AccountManager.Storage()?.isSyncing}> 339 - <div class="storage-bar"> 340 - <div class="storage-bar-inner" style={{ width: ((window.AccountManager.Storage()!.used / window.AccountManager.Storage()!.total) * 100) + '%' }}></div> 341 - </div> 342 - 343 - <div> 344 - { bytesToFormatted(window.AccountManager.Storage()!.used, 0) } / { bytesToFormatted(window.AccountManager.Storage()!.total, 0) }<br /><br /> 345 - 346 - <span style={{ 'font-size': '10px' }}>Server Version: { window.AccountManager.Profile()?.serverVersion }</span> 347 - </div> 348 - </Show> 349 - </div> 350 - </div> 351 - 352 - <div class="account-notice">To enable cloud storage or get more storage please contact "_phaz" on discord</div> 353 - 354 - <div class="account-notice" style={{ display: 'flex' }}> 355 - <Show when={false} fallback={ "We are deleting your photos, please leave this window open while we delete them." }> 356 - <div class="button-danger" onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("You are about to delete all your photos from the cloud, and disable syncing. This will NOT delete any local files.", async () => { 357 - // TODO: Rework all of this 358 - 359 - // props.setStorageInfo({ used: 0, storage: 0, sync: false }); 360 - // setDeletingPhotos(true); 361 - 362 - // fetch('https://photos-cdn.phazed.xyz/api/v1/allphotos', { 363 - // method: 'DELETE', 364 - // headers: { auth: (await invoke('get_config_value_string', { key: 'token' }))! } 365 - // }) 366 - // .then(data => data.json()) 367 - // .then(data => { 368 - // console.log(data); 369 - // setDeletingPhotos(false); 370 - // }) 371 - })}>Delete All Photos.</div> <div>This deletes all photos stored in the cloud and disables syncing.</div> 372 - </Show> 373 - </div> 374 - </Show> 375 - </div> 376 359 </div> 377 360 378 - <div class="slide-bar-tri"></div> 361 + {/* <div class="slide-bar-tri"></div> 379 362 <div class="slide-bar"> 380 363 <div class="inner-slide-bar" ref={( el ) => sliderBar = el}> 381 364 <div class="slider-dot"></div> ··· 386 369 <div class="slider-text" onMouseDown={() => lastClickedButton = 0}>Program Settings</div> 387 370 <div class="slider-dot"></div> 388 371 <div class="slider-dot"></div> 389 - <div class="slider-text" onMouseDown={() => lastClickedButton = 1}>Account Settings</div> 372 + <div class="slider-text" onMouseDown={() => lastClickedButton = 1}>Sync Settings</div> 390 373 <div class="slider-dot"></div> 391 374 <div class="slider-dot"></div> 392 375 <div class="slider-dot"></div> 393 376 <div class="slider-dot"></div> 394 377 <div class="slider-dot"></div> 395 378 </div> 396 - </div> 379 + </div> */} 397 380 </div> 398 381 ) 399 382 }
+43 -16
src/Components/Structs/Photo.ts
··· 6 6 export class Photo{ 7 7 path: string; 8 8 loaded: boolean = false; 9 + loadingMeta: boolean = false; 9 10 loading: boolean = false; 10 11 metaLoaded: boolean = false; 11 12 image?: HTMLCanvasElement; ··· 14 15 height?: number; 15 16 loadingRotate: number = 0; 16 17 metadata: any; 18 + 19 + error: boolean = false; 17 20 18 21 frames: number = 0; 19 22 shown: boolean = false; ··· 29 32 legacy: boolean = false; 30 33 index: number = 0; 31 34 35 + splitPath: string[]; 36 + 37 + playerLayer: Photo | null = null; 38 + environmentLayer: Photo | null = null; 39 + isMultiLayer = false; 40 + 32 41 public onMetaLoaded: () => void = () => {}; 33 42 34 43 constructor( path: string, isLegacy: boolean = false, i: number ){ ··· 37 46 this.index = i; 38 47 39 48 let split = this.path.split('_'); 49 + this.splitPath = split; 40 50 41 51 if(this.legacy) 42 52 this.dateString = split[2]; 43 53 else 44 54 this.dateString = split[1]; 45 55 56 + let timeString; 57 + if(this.legacy) 58 + timeString = split[3]; 59 + else 60 + timeString = split[2]; 61 + 46 62 let splitDateString = this.dateString.split('-'); 63 + let splitTimeString = timeString.split('-'); 47 64 48 65 this.date = new Date(); 49 66 ··· 51 68 this.date.setMonth(parseInt(splitDateString[1])); 52 69 this.date.setDate(parseInt(splitDateString[2])); 53 70 54 - let resSplit = split[3].split('x'); 71 + this.date.setHours(parseInt(splitTimeString[0])); 72 + this.date.setMinutes(parseInt(splitTimeString[1])); 73 + this.date.setSeconds(parseInt(splitTimeString[2])); 74 + 75 + let resSplit; 76 + if(this.legacy) 77 + resSplit = split[0].split('x') 78 + else 79 + resSplit = split[3].split('x') 80 + 81 + // let width = parseInt(resSplit[0]); 82 + // let height = parseInt(resSplit[1]); 83 + 84 + // if(!isNaN(width) || !isNaN(height)){ 85 + // this.width = width; 86 + // this.height = height; 55 87 56 - let width = parseInt(resSplit[0]); 57 - let height = parseInt(resSplit[1]); 88 + // let scale = Vars.PHOTO_HEIGHT / this.height; 58 89 59 - if(!isNaN(width) || !isNaN(height)){ 60 - this.width = width; 61 - this.height = height; 62 - 63 - let scale = Vars.PHOTO_HEIGHT / this.height; 64 - 65 - this.scaledWidth = this.width * scale; 66 - this.scaledHeight = Vars.PHOTO_HEIGHT; 67 - } 90 + // this.scaledWidth = this.width * scale; 91 + // this.scaledHeight = Vars.PHOTO_HEIGHT; 92 + // } 68 93 } 69 94 70 95 loadMeta(){ 96 + this.loadingMeta = true; 71 97 invoke('load_photo_meta', { photo: this.path }); 72 98 } 73 99 74 100 loadImage(){ 75 - if(this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 76 - 77 - // this.loadMeta(); 101 + if(this.loadingMeta || this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 78 102 if(!this.metaLoaded)return this.loadMeta(); 79 103 80 104 this.loading = true; 81 - 82 105 imagesLoading++; 83 106 84 107 this.image = document.createElement('canvas'); ··· 98 121 this.loading = false; 99 122 100 123 imagesLoading--; 124 + } 125 + 126 + this.imageEl.onerror = () => { 127 + console.log('Cannot load image'); 101 128 } 102 129 } 103 130 }
-15
src/Components/Structs/PhotoListElements/PhotoListPhoto.ts
··· 1 - <<<<<<< HEAD 2 1 import { Photo } from "../Photo"; 3 2 import { PhotoListElement } from "../PhotoListElement"; 4 3 import { PhotoListElementType } from "../PhotoListElementType"; ··· 11 10 this.Type = PhotoListElementType.PHOTO; 12 11 this.Photo = photo; 13 12 } 14 - ======= 15 - import { Photo } from "../Photo"; 16 - import { PhotoListElement } from "../PhotoListElement"; 17 - import { PhotoListElementType } from "../PhotoListElementType"; 18 - 19 - export class PhotoListPhoto extends PhotoListElement{ 20 - public Photo!: Photo; 21 - 22 - constructor( photo: Photo ){ 23 - super(); 24 - this.Type = PhotoListElementType.PHOTO; 25 - this.Photo = photo; 26 - } 27 - >>>>>>> e612756 (stuff) 28 13 }
+1
src/Components/Structs/PhotoMetadata.ts
··· 3 3 height!: number; 4 4 metadata!: string; 5 5 path!: string; 6 + error!: boolean; 6 7 }
+72
src/css/filters.css
··· 1 + 2 + .filter-options{ 3 + position: fixed; 4 + top: 10px; 5 + left: 10px; 6 + } 7 + 8 + .filter-container{ 9 + display: none; 10 + position: fixed; 11 + bottom: 0; 12 + left: 0; 13 + width: 100vw; 14 + padding: 10px 200px; 15 + background: rgba(85, 85, 85, 0.904); 16 + transform: translateY(10px); 17 + color: #fff; 18 + text-align: center; 19 + box-shadow: #0005 0 0 10px; 20 + opacity: 0; 21 + z-index: 150; 22 + } 23 + 24 + .filter-container > .filter-title{ 25 + font-size: 30px; 26 + } 27 + 28 + .filter-type-select{ 29 + display: flex; 30 + justify-content: center; 31 + align-items: center; 32 + width: 75%; 33 + margin: auto; 34 + } 35 + 36 + .filter-type-select > div{ 37 + width: 100%; 38 + border: #fff 4px solid; 39 + border-left: #fff 2px solid; 40 + border-right: #fff 2px solid; 41 + padding: 5px 0; 42 + cursor: pointer; 43 + user-select: none; 44 + -webkit-user-select: none; 45 + } 46 + 47 + .filter-type-select > div:first-child{ 48 + border-left: #fff 4px solid; 49 + border-radius: 10px 0 0 10px; 50 + } 51 + 52 + .filter-type-select > div:last-child{ 53 + border-right: #fff 4px solid; 54 + border-radius: 0 10px 10px 0; 55 + } 56 + 57 + .filter-type-select > .selected-filter{ 58 + background: #00ccff55; 59 + } 60 + 61 + .filter-search{ 62 + margin-top: 10px; 63 + padding: 5px; 64 + border: #fff 4px solid; 65 + border-radius: 10px; 66 + background: #0008; 67 + outline: none; 68 + color: white; 69 + font-size: 15px; 70 + font-family: 'Rubik'; 71 + width: calc(75% - 18px); 72 + }
+38
src/css/icons.css
··· 1 + .icon{ 2 + width: 40px; 3 + height: 40px; 4 + padding: 10px; 5 + display: flex; 6 + align-items: center; 7 + justify-content: center; 8 + height: 100%; 9 + cursor: pointer; 10 + user-select: none; 11 + -webkit-user-select: none; 12 + } 13 + 14 + .icon-small{ 15 + display: flex; 16 + align-items: center; 17 + justify-content: center; 18 + height: 100%; 19 + } 20 + 21 + .icon-label{ 22 + margin-top: -20px; 23 + margin-right: -200px; 24 + width: 200px; 25 + color: white; 26 + pointer-events: none; 27 + transform: translate(20px, -9px); 28 + opacity: 0; 29 + transition: 0.25s; 30 + user-select: none; 31 + -webkit-user-select: none; 32 + } 33 + 34 + .icon:hover ~ .icon-label{ 35 + opacity: 1; 36 + transform: translate(40px, -9px); 37 + } 38 +
+24
src/css/list.css
··· 1 + .photo-list{ 2 + width: 100%; 3 + height: 100%; 4 + position: fixed; 5 + top: 0; 6 + left: 0; 7 + overflow: hidden; 8 + } 9 + 10 + .scroll-to-top{ 11 + position: fixed; 12 + bottom: 10px; 13 + right: 10px; 14 + color: white; 15 + width: 40px; 16 + height: 40px; 17 + cursor: pointer; 18 + border-radius: 50%; 19 + border: 2px solid white; 20 + display: flex; 21 + justify-content: center; 22 + align-items: center; 23 + z-index: 100; 24 + }
+84
src/css/settings.css
··· 1 + .settings{ 2 + position: fixed; 3 + top: 0; 4 + left: 0; 5 + width: 100%; 6 + height: 100%; 7 + background: rgba(0, 0, 0, 0.4); 8 + } 9 + 10 + .settings-container{ 11 + position: fixed; 12 + top: 50px; 13 + left: 0px; 14 + width: 200%; 15 + height: calc(100% - 100px); 16 + display: flex; 17 + } 18 + 19 + .settings-close{ 20 + position: absolute; 21 + top: 10px; 22 + left: 10px; 23 + z-index: 100; 24 + cursor: pointer; 25 + user-select: none; 26 + width: 40px; 27 + height: 40px; 28 + } 29 + 30 + .settings-block{ 31 + width: 50%; 32 + height: 100%; 33 + color: white; 34 + text-align: center; 35 + } 36 + 37 + .selector{ 38 + padding: 10px 20px; 39 + border-radius: 10px; 40 + background: #000a; 41 + display: inline-block; 42 + margin: 10px; 43 + } 44 + 45 + .selector .selection-box{ 46 + height: 20px; 47 + background: #777a; 48 + margin: 5px -10px 0 -10px; 49 + border-radius: 8px; 50 + user-select: none; 51 + -webkit-user-select: none; 52 + cursor: pointer; 53 + transition: 0.25s; 54 + color: #fff1; 55 + } 56 + 57 + .selector .selection-box:hover{ 58 + height: 20px; 59 + background: #777a; 60 + margin: 5px -10px 0 -10px; 61 + border-radius: 8px; 62 + user-select: none; 63 + -webkit-user-select: none; 64 + cursor: pointer; 65 + transition: 0.25s; 66 + color: #fff5; 67 + } 68 + 69 + .selector input{ 70 + display: none; 71 + } 72 + 73 + .selector input:checked ~ label .selection-box{ 74 + background: rgba(0, 146, 204, 0.705); 75 + color: #fff; 76 + } 77 + 78 + .path{ 79 + padding: 5px 10px; 80 + background: #000a; 81 + border-radius: 5px; 82 + margin-left: 5px; 83 + cursor: pointer; 84 + }
+55
src/css/slide-bar.css
··· 1 + .slide-bar{ 2 + position: fixed; 3 + bottom: 0; 4 + left: 0; 5 + width: 100%; 6 + height: 50px; 7 + border-top: #aaa 1px solid; 8 + mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%); 9 + background: #aaa2; 10 + box-shadow: #000 0 0 10px; 11 + overflow: hidden; 12 + } 13 + 14 + .inner-slide-bar{ 15 + display: flex; 16 + height: 50px; 17 + width: 200%; 18 + color: white; 19 + align-items: center; 20 + cursor: pointer; 21 + user-select: none; 22 + -webkit-user-select: none; 23 + } 24 + 25 + .slider-dot{ 26 + width: 5px; 27 + height: 5px; 28 + border-radius: 5px; 29 + background: #aaa; 30 + margin: auto 25px; 31 + } 32 + 33 + .slider-text{ 34 + width: 200px; 35 + text-align: center; 36 + height: 50px; 37 + display: flex; 38 + justify-content: center; 39 + align-items: center; 40 + color: #aaa; 41 + transition: 0.25s; 42 + } 43 + 44 + .slider-text:hover{ 45 + color: #fff; 46 + } 47 + 48 + .slide-bar-tri{ 49 + position: fixed; 50 + bottom: 40px; 51 + left: 50%; 52 + transform: translateX(-50%); 53 + border: transparent solid 5px; 54 + border-top: #fff solid 5px; 55 + }
+82
src/css/tray.css
··· 1 + .photo-tray{ 2 + position: fixed; 3 + bottom: -300px; 4 + left: 0; 5 + width: 100%; 6 + height: 300px; 7 + background: rgba(43, 43, 43, 0.76); 8 + backdrop-filter: blur(10px); 9 + -webkit-backdrop-filter: blur(10px); 10 + box-shadow: #0008 0 0 10px; 11 + padding-bottom: 150px; 12 + } 13 + 14 + .photo-tray-close{ 15 + position: fixed; 16 + bottom: 160px; 17 + left: 50%; 18 + transform: translate(-50%); 19 + color: white; 20 + background: rgba(43, 43, 43, 0.76); 21 + backdrop-filter: blur(10px); 22 + -webkit-backdrop-filter: blur(10px); 23 + box-shadow: #0008 0 0 10px; 24 + display: flex; 25 + justify-content: center; 26 + align-items: center; 27 + height: 30px; 28 + width: 50px; 29 + border-radius: 50px; 30 + cursor: pointer; 31 + font-size: 12px; 32 + user-select: none; 33 + -webkit-user-select: none; 34 + transition: 0.25s width; 35 + } 36 + 37 + .photo-tray-close:hover{ 38 + width: 70px; 39 + } 40 + 41 + .photo-tray-columns{ 42 + width: 100%; 43 + height: 100%; 44 + display: flex; 45 + color: white; 46 + text-align: center; 47 + } 48 + 49 + .photo-tray-column{ 50 + height: 100%; 51 + width: 100%; 52 + scrollbar-width: thin; 53 + overflow-y: auto; 54 + overflow-x: hidden; 55 + mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%); 56 + } 57 + 58 + .tray-heading{ 59 + font-weight: bold; 60 + font-size: 20px; 61 + } 62 + 63 + .world-tags{ 64 + display: flex; 65 + width: 100%; 66 + justify-content: center; 67 + align-items: center; 68 + } 69 + 70 + .world-tags div{ 71 + padding: 0 10px; 72 + color: #bbb; 73 + transition: 0.25s; 74 + } 75 + 76 + .world-tags div:hover{ 77 + color: #ddd; 78 + } 79 + 80 + .world-name{ 81 + font-size: 17px; 82 + }
+193
src/css/viewer.css
··· 1 + 2 + .photo-container{ 3 + width: 100%; 4 + height: 100%; 5 + } 6 + 7 + .photo-container-bg{ 8 + width: 100%; 9 + height: 100%; 10 + position: fixed; 11 + top: 0; 12 + left: 0; 13 + z-index: -1; 14 + /* filter: blur(100px); */ 15 + } 16 + 17 + .single-photo-container{ 18 + margin: 10px; 19 + display: inline-block; 20 + } 21 + 22 + .photo-viewer{ 23 + justify-content: center; 24 + width: 100%; 25 + height: 100%; 26 + position: fixed; 27 + top: 0; 28 + left: 0; 29 + z-index: 5; 30 + background: #0009; 31 + opacity: 0; 32 + display: none; 33 + } 34 + 35 + .photo-context-menu{ 36 + position: fixed; 37 + top: 0; 38 + left: 0; 39 + padding: 10px; 40 + border-radius: 5px; 41 + background: rgba(43, 43, 43, 0.76); 42 + color: #aaa; 43 + box-shadow: #0005 0 0 10px; 44 + opacity: 0; 45 + } 46 + 47 + .photo-context-menu > div{ 48 + padding: 2px 10px; 49 + width: 100; 50 + text-align: center; 51 + transition: 0.1s; 52 + } 53 + 54 + .photo-context-menu > div:hover{ 55 + color: #fff; 56 + cursor: pointer; 57 + user-select: none; 58 + -webkit-user-select: none; 59 + } 60 + 61 + .image-container{ 62 + max-width: none; 63 + max-height: none; 64 + background-size: contain !important; 65 + background-repeat: no-repeat !important; 66 + background-position: center !important; 67 + opacity: 0; 68 + } 69 + 70 + .viewer-button{ 71 + color: white; 72 + width: 30px; 73 + height: 30px; 74 + display: flex; 75 + justify-content: center; 76 + align-items: center; 77 + border-radius: 50px; 78 + font-size: 12px; 79 + background: #8885; 80 + user-select: none; 81 + -webkit-user-select: none; 82 + cursor: pointer; 83 + z-index: 7; 84 + background: rgba(43, 43, 43, 0.76); 85 + } 86 + 87 + .viewer-close{ 88 + position: fixed; 89 + top: 10px; 90 + right: 10px; 91 + width: 35px; 92 + height: 35px; 93 + } 94 + 95 + .prev-button{ 96 + transition: 0.25s; 97 + position: fixed; 98 + top: 50%; 99 + left: 0; 100 + color: white; 101 + width: 50px; 102 + height: 150px; 103 + display: flex; 104 + justify-content: center; 105 + align-items: center; 106 + transform: translateY(-50%); 107 + background: rgba(255, 255, 255, 0.144); 108 + border-radius: 0 15px 15px 0; 109 + cursor: pointer; 110 + user-select: none; 111 + -webkit-user-select: none; 112 + box-shadow: #000 0 0 10px; 113 + } 114 + 115 + .prev-button:hover{ 116 + background: rgba(255, 255, 255, 0.349); 117 + } 118 + 119 + .next-button{ 120 + transition: 0.25s; 121 + position: fixed; 122 + top: 50%; 123 + right: 0; 124 + color: white; 125 + width: 50px; 126 + height: 150px; 127 + display: flex; 128 + justify-content: center; 129 + align-items: center; 130 + transform: translateY(-50%); 131 + background: rgba(255, 255, 255, 0.144); 132 + border-radius: 15px 0 0 15px; 133 + cursor: pointer; 134 + user-select: none; 135 + -webkit-user-select: none; 136 + box-shadow: #000 0 0 10px; 137 + } 138 + 139 + .next-button:hover{ 140 + background: rgba(255, 255, 255, 0.349); 141 + } 142 + 143 + .control-buttons{ 144 + position: fixed; 145 + bottom: 10px; 146 + left: 50%; 147 + transform: translateX(-50%); 148 + display: flex; 149 + } 150 + 151 + .control-buttons div{ 152 + margin: 0 20px; 153 + } 154 + 155 + .copy-notif{ 156 + position: fixed; 157 + top: 40px; 158 + left: 50%; 159 + color: white; 160 + transform: translateX(-50%) translateY(-100px); 161 + background: rgba(43, 43, 43, 0.76); 162 + padding: 10px 40px; 163 + backdrop-filter: blur(10px); 164 + -webkit-backdrop-filter: blur(10px); 165 + border-radius: 50px; 166 + box-shadow: #000 0 0 10px; 167 + z-index: 12; 168 + opacity: 0; 169 + pointer-events: none; 170 + } 171 + 172 + .photo-layer-manager{ 173 + background: rgba(43, 43, 43, 0.76); 174 + color: #fff; 175 + padding: 10px; 176 + backdrop-filter: blur(10px); 177 + position: fixed; 178 + bottom: 10px; 179 + left: 10px; 180 + border-radius: 10px; 181 + } 182 + 183 + .photo-layer-manager-layer{ 184 + cursor: pointer; 185 + -webkit-user-select: none; 186 + user-select: none; 187 + padding: 5px 20px; 188 + transition: 0.1s; 189 + } 190 + 191 + .photo-layer-manager-layer:hover{ 192 + color: #bbb; 193 + }
+9 -6
src/index.tsx
··· 3 3 4 4 declare global{ 5 5 interface Window { 6 - AccountManager: AccountManager; 7 6 LoadingManager: LoadingManager; 8 7 PhotoManager: PhotoManager; 9 8 ConfirmationBoxManager: ConfirmationBoxManager; 10 9 PhotoViewerManager: PhotoViewerManager; 11 10 WorldCacheManager: WorldCacheManager; 12 11 PhotoListRenderingManager: PhotoListRenderingManager; 13 - SyncManager: SyncManager; 14 12 ViewManager: ViewManager; 15 13 16 14 CloseAllPopups: (() => void)[]; ··· 23 21 24 22 window.oncontextmenu = ( e ) => e.preventDefault(); 25 23 24 + import './css/icons.css'; 25 + import './css/tray.css'; 26 + import './css/settings.css'; 27 + import './css/slide-bar.css'; 28 + import './css/viewer.css'; 29 + import './css/filters.css'; 30 + import './css/list.css'; 31 + 26 32 import "./styles.css"; 33 + 27 34 import App from "./Components/App"; 28 35 import { invoke } from "@tauri-apps/api/core"; 29 36 30 - import { AccountManager } from "./Components/Managers/AccountManager"; 31 37 import { LoadingManager } from "./Components/Managers/LoadingManager"; 32 38 import { PhotoManager } from "./Components/Managers/PhotoManager"; 33 39 import { ConfirmationBoxManager } from "./Components/Managers/ConfirmationBoxManager"; 34 40 import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager"; 35 41 import { WorldCacheManager } from "./Components/Managers/WorldCacheManager"; 36 42 import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager"; 37 - import { SyncManager } from "./Components/Managers/SyncManager"; 38 43 import { ViewManager } from "./Components/Managers/ViewManager"; 39 44 40 - window.AccountManager = new AccountManager(); 41 45 window.LoadingManager = new LoadingManager(); 42 46 window.PhotoManager = new PhotoManager(); 43 47 window.ConfirmationBoxManager = new ConfirmationBoxManager(); 44 48 window.PhotoViewerManager = new PhotoViewerManager(); 45 49 window.WorldCacheManager = new WorldCacheManager(); 46 50 window.PhotoListRenderingManager = new PhotoListRenderingManager(); 47 - window.SyncManager = new SyncManager(); 48 51 window.ViewManager = new ViewManager(); 49 52 50 53 (async () => {
+11 -768
src/styles.css
··· 7 7 background: #000; 8 8 margin: 0; 9 9 font-family: Rubik, 'Courier New'; 10 + overflow: hidden; 11 + } 12 + 13 + * { 14 + box-sizing: border-box; 10 15 } 11 16 12 17 .loading{ ··· 24 29 align-items: center; 25 30 } 26 31 27 - .navbar{ 28 - background: #555a; 29 - position: fixed; 30 - top: 0; 31 - left: 0; 32 - width: 100%; 33 - margin-top: -50px; 34 - padding-top: 50px; 35 - height: 50px; 36 - display: flex; 37 - backdrop-filter: blur(10px); 38 - -webkit-backdrop-filter: blur(10px); 39 - z-index: 10; 40 - box-shadow: #000 0 0 10px; 41 - } 42 - 43 - .navbar .tabs{ 44 - width: calc(100% - 450px); 45 - height: 100%; 46 - display: flex; 47 - } 48 - 49 - .navbar .account{ 50 - width: 100px; 51 - height: 100%; 52 - display: flex; 53 - justify-content: center; 54 - align-items: center; 55 - transition: 0.1s; 56 - cursor: pointer; 57 - user-select: none; 58 - -webkit-user-select: none; 59 - } 60 - 61 - .navbar .account:hover{ 62 - background: #0005; 63 - } 64 - 65 - .navbar .control-lights{ 66 - width: 150px; 67 - height: 50px; 68 - display: flex; 69 - justify-content: center; 70 - align-items: center; 71 - } 72 - 73 - .control-lights .light{ 74 - user-select: none; 75 - -webkit-user-select: none; 76 - font-size: 20px; 77 - text-align: center; 78 - color: white; 79 - width: 100%; 80 - cursor: pointer; 81 - display: flex; 82 - justify-content: center; 83 - align-items: center; 84 - height: 50px; 85 - filter: invert(100%); 86 - } 87 - 88 - .control-lights .light:hover{ 89 - background: #fff5; 90 - } 91 - 92 - .control-lights .light img{ 93 - width: 25%; 94 - } 95 - 96 - .icon{ 97 - width: 15px; 98 - filter: invert(100%); 99 - display: flex; 100 - align-items: center; 101 - justify-content: center; 102 - height: 100%; 103 - } 104 - 105 - .icon-label{ 106 - margin-top: -20px; 107 - margin-right: -200px; 108 - width: 200px; 109 - color: white; 110 - pointer-events: none; 111 - transform: translate(40px, -19px); 112 - opacity: 0; 113 - transition: 0.25s; 114 - user-select: none; 115 - -webkit-user-select: none; 116 - } 117 - 118 - .icon:hover ~ .icon-label{ 119 - opacity: 1; 120 - transform: translate(60px, -19px); 121 - } 122 - 123 - .user-pfp{ 124 - width: 35px; 125 - height: 35px; 126 - background-size: cover !important; 127 - background-position: center !important; 128 - border-radius: 50%; 129 - margin-right: 10px; 130 - } 131 - 132 - .account-dropdown{ 133 - font-size: 20px; 134 - color: white; 135 - } 136 - 137 - .nav-tab{ 138 - color: white; 139 - width: 150px; 140 - height: 100%; 141 - transition: 0.1s; 142 - cursor: pointer; 143 - user-select: none; 144 - -webkit-user-select: none; 145 - justify-content: center; 146 - align-items: center; 147 - display: flex; 148 - } 149 - 150 - .nav-tab:hover{ 151 - background: #0005; 152 - } 153 - 154 - .dropdown{ 155 - position: fixed; 156 - right: 125px; 157 - top: 60px; 158 - background: #555a; 159 - height: 60px; 160 - width: 150px; 161 - border-radius: 5px; 162 - backdrop-filter: blur(5px); 163 - z-index: 10; 164 - } 165 - 166 - .dropdown-button{ 167 - width: 100%; 168 - text-align: center; 169 - padding: 5.5px 0; 170 - color: #aaa; 171 - cursor: pointer; 172 - user-select: none; 173 - -webkit-user-select: none; 174 - transition: 0.1s; 175 - } 176 - 177 - .dropdown-button:hover{ 178 - color: #fff; 179 - } 180 - 181 - .photo-list{ 182 - width: 100%; 183 - height: 100%; 184 - position: fixed; 185 - top: 0; 186 - left: 0; 187 - overflow: hidden; 188 - } 189 - 190 - .filter-options{ 191 - position: fixed; 192 - top: 55px; 193 - left: 5px; 194 - width: 40px; 195 - height: 50px; 196 - } 197 - 198 - .filter-options img{ 199 - cursor: pointer; 200 - user-select: none; 201 - -webkit-user-select: none; 202 - } 203 - 204 - .filter-container{ 205 - display: none; 206 - position: fixed; 207 - bottom: 0; 208 - left: 50%; 209 - width: 600px; 210 - height: 83px; 211 - transform: translate(-50%); 212 - padding: 10px; 213 - border-radius: 5px 5px 0 0; 214 - backdrop-filter: blur(5px); 215 - -webkit-backdrop-filter: blur(5px); 216 - background: #555a; 217 - color: #fff; 218 - text-align: center; 219 - box-shadow: #0005 0 0 10px; 220 - opacity: 0; 221 - } 222 - 223 - .filter-container > .filter-title{ 224 - font-size: 30px; 225 - } 226 - 227 - .filter-type-select{ 228 - display: flex; 229 - justify-content: center; 230 - align-items: center; 231 - width: 75%; 232 - margin: auto; 233 - } 234 - 235 - .filter-type-select > div{ 236 - width: 100%; 237 - border: #fff 4px solid; 238 - border-left: #fff 2px solid; 239 - border-right: #fff 2px solid; 240 - padding: 5px 0; 241 - cursor: pointer; 242 - user-select: none; 243 - -webkit-user-select: none; 244 - } 245 - 246 - .filter-type-select > div:first-child{ 247 - border-left: #fff 4px solid; 248 - border-radius: 10px 0 0 10px; 249 - } 250 - 251 - .filter-type-select > div:last-child{ 252 - border-right: #fff 4px solid; 253 - border-radius: 0 10px 10px 0; 254 - } 255 - 256 - .filter-type-select > .selected-filter{ 257 - background: #00ccff55; 258 - } 259 - 260 - .filter-search{ 261 - margin-top: 10px; 262 - padding: 5px; 263 - border: #fff 4px solid; 264 - border-radius: 10px; 265 - background: #0008; 266 - outline: none; 267 - color: white; 268 - font-size: 15px; 269 - font-family: 'Rubik'; 270 - width: calc(75% - 18px); 271 - } 272 - 273 - .date-list{ 274 - mask-image: linear-gradient(to bottom, #0000, #000, #0000); 275 - overflow: auto; 276 - scrollbar-width: thin; 277 - height: calc(100% - 100px); 278 - padding: 50px 0; 279 - } 280 - 281 - .date-list-date{ 282 - padding: 10px; 283 - user-select: none; 284 - -webkit-user-select: none; 285 - cursor: pointer; 286 - transition: 0.1s; 287 - border-radius: 10px; 288 - } 289 - 290 - .date-list-date:hover{ 291 - background: #0005; 292 - box-shadow: inset #0005 0 0 10px; 293 - } 294 - 295 - .photo-tree-loading{ 296 - position: fixed; 297 - top: 0; 298 - left: 0; 299 - width: 100%; 300 - height: 100%; 301 - display: flex; 302 - justify-content: center; 303 - align-items: center; 304 - color: white; 305 - font-size: 20px; 306 - } 307 - 308 - .loading-bar{ 309 - width: 500px; 310 - height: 8px; 311 - border-radius: 12px; 312 - background: #333; 313 - margin-top: 10px; 314 - padding: 2px; 315 - } 316 - 317 - .loading-bar-inner{ 318 - width: 0%; 319 - height: 8px; 320 - border-radius: 18px; 321 - background: #00ccff; 322 - } 323 - 324 - .photo-container{ 325 - width: 100%; 326 - height: 100%; 327 - } 328 - 329 - .photo-container-bg{ 330 - width: 100%; 331 - height: 100%; 332 - position: fixed; 333 - top: 0; 334 - left: 0; 335 - z-index: -1; 336 - filter: blur(100px); 337 - -webkit-filter: blur(100px); 338 - } 339 - 340 - .single-photo-container{ 341 - margin: 10px; 342 - display: inline-block; 343 - } 344 - 345 - .photo-viewer{ 346 - justify-content: center; 347 - width: 100%; 348 - height: 100%; 349 - position: fixed; 350 - top: 0; 351 - left: 0; 352 - z-index: 5; 353 - background: #0009; 354 - backdrop-filter: blur(75px); 355 - -webkit-backdrop-filter: blur(75px); 356 - opacity: 0; 357 - display: none; 358 - } 359 - 360 - .photo-context-menu{ 361 - position: fixed; 362 - top: 0; 363 - left: 0; 364 - padding: 10px; 365 - border-radius: 5px; 366 - backdrop-filter: blur(5px); 367 - -webkit-backdrop-filter: blur(5px); 368 - background: #555a; 369 - color: #aaa; 370 - box-shadow: #0005 0 0 10px; 371 - opacity: 0; 372 - } 373 - 374 - .photo-context-menu > div{ 375 - padding: 2px 10px; 376 - width: calc(100% - 10px); 377 - text-align: center; 378 - transition: 0.1s; 379 - } 380 - 381 - .photo-context-menu > div:hover{ 382 - color: #fff; 383 - cursor: pointer; 384 - user-select: none; 385 - -webkit-user-select: none; 386 - } 387 - 388 - .image-container{ 389 - height: 100%; 390 - background-size: contain !important; 391 - background-repeat: no-repeat !important; 392 - background-position: center !important; 393 - opacity: 0; 394 - } 395 - 396 - .viewer-button{ 397 - color: white; 398 - width: 30px; 399 - height: 30px; 400 - display: flex; 401 - justify-content: center; 402 - align-items: center; 403 - border-radius: 50px; 404 - font-size: 12px; 405 - background: #8885; 406 - backdrop-filter: blur(10px); 407 - -webkit-backdrop-filter: blur(10px); 408 - user-select: none; 409 - -webkit-user-select: none; 410 - cursor: pointer; 411 - z-index: 7; 412 - box-shadow: #0008 0 0 10px; 413 - } 414 - 415 - .viewer-close{ 416 - position: fixed; 417 - top: 10px; 418 - right: 10px; 419 - width: 35px; 420 - height: 35px; 421 - } 422 - 423 - .prev-button{ 424 - transition: 0.25s; 425 - position: fixed; 426 - top: 50%; 427 - left: 0; 428 - color: white; 429 - width: 50px; 430 - height: 150px; 431 - display: flex; 432 - justify-content: center; 433 - align-items: center; 434 - transform: translateY(-50%); 435 - background: rgba(255, 255, 255, 0.144); 436 - backdrop-filter: blur(50px); 437 - -webkit-backdrop-filter: blur(50px); 438 - border-radius: 0 15px 15px 0; 439 - cursor: pointer; 440 - user-select: none; 441 - -webkit-user-select: none; 442 - box-shadow: #000 0 0 10px; 443 - } 444 - 445 - .prev-button:hover{ 446 - background: rgba(255, 255, 255, 0.349); 447 - } 448 - 449 - .next-button{ 450 - transition: 0.25s; 451 - position: fixed; 452 - top: 50%; 453 - right: 0; 454 - color: white; 455 - width: 50px; 456 - height: 150px; 457 - display: flex; 458 - justify-content: center; 459 - align-items: center; 460 - transform: translateY(-50%); 461 - background: rgba(255, 255, 255, 0.144); 462 - backdrop-filter: blur(50px); 463 - -webkit-backdrop-filter: blur(50px); 464 - border-radius: 15px 0 0 15px; 465 - cursor: pointer; 466 - user-select: none; 467 - -webkit-user-select: none; 468 - box-shadow: #000 0 0 10px; 469 - } 470 - 471 - .next-button:hover{ 472 - background: rgba(255, 255, 255, 0.349); 473 - } 474 - 475 - .reload-photos{ 476 - position: fixed; 477 - top: 70px; 478 - right: 20px; 479 - color: white; 480 - user-select: none; 481 - -webkit-user-select: none; 482 - cursor: pointer; 483 - opacity: 0; 484 - } 485 - 486 32 .confirmation-box{ 487 33 position: fixed; 488 34 top: 0; ··· 490 36 width: 100%; 491 37 height: 100%; 492 38 z-index: 15; 493 - background: #0005; 39 + background: rgba(0, 0, 0, 0.76); 494 40 transition: 0.25s; 495 - backdrop-filter: blur(10px); 496 - -webkit-backdrop-filter: blur(10px); 497 41 } 498 42 499 43 .confirmation-box-container{ ··· 553 97 box-shadow: #000a inset 0 0 10px; 554 98 } 555 99 556 - .control-buttons{ 557 - position: fixed; 558 - bottom: 10px; 559 - left: 50%; 560 - transform: translateX(-50%); 561 - display: flex; 562 - } 563 - 564 - .control-buttons div{ 565 - margin: 0 20px; 100 + img{ 101 + max-width: 100%; 102 + max-height: 100%; 566 103 } 567 104 568 - .copy-notif{ 105 + .error-notif{ 569 106 position: fixed; 570 107 top: 40px; 571 108 left: 50%; 572 109 color: white; 573 110 transform: translateX(-50%) translateY(-100px); 574 - background: #8885; 111 + background: rgba(43, 43, 43, 0.76); 575 112 padding: 10px 40px; 576 113 backdrop-filter: blur(10px); 577 114 -webkit-backdrop-filter: blur(10px); ··· 580 117 z-index: 12; 581 118 opacity: 0; 582 119 pointer-events: none; 583 - } 584 - 585 - .photo-tray{ 586 - position: fixed; 587 - bottom: -150px; 588 - left: 0; 589 - width: 100%; 590 - height: 150px; 591 - background: #7778; 592 - backdrop-filter: blur(10px); 593 - -webkit-backdrop-filter: blur(10px); 594 - box-shadow: #0008 0 0 10px; 595 - padding-bottom: 150px; 596 - margin-bottom: -150px; 597 - } 598 - 599 - .photo-tray-close{ 600 - position: fixed; 601 - bottom: 160px; 602 - left: 50%; 603 - transform: translate(-50%); 604 - color: white; 605 - background: #8885; 606 - backdrop-filter: blur(10px); 607 - -webkit-backdrop-filter: blur(10px); 608 - box-shadow: #0008 0 0 10px; 609 - display: flex; 610 - justify-content: center; 611 - align-items: center; 612 - height: 30px; 613 - width: 50px; 614 - border-radius: 50px; 615 - cursor: pointer; 616 - font-size: 12px; 617 - user-select: none; 618 - -webkit-user-select: none; 619 - transition: 0.25s width; 620 - } 621 - 622 - .photo-tray-close:hover{ 623 - width: 70px; 624 - } 625 - 626 - .photo-tray-columns{ 627 - width: 100%; 628 - height: 100%; 629 - display: flex; 630 - color: white; 631 - text-align: center; 632 - } 633 - 634 - .photo-tray-column{ 635 - height: 100%; 636 - width: 100%; 637 - scrollbar-width: thin; 638 - overflow-y: auto; 639 - overflow-x: hidden; 640 - mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%); 641 - } 642 - 643 - .tray-heading{ 644 - font-weight: bold; 645 - font-size: 20px; 646 - } 647 - 648 - .world-tags{ 649 - display: flex; 650 - width: 100%; 651 - justify-content: center; 652 - align-items: center; 653 - } 654 - 655 - .world-tags div{ 656 - padding: 0 10px; 657 - color: #bbb; 658 - transition: 0.25s; 659 - } 660 - 661 - .world-tags div:hover{ 662 - color: #ddd; 663 - } 664 - 665 - .world-name{ 666 - font-size: 17px; 667 - } 668 - 669 - .settings{ 670 - position: fixed; 671 - top: 0; 672 - left: 0; 673 - width: 100%; 674 - height: 100%; 675 - background: rgba(0, 0, 0, 0.4); 676 - backdrop-filter: blur(100px); 677 - -webkit-backdrop-filter: blur(100px); 678 - } 679 - 680 - .slide-bar{ 681 - position: fixed; 682 - bottom: 0; 683 - left: 0; 684 - width: 100%; 685 - height: 50px; 686 - border-top: #aaa 1px solid; 687 - overflow-x: hidden; 688 - mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%); 689 - background: #aaa2; 690 - box-shadow: #000 0 0 10px; 691 - } 692 - 693 - .inner-slide-bar{ 694 - display: flex; 695 - height: 50px; 696 - width: 200%; 697 - color: white; 698 - align-items: center; 699 - cursor: pointer; 700 - user-select: none; 701 - -webkit-user-select: none; 702 - } 703 - 704 - .slider-dot{ 705 - width: 5px; 706 - height: 5px; 707 - border-radius: 5px; 708 - background: #aaa; 709 - margin: auto 25px; 710 - } 711 - 712 - .slider-text{ 713 - width: 200px; 714 - text-align: center; 715 - height: 50px; 716 - display: flex; 717 - justify-content: center; 718 - align-items: center; 719 - color: #aaa; 720 - transition: 0.25s; 721 - } 722 - 723 - .slider-text:hover{ 724 - color: #fff; 725 - } 726 - 727 - .slide-bar-tri{ 728 - position: fixed; 729 - bottom: 40px; 730 - left: 50%; 731 - transform: translateX(-50%); 732 - border: transparent solid 5px; 733 - border-top: #fff solid 5px; 734 - } 735 - 736 - .settings-container{ 737 - position: fixed; 738 - top: 50px; 739 - left: 0px; 740 - width: 200%; 741 - height: calc(100% - 100px); 742 - display: flex; 743 - } 744 - 745 - .settings-block{ 746 - width: 50%; 747 - height: 100%; 748 - color: white; 749 - text-align: center; 750 - } 751 - 752 - .selector{ 753 - padding: 10px 20px; 754 - border-radius: 10px; 755 - background: #000a; 756 - display: inline-block; 757 - margin: 10px; 758 - } 759 - 760 - .selector .selection-box{ 761 - height: 20px; 762 - background: #777a; 763 - margin: 5px -10px 0 -10px; 764 - border-radius: 8px; 765 - user-select: none; 766 - -webkit-user-select: none; 767 - cursor: pointer; 768 - transition: 0.25s; 769 - color: #fff1; 770 - } 771 - 772 - .selector .selection-box:hover{ 773 - height: 20px; 774 - background: #777a; 775 - margin: 5px -10px 0 -10px; 776 - border-radius: 8px; 777 - user-select: none; 778 - -webkit-user-select: none; 779 - cursor: pointer; 780 - transition: 0.25s; 781 - color: #fff5; 782 - } 783 - 784 - .selector input{ 785 - display: none; 786 - } 787 - 788 - .selector input:checked ~ label .selection-box{ 789 - background: rgba(0, 146, 204, 0.705); 790 - color: #fff; 791 - } 792 - 793 - .path{ 794 - padding: 5px 10px; 795 - background: #000a; 796 - border-radius: 5px; 797 - margin-left: 5px; 798 - cursor: pointer; 799 - } 800 - 801 - .scroll-to-top{ 802 - position: fixed; 803 - bottom: 10px; 804 - right: 10px; 805 - color: white; 806 - width: 40px; 807 - height: 40px; 808 - cursor: pointer; 809 - border-radius: 50%; 810 - border: 2px solid white; 811 - display: flex; 812 - justify-content: center; 813 - align-items: center; 814 - } 815 - 816 - .account-profile{ 817 - margin: auto; 818 - width: 50%; 819 - height: 200px; 820 - display: flex; 821 - } 822 - 823 - .account-pfp{ 824 - width: 200px; 825 - height: 200px; 826 - background-position: center !important; 827 - background-size: cover !important; 828 - border-radius: 50%; 829 - box-shadow: #0005 0 0 10px; 830 - position: relative; 831 - z-index: 10; 832 - } 833 - 834 - .account-desc{ 835 - width: calc(100% - 200px); 836 - padding-left: 100px; 837 - height: 150px; 838 - margin: 25px 0; 839 - margin-left: -100px; 840 - background: #0009; 841 - border-radius: 10px; 842 - box-shadow: #0005 0 0 10px; 843 - } 844 - 845 - .storage-bar{ 846 - width: calc(100% - 20px); 847 - height: 10px; 848 - margin-left: 10px; 849 - background: #555; 850 - border-radius: 10px; 851 - display: flex; 852 - justify-content: left; 853 - align-items: center; 854 - margin-bottom: 2px; 855 - } 856 - 857 - .storage-bar-inner{ 858 - margin: 2px; 859 - height: 6px; 860 - background: #00ccff; 861 - border-radius: 10px; 862 - } 863 - 864 - .account-notice{ 865 - background: #0007; 866 - border-radius: 5px; 867 - box-shadow: #0005 0 0 10px; 868 - padding: 10px; 869 - margin: auto; 870 - width: calc(50% - 20px); 871 - margin-top: 25px; 872 - } 873 - 874 - img{ 875 - max-width: 100%; 876 - max-height: 100%; 877 120 }
+971 -974
src-tauri/Cargo.lock
··· 3 3 version = 4 4 4 5 5 [[package]] 6 - name = "addr2line" 7 - version = "0.24.2" 8 - source = "registry+https://github.com/rust-lang/crates.io-index" 9 - checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 6 + name = "VRChatPhotoManager" 7 + version = "0.2.7" 10 8 dependencies = [ 11 - "gimli", 9 + "arboard", 10 + "dirs", 11 + "fast_image_resize", 12 + "image", 13 + "mslnk", 14 + "notify", 15 + "open", 16 + "regex", 17 + "reqwest", 18 + "serde", 19 + "serde_json", 20 + "tauri", 21 + "tauri-build", 22 + "tauri-plugin-http", 23 + "tauri-plugin-process", 24 + "tauri-plugin-shell", 25 + "tauri-plugin-single-instance", 12 26 ] 13 27 14 28 [[package]] ··· 19 33 20 34 [[package]] 21 35 name = "aho-corasick" 22 - version = "1.1.3" 36 + version = "1.1.4" 23 37 source = "registry+https://github.com/rust-lang/crates.io-index" 24 - checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 38 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 25 39 dependencies = [ 26 40 "memchr", 27 41 ] ··· 51 65 ] 52 66 53 67 [[package]] 54 - name = "android-tzdata" 55 - version = "0.1.1" 56 - source = "registry+https://github.com/rust-lang/crates.io-index" 57 - checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 58 - 59 - [[package]] 60 68 name = "android_system_properties" 61 69 version = "0.1.5" 62 70 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 67 75 68 76 [[package]] 69 77 name = "anyhow" 70 - version = "1.0.98" 78 + version = "1.0.100" 71 79 source = "registry+https://github.com/rust-lang/crates.io-index" 72 - checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 80 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 73 81 74 82 [[package]] 75 83 name = "arbitrary" 76 - version = "1.4.1" 84 + version = "1.4.2" 77 85 source = "registry+https://github.com/rust-lang/crates.io-index" 78 - checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 86 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 87 + 88 + [[package]] 89 + name = "arboard" 90 + version = "3.6.1" 91 + source = "registry+https://github.com/rust-lang/crates.io-index" 92 + checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" 93 + dependencies = [ 94 + "clipboard-win", 95 + "image", 96 + "log", 97 + "objc2 0.6.3", 98 + "objc2-app-kit", 99 + "objc2-core-foundation", 100 + "objc2-core-graphics", 101 + "objc2-foundation 0.3.2", 102 + "parking_lot", 103 + "percent-encoding", 104 + "windows-sys 0.60.2", 105 + "x11rb", 106 + ] 79 107 80 108 [[package]] 81 109 name = "arg_enum_proc_macro" ··· 85 113 dependencies = [ 86 114 "proc-macro2", 87 115 "quote", 88 - "syn 2.0.104", 116 + "syn 2.0.109", 89 117 ] 90 118 91 119 [[package]] ··· 120 148 121 149 [[package]] 122 150 name = "async-executor" 123 - version = "1.13.2" 151 + version = "1.13.3" 124 152 source = "registry+https://github.com/rust-lang/crates.io-index" 125 - checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 153 + checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" 126 154 dependencies = [ 127 155 "async-task", 128 156 "concurrent-queue", ··· 133 161 ] 134 162 135 163 [[package]] 136 - name = "async-fs" 137 - version = "2.1.3" 138 - source = "registry+https://github.com/rust-lang/crates.io-index" 139 - checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" 140 - dependencies = [ 141 - "async-lock", 142 - "blocking", 143 - "futures-lite", 144 - ] 145 - 146 - [[package]] 147 164 name = "async-io" 148 - version = "2.5.0" 165 + version = "2.6.0" 149 166 source = "registry+https://github.com/rust-lang/crates.io-index" 150 - checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" 167 + checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" 151 168 dependencies = [ 152 - "async-lock", 169 + "autocfg", 153 170 "cfg-if", 154 171 "concurrent-queue", 155 172 "futures-io", ··· 158 175 "polling", 159 176 "rustix", 160 177 "slab", 161 - "windows-sys 0.60.2", 178 + "windows-sys 0.61.2", 162 179 ] 163 180 164 181 [[package]] 165 182 name = "async-lock" 166 - version = "3.4.0" 183 + version = "3.4.1" 167 184 source = "registry+https://github.com/rust-lang/crates.io-index" 168 - checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 185 + checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 169 186 dependencies = [ 170 187 "event-listener", 171 188 "event-listener-strategy", ··· 174 191 175 192 [[package]] 176 193 name = "async-process" 177 - version = "2.4.0" 194 + version = "2.5.0" 178 195 source = "registry+https://github.com/rust-lang/crates.io-index" 179 - checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" 196 + checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" 180 197 dependencies = [ 181 198 "async-channel", 182 199 "async-io", ··· 198 215 dependencies = [ 199 216 "proc-macro2", 200 217 "quote", 201 - "syn 2.0.104", 218 + "syn 2.0.109", 202 219 ] 203 220 204 221 [[package]] 205 222 name = "async-signal" 206 - version = "0.2.12" 223 + version = "0.2.13" 207 224 source = "registry+https://github.com/rust-lang/crates.io-index" 208 - checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" 225 + checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" 209 226 dependencies = [ 210 227 "async-io", 211 228 "async-lock", ··· 216 233 "rustix", 217 234 "signal-hook-registry", 218 235 "slab", 219 - "windows-sys 0.60.2", 236 + "windows-sys 0.61.2", 220 237 ] 221 238 222 239 [[package]] ··· 227 244 228 245 [[package]] 229 246 name = "async-trait" 230 - version = "0.1.88" 247 + version = "0.1.89" 231 248 source = "registry+https://github.com/rust-lang/crates.io-index" 232 - checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 249 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 233 250 dependencies = [ 234 251 "proc-macro2", 235 252 "quote", 236 - "syn 2.0.104", 253 + "syn 2.0.109", 237 254 ] 238 255 239 256 [[package]] ··· 273 290 274 291 [[package]] 275 292 name = "av1-grain" 276 - version = "0.2.4" 293 + version = "0.2.5" 277 294 source = "registry+https://github.com/rust-lang/crates.io-index" 278 - checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" 295 + checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" 279 296 dependencies = [ 280 297 "anyhow", 281 298 "arrayvec", ··· 287 304 288 305 [[package]] 289 306 name = "avif-serialize" 290 - version = "0.8.5" 307 + version = "0.8.6" 291 308 source = "registry+https://github.com/rust-lang/crates.io-index" 292 - checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" 309 + checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" 293 310 dependencies = [ 294 311 "arrayvec", 295 312 ] 296 313 297 314 [[package]] 298 - name = "backtrace" 299 - version = "0.3.75" 300 - source = "registry+https://github.com/rust-lang/crates.io-index" 301 - checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 302 - dependencies = [ 303 - "addr2line", 304 - "cfg-if", 305 - "libc", 306 - "miniz_oxide", 307 - "object", 308 - "rustc-demangle", 309 - "windows-targets 0.52.6", 310 - ] 311 - 312 - [[package]] 313 315 name = "base64" 314 316 version = "0.21.7" 315 317 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 323 325 324 326 [[package]] 325 327 name = "bit_field" 326 - version = "0.10.2" 328 + version = "0.10.3" 327 329 source = "registry+https://github.com/rust-lang/crates.io-index" 328 - checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 330 + checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" 329 331 330 332 [[package]] 331 333 name = "bitflags" ··· 335 337 336 338 [[package]] 337 339 name = "bitflags" 338 - version = "2.9.1" 340 + version = "2.10.0" 339 341 source = "registry+https://github.com/rust-lang/crates.io-index" 340 - checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 342 + checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 341 343 dependencies = [ 342 - "serde", 344 + "serde_core", 343 345 ] 344 346 345 347 [[package]] ··· 368 370 369 371 [[package]] 370 372 name = "block2" 371 - version = "0.6.1" 373 + version = "0.6.2" 372 374 source = "registry+https://github.com/rust-lang/crates.io-index" 373 - checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" 375 + checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" 374 376 dependencies = [ 375 - "objc2 0.6.1", 377 + "objc2 0.6.3", 376 378 ] 377 379 378 380 [[package]] ··· 390 392 391 393 [[package]] 392 394 name = "brotli" 393 - version = "8.0.1" 395 + version = "8.0.2" 394 396 source = "registry+https://github.com/rust-lang/crates.io-index" 395 - checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" 397 + checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 396 398 dependencies = [ 397 399 "alloc-no-stdlib", 398 400 "alloc-stdlib", ··· 423 425 424 426 [[package]] 425 427 name = "bytemuck" 426 - version = "1.23.1" 428 + version = "1.24.0" 427 429 source = "registry+https://github.com/rust-lang/crates.io-index" 428 - checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" 430 + checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 429 431 430 432 [[package]] 431 433 name = "byteorder" ··· 454 456 source = "registry+https://github.com/rust-lang/crates.io-index" 455 457 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 456 458 dependencies = [ 457 - "bitflags 2.9.1", 459 + "bitflags 2.10.0", 458 460 "cairo-sys-rs", 459 461 "glib", 460 462 "libc", ··· 475 477 476 478 [[package]] 477 479 name = "camino" 478 - version = "1.1.10" 480 + version = "1.2.1" 479 481 source = "registry+https://github.com/rust-lang/crates.io-index" 480 - checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" 482 + checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" 481 483 dependencies = [ 482 - "serde", 484 + "serde_core", 483 485 ] 484 486 485 487 [[package]] ··· 502 504 "semver", 503 505 "serde", 504 506 "serde_json", 505 - "thiserror 2.0.12", 507 + "thiserror 2.0.17", 506 508 ] 507 509 508 510 [[package]] ··· 512 514 checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" 513 515 dependencies = [ 514 516 "serde", 515 - "toml 0.9.4", 517 + "toml 0.9.8", 516 518 ] 517 519 518 520 [[package]] 519 521 name = "cc" 520 - version = "1.2.30" 522 + version = "1.2.45" 521 523 source = "registry+https://github.com/rust-lang/crates.io-index" 522 - checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 524 + checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" 523 525 dependencies = [ 526 + "find-msvc-tools", 524 527 "jobserver", 525 528 "libc", 526 529 "shlex", ··· 555 558 556 559 [[package]] 557 560 name = "cfg-if" 558 - version = "1.0.1" 561 + version = "1.0.4" 559 562 source = "registry+https://github.com/rust-lang/crates.io-index" 560 - checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 563 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 561 564 562 565 [[package]] 563 566 name = "cfg_aliases" ··· 567 570 568 571 [[package]] 569 572 name = "chrono" 570 - version = "0.4.41" 573 + version = "0.4.42" 571 574 source = "registry+https://github.com/rust-lang/crates.io-index" 572 - checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 575 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 573 576 dependencies = [ 574 - "android-tzdata", 575 577 "iana-time-zone", 576 578 "num-traits", 577 579 "serde", 578 - "windows-link", 580 + "windows-link 0.2.1", 581 + ] 582 + 583 + [[package]] 584 + name = "clipboard-win" 585 + version = "5.4.1" 586 + source = "registry+https://github.com/rust-lang/crates.io-index" 587 + checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" 588 + dependencies = [ 589 + "error-code", 579 590 ] 580 591 581 592 [[package]] ··· 690 701 source = "registry+https://github.com/rust-lang/crates.io-index" 691 702 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 692 703 dependencies = [ 693 - "bitflags 2.9.1", 704 + "bitflags 2.10.0", 694 705 "core-foundation 0.10.1", 695 706 "core-graphics-types", 696 707 "foreign-types 0.5.0", ··· 703 714 source = "registry+https://github.com/rust-lang/crates.io-index" 704 715 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 705 716 dependencies = [ 706 - "bitflags 2.9.1", 717 + "bitflags 2.10.0", 707 718 "core-foundation 0.10.1", 708 719 "libc", 709 720 ] ··· 800 811 checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 801 812 dependencies = [ 802 813 "quote", 803 - "syn 2.0.104", 814 + "syn 2.0.109", 804 815 ] 805 816 806 817 [[package]] ··· 810 821 checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" 811 822 dependencies = [ 812 823 "quote", 813 - "syn 2.0.104", 824 + "syn 2.0.109", 814 825 ] 815 826 816 827 [[package]] 817 828 name = "darling" 818 - version = "0.20.11" 829 + version = "0.21.3" 819 830 source = "registry+https://github.com/rust-lang/crates.io-index" 820 - checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 831 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 821 832 dependencies = [ 822 833 "darling_core", 823 834 "darling_macro", ··· 825 836 826 837 [[package]] 827 838 name = "darling_core" 828 - version = "0.20.11" 839 + version = "0.21.3" 829 840 source = "registry+https://github.com/rust-lang/crates.io-index" 830 - checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 841 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 831 842 dependencies = [ 832 843 "fnv", 833 844 "ident_case", 834 845 "proc-macro2", 835 846 "quote", 836 847 "strsim", 837 - "syn 2.0.104", 848 + "syn 2.0.109", 838 849 ] 839 850 840 851 [[package]] 841 852 name = "darling_macro" 842 - version = "0.20.11" 853 + version = "0.21.3" 843 854 source = "registry+https://github.com/rust-lang/crates.io-index" 844 - checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 855 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 845 856 dependencies = [ 846 857 "darling_core", 847 858 "quote", 848 - "syn 2.0.104", 859 + "syn 2.0.109", 849 860 ] 850 861 851 862 [[package]] 852 863 name = "data-url" 853 - version = "0.3.1" 864 + version = "0.3.2" 854 865 source = "registry+https://github.com/rust-lang/crates.io-index" 855 - checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" 866 + checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" 856 867 857 868 [[package]] 858 869 name = "deranged" 859 - version = "0.4.0" 870 + version = "0.5.5" 860 871 source = "registry+https://github.com/rust-lang/crates.io-index" 861 - checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 872 + checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 862 873 dependencies = [ 863 874 "powerfmt", 864 - "serde", 865 - ] 866 - 867 - [[package]] 868 - name = "derivative" 869 - version = "2.2.0" 870 - source = "registry+https://github.com/rust-lang/crates.io-index" 871 - checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 872 - dependencies = [ 873 - "proc-macro2", 874 - "quote", 875 - "syn 1.0.109", 875 + "serde_core", 876 876 ] 877 877 878 878 [[package]] ··· 885 885 "proc-macro2", 886 886 "quote", 887 887 "rustc_version", 888 - "syn 2.0.104", 888 + "syn 2.0.109", 889 889 ] 890 890 891 891 [[package]] ··· 900 900 901 901 [[package]] 902 902 name = "dirs" 903 - version = "5.0.1" 904 - source = "registry+https://github.com/rust-lang/crates.io-index" 905 - checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" 906 - dependencies = [ 907 - "dirs-sys 0.4.1", 908 - ] 909 - 910 - [[package]] 911 - name = "dirs" 912 903 version = "6.0.0" 913 904 source = "registry+https://github.com/rust-lang/crates.io-index" 914 905 checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 915 906 dependencies = [ 916 - "dirs-sys 0.5.0", 917 - ] 918 - 919 - [[package]] 920 - name = "dirs-sys" 921 - version = "0.4.1" 922 - source = "registry+https://github.com/rust-lang/crates.io-index" 923 - checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" 924 - dependencies = [ 925 - "libc", 926 - "option-ext", 927 - "redox_users 0.4.6", 928 - "windows-sys 0.48.0", 907 + "dirs-sys", 929 908 ] 930 909 931 910 [[package]] ··· 936 915 dependencies = [ 937 916 "libc", 938 917 "option-ext", 939 - "redox_users 0.5.2", 940 - "windows-sys 0.60.2", 918 + "redox_users", 919 + "windows-sys 0.61.2", 941 920 ] 942 921 943 922 [[package]] ··· 952 931 source = "registry+https://github.com/rust-lang/crates.io-index" 953 932 checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 954 933 dependencies = [ 955 - "bitflags 2.9.1", 956 - "objc2 0.6.1", 934 + "bitflags 2.10.0", 935 + "objc2 0.6.3", 957 936 ] 958 937 959 938 [[package]] ··· 964 943 dependencies = [ 965 944 "proc-macro2", 966 945 "quote", 967 - "syn 2.0.104", 946 + "syn 2.0.109", 968 947 ] 969 948 970 949 [[package]] 971 950 name = "dlopen2" 972 - version = "0.7.0" 951 + version = "0.8.0" 973 952 source = "registry+https://github.com/rust-lang/crates.io-index" 974 - checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" 953 + checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" 975 954 dependencies = [ 976 955 "dlopen2_derive", 977 956 "libc", ··· 987 966 dependencies = [ 988 967 "proc-macro2", 989 968 "quote", 990 - "syn 2.0.104", 969 + "syn 2.0.109", 991 970 ] 992 971 993 972 [[package]] ··· 1001 980 1002 981 [[package]] 1003 982 name = "document-features" 1004 - version = "0.2.11" 983 + version = "0.2.12" 1005 984 source = "registry+https://github.com/rust-lang/crates.io-index" 1006 - checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 985 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 1007 986 dependencies = [ 1008 987 "litrs", 1009 988 ] ··· 1052 1031 1053 1032 [[package]] 1054 1033 name = "embed-resource" 1055 - version = "3.0.5" 1034 + version = "3.0.6" 1056 1035 source = "registry+https://github.com/rust-lang/crates.io-index" 1057 - checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38" 1036 + checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" 1058 1037 dependencies = [ 1059 1038 "cc", 1060 1039 "memchr", 1061 1040 "rustc_version", 1062 - "toml 0.9.4", 1041 + "toml 0.9.8", 1063 1042 "vswhom", 1064 1043 "winreg", 1065 1044 ] ··· 1103 1082 dependencies = [ 1104 1083 "proc-macro2", 1105 1084 "quote", 1106 - "syn 2.0.104", 1085 + "syn 2.0.109", 1107 1086 ] 1108 1087 1109 1088 [[package]] ··· 1123 1102 dependencies = [ 1124 1103 "proc-macro2", 1125 1104 "quote", 1126 - "syn 2.0.104", 1105 + "syn 2.0.109", 1127 1106 ] 1128 1107 1129 1108 [[package]] ··· 1134 1113 1135 1114 [[package]] 1136 1115 name = "erased-serde" 1137 - version = "0.4.6" 1116 + version = "0.4.9" 1138 1117 source = "registry+https://github.com/rust-lang/crates.io-index" 1139 - checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" 1118 + checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" 1140 1119 dependencies = [ 1141 1120 "serde", 1121 + "serde_core", 1142 1122 "typeid", 1143 1123 ] 1144 1124 1145 1125 [[package]] 1146 1126 name = "errno" 1147 - version = "0.3.13" 1127 + version = "0.3.14" 1148 1128 source = "registry+https://github.com/rust-lang/crates.io-index" 1149 - checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 1129 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1150 1130 dependencies = [ 1151 1131 "libc", 1152 - "windows-sys 0.60.2", 1132 + "windows-sys 0.61.2", 1153 1133 ] 1154 1134 1155 1135 [[package]] 1136 + name = "error-code" 1137 + version = "3.3.2" 1138 + source = "registry+https://github.com/rust-lang/crates.io-index" 1139 + checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 1140 + 1141 + [[package]] 1156 1142 name = "event-listener" 1157 - version = "5.4.0" 1143 + version = "5.4.1" 1158 1144 source = "registry+https://github.com/rust-lang/crates.io-index" 1159 - checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 1145 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 1160 1146 dependencies = [ 1161 1147 "concurrent-queue", 1162 1148 "parking", ··· 1190 1176 1191 1177 [[package]] 1192 1178 name = "fast_image_resize" 1193 - version = "4.2.3" 1179 + version = "5.3.0" 1194 1180 source = "registry+https://github.com/rust-lang/crates.io-index" 1195 - checksum = "43e5ce628b529e9bd2e2f378c1193215104b526fd494a572aa23414adc4e5553" 1181 + checksum = "1bd1eda71e8af93f8b00e189404235d82f4de77ea4a0d182b44a7f03994d647c" 1196 1182 dependencies = [ 1197 1183 "bytemuck", 1198 1184 "cfg-if", 1199 1185 "document-features", 1200 1186 "image", 1201 1187 "num-traits", 1202 - "thiserror 1.0.69", 1188 + "thiserror 2.0.17", 1203 1189 ] 1204 1190 1205 1191 [[package]] ··· 1209 1195 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1210 1196 1211 1197 [[package]] 1198 + name = "fax" 1199 + version = "0.2.6" 1200 + source = "registry+https://github.com/rust-lang/crates.io-index" 1201 + checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" 1202 + dependencies = [ 1203 + "fax_derive", 1204 + ] 1205 + 1206 + [[package]] 1207 + name = "fax_derive" 1208 + version = "0.2.0" 1209 + source = "registry+https://github.com/rust-lang/crates.io-index" 1210 + checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" 1211 + dependencies = [ 1212 + "proc-macro2", 1213 + "quote", 1214 + "syn 2.0.109", 1215 + ] 1216 + 1217 + [[package]] 1212 1218 name = "fdeflate" 1213 1219 version = "0.3.7" 1214 1220 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1228 1234 ] 1229 1235 1230 1236 [[package]] 1231 - name = "filetime" 1232 - version = "0.2.25" 1237 + name = "find-msvc-tools" 1238 + version = "0.1.4" 1233 1239 source = "registry+https://github.com/rust-lang/crates.io-index" 1234 - checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 1235 - dependencies = [ 1236 - "cfg-if", 1237 - "libc", 1238 - "libredox", 1239 - "windows-sys 0.59.0", 1240 - ] 1240 + checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 1241 1241 1242 1242 [[package]] 1243 1243 name = "flate2" 1244 - version = "1.1.2" 1244 + version = "1.1.5" 1245 1245 source = "registry+https://github.com/rust-lang/crates.io-index" 1246 - checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 1246 + checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 1247 1247 dependencies = [ 1248 1248 "crc32fast", 1249 1249 "miniz_oxide", ··· 1282 1282 dependencies = [ 1283 1283 "proc-macro2", 1284 1284 "quote", 1285 - "syn 2.0.104", 1285 + "syn 2.0.109", 1286 1286 ] 1287 1287 1288 1288 [[package]] ··· 1299 1299 1300 1300 [[package]] 1301 1301 name = "form_urlencoded" 1302 - version = "1.2.1" 1302 + version = "1.2.2" 1303 1303 source = "registry+https://github.com/rust-lang/crates.io-index" 1304 - checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1304 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1305 1305 dependencies = [ 1306 1306 "percent-encoding", 1307 1307 ] ··· 1360 1360 1361 1361 [[package]] 1362 1362 name = "futures-lite" 1363 - version = "2.6.0" 1363 + version = "2.6.1" 1364 1364 source = "registry+https://github.com/rust-lang/crates.io-index" 1365 - checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 1365 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1366 1366 dependencies = [ 1367 1367 "fastrand", 1368 1368 "futures-core", ··· 1379 1379 dependencies = [ 1380 1380 "proc-macro2", 1381 1381 "quote", 1382 - "syn 2.0.104", 1382 + "syn 2.0.109", 1383 1383 ] 1384 1384 1385 1385 [[package]] ··· 1521 1521 1522 1522 [[package]] 1523 1523 name = "generic-array" 1524 - version = "0.14.7" 1524 + version = "0.14.9" 1525 1525 source = "registry+https://github.com/rust-lang/crates.io-index" 1526 - checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1526 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1527 1527 dependencies = [ 1528 1528 "typenum", 1529 1529 "version_check", 1530 + ] 1531 + 1532 + [[package]] 1533 + name = "gethostname" 1534 + version = "1.1.0" 1535 + source = "registry+https://github.com/rust-lang/crates.io-index" 1536 + checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" 1537 + dependencies = [ 1538 + "rustix", 1539 + "windows-link 0.2.1", 1530 1540 ] 1531 1541 1532 1542 [[package]] ··· 1555 1565 1556 1566 [[package]] 1557 1567 name = "getrandom" 1558 - version = "0.3.3" 1568 + version = "0.3.4" 1559 1569 source = "registry+https://github.com/rust-lang/crates.io-index" 1560 - checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1570 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1561 1571 dependencies = [ 1562 1572 "cfg-if", 1563 1573 "js-sys", 1564 1574 "libc", 1565 1575 "r-efi", 1566 - "wasi 0.14.2+wasi-0.2.4", 1576 + "wasip2", 1567 1577 "wasm-bindgen", 1568 1578 ] 1569 1579 ··· 1578 1588 ] 1579 1589 1580 1590 [[package]] 1581 - name = "gimli" 1582 - version = "0.31.1" 1583 - source = "registry+https://github.com/rust-lang/crates.io-index" 1584 - checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1585 - 1586 - [[package]] 1587 1591 name = "gio" 1588 1592 version = "0.18.4" 1589 1593 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1621 1625 source = "registry+https://github.com/rust-lang/crates.io-index" 1622 1626 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 1623 1627 dependencies = [ 1624 - "bitflags 2.9.1", 1628 + "bitflags 2.10.0", 1625 1629 "futures-channel", 1626 1630 "futures-core", 1627 1631 "futures-executor", ··· 1649 1653 "proc-macro-error", 1650 1654 "proc-macro2", 1651 1655 "quote", 1652 - "syn 2.0.104", 1656 + "syn 2.0.109", 1653 1657 ] 1654 1658 1655 1659 [[package]] ··· 1664 1668 1665 1669 [[package]] 1666 1670 name = "glob" 1667 - version = "0.3.2" 1671 + version = "0.3.3" 1668 1672 source = "registry+https://github.com/rust-lang/crates.io-index" 1669 - checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1673 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1670 1674 1671 1675 [[package]] 1672 1676 name = "gobject-sys" ··· 1728 1732 "proc-macro-error", 1729 1733 "proc-macro2", 1730 1734 "quote", 1731 - "syn 2.0.104", 1735 + "syn 2.0.109", 1732 1736 ] 1733 1737 1734 1738 [[package]] 1735 1739 name = "h2" 1736 - version = "0.4.11" 1740 + version = "0.4.12" 1737 1741 source = "registry+https://github.com/rust-lang/crates.io-index" 1738 - checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" 1742 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 1739 1743 dependencies = [ 1740 1744 "atomic-waker", 1741 1745 "bytes", ··· 1743 1747 "futures-core", 1744 1748 "futures-sink", 1745 1749 "http", 1746 - "indexmap 2.10.0", 1750 + "indexmap 2.12.0", 1747 1751 "slab", 1748 1752 "tokio", 1749 1753 "tokio-util", ··· 1752 1756 1753 1757 [[package]] 1754 1758 name = "half" 1755 - version = "2.6.0" 1759 + version = "2.7.1" 1756 1760 source = "registry+https://github.com/rust-lang/crates.io-index" 1757 - checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 1761 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1758 1762 dependencies = [ 1759 1763 "cfg-if", 1760 1764 "crunchy", 1765 + "zerocopy", 1761 1766 ] 1762 1767 1763 1768 [[package]] ··· 1774 1779 1775 1780 [[package]] 1776 1781 name = "hashbrown" 1777 - version = "0.15.4" 1782 + version = "0.16.0" 1778 1783 source = "registry+https://github.com/rust-lang/crates.io-index" 1779 - checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 1784 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1780 1785 1781 1786 [[package]] 1782 1787 name = "heck" ··· 1856 1861 1857 1862 [[package]] 1858 1863 name = "hyper" 1859 - version = "1.6.0" 1864 + version = "1.7.0" 1860 1865 source = "registry+https://github.com/rust-lang/crates.io-index" 1861 - checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1866 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1862 1867 dependencies = [ 1868 + "atomic-waker", 1863 1869 "bytes", 1864 1870 "futures-channel", 1865 - "futures-util", 1871 + "futures-core", 1866 1872 "h2", 1867 1873 "http", 1868 1874 "http-body", 1869 1875 "httparse", 1870 1876 "itoa", 1871 1877 "pin-project-lite", 1878 + "pin-utils", 1872 1879 "smallvec", 1873 1880 "tokio", 1874 1881 "want", ··· 1909 1916 1910 1917 [[package]] 1911 1918 name = "hyper-util" 1912 - version = "0.1.16" 1919 + version = "0.1.17" 1913 1920 source = "registry+https://github.com/rust-lang/crates.io-index" 1914 - checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 1921 + checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" 1915 1922 dependencies = [ 1916 1923 "base64 0.22.1", 1917 1924 "bytes", ··· 1925 1932 "libc", 1926 1933 "percent-encoding", 1927 1934 "pin-project-lite", 1928 - "socket2 0.6.0", 1935 + "socket2", 1929 1936 "system-configuration", 1930 1937 "tokio", 1931 1938 "tower-service", ··· 1935 1942 1936 1943 [[package]] 1937 1944 name = "iana-time-zone" 1938 - version = "0.1.63" 1945 + version = "0.1.64" 1939 1946 source = "registry+https://github.com/rust-lang/crates.io-index" 1940 - checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1947 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 1941 1948 dependencies = [ 1942 1949 "android_system_properties", 1943 1950 "core-foundation-sys", ··· 1945 1952 "js-sys", 1946 1953 "log", 1947 1954 "wasm-bindgen", 1948 - "windows-core", 1955 + "windows-core 0.62.2", 1949 1956 ] 1950 1957 1951 1958 [[package]] ··· 1964 1971 checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" 1965 1972 dependencies = [ 1966 1973 "byteorder", 1967 - "png", 1974 + "png 0.17.16", 1968 1975 ] 1969 1976 1970 1977 [[package]] 1971 1978 name = "icu_collections" 1972 - version = "2.0.0" 1979 + version = "2.1.1" 1973 1980 source = "registry+https://github.com/rust-lang/crates.io-index" 1974 - checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1981 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 1975 1982 dependencies = [ 1976 1983 "displaydoc", 1977 1984 "potential_utf", ··· 1982 1989 1983 1990 [[package]] 1984 1991 name = "icu_locale_core" 1985 - version = "2.0.0" 1992 + version = "2.1.1" 1986 1993 source = "registry+https://github.com/rust-lang/crates.io-index" 1987 - checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1994 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 1988 1995 dependencies = [ 1989 1996 "displaydoc", 1990 1997 "litemap", ··· 1995 2002 1996 2003 [[package]] 1997 2004 name = "icu_normalizer" 1998 - version = "2.0.0" 2005 + version = "2.1.1" 1999 2006 source = "registry+https://github.com/rust-lang/crates.io-index" 2000 - checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 2007 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 2001 2008 dependencies = [ 2002 - "displaydoc", 2003 2009 "icu_collections", 2004 2010 "icu_normalizer_data", 2005 2011 "icu_properties", ··· 2010 2016 2011 2017 [[package]] 2012 2018 name = "icu_normalizer_data" 2013 - version = "2.0.0" 2019 + version = "2.1.1" 2014 2020 source = "registry+https://github.com/rust-lang/crates.io-index" 2015 - checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 2021 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 2016 2022 2017 2023 [[package]] 2018 2024 name = "icu_properties" 2019 - version = "2.0.1" 2025 + version = "2.1.1" 2020 2026 source = "registry+https://github.com/rust-lang/crates.io-index" 2021 - checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 2027 + checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" 2022 2028 dependencies = [ 2023 - "displaydoc", 2024 2029 "icu_collections", 2025 2030 "icu_locale_core", 2026 2031 "icu_properties_data", 2027 2032 "icu_provider", 2028 - "potential_utf", 2029 2033 "zerotrie", 2030 2034 "zerovec", 2031 2035 ] 2032 2036 2033 2037 [[package]] 2034 2038 name = "icu_properties_data" 2035 - version = "2.0.1" 2039 + version = "2.1.1" 2036 2040 source = "registry+https://github.com/rust-lang/crates.io-index" 2037 - checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 2041 + checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" 2038 2042 2039 2043 [[package]] 2040 2044 name = "icu_provider" 2041 - version = "2.0.0" 2045 + version = "2.1.1" 2042 2046 source = "registry+https://github.com/rust-lang/crates.io-index" 2043 - checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 2047 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 2044 2048 dependencies = [ 2045 2049 "displaydoc", 2046 2050 "icu_locale_core", 2047 - "stable_deref_trait", 2048 - "tinystr", 2049 2051 "writeable", 2050 2052 "yoke", 2051 2053 "zerofrom", ··· 2061 2063 2062 2064 [[package]] 2063 2065 name = "idna" 2064 - version = "1.0.3" 2066 + version = "1.1.0" 2065 2067 source = "registry+https://github.com/rust-lang/crates.io-index" 2066 - checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 2068 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 2067 2069 dependencies = [ 2068 2070 "idna_adapter", 2069 2071 "smallvec", ··· 2082 2084 2083 2085 [[package]] 2084 2086 name = "image" 2085 - version = "0.25.6" 2087 + version = "0.25.8" 2086 2088 source = "registry+https://github.com/rust-lang/crates.io-index" 2087 - checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 2089 + checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 2088 2090 dependencies = [ 2089 2091 "bytemuck", 2090 2092 "byteorder-lite", ··· 2092 2094 "exr", 2093 2095 "gif", 2094 2096 "image-webp", 2097 + "moxcms", 2095 2098 "num-traits", 2096 - "png", 2099 + "png 0.18.0", 2097 2100 "qoi", 2098 2101 "ravif", 2099 2102 "rayon", ··· 2105 2108 2106 2109 [[package]] 2107 2110 name = "image-webp" 2108 - version = "0.2.3" 2111 + version = "0.2.4" 2109 2112 source = "registry+https://github.com/rust-lang/crates.io-index" 2110 - checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" 2113 + checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" 2111 2114 dependencies = [ 2112 2115 "byteorder-lite", 2113 2116 "quick-error", ··· 2115 2118 2116 2119 [[package]] 2117 2120 name = "imgref" 2118 - version = "1.11.0" 2121 + version = "1.12.0" 2119 2122 source = "registry+https://github.com/rust-lang/crates.io-index" 2120 - checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" 2123 + checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" 2121 2124 2122 2125 [[package]] 2123 2126 name = "indexmap" ··· 2132 2135 2133 2136 [[package]] 2134 2137 name = "indexmap" 2135 - version = "2.10.0" 2138 + version = "2.12.0" 2136 2139 source = "registry+https://github.com/rust-lang/crates.io-index" 2137 - checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 2140 + checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" 2138 2141 dependencies = [ 2139 2142 "equivalent", 2140 - "hashbrown 0.15.4", 2143 + "hashbrown 0.16.0", 2141 2144 "serde", 2145 + "serde_core", 2142 2146 ] 2143 2147 2144 2148 [[package]] ··· 2152 2156 2153 2157 [[package]] 2154 2158 name = "inotify" 2155 - version = "0.9.6" 2159 + version = "0.11.0" 2156 2160 source = "registry+https://github.com/rust-lang/crates.io-index" 2157 - checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" 2161 + checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" 2158 2162 dependencies = [ 2159 - "bitflags 1.3.2", 2163 + "bitflags 2.10.0", 2160 2164 "inotify-sys", 2161 2165 "libc", 2162 2166 ] ··· 2178 2182 dependencies = [ 2179 2183 "proc-macro2", 2180 2184 "quote", 2181 - "syn 2.0.104", 2182 - ] 2183 - 2184 - [[package]] 2185 - name = "io-uring" 2186 - version = "0.7.9" 2187 - source = "registry+https://github.com/rust-lang/crates.io-index" 2188 - checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" 2189 - dependencies = [ 2190 - "bitflags 2.9.1", 2191 - "cfg-if", 2192 - "libc", 2185 + "syn 2.0.109", 2193 2186 ] 2194 2187 2195 2188 [[package]] ··· 2200 2193 2201 2194 [[package]] 2202 2195 name = "iri-string" 2203 - version = "0.7.8" 2196 + version = "0.7.9" 2204 2197 source = "registry+https://github.com/rust-lang/crates.io-index" 2205 - checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 2198 + checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" 2206 2199 dependencies = [ 2207 2200 "memchr", 2208 2201 "serde", ··· 2289 2282 2290 2283 [[package]] 2291 2284 name = "jobserver" 2292 - version = "0.1.33" 2285 + version = "0.1.34" 2293 2286 source = "registry+https://github.com/rust-lang/crates.io-index" 2294 - checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 2287 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 2295 2288 dependencies = [ 2296 - "getrandom 0.3.3", 2289 + "getrandom 0.3.4", 2297 2290 "libc", 2298 2291 ] 2299 2292 2300 2293 [[package]] 2301 - name = "jpeg-decoder" 2302 - version = "0.3.2" 2303 - source = "registry+https://github.com/rust-lang/crates.io-index" 2304 - checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" 2305 - 2306 - [[package]] 2307 2294 name = "js-sys" 2308 - version = "0.3.77" 2295 + version = "0.3.82" 2309 2296 source = "registry+https://github.com/rust-lang/crates.io-index" 2310 - checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 2297 + checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" 2311 2298 dependencies = [ 2312 2299 "once_cell", 2313 2300 "wasm-bindgen", ··· 2341 2328 source = "registry+https://github.com/rust-lang/crates.io-index" 2342 2329 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" 2343 2330 dependencies = [ 2344 - "bitflags 2.9.1", 2331 + "bitflags 2.10.0", 2345 2332 "serde", 2346 2333 "unicode-segmentation", 2347 2334 ] ··· 2374 2361 dependencies = [ 2375 2362 "cssparser", 2376 2363 "html5ever", 2377 - "indexmap 2.10.0", 2364 + "indexmap 2.12.0", 2378 2365 "selectors", 2379 2366 ] 2380 2367 ··· 2386 2373 2387 2374 [[package]] 2388 2375 name = "lebe" 2389 - version = "0.5.2" 2376 + version = "0.5.3" 2390 2377 source = "registry+https://github.com/rust-lang/crates.io-index" 2391 - checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 2378 + checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" 2392 2379 2393 2380 [[package]] 2394 2381 name = "libappindicator" ··· 2416 2403 2417 2404 [[package]] 2418 2405 name = "libc" 2419 - version = "0.2.174" 2406 + version = "0.2.177" 2420 2407 source = "registry+https://github.com/rust-lang/crates.io-index" 2421 - checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 2408 + checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 2422 2409 2423 2410 [[package]] 2424 2411 name = "libfuzzer-sys" ··· 2442 2429 2443 2430 [[package]] 2444 2431 name = "libredox" 2445 - version = "0.1.9" 2432 + version = "0.1.10" 2446 2433 source = "registry+https://github.com/rust-lang/crates.io-index" 2447 - checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" 2434 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 2448 2435 dependencies = [ 2449 - "bitflags 2.9.1", 2436 + "bitflags 2.10.0", 2450 2437 "libc", 2451 - "redox_syscall", 2452 2438 ] 2453 2439 2454 2440 [[package]] 2455 2441 name = "linux-raw-sys" 2456 - version = "0.9.4" 2442 + version = "0.11.0" 2457 2443 source = "registry+https://github.com/rust-lang/crates.io-index" 2458 - checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 2444 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 2459 2445 2460 2446 [[package]] 2461 2447 name = "litemap" 2462 - version = "0.8.0" 2448 + version = "0.8.1" 2463 2449 source = "registry+https://github.com/rust-lang/crates.io-index" 2464 - checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 2450 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 2465 2451 2466 2452 [[package]] 2467 2453 name = "litrs" 2468 - version = "0.4.2" 2454 + version = "1.0.0" 2469 2455 source = "registry+https://github.com/rust-lang/crates.io-index" 2470 - checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 2456 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 2471 2457 2472 2458 [[package]] 2473 2459 name = "lock_api" 2474 - version = "0.4.13" 2460 + version = "0.4.14" 2475 2461 source = "registry+https://github.com/rust-lang/crates.io-index" 2476 - checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 2462 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 2477 2463 dependencies = [ 2478 - "autocfg", 2479 2464 "scopeguard", 2480 2465 ] 2481 2466 2482 2467 [[package]] 2483 2468 name = "log" 2484 - version = "0.4.27" 2469 + version = "0.4.28" 2485 2470 source = "registry+https://github.com/rust-lang/crates.io-index" 2486 - checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 2471 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2487 2472 2488 2473 [[package]] 2489 2474 name = "loop9" ··· 2528 2513 dependencies = [ 2529 2514 "proc-macro2", 2530 2515 "quote", 2531 - "syn 2.0.104", 2516 + "syn 2.0.109", 2532 2517 ] 2533 2518 2534 2519 [[package]] ··· 2549 2534 2550 2535 [[package]] 2551 2536 name = "memchr" 2552 - version = "2.7.5" 2537 + version = "2.7.6" 2553 2538 source = "registry+https://github.com/rust-lang/crates.io-index" 2554 - checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 2539 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2555 2540 2556 2541 [[package]] 2557 2542 name = "memoffset" ··· 2569 2554 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2570 2555 2571 2556 [[package]] 2572 - name = "minimal-lexical" 2573 - version = "0.2.1" 2574 - source = "registry+https://github.com/rust-lang/crates.io-index" 2575 - checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2576 - 2577 - [[package]] 2578 2557 name = "miniz_oxide" 2579 2558 version = "0.8.9" 2580 2559 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2586 2565 2587 2566 [[package]] 2588 2567 name = "mio" 2589 - version = "0.8.11" 2568 + version = "1.1.0" 2590 2569 source = "registry+https://github.com/rust-lang/crates.io-index" 2591 - checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 2570 + checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" 2592 2571 dependencies = [ 2593 2572 "libc", 2594 2573 "log", 2595 2574 "wasi 0.11.1+wasi-snapshot-preview1", 2596 - "windows-sys 0.48.0", 2575 + "windows-sys 0.61.2", 2597 2576 ] 2598 2577 2599 2578 [[package]] 2600 - name = "mio" 2601 - version = "1.0.4" 2579 + name = "moxcms" 2580 + version = "0.7.9" 2602 2581 source = "registry+https://github.com/rust-lang/crates.io-index" 2603 - checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 2582 + checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" 2604 2583 dependencies = [ 2605 - "libc", 2606 - "wasi 0.11.1+wasi-snapshot-preview1", 2607 - "windows-sys 0.59.0", 2584 + "num-traits", 2585 + "pxfm", 2608 2586 ] 2609 2587 2610 2588 [[package]] ··· 2628 2606 "dpi", 2629 2607 "gtk", 2630 2608 "keyboard-types", 2631 - "objc2 0.6.1", 2609 + "objc2 0.6.3", 2632 2610 "objc2-app-kit", 2633 2611 "objc2-core-foundation", 2634 - "objc2-foundation 0.3.1", 2612 + "objc2-foundation 0.3.2", 2635 2613 "once_cell", 2636 - "png", 2614 + "png 0.17.16", 2637 2615 "serde", 2638 - "thiserror 2.0.12", 2616 + "thiserror 2.0.17", 2639 2617 "windows-sys 0.60.2", 2640 2618 ] 2641 2619 ··· 2662 2640 source = "registry+https://github.com/rust-lang/crates.io-index" 2663 2641 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2664 2642 dependencies = [ 2665 - "bitflags 2.9.1", 2643 + "bitflags 2.10.0", 2666 2644 "jni-sys", 2667 2645 "log", 2668 2646 "ndk-sys", ··· 2694 2672 2695 2673 [[package]] 2696 2674 name = "nix" 2697 - version = "0.27.1" 2675 + version = "0.30.1" 2698 2676 source = "registry+https://github.com/rust-lang/crates.io-index" 2699 - checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" 2677 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 2700 2678 dependencies = [ 2701 - "bitflags 2.9.1", 2679 + "bitflags 2.10.0", 2702 2680 "cfg-if", 2681 + "cfg_aliases", 2703 2682 "libc", 2704 2683 "memoffset", 2705 2684 ] ··· 2712 2691 2713 2692 [[package]] 2714 2693 name = "nom" 2715 - version = "7.1.3" 2694 + version = "8.0.0" 2716 2695 source = "registry+https://github.com/rust-lang/crates.io-index" 2717 - checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2696 + checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" 2718 2697 dependencies = [ 2719 2698 "memchr", 2720 - "minimal-lexical", 2721 2699 ] 2722 2700 2723 2701 [[package]] ··· 2728 2706 2729 2707 [[package]] 2730 2708 name = "notify" 2731 - version = "6.1.1" 2709 + version = "8.2.0" 2732 2710 source = "registry+https://github.com/rust-lang/crates.io-index" 2733 - checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" 2711 + checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" 2734 2712 dependencies = [ 2735 - "bitflags 2.9.1", 2736 - "crossbeam-channel", 2737 - "filetime", 2713 + "bitflags 2.10.0", 2738 2714 "fsevent-sys", 2739 2715 "inotify", 2740 2716 "kqueue", 2741 2717 "libc", 2742 2718 "log", 2743 - "mio 0.8.11", 2719 + "mio", 2720 + "notify-types", 2744 2721 "walkdir", 2745 - "windows-sys 0.48.0", 2722 + "windows-sys 0.60.2", 2746 2723 ] 2747 2724 2748 2725 [[package]] 2726 + name = "notify-types" 2727 + version = "2.0.0" 2728 + source = "registry+https://github.com/rust-lang/crates.io-index" 2729 + checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" 2730 + 2731 + [[package]] 2749 2732 name = "num-bigint" 2750 2733 version = "0.4.6" 2751 2734 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2769 2752 dependencies = [ 2770 2753 "proc-macro2", 2771 2754 "quote", 2772 - "syn 2.0.104", 2755 + "syn 2.0.109", 2773 2756 ] 2774 2757 2775 2758 [[package]] ··· 2803 2786 2804 2787 [[package]] 2805 2788 name = "num_enum" 2806 - version = "0.7.4" 2789 + version = "0.7.5" 2807 2790 source = "registry+https://github.com/rust-lang/crates.io-index" 2808 - checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 2791 + checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" 2809 2792 dependencies = [ 2810 2793 "num_enum_derive", 2811 2794 "rustversion", ··· 2813 2796 2814 2797 [[package]] 2815 2798 name = "num_enum_derive" 2816 - version = "0.7.4" 2799 + version = "0.7.5" 2817 2800 source = "registry+https://github.com/rust-lang/crates.io-index" 2818 - checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 2801 + checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" 2819 2802 dependencies = [ 2820 - "proc-macro-crate 2.0.2", 2803 + "proc-macro-crate 3.4.0", 2821 2804 "proc-macro2", 2822 2805 "quote", 2823 - "syn 2.0.104", 2806 + "syn 2.0.109", 2824 2807 ] 2825 2808 2826 2809 [[package]] ··· 2841 2824 2842 2825 [[package]] 2843 2826 name = "objc2" 2844 - version = "0.6.1" 2827 + version = "0.6.3" 2845 2828 source = "registry+https://github.com/rust-lang/crates.io-index" 2846 - checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" 2829 + checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 2847 2830 dependencies = [ 2848 2831 "objc2-encode", 2849 2832 "objc2-exception-helper", ··· 2851 2834 2852 2835 [[package]] 2853 2836 name = "objc2-app-kit" 2854 - version = "0.3.1" 2837 + version = "0.3.2" 2855 2838 source = "registry+https://github.com/rust-lang/crates.io-index" 2856 - checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 2839 + checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" 2857 2840 dependencies = [ 2858 - "bitflags 2.9.1", 2859 - "block2 0.6.1", 2841 + "bitflags 2.10.0", 2842 + "block2 0.6.2", 2860 2843 "libc", 2861 - "objc2 0.6.1", 2844 + "objc2 0.6.3", 2862 2845 "objc2-cloud-kit", 2863 2846 "objc2-core-data", 2864 2847 "objc2-core-foundation", 2865 2848 "objc2-core-graphics", 2866 2849 "objc2-core-image", 2867 - "objc2-foundation 0.3.1", 2868 - "objc2-quartz-core 0.3.1", 2850 + "objc2-core-text", 2851 + "objc2-core-video", 2852 + "objc2-foundation 0.3.2", 2853 + "objc2-quartz-core 0.3.2", 2869 2854 ] 2870 2855 2871 2856 [[package]] 2872 2857 name = "objc2-cloud-kit" 2873 - version = "0.3.1" 2858 + version = "0.3.2" 2874 2859 source = "registry+https://github.com/rust-lang/crates.io-index" 2875 - checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" 2860 + checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" 2876 2861 dependencies = [ 2877 - "bitflags 2.9.1", 2878 - "objc2 0.6.1", 2879 - "objc2-foundation 0.3.1", 2862 + "bitflags 2.10.0", 2863 + "objc2 0.6.3", 2864 + "objc2-foundation 0.3.2", 2880 2865 ] 2881 2866 2882 2867 [[package]] 2883 2868 name = "objc2-core-data" 2884 - version = "0.3.1" 2869 + version = "0.3.2" 2885 2870 source = "registry+https://github.com/rust-lang/crates.io-index" 2886 - checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" 2871 + checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" 2887 2872 dependencies = [ 2888 - "bitflags 2.9.1", 2889 - "objc2 0.6.1", 2890 - "objc2-foundation 0.3.1", 2873 + "bitflags 2.10.0", 2874 + "objc2 0.6.3", 2875 + "objc2-foundation 0.3.2", 2891 2876 ] 2892 2877 2893 2878 [[package]] 2894 2879 name = "objc2-core-foundation" 2895 - version = "0.3.1" 2880 + version = "0.3.2" 2896 2881 source = "registry+https://github.com/rust-lang/crates.io-index" 2897 - checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 2882 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2898 2883 dependencies = [ 2899 - "bitflags 2.9.1", 2884 + "bitflags 2.10.0", 2900 2885 "dispatch2", 2901 - "objc2 0.6.1", 2886 + "objc2 0.6.3", 2902 2887 ] 2903 2888 2904 2889 [[package]] 2905 2890 name = "objc2-core-graphics" 2906 - version = "0.3.1" 2891 + version = "0.3.2" 2907 2892 source = "registry+https://github.com/rust-lang/crates.io-index" 2908 - checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 2893 + checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" 2909 2894 dependencies = [ 2910 - "bitflags 2.9.1", 2895 + "bitflags 2.10.0", 2911 2896 "dispatch2", 2912 - "objc2 0.6.1", 2897 + "objc2 0.6.3", 2913 2898 "objc2-core-foundation", 2914 2899 "objc2-io-surface", 2915 2900 ] 2916 2901 2917 2902 [[package]] 2918 2903 name = "objc2-core-image" 2919 - version = "0.3.1" 2904 + version = "0.3.2" 2920 2905 source = "registry+https://github.com/rust-lang/crates.io-index" 2921 - checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" 2906 + checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" 2922 2907 dependencies = [ 2923 - "objc2 0.6.1", 2924 - "objc2-foundation 0.3.1", 2908 + "objc2 0.6.3", 2909 + "objc2-foundation 0.3.2", 2910 + ] 2911 + 2912 + [[package]] 2913 + name = "objc2-core-text" 2914 + version = "0.3.2" 2915 + source = "registry+https://github.com/rust-lang/crates.io-index" 2916 + checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" 2917 + dependencies = [ 2918 + "bitflags 2.10.0", 2919 + "objc2 0.6.3", 2920 + "objc2-core-foundation", 2921 + "objc2-core-graphics", 2922 + ] 2923 + 2924 + [[package]] 2925 + name = "objc2-core-video" 2926 + version = "0.3.2" 2927 + source = "registry+https://github.com/rust-lang/crates.io-index" 2928 + checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" 2929 + dependencies = [ 2930 + "bitflags 2.10.0", 2931 + "objc2 0.6.3", 2932 + "objc2-core-foundation", 2933 + "objc2-core-graphics", 2934 + "objc2-io-surface", 2925 2935 ] 2926 2936 2927 2937 [[package]] ··· 2945 2955 source = "registry+https://github.com/rust-lang/crates.io-index" 2946 2956 checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2947 2957 dependencies = [ 2948 - "bitflags 2.9.1", 2958 + "bitflags 2.10.0", 2949 2959 "block2 0.5.1", 2950 2960 "libc", 2951 2961 "objc2 0.5.2", ··· 2953 2963 2954 2964 [[package]] 2955 2965 name = "objc2-foundation" 2956 - version = "0.3.1" 2966 + version = "0.3.2" 2957 2967 source = "registry+https://github.com/rust-lang/crates.io-index" 2958 - checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 2968 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 2959 2969 dependencies = [ 2960 - "bitflags 2.9.1", 2961 - "block2 0.6.1", 2970 + "bitflags 2.10.0", 2971 + "block2 0.6.2", 2962 2972 "libc", 2963 - "objc2 0.6.1", 2973 + "objc2 0.6.3", 2964 2974 "objc2-core-foundation", 2965 2975 ] 2966 2976 2967 2977 [[package]] 2968 2978 name = "objc2-io-surface" 2969 - version = "0.3.1" 2979 + version = "0.3.2" 2970 2980 source = "registry+https://github.com/rust-lang/crates.io-index" 2971 - checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 2981 + checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" 2972 2982 dependencies = [ 2973 - "bitflags 2.9.1", 2974 - "objc2 0.6.1", 2983 + "bitflags 2.10.0", 2984 + "objc2 0.6.3", 2985 + "objc2-core-foundation", 2986 + ] 2987 + 2988 + [[package]] 2989 + name = "objc2-javascript-core" 2990 + version = "0.3.2" 2991 + source = "registry+https://github.com/rust-lang/crates.io-index" 2992 + checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" 2993 + dependencies = [ 2994 + "objc2 0.6.3", 2975 2995 "objc2-core-foundation", 2976 2996 ] 2977 2997 ··· 2981 3001 source = "registry+https://github.com/rust-lang/crates.io-index" 2982 3002 checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2983 3003 dependencies = [ 2984 - "bitflags 2.9.1", 3004 + "bitflags 2.10.0", 2985 3005 "block2 0.5.1", 2986 3006 "objc2 0.5.2", 2987 3007 "objc2-foundation 0.2.2", ··· 2993 3013 source = "registry+https://github.com/rust-lang/crates.io-index" 2994 3014 checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2995 3015 dependencies = [ 2996 - "bitflags 2.9.1", 3016 + "bitflags 2.10.0", 2997 3017 "block2 0.5.1", 2998 3018 "objc2 0.5.2", 2999 3019 "objc2-foundation 0.2.2", ··· 3002 3022 3003 3023 [[package]] 3004 3024 name = "objc2-quartz-core" 3005 - version = "0.3.1" 3025 + version = "0.3.2" 3006 3026 source = "registry+https://github.com/rust-lang/crates.io-index" 3007 - checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" 3027 + checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" 3008 3028 dependencies = [ 3009 - "bitflags 2.9.1", 3010 - "objc2 0.6.1", 3011 - "objc2-foundation 0.3.1", 3029 + "bitflags 2.10.0", 3030 + "objc2 0.6.3", 3031 + "objc2-foundation 0.3.2", 3012 3032 ] 3013 3033 3014 3034 [[package]] 3015 - name = "objc2-ui-kit" 3016 - version = "0.3.1" 3035 + name = "objc2-security" 3036 + version = "0.3.2" 3017 3037 source = "registry+https://github.com/rust-lang/crates.io-index" 3018 - checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" 3038 + checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" 3019 3039 dependencies = [ 3020 - "bitflags 2.9.1", 3021 - "objc2 0.6.1", 3040 + "bitflags 2.10.0", 3041 + "objc2 0.6.3", 3022 3042 "objc2-core-foundation", 3023 - "objc2-foundation 0.3.1", 3024 3043 ] 3025 3044 3026 3045 [[package]] 3027 - name = "objc2-web-kit" 3028 - version = "0.3.1" 3046 + name = "objc2-ui-kit" 3047 + version = "0.3.2" 3029 3048 source = "registry+https://github.com/rust-lang/crates.io-index" 3030 - checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" 3049 + checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" 3031 3050 dependencies = [ 3032 - "bitflags 2.9.1", 3033 - "block2 0.6.1", 3034 - "objc2 0.6.1", 3035 - "objc2-app-kit", 3051 + "bitflags 2.10.0", 3052 + "objc2 0.6.3", 3036 3053 "objc2-core-foundation", 3037 - "objc2-foundation 0.3.1", 3054 + "objc2-foundation 0.3.2", 3038 3055 ] 3039 3056 3040 3057 [[package]] 3041 - name = "object" 3042 - version = "0.36.7" 3058 + name = "objc2-web-kit" 3059 + version = "0.3.2" 3043 3060 source = "registry+https://github.com/rust-lang/crates.io-index" 3044 - checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 3061 + checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" 3045 3062 dependencies = [ 3046 - "memchr", 3063 + "bitflags 2.10.0", 3064 + "block2 0.6.2", 3065 + "objc2 0.6.3", 3066 + "objc2-app-kit", 3067 + "objc2-core-foundation", 3068 + "objc2-foundation 0.3.2", 3069 + "objc2-javascript-core", 3070 + "objc2-security", 3047 3071 ] 3048 3072 3049 3073 [[package]] ··· 3066 3090 3067 3091 [[package]] 3068 3092 name = "openssl" 3069 - version = "0.10.73" 3093 + version = "0.10.74" 3070 3094 source = "registry+https://github.com/rust-lang/crates.io-index" 3071 - checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 3095 + checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" 3072 3096 dependencies = [ 3073 - "bitflags 2.9.1", 3097 + "bitflags 2.10.0", 3074 3098 "cfg-if", 3075 3099 "foreign-types 0.3.2", 3076 3100 "libc", ··· 3087 3111 dependencies = [ 3088 3112 "proc-macro2", 3089 3113 "quote", 3090 - "syn 2.0.104", 3114 + "syn 2.0.109", 3091 3115 ] 3092 3116 3093 3117 [[package]] ··· 3098 3122 3099 3123 [[package]] 3100 3124 name = "openssl-sys" 3101 - version = "0.9.109" 3125 + version = "0.9.110" 3102 3126 source = "registry+https://github.com/rust-lang/crates.io-index" 3103 - checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 3127 + checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" 3104 3128 dependencies = [ 3105 3129 "cc", 3106 3130 "libc", ··· 3136 3160 3137 3161 [[package]] 3138 3162 name = "os_pipe" 3139 - version = "1.2.2" 3163 + version = "1.2.3" 3140 3164 source = "registry+https://github.com/rust-lang/crates.io-index" 3141 - checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" 3165 + checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" 3142 3166 dependencies = [ 3143 3167 "libc", 3144 - "windows-sys 0.59.0", 3168 + "windows-sys 0.61.2", 3145 3169 ] 3146 3170 3147 3171 [[package]] ··· 3177 3201 3178 3202 [[package]] 3179 3203 name = "parking_lot" 3180 - version = "0.12.4" 3204 + version = "0.12.5" 3181 3205 source = "registry+https://github.com/rust-lang/crates.io-index" 3182 - checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 3206 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 3183 3207 dependencies = [ 3184 3208 "lock_api", 3185 3209 "parking_lot_core", ··· 3187 3211 3188 3212 [[package]] 3189 3213 name = "parking_lot_core" 3190 - version = "0.9.11" 3214 + version = "0.9.12" 3191 3215 source = "registry+https://github.com/rust-lang/crates.io-index" 3192 - checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 3216 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 3193 3217 dependencies = [ 3194 3218 "cfg-if", 3195 3219 "libc", 3196 3220 "redox_syscall", 3197 3221 "smallvec", 3198 - "windows-targets 0.52.6", 3222 + "windows-link 0.2.1", 3199 3223 ] 3200 3224 3201 3225 [[package]] ··· 3212 3236 3213 3237 [[package]] 3214 3238 name = "percent-encoding" 3215 - version = "2.3.1" 3239 + version = "2.3.2" 3216 3240 source = "registry+https://github.com/rust-lang/crates.io-index" 3217 - checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 3241 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3218 3242 3219 3243 [[package]] 3220 3244 name = "phf" ··· 3320 3344 "phf_shared 0.11.3", 3321 3345 "proc-macro2", 3322 3346 "quote", 3323 - "syn 2.0.104", 3347 + "syn 2.0.109", 3324 3348 ] 3325 3349 3326 3350 [[package]] ··· 3381 3405 3382 3406 [[package]] 3383 3407 name = "plist" 3384 - version = "1.7.4" 3408 + version = "1.8.0" 3385 3409 source = "registry+https://github.com/rust-lang/crates.io-index" 3386 - checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" 3410 + checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" 3387 3411 dependencies = [ 3388 3412 "base64 0.22.1", 3389 - "indexmap 2.10.0", 3413 + "indexmap 2.12.0", 3390 3414 "quick-xml", 3391 3415 "serde", 3392 3416 "time", ··· 3406 3430 ] 3407 3431 3408 3432 [[package]] 3433 + name = "png" 3434 + version = "0.18.0" 3435 + source = "registry+https://github.com/rust-lang/crates.io-index" 3436 + checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" 3437 + dependencies = [ 3438 + "bitflags 2.10.0", 3439 + "crc32fast", 3440 + "fdeflate", 3441 + "flate2", 3442 + "miniz_oxide", 3443 + ] 3444 + 3445 + [[package]] 3409 3446 name = "polling" 3410 - version = "3.9.0" 3447 + version = "3.11.0" 3411 3448 source = "registry+https://github.com/rust-lang/crates.io-index" 3412 - checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" 3449 + checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 3413 3450 dependencies = [ 3414 3451 "cfg-if", 3415 3452 "concurrent-queue", 3416 3453 "hermit-abi", 3417 3454 "pin-project-lite", 3418 3455 "rustix", 3419 - "windows-sys 0.60.2", 3456 + "windows-sys 0.61.2", 3420 3457 ] 3421 3458 3422 3459 [[package]] 3423 3460 name = "potential_utf" 3424 - version = "0.1.2" 3461 + version = "0.1.4" 3425 3462 source = "registry+https://github.com/rust-lang/crates.io-index" 3426 - checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 3463 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 3427 3464 dependencies = [ 3428 3465 "zerovec", 3429 3466 ] ··· 3470 3507 ] 3471 3508 3472 3509 [[package]] 3510 + name = "proc-macro-crate" 3511 + version = "3.4.0" 3512 + source = "registry+https://github.com/rust-lang/crates.io-index" 3513 + checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" 3514 + dependencies = [ 3515 + "toml_edit 0.23.7", 3516 + ] 3517 + 3518 + [[package]] 3473 3519 name = "proc-macro-error" 3474 3520 version = "1.0.4" 3475 3521 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3501 3547 3502 3548 [[package]] 3503 3549 name = "proc-macro2" 3504 - version = "1.0.95" 3550 + version = "1.0.103" 3505 3551 source = "registry+https://github.com/rust-lang/crates.io-index" 3506 - checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 3552 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 3507 3553 dependencies = [ 3508 3554 "unicode-ident", 3509 3555 ] ··· 3524 3570 checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 3525 3571 dependencies = [ 3526 3572 "quote", 3527 - "syn 2.0.104", 3573 + "syn 2.0.109", 3528 3574 ] 3529 3575 3530 3576 [[package]] ··· 3544 3590 ] 3545 3591 3546 3592 [[package]] 3593 + name = "pxfm" 3594 + version = "0.1.25" 3595 + source = "registry+https://github.com/rust-lang/crates.io-index" 3596 + checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" 3597 + dependencies = [ 3598 + "num-traits", 3599 + ] 3600 + 3601 + [[package]] 3547 3602 name = "qoi" 3548 3603 version = "0.4.1" 3549 3604 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3560 3615 3561 3616 [[package]] 3562 3617 name = "quick-xml" 3563 - version = "0.38.0" 3618 + version = "0.38.3" 3564 3619 source = "registry+https://github.com/rust-lang/crates.io-index" 3565 - checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" 3620 + checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" 3566 3621 dependencies = [ 3567 3622 "memchr", 3568 3623 ] 3569 3624 3570 3625 [[package]] 3571 3626 name = "quinn" 3572 - version = "0.11.8" 3627 + version = "0.11.9" 3573 3628 source = "registry+https://github.com/rust-lang/crates.io-index" 3574 - checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" 3629 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 3575 3630 dependencies = [ 3576 3631 "bytes", 3577 3632 "cfg_aliases", ··· 3580 3635 "quinn-udp", 3581 3636 "rustc-hash", 3582 3637 "rustls", 3583 - "socket2 0.5.10", 3584 - "thiserror 2.0.12", 3638 + "socket2", 3639 + "thiserror 2.0.17", 3585 3640 "tokio", 3586 3641 "tracing", 3587 3642 "web-time", ··· 3589 3644 3590 3645 [[package]] 3591 3646 name = "quinn-proto" 3592 - version = "0.11.12" 3647 + version = "0.11.13" 3593 3648 source = "registry+https://github.com/rust-lang/crates.io-index" 3594 - checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" 3649 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 3595 3650 dependencies = [ 3596 3651 "bytes", 3597 - "getrandom 0.3.3", 3652 + "getrandom 0.3.4", 3598 3653 "lru-slab", 3599 3654 "rand 0.9.2", 3600 3655 "ring", ··· 3602 3657 "rustls", 3603 3658 "rustls-pki-types", 3604 3659 "slab", 3605 - "thiserror 2.0.12", 3660 + "thiserror 2.0.17", 3606 3661 "tinyvec", 3607 3662 "tracing", 3608 3663 "web-time", ··· 3610 3665 3611 3666 [[package]] 3612 3667 name = "quinn-udp" 3613 - version = "0.5.13" 3668 + version = "0.5.14" 3614 3669 source = "registry+https://github.com/rust-lang/crates.io-index" 3615 - checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" 3670 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 3616 3671 dependencies = [ 3617 3672 "cfg_aliases", 3618 3673 "libc", 3619 3674 "once_cell", 3620 - "socket2 0.5.10", 3675 + "socket2", 3621 3676 "tracing", 3622 - "windows-sys 0.59.0", 3677 + "windows-sys 0.60.2", 3623 3678 ] 3624 3679 3625 3680 [[package]] 3626 3681 name = "quote" 3627 - version = "1.0.40" 3682 + version = "1.0.42" 3628 3683 source = "registry+https://github.com/rust-lang/crates.io-index" 3629 - checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 3684 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 3630 3685 dependencies = [ 3631 3686 "proc-macro2", 3632 3687 ] ··· 3726 3781 source = "registry+https://github.com/rust-lang/crates.io-index" 3727 3782 checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 3728 3783 dependencies = [ 3729 - "getrandom 0.3.3", 3784 + "getrandom 0.3.4", 3730 3785 ] 3731 3786 3732 3787 [[package]] ··· 3805 3860 3806 3861 [[package]] 3807 3862 name = "rayon" 3808 - version = "1.10.0" 3863 + version = "1.11.0" 3809 3864 source = "registry+https://github.com/rust-lang/crates.io-index" 3810 - checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 3865 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 3811 3866 dependencies = [ 3812 3867 "either", 3813 3868 "rayon-core", ··· 3815 3870 3816 3871 [[package]] 3817 3872 name = "rayon-core" 3818 - version = "1.12.1" 3873 + version = "1.13.0" 3819 3874 source = "registry+https://github.com/rust-lang/crates.io-index" 3820 - checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 3875 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 3821 3876 dependencies = [ 3822 3877 "crossbeam-deque", 3823 3878 "crossbeam-utils", ··· 3825 3880 3826 3881 [[package]] 3827 3882 name = "redox_syscall" 3828 - version = "0.5.17" 3883 + version = "0.5.18" 3829 3884 source = "registry+https://github.com/rust-lang/crates.io-index" 3830 - checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 3885 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 3831 3886 dependencies = [ 3832 - "bitflags 2.9.1", 3833 - ] 3834 - 3835 - [[package]] 3836 - name = "redox_users" 3837 - version = "0.4.6" 3838 - source = "registry+https://github.com/rust-lang/crates.io-index" 3839 - checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" 3840 - dependencies = [ 3841 - "getrandom 0.2.16", 3842 - "libredox", 3843 - "thiserror 1.0.69", 3887 + "bitflags 2.10.0", 3844 3888 ] 3845 3889 3846 3890 [[package]] ··· 3851 3895 dependencies = [ 3852 3896 "getrandom 0.2.16", 3853 3897 "libredox", 3854 - "thiserror 2.0.12", 3898 + "thiserror 2.0.17", 3855 3899 ] 3856 3900 3857 3901 [[package]] 3858 3902 name = "ref-cast" 3859 - version = "1.0.24" 3903 + version = "1.0.25" 3860 3904 source = "registry+https://github.com/rust-lang/crates.io-index" 3861 - checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" 3905 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 3862 3906 dependencies = [ 3863 3907 "ref-cast-impl", 3864 3908 ] 3865 3909 3866 3910 [[package]] 3867 3911 name = "ref-cast-impl" 3868 - version = "1.0.24" 3912 + version = "1.0.25" 3869 3913 source = "registry+https://github.com/rust-lang/crates.io-index" 3870 - checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" 3914 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 3871 3915 dependencies = [ 3872 3916 "proc-macro2", 3873 3917 "quote", 3874 - "syn 2.0.104", 3918 + "syn 2.0.109", 3875 3919 ] 3876 3920 3877 3921 [[package]] 3878 3922 name = "regex" 3879 - version = "1.11.1" 3923 + version = "1.12.2" 3880 3924 source = "registry+https://github.com/rust-lang/crates.io-index" 3881 - checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 3925 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 3882 3926 dependencies = [ 3883 3927 "aho-corasick", 3884 3928 "memchr", ··· 3888 3932 3889 3933 [[package]] 3890 3934 name = "regex-automata" 3891 - version = "0.4.9" 3935 + version = "0.4.13" 3892 3936 source = "registry+https://github.com/rust-lang/crates.io-index" 3893 - checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 3937 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 3894 3938 dependencies = [ 3895 3939 "aho-corasick", 3896 3940 "memchr", ··· 3899 3943 3900 3944 [[package]] 3901 3945 name = "regex-syntax" 3902 - version = "0.8.5" 3946 + version = "0.8.8" 3903 3947 source = "registry+https://github.com/rust-lang/crates.io-index" 3904 - checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 3948 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 3905 3949 3906 3950 [[package]] 3907 3951 name = "reqwest" 3908 - version = "0.12.22" 3952 + version = "0.12.24" 3909 3953 source = "registry+https://github.com/rust-lang/crates.io-index" 3910 - checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" 3954 + checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" 3911 3955 dependencies = [ 3912 3956 "base64 0.22.1", 3913 3957 "bytes", ··· 3975 4019 3976 4020 [[package]] 3977 4021 name = "rust-ini" 3978 - version = "0.21.2" 4022 + version = "0.21.3" 3979 4023 source = "registry+https://github.com/rust-lang/crates.io-index" 3980 - checksum = "e7295b7ce3bf4806b419dc3420745998b447178b7005e2011947b38fc5aa6791" 4024 + checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" 3981 4025 dependencies = [ 3982 4026 "cfg-if", 3983 4027 "ordered-multimap", 3984 4028 ] 3985 - 3986 - [[package]] 3987 - name = "rustc-demangle" 3988 - version = "0.1.26" 3989 - source = "registry+https://github.com/rust-lang/crates.io-index" 3990 - checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 3991 4029 3992 4030 [[package]] 3993 4031 name = "rustc-hash" ··· 4006 4044 4007 4045 [[package]] 4008 4046 name = "rustix" 4009 - version = "1.0.8" 4047 + version = "1.1.2" 4010 4048 source = "registry+https://github.com/rust-lang/crates.io-index" 4011 - checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 4049 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 4012 4050 dependencies = [ 4013 - "bitflags 2.9.1", 4051 + "bitflags 2.10.0", 4014 4052 "errno", 4015 4053 "libc", 4016 4054 "linux-raw-sys", 4017 - "windows-sys 0.60.2", 4055 + "windows-sys 0.61.2", 4018 4056 ] 4019 4057 4020 4058 [[package]] 4021 4059 name = "rustls" 4022 - version = "0.23.31" 4060 + version = "0.23.35" 4023 4061 source = "registry+https://github.com/rust-lang/crates.io-index" 4024 - checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" 4062 + checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" 4025 4063 dependencies = [ 4026 4064 "once_cell", 4027 4065 "ring", ··· 4033 4071 4034 4072 [[package]] 4035 4073 name = "rustls-pki-types" 4036 - version = "1.12.0" 4074 + version = "1.13.0" 4037 4075 source = "registry+https://github.com/rust-lang/crates.io-index" 4038 - checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 4076 + checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" 4039 4077 dependencies = [ 4040 4078 "web-time", 4041 4079 "zeroize", ··· 4043 4081 4044 4082 [[package]] 4045 4083 name = "rustls-webpki" 4046 - version = "0.103.4" 4084 + version = "0.103.8" 4047 4085 source = "registry+https://github.com/rust-lang/crates.io-index" 4048 - checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 4086 + checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" 4049 4087 dependencies = [ 4050 4088 "ring", 4051 4089 "rustls-pki-types", ··· 4054 4092 4055 4093 [[package]] 4056 4094 name = "rustversion" 4057 - version = "1.0.21" 4095 + version = "1.0.22" 4058 4096 source = "registry+https://github.com/rust-lang/crates.io-index" 4059 - checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 4097 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 4060 4098 4061 4099 [[package]] 4062 4100 name = "ryu" ··· 4075 4113 4076 4114 [[package]] 4077 4115 name = "schannel" 4078 - version = "0.1.27" 4116 + version = "0.1.28" 4079 4117 source = "registry+https://github.com/rust-lang/crates.io-index" 4080 - checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 4118 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 4081 4119 dependencies = [ 4082 - "windows-sys 0.59.0", 4120 + "windows-sys 0.61.2", 4083 4121 ] 4084 4122 4085 4123 [[package]] ··· 4111 4149 4112 4150 [[package]] 4113 4151 name = "schemars" 4114 - version = "1.0.4" 4152 + version = "1.1.0" 4115 4153 source = "registry+https://github.com/rust-lang/crates.io-index" 4116 - checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" 4154 + checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" 4117 4155 dependencies = [ 4118 4156 "dyn-clone", 4119 4157 "ref-cast", ··· 4130 4168 "proc-macro2", 4131 4169 "quote", 4132 4170 "serde_derive_internals", 4133 - "syn 2.0.104", 4171 + "syn 2.0.109", 4134 4172 ] 4135 4173 4136 4174 [[package]] ··· 4145 4183 source = "registry+https://github.com/rust-lang/crates.io-index" 4146 4184 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4147 4185 dependencies = [ 4148 - "bitflags 2.9.1", 4186 + "bitflags 2.10.0", 4149 4187 "core-foundation 0.9.4", 4150 4188 "core-foundation-sys", 4151 4189 "libc", ··· 4154 4192 4155 4193 [[package]] 4156 4194 name = "security-framework-sys" 4157 - version = "2.14.0" 4195 + version = "2.15.0" 4158 4196 source = "registry+https://github.com/rust-lang/crates.io-index" 4159 - checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 4197 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 4160 4198 dependencies = [ 4161 4199 "core-foundation-sys", 4162 4200 "libc", ··· 4182 4220 4183 4221 [[package]] 4184 4222 name = "semver" 4185 - version = "1.0.26" 4223 + version = "1.0.27" 4186 4224 source = "registry+https://github.com/rust-lang/crates.io-index" 4187 - checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 4225 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4188 4226 dependencies = [ 4189 4227 "serde", 4228 + "serde_core", 4190 4229 ] 4191 4230 4192 4231 [[package]] 4193 4232 name = "serde" 4194 - version = "1.0.219" 4233 + version = "1.0.228" 4195 4234 source = "registry+https://github.com/rust-lang/crates.io-index" 4196 - checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 4235 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 4197 4236 dependencies = [ 4237 + "serde_core", 4198 4238 "serde_derive", 4199 4239 ] 4200 4240 4201 4241 [[package]] 4202 4242 name = "serde-untagged" 4203 - version = "0.1.7" 4243 + version = "0.1.9" 4204 4244 source = "registry+https://github.com/rust-lang/crates.io-index" 4205 - checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" 4245 + checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" 4206 4246 dependencies = [ 4207 4247 "erased-serde", 4208 4248 "serde", 4249 + "serde_core", 4209 4250 "typeid", 4210 4251 ] 4211 4252 4212 4253 [[package]] 4254 + name = "serde_core" 4255 + version = "1.0.228" 4256 + source = "registry+https://github.com/rust-lang/crates.io-index" 4257 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 4258 + dependencies = [ 4259 + "serde_derive", 4260 + ] 4261 + 4262 + [[package]] 4213 4263 name = "serde_derive" 4214 - version = "1.0.219" 4264 + version = "1.0.228" 4215 4265 source = "registry+https://github.com/rust-lang/crates.io-index" 4216 - checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 4266 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 4217 4267 dependencies = [ 4218 4268 "proc-macro2", 4219 4269 "quote", 4220 - "syn 2.0.104", 4270 + "syn 2.0.109", 4221 4271 ] 4222 4272 4223 4273 [[package]] ··· 4228 4278 dependencies = [ 4229 4279 "proc-macro2", 4230 4280 "quote", 4231 - "syn 2.0.104", 4281 + "syn 2.0.109", 4232 4282 ] 4233 4283 4234 4284 [[package]] 4235 4285 name = "serde_json" 4236 - version = "1.0.141" 4286 + version = "1.0.145" 4237 4287 source = "registry+https://github.com/rust-lang/crates.io-index" 4238 - checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" 4288 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 4239 4289 dependencies = [ 4240 4290 "itoa", 4241 4291 "memchr", 4242 4292 "ryu", 4243 4293 "serde", 4294 + "serde_core", 4244 4295 ] 4245 4296 4246 4297 [[package]] ··· 4251 4302 dependencies = [ 4252 4303 "proc-macro2", 4253 4304 "quote", 4254 - "syn 2.0.104", 4305 + "syn 2.0.109", 4255 4306 ] 4256 4307 4257 4308 [[package]] ··· 4265 4316 4266 4317 [[package]] 4267 4318 name = "serde_spanned" 4268 - version = "1.0.0" 4319 + version = "1.0.3" 4269 4320 source = "registry+https://github.com/rust-lang/crates.io-index" 4270 - checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" 4321 + checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" 4271 4322 dependencies = [ 4272 - "serde", 4323 + "serde_core", 4273 4324 ] 4274 4325 4275 4326 [[package]] ··· 4286 4337 4287 4338 [[package]] 4288 4339 name = "serde_with" 4289 - version = "3.14.0" 4340 + version = "3.15.1" 4290 4341 source = "registry+https://github.com/rust-lang/crates.io-index" 4291 - checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" 4342 + checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" 4292 4343 dependencies = [ 4293 4344 "base64 0.22.1", 4294 4345 "chrono", 4295 4346 "hex", 4296 4347 "indexmap 1.9.3", 4297 - "indexmap 2.10.0", 4348 + "indexmap 2.12.0", 4298 4349 "schemars 0.9.0", 4299 - "schemars 1.0.4", 4300 - "serde", 4301 - "serde_derive", 4350 + "schemars 1.1.0", 4351 + "serde_core", 4302 4352 "serde_json", 4303 4353 "serde_with_macros", 4304 4354 "time", ··· 4306 4356 4307 4357 [[package]] 4308 4358 name = "serde_with_macros" 4309 - version = "3.14.0" 4359 + version = "3.15.1" 4310 4360 source = "registry+https://github.com/rust-lang/crates.io-index" 4311 - checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" 4361 + checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" 4312 4362 dependencies = [ 4313 4363 "darling", 4314 4364 "proc-macro2", 4315 4365 "quote", 4316 - "syn 2.0.104", 4366 + "syn 2.0.109", 4317 4367 ] 4318 4368 4319 4369 [[package]] 4320 4370 name = "serialize-to-javascript" 4321 - version = "0.1.1" 4371 + version = "0.1.2" 4322 4372 source = "registry+https://github.com/rust-lang/crates.io-index" 4323 - checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" 4373 + checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" 4324 4374 dependencies = [ 4325 4375 "serde", 4326 4376 "serde_json", ··· 4329 4379 4330 4380 [[package]] 4331 4381 name = "serialize-to-javascript-impl" 4332 - version = "0.1.1" 4382 + version = "0.1.2" 4333 4383 source = "registry+https://github.com/rust-lang/crates.io-index" 4334 - checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" 4384 + checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" 4335 4385 dependencies = [ 4336 4386 "proc-macro2", 4337 4387 "quote", 4338 - "syn 1.0.109", 4388 + "syn 2.0.109", 4339 4389 ] 4340 4390 4341 4391 [[package]] ··· 4349 4399 ] 4350 4400 4351 4401 [[package]] 4352 - name = "sha1" 4353 - version = "0.10.6" 4354 - source = "registry+https://github.com/rust-lang/crates.io-index" 4355 - checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 4356 - dependencies = [ 4357 - "cfg-if", 4358 - "cpufeatures", 4359 - "digest", 4360 - ] 4361 - 4362 - [[package]] 4363 4402 name = "sha2" 4364 4403 version = "0.10.9" 4365 4404 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4410 4449 4411 4450 [[package]] 4412 4451 name = "signal-hook-registry" 4413 - version = "1.4.5" 4452 + version = "1.4.6" 4414 4453 source = "registry+https://github.com/rust-lang/crates.io-index" 4415 - checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 4454 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 4416 4455 dependencies = [ 4417 4456 "libc", 4418 4457 ] ··· 4446 4485 4447 4486 [[package]] 4448 4487 name = "slab" 4449 - version = "0.4.10" 4488 + version = "0.4.11" 4450 4489 source = "registry+https://github.com/rust-lang/crates.io-index" 4451 - checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 4490 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 4452 4491 4453 4492 [[package]] 4454 4493 name = "smallvec" ··· 4458 4497 4459 4498 [[package]] 4460 4499 name = "socket2" 4461 - version = "0.5.10" 4500 + version = "0.6.1" 4462 4501 source = "registry+https://github.com/rust-lang/crates.io-index" 4463 - checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 4502 + checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" 4464 4503 dependencies = [ 4465 4504 "libc", 4466 - "windows-sys 0.52.0", 4467 - ] 4468 - 4469 - [[package]] 4470 - name = "socket2" 4471 - version = "0.6.0" 4472 - source = "registry+https://github.com/rust-lang/crates.io-index" 4473 - checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 4474 - dependencies = [ 4475 - "libc", 4476 - "windows-sys 0.59.0", 4505 + "windows-sys 0.60.2", 4477 4506 ] 4478 4507 4479 4508 [[package]] ··· 4526 4555 4527 4556 [[package]] 4528 4557 name = "stable_deref_trait" 4529 - version = "1.2.0" 4558 + version = "1.2.1" 4530 4559 source = "registry+https://github.com/rust-lang/crates.io-index" 4531 - checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 4560 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 4532 4561 4533 4562 [[package]] 4534 4563 name = "static_assertions" ··· 4597 4626 4598 4627 [[package]] 4599 4628 name = "syn" 4600 - version = "2.0.104" 4629 + version = "2.0.109" 4601 4630 source = "registry+https://github.com/rust-lang/crates.io-index" 4602 - checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 4631 + checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" 4603 4632 dependencies = [ 4604 4633 "proc-macro2", 4605 4634 "quote", ··· 4623 4652 dependencies = [ 4624 4653 "proc-macro2", 4625 4654 "quote", 4626 - "syn 2.0.104", 4655 + "syn 2.0.109", 4627 4656 ] 4628 4657 4629 4658 [[package]] ··· 4632 4661 source = "registry+https://github.com/rust-lang/crates.io-index" 4633 4662 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4634 4663 dependencies = [ 4635 - "bitflags 2.9.1", 4664 + "bitflags 2.10.0", 4636 4665 "core-foundation 0.9.4", 4637 4666 "system-configuration-sys", 4638 4667 ] ··· 4662 4691 4663 4692 [[package]] 4664 4693 name = "tao" 4665 - version = "0.34.0" 4694 + version = "0.34.5" 4666 4695 source = "registry+https://github.com/rust-lang/crates.io-index" 4667 - checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a" 4696 + checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" 4668 4697 dependencies = [ 4669 - "bitflags 2.9.1", 4698 + "bitflags 2.10.0", 4699 + "block2 0.6.2", 4670 4700 "core-foundation 0.10.1", 4671 4701 "core-graphics", 4672 4702 "crossbeam-channel", ··· 4683 4713 "ndk", 4684 4714 "ndk-context", 4685 4715 "ndk-sys", 4686 - "objc2 0.6.1", 4716 + "objc2 0.6.3", 4687 4717 "objc2-app-kit", 4688 - "objc2-foundation 0.3.1", 4718 + "objc2-foundation 0.3.2", 4689 4719 "once_cell", 4690 4720 "parking_lot", 4691 4721 "raw-window-handle", ··· 4694 4724 "unicode-segmentation", 4695 4725 "url", 4696 4726 "windows", 4697 - "windows-core", 4727 + "windows-core 0.61.2", 4698 4728 "windows-version", 4699 4729 "x11-dl", 4700 4730 ] ··· 4707 4737 dependencies = [ 4708 4738 "proc-macro2", 4709 4739 "quote", 4710 - "syn 2.0.104", 4740 + "syn 2.0.109", 4711 4741 ] 4712 4742 4713 4743 [[package]] ··· 4718 4748 4719 4749 [[package]] 4720 4750 name = "tauri" 4721 - version = "2.7.0" 4751 + version = "2.9.2" 4722 4752 source = "registry+https://github.com/rust-lang/crates.io-index" 4723 - checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7" 4753 + checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5" 4724 4754 dependencies = [ 4725 4755 "anyhow", 4726 4756 "bytes", 4727 - "dirs 6.0.0", 4757 + "cookie", 4758 + "dirs", 4728 4759 "dunce", 4729 4760 "embed_plist", 4730 - "getrandom 0.3.3", 4761 + "getrandom 0.3.4", 4731 4762 "glob", 4732 4763 "gtk", 4733 4764 "heck 0.5.0", ··· 4738 4769 "log", 4739 4770 "mime", 4740 4771 "muda", 4741 - "objc2 0.6.1", 4772 + "objc2 0.6.3", 4742 4773 "objc2-app-kit", 4743 - "objc2-foundation 0.3.1", 4774 + "objc2-foundation 0.3.2", 4744 4775 "objc2-ui-kit", 4776 + "objc2-web-kit", 4745 4777 "percent-encoding", 4746 4778 "plist", 4747 4779 "raw-window-handle", ··· 4756 4788 "tauri-runtime", 4757 4789 "tauri-runtime-wry", 4758 4790 "tauri-utils", 4759 - "thiserror 2.0.12", 4791 + "thiserror 2.0.17", 4760 4792 "tokio", 4761 4793 "tray-icon", 4762 4794 "url", 4763 - "urlpattern", 4764 4795 "webkit2gtk", 4765 4796 "webview2-com", 4766 4797 "window-vibrancy", ··· 4769 4800 4770 4801 [[package]] 4771 4802 name = "tauri-build" 4772 - version = "2.3.1" 4803 + version = "2.5.1" 4773 4804 source = "registry+https://github.com/rust-lang/crates.io-index" 4774 - checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064" 4805 + checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38" 4775 4806 dependencies = [ 4776 4807 "anyhow", 4777 4808 "cargo_toml", 4778 - "dirs 6.0.0", 4809 + "dirs", 4779 4810 "glob", 4780 4811 "heck 0.5.0", 4781 4812 "json-patch", ··· 4785 4816 "serde_json", 4786 4817 "tauri-utils", 4787 4818 "tauri-winres", 4788 - "toml 0.8.2", 4819 + "toml 0.9.8", 4789 4820 "walkdir", 4790 4821 ] 4791 4822 4792 4823 [[package]] 4793 4824 name = "tauri-codegen" 4794 - version = "2.3.1" 4825 + version = "2.5.0" 4795 4826 source = "registry+https://github.com/rust-lang/crates.io-index" 4796 - checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a" 4827 + checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190" 4797 4828 dependencies = [ 4798 4829 "base64 0.22.1", 4799 4830 "brotli", 4800 4831 "ico", 4801 4832 "json-patch", 4802 4833 "plist", 4803 - "png", 4834 + "png 0.17.16", 4804 4835 "proc-macro2", 4805 4836 "quote", 4806 4837 "semver", 4807 4838 "serde", 4808 4839 "serde_json", 4809 4840 "sha2", 4810 - "syn 2.0.104", 4841 + "syn 2.0.109", 4811 4842 "tauri-utils", 4812 - "thiserror 2.0.12", 4843 + "thiserror 2.0.17", 4813 4844 "time", 4814 4845 "url", 4815 4846 "uuid", ··· 4818 4849 4819 4850 [[package]] 4820 4851 name = "tauri-macros" 4821 - version = "2.3.2" 4852 + version = "2.5.0" 4822 4853 source = "registry+https://github.com/rust-lang/crates.io-index" 4823 - checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e" 4854 + checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f" 4824 4855 dependencies = [ 4825 4856 "heck 0.5.0", 4826 4857 "proc-macro2", 4827 4858 "quote", 4828 - "syn 2.0.104", 4859 + "syn 2.0.109", 4829 4860 "tauri-codegen", 4830 4861 "tauri-utils", 4831 4862 ] 4832 4863 4833 4864 [[package]] 4834 4865 name = "tauri-plugin" 4835 - version = "2.3.1" 4866 + version = "2.5.1" 4836 4867 source = "registry+https://github.com/rust-lang/crates.io-index" 4837 - checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02" 4868 + checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d" 4838 4869 dependencies = [ 4839 4870 "anyhow", 4840 4871 "glob", ··· 4843 4874 "serde", 4844 4875 "serde_json", 4845 4876 "tauri-utils", 4846 - "toml 0.8.2", 4877 + "toml 0.9.8", 4847 4878 "walkdir", 4848 4879 ] 4849 4880 4850 4881 [[package]] 4851 4882 name = "tauri-plugin-deep-link" 4852 - version = "2.4.1" 4883 + version = "2.4.5" 4853 4884 source = "registry+https://github.com/rust-lang/crates.io-index" 4854 - checksum = "1fec67f32d7a06d80bd3dc009fdb678c35a66116d9cb8cd2bb32e406c2b5bbd2" 4885 + checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73" 4855 4886 dependencies = [ 4856 4887 "dunce", 4888 + "plist", 4857 4889 "rust-ini", 4858 4890 "serde", 4859 4891 "serde_json", 4860 4892 "tauri", 4861 4893 "tauri-plugin", 4862 4894 "tauri-utils", 4863 - "thiserror 2.0.12", 4895 + "thiserror 2.0.17", 4864 4896 "tracing", 4865 4897 "url", 4866 4898 "windows-registry", 4867 - "windows-result", 4899 + "windows-result 0.3.4", 4868 4900 ] 4869 4901 4870 4902 [[package]] 4871 4903 name = "tauri-plugin-fs" 4872 - version = "2.4.1" 4904 + version = "2.4.4" 4873 4905 source = "registry+https://github.com/rust-lang/crates.io-index" 4874 - checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99" 4906 + checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9" 4875 4907 dependencies = [ 4876 4908 "anyhow", 4877 4909 "dunce", ··· 4884 4916 "tauri", 4885 4917 "tauri-plugin", 4886 4918 "tauri-utils", 4887 - "thiserror 2.0.12", 4888 - "toml 0.8.2", 4919 + "thiserror 2.0.17", 4920 + "toml 0.9.8", 4889 4921 "url", 4890 4922 ] 4891 4923 4892 4924 [[package]] 4893 4925 name = "tauri-plugin-http" 4894 - version = "2.5.1" 4926 + version = "2.5.4" 4895 4927 source = "registry+https://github.com/rust-lang/crates.io-index" 4896 - checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2" 4928 + checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70" 4897 4929 dependencies = [ 4898 4930 "bytes", 4899 4931 "cookie_store", ··· 4907 4939 "tauri", 4908 4940 "tauri-plugin", 4909 4941 "tauri-plugin-fs", 4910 - "thiserror 2.0.12", 4942 + "thiserror 2.0.17", 4911 4943 "tokio", 4912 4944 "url", 4913 4945 "urlpattern", ··· 4915 4947 4916 4948 [[package]] 4917 4949 name = "tauri-plugin-process" 4918 - version = "2.3.0" 4950 + version = "2.3.1" 4919 4951 source = "registry+https://github.com/rust-lang/crates.io-index" 4920 - checksum = "7461c622a5ea00eb9cd9f7a08dbd3bf79484499fd5c21aa2964677f64ca651ab" 4952 + checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" 4921 4953 dependencies = [ 4922 4954 "tauri", 4923 4955 "tauri-plugin", ··· 4925 4957 4926 4958 [[package]] 4927 4959 name = "tauri-plugin-shell" 4928 - version = "2.3.0" 4960 + version = "2.3.3" 4929 4961 source = "registry+https://github.com/rust-lang/crates.io-index" 4930 - checksum = "2b9ffadec5c3523f11e8273465cacb3d86ea7652a28e6e2a2e9b5c182f791d25" 4962 + checksum = "c374b6db45f2a8a304f0273a15080d98c70cde86178855fc24653ba657a1144c" 4931 4963 dependencies = [ 4932 4964 "encoding_rs", 4933 4965 "log", ··· 4940 4972 "shared_child", 4941 4973 "tauri", 4942 4974 "tauri-plugin", 4943 - "thiserror 2.0.12", 4975 + "thiserror 2.0.17", 4944 4976 "tokio", 4945 4977 ] 4946 4978 4947 4979 [[package]] 4948 4980 name = "tauri-plugin-single-instance" 4949 - version = "2.2.0" 4981 + version = "2.3.6" 4950 4982 source = "registry+https://github.com/rust-lang/crates.io-index" 4951 - checksum = "0f36019ee9832dc99e4450bb55a21cfad8633b19c2c18bd17c7741939b070ede" 4983 + checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710" 4952 4984 dependencies = [ 4953 4985 "serde", 4954 4986 "serde_json", 4955 4987 "tauri", 4956 4988 "tauri-plugin-deep-link", 4957 - "thiserror 2.0.12", 4989 + "thiserror 2.0.17", 4958 4990 "tracing", 4959 - "windows-sys 0.59.0", 4991 + "windows-sys 0.60.2", 4960 4992 "zbus", 4961 4993 ] 4962 4994 4963 4995 [[package]] 4964 4996 name = "tauri-runtime" 4965 - version = "2.7.1" 4997 + version = "2.9.1" 4966 4998 source = "registry+https://github.com/rust-lang/crates.io-index" 4967 - checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676" 4999 + checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926" 4968 5000 dependencies = [ 4969 5001 "cookie", 4970 5002 "dpi", 4971 5003 "gtk", 4972 5004 "http", 4973 5005 "jni", 4974 - "objc2 0.6.1", 5006 + "objc2 0.6.3", 4975 5007 "objc2-ui-kit", 5008 + "objc2-web-kit", 4976 5009 "raw-window-handle", 4977 5010 "serde", 4978 5011 "serde_json", 4979 5012 "tauri-utils", 4980 - "thiserror 2.0.12", 5013 + "thiserror 2.0.17", 4981 5014 "url", 5015 + "webkit2gtk", 5016 + "webview2-com", 4982 5017 "windows", 4983 5018 ] 4984 5019 4985 5020 [[package]] 4986 5021 name = "tauri-runtime-wry" 4987 - version = "2.7.2" 5022 + version = "2.9.1" 4988 5023 source = "registry+https://github.com/rust-lang/crates.io-index" 4989 - checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439" 5024 + checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93" 4990 5025 dependencies = [ 4991 5026 "gtk", 4992 5027 "http", 4993 5028 "jni", 4994 5029 "log", 4995 - "objc2 0.6.1", 5030 + "objc2 0.6.3", 4996 5031 "objc2-app-kit", 4997 - "objc2-foundation 0.3.1", 5032 + "objc2-foundation 0.3.2", 4998 5033 "once_cell", 4999 5034 "percent-encoding", 5000 5035 "raw-window-handle", ··· 5011 5046 5012 5047 [[package]] 5013 5048 name = "tauri-utils" 5014 - version = "2.6.0" 5049 + version = "2.8.0" 5015 5050 source = "registry+https://github.com/rust-lang/crates.io-index" 5016 - checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e" 5051 + checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" 5017 5052 dependencies = [ 5018 5053 "anyhow", 5019 5054 "brotli", ··· 5039 5074 "serde_json", 5040 5075 "serde_with", 5041 5076 "swift-rs", 5042 - "thiserror 2.0.12", 5043 - "toml 0.8.2", 5077 + "thiserror 2.0.17", 5078 + "toml 0.9.8", 5044 5079 "url", 5045 5080 "urlpattern", 5046 5081 "uuid", ··· 5049 5084 5050 5085 [[package]] 5051 5086 name = "tauri-winres" 5052 - version = "0.3.2" 5087 + version = "0.3.3" 5053 5088 source = "registry+https://github.com/rust-lang/crates.io-index" 5054 - checksum = "7c6d9028d41d4de835e3c482c677a8cb88137ac435d6ff9a71f392d4421576c9" 5089 + checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074" 5055 5090 dependencies = [ 5056 5091 "embed-resource", 5057 - "indexmap 2.10.0", 5058 - "toml 0.9.4", 5092 + "toml 0.9.8", 5059 5093 ] 5060 5094 5061 5095 [[package]] 5062 5096 name = "tempfile" 5063 - version = "3.20.0" 5097 + version = "3.23.0" 5064 5098 source = "registry+https://github.com/rust-lang/crates.io-index" 5065 - checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 5099 + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 5066 5100 dependencies = [ 5067 5101 "fastrand", 5068 - "getrandom 0.3.3", 5102 + "getrandom 0.3.4", 5069 5103 "once_cell", 5070 5104 "rustix", 5071 - "windows-sys 0.59.0", 5105 + "windows-sys 0.61.2", 5072 5106 ] 5073 5107 5074 5108 [[package]] ··· 5093 5127 5094 5128 [[package]] 5095 5129 name = "thiserror" 5096 - version = "2.0.12" 5130 + version = "2.0.17" 5097 5131 source = "registry+https://github.com/rust-lang/crates.io-index" 5098 - checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 5132 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 5099 5133 dependencies = [ 5100 - "thiserror-impl 2.0.12", 5134 + "thiserror-impl 2.0.17", 5101 5135 ] 5102 5136 5103 5137 [[package]] ··· 5108 5142 dependencies = [ 5109 5143 "proc-macro2", 5110 5144 "quote", 5111 - "syn 2.0.104", 5145 + "syn 2.0.109", 5112 5146 ] 5113 5147 5114 5148 [[package]] 5115 5149 name = "thiserror-impl" 5116 - version = "2.0.12" 5150 + version = "2.0.17" 5117 5151 source = "registry+https://github.com/rust-lang/crates.io-index" 5118 - checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 5152 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 5119 5153 dependencies = [ 5120 5154 "proc-macro2", 5121 5155 "quote", 5122 - "syn 2.0.104", 5156 + "syn 2.0.109", 5123 5157 ] 5124 5158 5125 5159 [[package]] 5126 5160 name = "tiff" 5127 - version = "0.9.1" 5161 + version = "0.10.3" 5128 5162 source = "registry+https://github.com/rust-lang/crates.io-index" 5129 - checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 5163 + checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 5130 5164 dependencies = [ 5165 + "fax", 5131 5166 "flate2", 5132 - "jpeg-decoder", 5167 + "half", 5168 + "quick-error", 5133 5169 "weezl", 5170 + "zune-jpeg", 5134 5171 ] 5135 5172 5136 5173 [[package]] 5137 5174 name = "time" 5138 - version = "0.3.41" 5175 + version = "0.3.44" 5139 5176 source = "registry+https://github.com/rust-lang/crates.io-index" 5140 - checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 5177 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 5141 5178 dependencies = [ 5142 5179 "deranged", 5143 5180 "itoa", ··· 5150 5187 5151 5188 [[package]] 5152 5189 name = "time-core" 5153 - version = "0.1.4" 5190 + version = "0.1.6" 5154 5191 source = "registry+https://github.com/rust-lang/crates.io-index" 5155 - checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 5192 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 5156 5193 5157 5194 [[package]] 5158 5195 name = "time-macros" 5159 - version = "0.2.22" 5196 + version = "0.2.24" 5160 5197 source = "registry+https://github.com/rust-lang/crates.io-index" 5161 - checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 5198 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 5162 5199 dependencies = [ 5163 5200 "num-conv", 5164 5201 "time-core", ··· 5175 5212 5176 5213 [[package]] 5177 5214 name = "tinystr" 5178 - version = "0.8.1" 5215 + version = "0.8.2" 5179 5216 source = "registry+https://github.com/rust-lang/crates.io-index" 5180 - checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 5217 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 5181 5218 dependencies = [ 5182 5219 "displaydoc", 5183 5220 "zerovec", ··· 5185 5222 5186 5223 [[package]] 5187 5224 name = "tinyvec" 5188 - version = "1.9.0" 5225 + version = "1.10.0" 5189 5226 source = "registry+https://github.com/rust-lang/crates.io-index" 5190 - checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 5227 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 5191 5228 dependencies = [ 5192 5229 "tinyvec_macros", 5193 5230 ] ··· 5200 5237 5201 5238 [[package]] 5202 5239 name = "tokio" 5203 - version = "1.47.0" 5240 + version = "1.48.0" 5204 5241 source = "registry+https://github.com/rust-lang/crates.io-index" 5205 - checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" 5242 + checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 5206 5243 dependencies = [ 5207 - "backtrace", 5208 5244 "bytes", 5209 - "io-uring", 5210 5245 "libc", 5211 - "mio 1.0.4", 5246 + "mio", 5212 5247 "pin-project-lite", 5213 - "slab", 5214 - "socket2 0.6.0", 5248 + "socket2", 5215 5249 "tokio-macros", 5216 - "windows-sys 0.59.0", 5250 + "windows-sys 0.61.2", 5217 5251 ] 5218 5252 5219 5253 [[package]] 5220 5254 name = "tokio-macros" 5221 - version = "2.5.0" 5255 + version = "2.6.0" 5222 5256 source = "registry+https://github.com/rust-lang/crates.io-index" 5223 - checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 5257 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 5224 5258 dependencies = [ 5225 5259 "proc-macro2", 5226 5260 "quote", 5227 - "syn 2.0.104", 5261 + "syn 2.0.109", 5228 5262 ] 5229 5263 5230 5264 [[package]] ··· 5239 5273 5240 5274 [[package]] 5241 5275 name = "tokio-rustls" 5242 - version = "0.26.2" 5276 + version = "0.26.4" 5243 5277 source = "registry+https://github.com/rust-lang/crates.io-index" 5244 - checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 5278 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 5245 5279 dependencies = [ 5246 5280 "rustls", 5247 5281 "tokio", ··· 5249 5283 5250 5284 [[package]] 5251 5285 name = "tokio-util" 5252 - version = "0.7.15" 5286 + version = "0.7.17" 5253 5287 source = "registry+https://github.com/rust-lang/crates.io-index" 5254 - checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 5288 + checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" 5255 5289 dependencies = [ 5256 5290 "bytes", 5257 5291 "futures-core", ··· 5274 5308 5275 5309 [[package]] 5276 5310 name = "toml" 5277 - version = "0.9.4" 5311 + version = "0.9.8" 5278 5312 source = "registry+https://github.com/rust-lang/crates.io-index" 5279 - checksum = "41ae868b5a0f67631c14589f7e250c1ea2c574ee5ba21c6c8dd4b1485705a5a1" 5313 + checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" 5280 5314 dependencies = [ 5281 - "indexmap 2.10.0", 5282 - "serde", 5283 - "serde_spanned 1.0.0", 5284 - "toml_datetime 0.7.0", 5315 + "indexmap 2.12.0", 5316 + "serde_core", 5317 + "serde_spanned 1.0.3", 5318 + "toml_datetime 0.7.3", 5285 5319 "toml_parser", 5286 5320 "toml_writer", 5287 - "winnow 0.7.12", 5321 + "winnow 0.7.13", 5288 5322 ] 5289 5323 5290 5324 [[package]] ··· 5298 5332 5299 5333 [[package]] 5300 5334 name = "toml_datetime" 5301 - version = "0.7.0" 5335 + version = "0.7.3" 5302 5336 source = "registry+https://github.com/rust-lang/crates.io-index" 5303 - checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" 5337 + checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" 5304 5338 dependencies = [ 5305 - "serde", 5339 + "serde_core", 5306 5340 ] 5307 5341 5308 5342 [[package]] ··· 5311 5345 source = "registry+https://github.com/rust-lang/crates.io-index" 5312 5346 checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 5313 5347 dependencies = [ 5314 - "indexmap 2.10.0", 5348 + "indexmap 2.12.0", 5315 5349 "toml_datetime 0.6.3", 5316 5350 "winnow 0.5.40", 5317 5351 ] ··· 5322 5356 source = "registry+https://github.com/rust-lang/crates.io-index" 5323 5357 checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 5324 5358 dependencies = [ 5325 - "indexmap 2.10.0", 5359 + "indexmap 2.12.0", 5326 5360 "serde", 5327 5361 "serde_spanned 0.6.9", 5328 5362 "toml_datetime 0.6.3", ··· 5330 5364 ] 5331 5365 5332 5366 [[package]] 5367 + name = "toml_edit" 5368 + version = "0.23.7" 5369 + source = "registry+https://github.com/rust-lang/crates.io-index" 5370 + checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" 5371 + dependencies = [ 5372 + "indexmap 2.12.0", 5373 + "toml_datetime 0.7.3", 5374 + "toml_parser", 5375 + "winnow 0.7.13", 5376 + ] 5377 + 5378 + [[package]] 5333 5379 name = "toml_parser" 5334 - version = "1.0.1" 5380 + version = "1.0.4" 5335 5381 source = "registry+https://github.com/rust-lang/crates.io-index" 5336 - checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" 5382 + checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" 5337 5383 dependencies = [ 5338 - "winnow 0.7.12", 5384 + "winnow 0.7.13", 5339 5385 ] 5340 5386 5341 5387 [[package]] 5342 5388 name = "toml_writer" 5343 - version = "1.0.2" 5389 + version = "1.0.4" 5344 5390 source = "registry+https://github.com/rust-lang/crates.io-index" 5345 - checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" 5391 + checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" 5346 5392 5347 5393 [[package]] 5348 5394 name = "tower" ··· 5365 5411 source = "registry+https://github.com/rust-lang/crates.io-index" 5366 5412 checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 5367 5413 dependencies = [ 5368 - "bitflags 2.9.1", 5414 + "bitflags 2.10.0", 5369 5415 "bytes", 5370 5416 "futures-util", 5371 5417 "http", ··· 5408 5454 dependencies = [ 5409 5455 "proc-macro2", 5410 5456 "quote", 5411 - "syn 2.0.104", 5457 + "syn 2.0.109", 5412 5458 ] 5413 5459 5414 5460 [[package]] ··· 5422 5468 5423 5469 [[package]] 5424 5470 name = "tray-icon" 5425 - version = "0.21.1" 5471 + version = "0.21.2" 5426 5472 source = "registry+https://github.com/rust-lang/crates.io-index" 5427 - checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" 5473 + checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" 5428 5474 dependencies = [ 5429 5475 "crossbeam-channel", 5430 - "dirs 6.0.0", 5476 + "dirs", 5431 5477 "libappindicator", 5432 5478 "muda", 5433 - "objc2 0.6.1", 5479 + "objc2 0.6.3", 5434 5480 "objc2-app-kit", 5435 5481 "objc2-core-foundation", 5436 5482 "objc2-core-graphics", 5437 - "objc2-foundation 0.3.1", 5483 + "objc2-foundation 0.3.2", 5438 5484 "once_cell", 5439 - "png", 5485 + "png 0.17.16", 5440 5486 "serde", 5441 - "thiserror 2.0.12", 5442 - "windows-sys 0.59.0", 5487 + "thiserror 2.0.17", 5488 + "windows-sys 0.60.2", 5443 5489 ] 5444 5490 5445 5491 [[package]] ··· 5456 5502 5457 5503 [[package]] 5458 5504 name = "typenum" 5459 - version = "1.18.0" 5505 + version = "1.19.0" 5460 5506 source = "registry+https://github.com/rust-lang/crates.io-index" 5461 - checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 5507 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 5462 5508 5463 5509 [[package]] 5464 5510 name = "uds_windows" ··· 5514 5560 5515 5561 [[package]] 5516 5562 name = "unicode-ident" 5517 - version = "1.0.18" 5563 + version = "1.0.22" 5518 5564 source = "registry+https://github.com/rust-lang/crates.io-index" 5519 - checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 5565 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 5520 5566 5521 5567 [[package]] 5522 5568 name = "unicode-segmentation" ··· 5532 5578 5533 5579 [[package]] 5534 5580 name = "url" 5535 - version = "2.5.4" 5581 + version = "2.5.7" 5536 5582 source = "registry+https://github.com/rust-lang/crates.io-index" 5537 - checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 5583 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 5538 5584 dependencies = [ 5539 5585 "form_urlencoded", 5540 5586 "idna", ··· 5568 5614 5569 5615 [[package]] 5570 5616 name = "uuid" 5571 - version = "1.17.0" 5617 + version = "1.18.1" 5572 5618 source = "registry+https://github.com/rust-lang/crates.io-index" 5573 - checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" 5619 + checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" 5574 5620 dependencies = [ 5575 - "getrandom 0.3.3", 5621 + "getrandom 0.3.4", 5576 5622 "js-sys", 5577 5623 "serde", 5578 5624 "wasm-bindgen", ··· 5597 5643 5598 5644 [[package]] 5599 5645 name = "version-compare" 5600 - version = "0.2.0" 5646 + version = "0.2.1" 5601 5647 source = "registry+https://github.com/rust-lang/crates.io-index" 5602 - checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 5648 + checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" 5603 5649 5604 5650 [[package]] 5605 5651 name = "version_check" ··· 5608 5654 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 5609 5655 5610 5656 [[package]] 5611 - name = "vrcpm-rs" 5612 - version = "0.2.4" 5613 - dependencies = [ 5614 - "dirs 5.0.1", 5615 - "fast_image_resize", 5616 - "image", 5617 - "mslnk", 5618 - "notify", 5619 - "open", 5620 - "regex", 5621 - "reqwest", 5622 - "serde", 5623 - "serde_json", 5624 - "tauri", 5625 - "tauri-build", 5626 - "tauri-plugin-deep-link", 5627 - "tauri-plugin-http", 5628 - "tauri-plugin-process", 5629 - "tauri-plugin-shell", 5630 - "tauri-plugin-single-instance", 5631 - ] 5632 - 5633 - [[package]] 5634 5657 name = "vswhom" 5635 5658 version = "0.1.0" 5636 5659 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5682 5705 checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 5683 5706 5684 5707 [[package]] 5685 - name = "wasi" 5686 - version = "0.14.2+wasi-0.2.4" 5708 + name = "wasip2" 5709 + version = "1.0.1+wasi-0.2.4" 5687 5710 source = "registry+https://github.com/rust-lang/crates.io-index" 5688 - checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 5711 + checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 5689 5712 dependencies = [ 5690 - "wit-bindgen-rt", 5713 + "wit-bindgen", 5691 5714 ] 5692 5715 5693 5716 [[package]] 5694 5717 name = "wasm-bindgen" 5695 - version = "0.2.100" 5718 + version = "0.2.105" 5696 5719 source = "registry+https://github.com/rust-lang/crates.io-index" 5697 - checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 5720 + checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 5698 5721 dependencies = [ 5699 5722 "cfg-if", 5700 5723 "once_cell", 5701 5724 "rustversion", 5702 5725 "wasm-bindgen-macro", 5703 - ] 5704 - 5705 - [[package]] 5706 - name = "wasm-bindgen-backend" 5707 - version = "0.2.100" 5708 - source = "registry+https://github.com/rust-lang/crates.io-index" 5709 - checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 5710 - dependencies = [ 5711 - "bumpalo", 5712 - "log", 5713 - "proc-macro2", 5714 - "quote", 5715 - "syn 2.0.104", 5716 5726 "wasm-bindgen-shared", 5717 5727 ] 5718 5728 5719 5729 [[package]] 5720 5730 name = "wasm-bindgen-futures" 5721 - version = "0.4.50" 5731 + version = "0.4.55" 5722 5732 source = "registry+https://github.com/rust-lang/crates.io-index" 5723 - checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 5733 + checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" 5724 5734 dependencies = [ 5725 5735 "cfg-if", 5726 5736 "js-sys", ··· 5731 5741 5732 5742 [[package]] 5733 5743 name = "wasm-bindgen-macro" 5734 - version = "0.2.100" 5744 + version = "0.2.105" 5735 5745 source = "registry+https://github.com/rust-lang/crates.io-index" 5736 - checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 5746 + checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" 5737 5747 dependencies = [ 5738 5748 "quote", 5739 5749 "wasm-bindgen-macro-support", ··· 5741 5751 5742 5752 [[package]] 5743 5753 name = "wasm-bindgen-macro-support" 5744 - version = "0.2.100" 5754 + version = "0.2.105" 5745 5755 source = "registry+https://github.com/rust-lang/crates.io-index" 5746 - checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 5756 + checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" 5747 5757 dependencies = [ 5758 + "bumpalo", 5748 5759 "proc-macro2", 5749 5760 "quote", 5750 - "syn 2.0.104", 5751 - "wasm-bindgen-backend", 5761 + "syn 2.0.109", 5752 5762 "wasm-bindgen-shared", 5753 5763 ] 5754 5764 5755 5765 [[package]] 5756 5766 name = "wasm-bindgen-shared" 5757 - version = "0.2.100" 5767 + version = "0.2.105" 5758 5768 source = "registry+https://github.com/rust-lang/crates.io-index" 5759 - checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 5769 + checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" 5760 5770 dependencies = [ 5761 5771 "unicode-ident", 5762 5772 ] ··· 5776 5786 5777 5787 [[package]] 5778 5788 name = "web-sys" 5779 - version = "0.3.77" 5789 + version = "0.3.82" 5780 5790 source = "registry+https://github.com/rust-lang/crates.io-index" 5781 - checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 5791 + checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" 5782 5792 dependencies = [ 5783 5793 "js-sys", 5784 5794 "wasm-bindgen", ··· 5840 5850 5841 5851 [[package]] 5842 5852 name = "webpki-roots" 5843 - version = "1.0.2" 5853 + version = "1.0.4" 5844 5854 source = "registry+https://github.com/rust-lang/crates.io-index" 5845 - checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" 5855 + checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" 5846 5856 dependencies = [ 5847 5857 "rustls-pki-types", 5848 5858 ] ··· 5856 5866 "webview2-com-macros", 5857 5867 "webview2-com-sys", 5858 5868 "windows", 5859 - "windows-core", 5869 + "windows-core 0.61.2", 5860 5870 "windows-implement", 5861 5871 "windows-interface", 5862 5872 ] ··· 5869 5879 dependencies = [ 5870 5880 "proc-macro2", 5871 5881 "quote", 5872 - "syn 2.0.104", 5882 + "syn 2.0.109", 5873 5883 ] 5874 5884 5875 5885 [[package]] ··· 5878 5888 source = "registry+https://github.com/rust-lang/crates.io-index" 5879 5889 checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" 5880 5890 dependencies = [ 5881 - "thiserror 2.0.12", 5891 + "thiserror 2.0.17", 5882 5892 "windows", 5883 - "windows-core", 5893 + "windows-core 0.61.2", 5884 5894 ] 5885 5895 5886 5896 [[package]] ··· 5907 5917 5908 5918 [[package]] 5909 5919 name = "winapi-util" 5910 - version = "0.1.9" 5920 + version = "0.1.11" 5911 5921 source = "registry+https://github.com/rust-lang/crates.io-index" 5912 - checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 5922 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 5913 5923 dependencies = [ 5914 - "windows-sys 0.59.0", 5924 + "windows-sys 0.61.2", 5915 5925 ] 5916 5926 5917 5927 [[package]] ··· 5926 5936 source = "registry+https://github.com/rust-lang/crates.io-index" 5927 5937 checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" 5928 5938 dependencies = [ 5929 - "objc2 0.6.1", 5939 + "objc2 0.6.3", 5930 5940 "objc2-app-kit", 5931 5941 "objc2-core-foundation", 5932 - "objc2-foundation 0.3.1", 5942 + "objc2-foundation 0.3.2", 5933 5943 "raw-window-handle", 5934 5944 "windows-sys 0.59.0", 5935 5945 "windows-version", ··· 5942 5952 checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 5943 5953 dependencies = [ 5944 5954 "windows-collections", 5945 - "windows-core", 5955 + "windows-core 0.61.2", 5946 5956 "windows-future", 5947 - "windows-link", 5957 + "windows-link 0.1.3", 5948 5958 "windows-numerics", 5949 5959 ] 5950 5960 ··· 5954 5964 source = "registry+https://github.com/rust-lang/crates.io-index" 5955 5965 checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 5956 5966 dependencies = [ 5957 - "windows-core", 5967 + "windows-core 0.61.2", 5958 5968 ] 5959 5969 5960 5970 [[package]] ··· 5965 5975 dependencies = [ 5966 5976 "windows-implement", 5967 5977 "windows-interface", 5968 - "windows-link", 5969 - "windows-result", 5970 - "windows-strings", 5978 + "windows-link 0.1.3", 5979 + "windows-result 0.3.4", 5980 + "windows-strings 0.4.2", 5981 + ] 5982 + 5983 + [[package]] 5984 + name = "windows-core" 5985 + version = "0.62.2" 5986 + source = "registry+https://github.com/rust-lang/crates.io-index" 5987 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 5988 + dependencies = [ 5989 + "windows-implement", 5990 + "windows-interface", 5991 + "windows-link 0.2.1", 5992 + "windows-result 0.4.1", 5993 + "windows-strings 0.5.1", 5971 5994 ] 5972 5995 5973 5996 [[package]] ··· 5976 5999 source = "registry+https://github.com/rust-lang/crates.io-index" 5977 6000 checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 5978 6001 dependencies = [ 5979 - "windows-core", 5980 - "windows-link", 6002 + "windows-core 0.61.2", 6003 + "windows-link 0.1.3", 5981 6004 "windows-threading", 5982 6005 ] 5983 6006 5984 6007 [[package]] 5985 6008 name = "windows-implement" 5986 - version = "0.60.0" 6009 + version = "0.60.2" 5987 6010 source = "registry+https://github.com/rust-lang/crates.io-index" 5988 - checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 6011 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 5989 6012 dependencies = [ 5990 6013 "proc-macro2", 5991 6014 "quote", 5992 - "syn 2.0.104", 6015 + "syn 2.0.109", 5993 6016 ] 5994 6017 5995 6018 [[package]] 5996 6019 name = "windows-interface" 5997 - version = "0.59.1" 6020 + version = "0.59.3" 5998 6021 source = "registry+https://github.com/rust-lang/crates.io-index" 5999 - checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 6022 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 6000 6023 dependencies = [ 6001 6024 "proc-macro2", 6002 6025 "quote", 6003 - "syn 2.0.104", 6026 + "syn 2.0.109", 6004 6027 ] 6005 6028 6006 6029 [[package]] ··· 6010 6033 checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 6011 6034 6012 6035 [[package]] 6036 + name = "windows-link" 6037 + version = "0.2.1" 6038 + source = "registry+https://github.com/rust-lang/crates.io-index" 6039 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 6040 + 6041 + [[package]] 6013 6042 name = "windows-numerics" 6014 6043 version = "0.2.0" 6015 6044 source = "registry+https://github.com/rust-lang/crates.io-index" 6016 6045 checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 6017 6046 dependencies = [ 6018 - "windows-core", 6019 - "windows-link", 6047 + "windows-core 0.61.2", 6048 + "windows-link 0.1.3", 6020 6049 ] 6021 6050 6022 6051 [[package]] ··· 6025 6054 source = "registry+https://github.com/rust-lang/crates.io-index" 6026 6055 checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 6027 6056 dependencies = [ 6028 - "windows-link", 6029 - "windows-result", 6030 - "windows-strings", 6057 + "windows-link 0.1.3", 6058 + "windows-result 0.3.4", 6059 + "windows-strings 0.4.2", 6031 6060 ] 6032 6061 6033 6062 [[package]] ··· 6036 6065 source = "registry+https://github.com/rust-lang/crates.io-index" 6037 6066 checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 6038 6067 dependencies = [ 6039 - "windows-link", 6068 + "windows-link 0.1.3", 6069 + ] 6070 + 6071 + [[package]] 6072 + name = "windows-result" 6073 + version = "0.4.1" 6074 + source = "registry+https://github.com/rust-lang/crates.io-index" 6075 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 6076 + dependencies = [ 6077 + "windows-link 0.2.1", 6040 6078 ] 6041 6079 6042 6080 [[package]] ··· 6045 6083 source = "registry+https://github.com/rust-lang/crates.io-index" 6046 6084 checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 6047 6085 dependencies = [ 6048 - "windows-link", 6086 + "windows-link 0.1.3", 6049 6087 ] 6050 6088 6051 6089 [[package]] 6052 - name = "windows-sys" 6053 - version = "0.45.0" 6090 + name = "windows-strings" 6091 + version = "0.5.1" 6054 6092 source = "registry+https://github.com/rust-lang/crates.io-index" 6055 - checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6093 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 6056 6094 dependencies = [ 6057 - "windows-targets 0.42.2", 6095 + "windows-link 0.2.1", 6058 6096 ] 6059 6097 6060 6098 [[package]] 6061 6099 name = "windows-sys" 6062 - version = "0.48.0" 6100 + version = "0.45.0" 6063 6101 source = "registry+https://github.com/rust-lang/crates.io-index" 6064 - checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 6102 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6065 6103 dependencies = [ 6066 - "windows-targets 0.48.5", 6104 + "windows-targets 0.42.2", 6067 6105 ] 6068 6106 6069 6107 [[package]] ··· 6090 6128 source = "registry+https://github.com/rust-lang/crates.io-index" 6091 6129 checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 6092 6130 dependencies = [ 6093 - "windows-targets 0.53.3", 6131 + "windows-targets 0.53.5", 6132 + ] 6133 + 6134 + [[package]] 6135 + name = "windows-sys" 6136 + version = "0.61.2" 6137 + source = "registry+https://github.com/rust-lang/crates.io-index" 6138 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 6139 + dependencies = [ 6140 + "windows-link 0.2.1", 6094 6141 ] 6095 6142 6096 6143 [[package]] ··· 6110 6157 6111 6158 [[package]] 6112 6159 name = "windows-targets" 6113 - version = "0.48.5" 6114 - source = "registry+https://github.com/rust-lang/crates.io-index" 6115 - checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 6116 - dependencies = [ 6117 - "windows_aarch64_gnullvm 0.48.5", 6118 - "windows_aarch64_msvc 0.48.5", 6119 - "windows_i686_gnu 0.48.5", 6120 - "windows_i686_msvc 0.48.5", 6121 - "windows_x86_64_gnu 0.48.5", 6122 - "windows_x86_64_gnullvm 0.48.5", 6123 - "windows_x86_64_msvc 0.48.5", 6124 - ] 6125 - 6126 - [[package]] 6127 - name = "windows-targets" 6128 6160 version = "0.52.6" 6129 6161 source = "registry+https://github.com/rust-lang/crates.io-index" 6130 6162 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" ··· 6141 6173 6142 6174 [[package]] 6143 6175 name = "windows-targets" 6144 - version = "0.53.3" 6176 + version = "0.53.5" 6145 6177 source = "registry+https://github.com/rust-lang/crates.io-index" 6146 - checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 6178 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 6147 6179 dependencies = [ 6148 - "windows-link", 6149 - "windows_aarch64_gnullvm 0.53.0", 6150 - "windows_aarch64_msvc 0.53.0", 6151 - "windows_i686_gnu 0.53.0", 6152 - "windows_i686_gnullvm 0.53.0", 6153 - "windows_i686_msvc 0.53.0", 6154 - "windows_x86_64_gnu 0.53.0", 6155 - "windows_x86_64_gnullvm 0.53.0", 6156 - "windows_x86_64_msvc 0.53.0", 6180 + "windows-link 0.2.1", 6181 + "windows_aarch64_gnullvm 0.53.1", 6182 + "windows_aarch64_msvc 0.53.1", 6183 + "windows_i686_gnu 0.53.1", 6184 + "windows_i686_gnullvm 0.53.1", 6185 + "windows_i686_msvc 0.53.1", 6186 + "windows_x86_64_gnu 0.53.1", 6187 + "windows_x86_64_gnullvm 0.53.1", 6188 + "windows_x86_64_msvc 0.53.1", 6157 6189 ] 6158 6190 6159 6191 [[package]] ··· 6162 6194 source = "registry+https://github.com/rust-lang/crates.io-index" 6163 6195 checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6164 6196 dependencies = [ 6165 - "windows-link", 6197 + "windows-link 0.1.3", 6166 6198 ] 6167 6199 6168 6200 [[package]] 6169 6201 name = "windows-version" 6170 - version = "0.1.4" 6202 + version = "0.1.7" 6171 6203 source = "registry+https://github.com/rust-lang/crates.io-index" 6172 - checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" 6204 + checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" 6173 6205 dependencies = [ 6174 - "windows-link", 6206 + "windows-link 0.2.1", 6175 6207 ] 6176 6208 6177 6209 [[package]] ··· 6182 6214 6183 6215 [[package]] 6184 6216 name = "windows_aarch64_gnullvm" 6185 - version = "0.48.5" 6186 - source = "registry+https://github.com/rust-lang/crates.io-index" 6187 - checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 6188 - 6189 - [[package]] 6190 - name = "windows_aarch64_gnullvm" 6191 6217 version = "0.52.6" 6192 6218 source = "registry+https://github.com/rust-lang/crates.io-index" 6193 6219 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 6194 6220 6195 6221 [[package]] 6196 6222 name = "windows_aarch64_gnullvm" 6197 - version = "0.53.0" 6223 + version = "0.53.1" 6198 6224 source = "registry+https://github.com/rust-lang/crates.io-index" 6199 - checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 6225 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 6200 6226 6201 6227 [[package]] 6202 6228 name = "windows_aarch64_msvc" ··· 6206 6232 6207 6233 [[package]] 6208 6234 name = "windows_aarch64_msvc" 6209 - version = "0.48.5" 6210 - source = "registry+https://github.com/rust-lang/crates.io-index" 6211 - checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 6212 - 6213 - [[package]] 6214 - name = "windows_aarch64_msvc" 6215 6235 version = "0.52.6" 6216 6236 source = "registry+https://github.com/rust-lang/crates.io-index" 6217 6237 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6218 6238 6219 6239 [[package]] 6220 6240 name = "windows_aarch64_msvc" 6221 - version = "0.53.0" 6241 + version = "0.53.1" 6222 6242 source = "registry+https://github.com/rust-lang/crates.io-index" 6223 - checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 6243 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 6224 6244 6225 6245 [[package]] 6226 6246 name = "windows_i686_gnu" ··· 6230 6250 6231 6251 [[package]] 6232 6252 name = "windows_i686_gnu" 6233 - version = "0.48.5" 6234 - source = "registry+https://github.com/rust-lang/crates.io-index" 6235 - checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 6236 - 6237 - [[package]] 6238 - name = "windows_i686_gnu" 6239 6253 version = "0.52.6" 6240 6254 source = "registry+https://github.com/rust-lang/crates.io-index" 6241 6255 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6242 6256 6243 6257 [[package]] 6244 6258 name = "windows_i686_gnu" 6245 - version = "0.53.0" 6259 + version = "0.53.1" 6246 6260 source = "registry+https://github.com/rust-lang/crates.io-index" 6247 - checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 6261 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 6248 6262 6249 6263 [[package]] 6250 6264 name = "windows_i686_gnullvm" ··· 6254 6268 6255 6269 [[package]] 6256 6270 name = "windows_i686_gnullvm" 6257 - version = "0.53.0" 6271 + version = "0.53.1" 6258 6272 source = "registry+https://github.com/rust-lang/crates.io-index" 6259 - checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 6273 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 6260 6274 6261 6275 [[package]] 6262 6276 name = "windows_i686_msvc" ··· 6266 6280 6267 6281 [[package]] 6268 6282 name = "windows_i686_msvc" 6269 - version = "0.48.5" 6270 - source = "registry+https://github.com/rust-lang/crates.io-index" 6271 - checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 6272 - 6273 - [[package]] 6274 - name = "windows_i686_msvc" 6275 6283 version = "0.52.6" 6276 6284 source = "registry+https://github.com/rust-lang/crates.io-index" 6277 6285 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6278 6286 6279 6287 [[package]] 6280 6288 name = "windows_i686_msvc" 6281 - version = "0.53.0" 6289 + version = "0.53.1" 6282 6290 source = "registry+https://github.com/rust-lang/crates.io-index" 6283 - checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 6291 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 6284 6292 6285 6293 [[package]] 6286 6294 name = "windows_x86_64_gnu" ··· 6290 6298 6291 6299 [[package]] 6292 6300 name = "windows_x86_64_gnu" 6293 - version = "0.48.5" 6294 - source = "registry+https://github.com/rust-lang/crates.io-index" 6295 - checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 6296 - 6297 - [[package]] 6298 - name = "windows_x86_64_gnu" 6299 6301 version = "0.52.6" 6300 6302 source = "registry+https://github.com/rust-lang/crates.io-index" 6301 6303 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6302 6304 6303 6305 [[package]] 6304 6306 name = "windows_x86_64_gnu" 6305 - version = "0.53.0" 6307 + version = "0.53.1" 6306 6308 source = "registry+https://github.com/rust-lang/crates.io-index" 6307 - checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 6309 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 6308 6310 6309 6311 [[package]] 6310 6312 name = "windows_x86_64_gnullvm" ··· 6314 6316 6315 6317 [[package]] 6316 6318 name = "windows_x86_64_gnullvm" 6317 - version = "0.48.5" 6318 - source = "registry+https://github.com/rust-lang/crates.io-index" 6319 - checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 6320 - 6321 - [[package]] 6322 - name = "windows_x86_64_gnullvm" 6323 6319 version = "0.52.6" 6324 6320 source = "registry+https://github.com/rust-lang/crates.io-index" 6325 6321 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6326 6322 6327 6323 [[package]] 6328 6324 name = "windows_x86_64_gnullvm" 6329 - version = "0.53.0" 6325 + version = "0.53.1" 6330 6326 source = "registry+https://github.com/rust-lang/crates.io-index" 6331 - checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 6327 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 6332 6328 6333 6329 [[package]] 6334 6330 name = "windows_x86_64_msvc" ··· 6338 6334 6339 6335 [[package]] 6340 6336 name = "windows_x86_64_msvc" 6341 - version = "0.48.5" 6342 - source = "registry+https://github.com/rust-lang/crates.io-index" 6343 - checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 6344 - 6345 - [[package]] 6346 - name = "windows_x86_64_msvc" 6347 6337 version = "0.52.6" 6348 6338 source = "registry+https://github.com/rust-lang/crates.io-index" 6349 6339 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6350 6340 6351 6341 [[package]] 6352 6342 name = "windows_x86_64_msvc" 6353 - version = "0.53.0" 6343 + version = "0.53.1" 6354 6344 source = "registry+https://github.com/rust-lang/crates.io-index" 6355 - checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 6345 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 6356 6346 6357 6347 [[package]] 6358 6348 name = "winnow" ··· 6365 6355 6366 6356 [[package]] 6367 6357 name = "winnow" 6368 - version = "0.7.12" 6358 + version = "0.7.13" 6369 6359 source = "registry+https://github.com/rust-lang/crates.io-index" 6370 - checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" 6360 + checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 6361 + dependencies = [ 6362 + "memchr", 6363 + ] 6371 6364 6372 6365 [[package]] 6373 6366 name = "winreg" ··· 6380 6373 ] 6381 6374 6382 6375 [[package]] 6383 - name = "wit-bindgen-rt" 6384 - version = "0.39.0" 6376 + name = "wit-bindgen" 6377 + version = "0.46.0" 6385 6378 source = "registry+https://github.com/rust-lang/crates.io-index" 6386 - checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 6387 - dependencies = [ 6388 - "bitflags 2.9.1", 6389 - ] 6379 + checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 6390 6380 6391 6381 [[package]] 6392 6382 name = "writeable" 6393 - version = "0.6.1" 6383 + version = "0.6.2" 6394 6384 source = "registry+https://github.com/rust-lang/crates.io-index" 6395 - checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 6385 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 6396 6386 6397 6387 [[package]] 6398 6388 name = "wry" 6399 - version = "0.52.1" 6389 + version = "0.53.5" 6400 6390 source = "registry+https://github.com/rust-lang/crates.io-index" 6401 - checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9" 6391 + checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" 6402 6392 dependencies = [ 6403 6393 "base64 0.22.1", 6404 - "block2 0.6.1", 6394 + "block2 0.6.2", 6405 6395 "cookie", 6406 6396 "crossbeam-channel", 6397 + "dirs", 6407 6398 "dpi", 6408 6399 "dunce", 6409 6400 "gdkx11", ··· 6415 6406 "kuchikiki", 6416 6407 "libc", 6417 6408 "ndk", 6418 - "objc2 0.6.1", 6409 + "objc2 0.6.3", 6419 6410 "objc2-app-kit", 6420 6411 "objc2-core-foundation", 6421 - "objc2-foundation 0.3.1", 6412 + "objc2-foundation 0.3.2", 6422 6413 "objc2-ui-kit", 6423 6414 "objc2-web-kit", 6424 6415 "once_cell", ··· 6427 6418 "sha2", 6428 6419 "soup3", 6429 6420 "tao-macros", 6430 - "thiserror 2.0.12", 6421 + "thiserror 2.0.17", 6431 6422 "url", 6432 6423 "webkit2gtk", 6433 6424 "webkit2gtk-sys", 6434 6425 "webview2-com", 6435 6426 "windows", 6436 - "windows-core", 6427 + "windows-core 0.61.2", 6437 6428 "windows-version", 6438 6429 "x11-dl", 6439 6430 ] ··· 6460 6451 ] 6461 6452 6462 6453 [[package]] 6463 - name = "xdg-home" 6464 - version = "1.3.0" 6454 + name = "x11rb" 6455 + version = "0.13.2" 6465 6456 source = "registry+https://github.com/rust-lang/crates.io-index" 6466 - checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" 6457 + checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 6467 6458 dependencies = [ 6468 - "libc", 6469 - "windows-sys 0.59.0", 6459 + "gethostname", 6460 + "rustix", 6461 + "x11rb-protocol", 6470 6462 ] 6471 6463 6472 6464 [[package]] 6465 + name = "x11rb-protocol" 6466 + version = "0.13.2" 6467 + source = "registry+https://github.com/rust-lang/crates.io-index" 6468 + checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" 6469 + 6470 + [[package]] 6473 6471 name = "yoke" 6474 - version = "0.8.0" 6472 + version = "0.8.1" 6475 6473 source = "registry+https://github.com/rust-lang/crates.io-index" 6476 - checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 6474 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 6477 6475 dependencies = [ 6478 - "serde", 6479 6476 "stable_deref_trait", 6480 6477 "yoke-derive", 6481 6478 "zerofrom", ··· 6483 6480 6484 6481 [[package]] 6485 6482 name = "yoke-derive" 6486 - version = "0.8.0" 6483 + version = "0.8.1" 6487 6484 source = "registry+https://github.com/rust-lang/crates.io-index" 6488 - checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 6485 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 6489 6486 dependencies = [ 6490 6487 "proc-macro2", 6491 6488 "quote", 6492 - "syn 2.0.104", 6489 + "syn 2.0.109", 6493 6490 "synstructure", 6494 6491 ] 6495 6492 6496 6493 [[package]] 6497 6494 name = "zbus" 6498 - version = "4.0.1" 6495 + version = "5.12.0" 6499 6496 source = "registry+https://github.com/rust-lang/crates.io-index" 6500 - checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" 6497 + checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" 6501 6498 dependencies = [ 6502 6499 "async-broadcast", 6503 6500 "async-executor", 6504 - "async-fs", 6505 6501 "async-io", 6506 6502 "async-lock", 6507 6503 "async-process", ··· 6509 6505 "async-task", 6510 6506 "async-trait", 6511 6507 "blocking", 6512 - "derivative", 6513 6508 "enumflags2", 6514 6509 "event-listener", 6515 6510 "futures-core", 6516 - "futures-sink", 6517 - "futures-util", 6511 + "futures-lite", 6518 6512 "hex", 6519 6513 "nix", 6520 6514 "ordered-stream", 6521 - "rand 0.8.5", 6522 6515 "serde", 6523 6516 "serde_repr", 6524 - "sha1", 6525 - "static_assertions", 6526 6517 "tracing", 6527 6518 "uds_windows", 6528 - "windows-sys 0.52.0", 6529 - "xdg-home", 6519 + "uuid", 6520 + "windows-sys 0.61.2", 6521 + "winnow 0.7.13", 6530 6522 "zbus_macros", 6531 6523 "zbus_names", 6532 6524 "zvariant", ··· 6534 6526 6535 6527 [[package]] 6536 6528 name = "zbus_macros" 6537 - version = "4.0.1" 6529 + version = "5.12.0" 6538 6530 source = "registry+https://github.com/rust-lang/crates.io-index" 6539 - checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" 6531 + checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" 6540 6532 dependencies = [ 6541 - "proc-macro-crate 1.3.1", 6533 + "proc-macro-crate 3.4.0", 6542 6534 "proc-macro2", 6543 6535 "quote", 6544 - "regex", 6545 - "syn 1.0.109", 6536 + "syn 2.0.109", 6537 + "zbus_names", 6538 + "zvariant", 6546 6539 "zvariant_utils", 6547 6540 ] 6548 6541 6549 6542 [[package]] 6550 6543 name = "zbus_names" 6551 - version = "3.0.0" 6544 + version = "4.2.0" 6552 6545 source = "registry+https://github.com/rust-lang/crates.io-index" 6553 - checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" 6546 + checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 6554 6547 dependencies = [ 6555 6548 "serde", 6556 6549 "static_assertions", 6550 + "winnow 0.7.13", 6557 6551 "zvariant", 6558 6552 ] 6559 6553 6560 6554 [[package]] 6561 6555 name = "zerocopy" 6562 - version = "0.8.26" 6556 + version = "0.8.27" 6563 6557 source = "registry+https://github.com/rust-lang/crates.io-index" 6564 - checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 6558 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 6565 6559 dependencies = [ 6566 6560 "zerocopy-derive", 6567 6561 ] 6568 6562 6569 6563 [[package]] 6570 6564 name = "zerocopy-derive" 6571 - version = "0.8.26" 6565 + version = "0.8.27" 6572 6566 source = "registry+https://github.com/rust-lang/crates.io-index" 6573 - checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 6567 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 6574 6568 dependencies = [ 6575 6569 "proc-macro2", 6576 6570 "quote", 6577 - "syn 2.0.104", 6571 + "syn 2.0.109", 6578 6572 ] 6579 6573 6580 6574 [[package]] ··· 6594 6588 dependencies = [ 6595 6589 "proc-macro2", 6596 6590 "quote", 6597 - "syn 2.0.104", 6591 + "syn 2.0.109", 6598 6592 "synstructure", 6599 6593 ] 6600 6594 6601 6595 [[package]] 6602 6596 name = "zeroize" 6603 - version = "1.8.1" 6597 + version = "1.8.2" 6604 6598 source = "registry+https://github.com/rust-lang/crates.io-index" 6605 - checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 6599 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 6606 6600 6607 6601 [[package]] 6608 6602 name = "zerotrie" 6609 - version = "0.2.2" 6603 + version = "0.2.3" 6610 6604 source = "registry+https://github.com/rust-lang/crates.io-index" 6611 - checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 6605 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 6612 6606 dependencies = [ 6613 6607 "displaydoc", 6614 6608 "yoke", ··· 6617 6611 6618 6612 [[package]] 6619 6613 name = "zerovec" 6620 - version = "0.11.2" 6614 + version = "0.11.5" 6621 6615 source = "registry+https://github.com/rust-lang/crates.io-index" 6622 - checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 6616 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 6623 6617 dependencies = [ 6624 6618 "yoke", 6625 6619 "zerofrom", ··· 6628 6622 6629 6623 [[package]] 6630 6624 name = "zerovec-derive" 6631 - version = "0.11.1" 6625 + version = "0.11.2" 6632 6626 source = "registry+https://github.com/rust-lang/crates.io-index" 6633 - checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 6627 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 6634 6628 dependencies = [ 6635 6629 "proc-macro2", 6636 6630 "quote", 6637 - "syn 2.0.104", 6631 + "syn 2.0.109", 6638 6632 ] 6639 6633 6640 6634 [[package]] ··· 6654 6648 6655 6649 [[package]] 6656 6650 name = "zune-jpeg" 6657 - version = "0.4.20" 6651 + version = "0.4.21" 6658 6652 source = "registry+https://github.com/rust-lang/crates.io-index" 6659 - checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" 6653 + checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 6660 6654 dependencies = [ 6661 6655 "zune-core", 6662 6656 ] 6663 6657 6664 6658 [[package]] 6665 6659 name = "zvariant" 6666 - version = "4.0.0" 6660 + version = "5.8.0" 6667 6661 source = "registry+https://github.com/rust-lang/crates.io-index" 6668 - checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" 6662 + checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" 6669 6663 dependencies = [ 6670 6664 "endi", 6671 6665 "enumflags2", 6672 6666 "serde", 6673 - "static_assertions", 6667 + "winnow 0.7.13", 6674 6668 "zvariant_derive", 6669 + "zvariant_utils", 6675 6670 ] 6676 6671 6677 6672 [[package]] 6678 6673 name = "zvariant_derive" 6679 - version = "4.0.0" 6674 + version = "5.8.0" 6680 6675 source = "registry+https://github.com/rust-lang/crates.io-index" 6681 - checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" 6676 + checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" 6682 6677 dependencies = [ 6683 - "proc-macro-crate 1.3.1", 6678 + "proc-macro-crate 3.4.0", 6684 6679 "proc-macro2", 6685 6680 "quote", 6686 - "syn 1.0.109", 6681 + "syn 2.0.109", 6687 6682 "zvariant_utils", 6688 6683 ] 6689 6684 6690 6685 [[package]] 6691 6686 name = "zvariant_utils" 6692 - version = "1.1.0" 6687 + version = "3.2.1" 6693 6688 source = "registry+https://github.com/rust-lang/crates.io-index" 6694 - checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" 6689 + checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 6695 6690 dependencies = [ 6696 6691 "proc-macro2", 6697 6692 "quote", 6698 - "syn 1.0.109", 6693 + "serde", 6694 + "syn 2.0.109", 6695 + "winnow 0.7.13", 6699 6696 ]
+15 -16
src-tauri/Cargo.toml
··· 1 1 [package] 2 - name = "vrcpm-rs" 3 - version = "0.2.4" 2 + name = "VRChatPhotoManager" 3 + version = "0.2.7-hot1" 4 4 description = "VRChat Photo Manager" 5 5 authors = ["_phaz"] 6 6 edition = "2021" ··· 11 11 tauri-build = { version = "2.0.0-rc", features = [] } 12 12 13 13 [dependencies] 14 - tauri = { version = "2.0.0-rc", features = ["tray-icon", "image-png"] } 14 + tauri = { version = "2.9", features = [ "tray-icon", "image-png", "devtools" ] } 15 15 serde = { version = "1.0", features = ["derive"] } 16 16 serde_json = "1.0" 17 - open = "5.1.2" 18 - tauri-plugin-deep-link = "2.0.1" 19 - dirs = "5.0.1" 20 - notify = "6.1.1" 21 - regex = "1.10.4" 17 + open = "5.3" 18 + dirs = "6.0" 19 + notify = "8.2" 20 + regex = "1.12" 22 21 reqwest = { version = "0.12", features = ["blocking"] } 23 - tauri-plugin-single-instance = { version = "2.0.0", features = ["deep-link"] } 24 - tauri-plugin-shell = "2.0.0-rc.2" 25 - tauri-plugin-http = "2.0.0-rc.0" 26 - tauri-plugin-process = "2.0.0-rc.0" 27 - image = "0.25.2" 28 - fast_image_resize = { version = "4.2.1", features = [ "image" ] } 29 - 22 + image = "0.25" 23 + fast_image_resize = { version = "5.3", features = [ "image" ] } 24 + arboard = "3.6" 25 + tauri-plugin-single-instance = { version = "2.3", features = ["deep-link"] } 26 + tauri-plugin-shell = "2.3" 27 + tauri-plugin-http = "2.5" 28 + tauri-plugin-process = "2.3" 30 29 [target.'cfg(windows)'.dependencies] 31 - mslnk = { version = "0.1.8" } 30 + mslnk = { version = "0.1" } 32 31 33 32 [features] 34 33 # this feature is used for production builds or when `devPath` points to the filesystem
+1 -1
src-tauri/gen/schemas/acl-manifests.json
··· 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"]},"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-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-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-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-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-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-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-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-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},"deep-link":{"default_permission":{"identifier":"default","description":"Allows reading the opened deep link via the get_current command","permissions":["allow-get-current"]},"permissions":{"allow-get-current":{"identifier":"allow-get-current","description":"Enables the get_current command without any pre-configured scope.","commands":{"allow":["get_current"],"deny":[]}},"allow-is-registered":{"identifier":"allow-is-registered","description":"Enables the is_registered command without any pre-configured scope.","commands":{"allow":["is_registered"],"deny":[]}},"allow-register":{"identifier":"allow-register","description":"Enables the register command without any pre-configured scope.","commands":{"allow":["register"],"deny":[]}},"allow-unregister":{"identifier":"allow-unregister","description":"Enables the unregister command without any pre-configured scope.","commands":{"allow":["unregister"],"deny":[]}},"deny-get-current":{"identifier":"deny-get-current","description":"Denies the get_current command without any pre-configured scope.","commands":{"allow":[],"deny":["get_current"]}},"deny-is-registered":{"identifier":"deny-is-registered","description":"Denies the is_registered command without any pre-configured scope.","commands":{"allow":[],"deny":["is_registered"]}},"deny-register":{"identifier":"deny-register","description":"Denies the register command without any pre-configured scope.","commands":{"allow":[],"deny":["register"]}},"deny-unregister":{"identifier":"deny-unregister","description":"Denies the unregister command without any pre-configured scope.","commands":{"allow":[],"deny":["unregister"]}}},"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-read-body","allow-fetch-send"]},"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-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-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}} 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},"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-read-body","allow-fetch-send"]},"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-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-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}}
+50 -56
src-tauri/gen/schemas/desktop-schema.json
··· 519 519 "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`" 520 520 }, 521 521 { 522 - "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`", 522 + "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`", 523 523 "type": "string", 524 524 "const": "core:app:default", 525 - "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`" 525 + "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`" 526 526 }, 527 527 { 528 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 568 }, 569 569 { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 570 576 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 577 "type": "string", 572 578 "const": "core:app:allow-remove-data-store", 573 579 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 580 }, 575 581 { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 + }, 587 + { 576 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 589 "type": "string", 578 590 "const": "core:app:allow-set-app-theme", ··· 639 651 "markdownDescription": "Denies the name command without any pre-configured scope." 640 652 }, 641 653 { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 642 660 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 661 "type": "string", 644 662 "const": "core:app:deny-remove-data-store", 645 663 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 646 670 }, 647 671 { 648 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 1851 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 1852 }, 1829 1853 { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 + }, 1859 + { 1830 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 1861 "type": "string", 1832 1862 "const": "core:window:allow-set-fullscreen", ··· 1897 1927 "type": "string", 1898 1928 "const": "core:window:allow-set-shadow", 1899 1929 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1900 1936 }, 1901 1937 { 1902 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 2307 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 2308 }, 2273 2309 { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 + }, 2315 + { 2274 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 2317 "type": "string", 2276 2318 "const": "core:window:deny-set-fullscreen", ··· 2341 2383 "type": "string", 2342 2384 "const": "core:window:deny-set-shadow", 2343 2385 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2344 2392 }, 2345 2393 { 2346 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 2479 "type": "string", 2432 2480 "const": "core:window:deny-unminimize", 2433 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2434 - }, 2435 - { 2436 - "description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`", 2437 - "type": "string", 2438 - "const": "deep-link:default", 2439 - "markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`" 2440 - }, 2441 - { 2442 - "description": "Enables the get_current command without any pre-configured scope.", 2443 - "type": "string", 2444 - "const": "deep-link:allow-get-current", 2445 - "markdownDescription": "Enables the get_current command without any pre-configured scope." 2446 - }, 2447 - { 2448 - "description": "Enables the is_registered command without any pre-configured scope.", 2449 - "type": "string", 2450 - "const": "deep-link:allow-is-registered", 2451 - "markdownDescription": "Enables the is_registered command without any pre-configured scope." 2452 - }, 2453 - { 2454 - "description": "Enables the register command without any pre-configured scope.", 2455 - "type": "string", 2456 - "const": "deep-link:allow-register", 2457 - "markdownDescription": "Enables the register command without any pre-configured scope." 2458 - }, 2459 - { 2460 - "description": "Enables the unregister command without any pre-configured scope.", 2461 - "type": "string", 2462 - "const": "deep-link:allow-unregister", 2463 - "markdownDescription": "Enables the unregister command without any pre-configured scope." 2464 - }, 2465 - { 2466 - "description": "Denies the get_current command without any pre-configured scope.", 2467 - "type": "string", 2468 - "const": "deep-link:deny-get-current", 2469 - "markdownDescription": "Denies the get_current command without any pre-configured scope." 2470 - }, 2471 - { 2472 - "description": "Denies the is_registered command without any pre-configured scope.", 2473 - "type": "string", 2474 - "const": "deep-link:deny-is-registered", 2475 - "markdownDescription": "Denies the is_registered command without any pre-configured scope." 2476 - }, 2477 - { 2478 - "description": "Denies the register command without any pre-configured scope.", 2479 - "type": "string", 2480 - "const": "deep-link:deny-register", 2481 - "markdownDescription": "Denies the register command without any pre-configured scope." 2482 - }, 2483 - { 2484 - "description": "Denies the unregister command without any pre-configured scope.", 2485 - "type": "string", 2486 - "const": "deep-link:deny-unregister", 2487 - "markdownDescription": "Denies the unregister command without any pre-configured scope." 2488 2482 }, 2489 2483 { 2490 2484 "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-read-body`\n- `allow-fetch-send`",
+50 -56
src-tauri/gen/schemas/linux-schema.json
··· 519 519 "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`" 520 520 }, 521 521 { 522 - "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`", 522 + "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`", 523 523 "type": "string", 524 524 "const": "core:app:default", 525 - "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`" 525 + "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`" 526 526 }, 527 527 { 528 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 568 }, 569 569 { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 570 576 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 577 "type": "string", 572 578 "const": "core:app:allow-remove-data-store", 573 579 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 580 }, 575 581 { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 + }, 587 + { 576 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 589 "type": "string", 578 590 "const": "core:app:allow-set-app-theme", ··· 639 651 "markdownDescription": "Denies the name command without any pre-configured scope." 640 652 }, 641 653 { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 642 660 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 661 "type": "string", 644 662 "const": "core:app:deny-remove-data-store", 645 663 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 646 670 }, 647 671 { 648 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 1851 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 1852 }, 1829 1853 { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 + }, 1859 + { 1830 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 1861 "type": "string", 1832 1862 "const": "core:window:allow-set-fullscreen", ··· 1897 1927 "type": "string", 1898 1928 "const": "core:window:allow-set-shadow", 1899 1929 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1900 1936 }, 1901 1937 { 1902 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 2307 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 2308 }, 2273 2309 { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 + }, 2315 + { 2274 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 2317 "type": "string", 2276 2318 "const": "core:window:deny-set-fullscreen", ··· 2341 2383 "type": "string", 2342 2384 "const": "core:window:deny-set-shadow", 2343 2385 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2344 2392 }, 2345 2393 { 2346 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 2479 "type": "string", 2432 2480 "const": "core:window:deny-unminimize", 2433 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2434 - }, 2435 - { 2436 - "description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`", 2437 - "type": "string", 2438 - "const": "deep-link:default", 2439 - "markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`" 2440 - }, 2441 - { 2442 - "description": "Enables the get_current command without any pre-configured scope.", 2443 - "type": "string", 2444 - "const": "deep-link:allow-get-current", 2445 - "markdownDescription": "Enables the get_current command without any pre-configured scope." 2446 - }, 2447 - { 2448 - "description": "Enables the is_registered command without any pre-configured scope.", 2449 - "type": "string", 2450 - "const": "deep-link:allow-is-registered", 2451 - "markdownDescription": "Enables the is_registered command without any pre-configured scope." 2452 - }, 2453 - { 2454 - "description": "Enables the register command without any pre-configured scope.", 2455 - "type": "string", 2456 - "const": "deep-link:allow-register", 2457 - "markdownDescription": "Enables the register command without any pre-configured scope." 2458 - }, 2459 - { 2460 - "description": "Enables the unregister command without any pre-configured scope.", 2461 - "type": "string", 2462 - "const": "deep-link:allow-unregister", 2463 - "markdownDescription": "Enables the unregister command without any pre-configured scope." 2464 - }, 2465 - { 2466 - "description": "Denies the get_current command without any pre-configured scope.", 2467 - "type": "string", 2468 - "const": "deep-link:deny-get-current", 2469 - "markdownDescription": "Denies the get_current command without any pre-configured scope." 2470 - }, 2471 - { 2472 - "description": "Denies the is_registered command without any pre-configured scope.", 2473 - "type": "string", 2474 - "const": "deep-link:deny-is-registered", 2475 - "markdownDescription": "Denies the is_registered command without any pre-configured scope." 2476 - }, 2477 - { 2478 - "description": "Denies the register command without any pre-configured scope.", 2479 - "type": "string", 2480 - "const": "deep-link:deny-register", 2481 - "markdownDescription": "Denies the register command without any pre-configured scope." 2482 - }, 2483 - { 2484 - "description": "Denies the unregister command without any pre-configured scope.", 2485 - "type": "string", 2486 - "const": "deep-link:deny-unregister", 2487 - "markdownDescription": "Denies the unregister command without any pre-configured scope." 2488 2482 }, 2489 2483 { 2490 2484 "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-read-body`\n- `allow-fetch-send`",
+894 -406
src-tauri/gen/schemas/windows-schema.json
··· 37 37 ], 38 38 "definitions": { 39 39 "Capability": { 40 - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a 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 programatic 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\"] } ```", 40 + "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\"] } ```", 41 41 "type": "object", 42 42 "required": [ 43 43 "identifier", ··· 49 49 "type": "string" 50 50 }, 51 51 "description": { 52 - "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 programatic access to files selected by the user.", 52 + "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.", 53 53 "default": "", 54 54 "type": "string" 55 55 }, ··· 70 70 "type": "boolean" 71 71 }, 72 72 "windows": { 73 - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", 73 + "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\"]`", 74 74 "type": "array", 75 75 "items": { 76 76 "type": "string" 77 77 } 78 78 }, 79 79 "webviews": { 80 - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", 80 + "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\"]`", 81 81 "type": "array", 82 82 "items": { 83 83 "type": "string" 84 84 } 85 85 }, 86 86 "permissions": { 87 - "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\" }] } ```", 87 + "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\" }] } ] ```", 88 88 "type": "array", 89 89 "items": { 90 90 "$ref": "#/definitions/PermissionEntry" ··· 140 140 "identifier": { 141 141 "anyOf": [ 142 142 { 143 - "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", 143 + "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-read-body`\n- `allow-fetch-send`", 144 144 "type": "string", 145 - "const": "http:default" 145 + "const": "http:default", 146 + "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-read-body`\n- `allow-fetch-send`" 146 147 }, 147 148 { 148 149 "description": "Enables the fetch command without any pre-configured scope.", 149 150 "type": "string", 150 - "const": "http:allow-fetch" 151 + "const": "http:allow-fetch", 152 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 151 153 }, 152 154 { 153 155 "description": "Enables the fetch_cancel command without any pre-configured scope.", 154 156 "type": "string", 155 - "const": "http:allow-fetch-cancel" 157 + "const": "http:allow-fetch-cancel", 158 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 156 159 }, 157 160 { 158 161 "description": "Enables the fetch_read_body command without any pre-configured scope.", 159 162 "type": "string", 160 - "const": "http:allow-fetch-read-body" 163 + "const": "http:allow-fetch-read-body", 164 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 161 165 }, 162 166 { 163 167 "description": "Enables the fetch_send command without any pre-configured scope.", 164 168 "type": "string", 165 - "const": "http:allow-fetch-send" 169 + "const": "http:allow-fetch-send", 170 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 166 171 }, 167 172 { 168 173 "description": "Denies the fetch command without any pre-configured scope.", 169 174 "type": "string", 170 - "const": "http:deny-fetch" 175 + "const": "http:deny-fetch", 176 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 171 177 }, 172 178 { 173 179 "description": "Denies the fetch_cancel command without any pre-configured scope.", 174 180 "type": "string", 175 - "const": "http:deny-fetch-cancel" 181 + "const": "http:deny-fetch-cancel", 182 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 176 183 }, 177 184 { 178 185 "description": "Denies the fetch_read_body command without any pre-configured scope.", 179 186 "type": "string", 180 - "const": "http:deny-fetch-read-body" 187 + "const": "http:deny-fetch-read-body", 188 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 181 189 }, 182 190 { 183 191 "description": "Denies the fetch_send command without any pre-configured scope.", 184 192 "type": "string", 185 - "const": "http:deny-fetch-send" 193 + "const": "http:deny-fetch-send", 194 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 186 195 } 187 196 ] 188 197 } ··· 257 266 "identifier": { 258 267 "anyOf": [ 259 268 { 260 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", 269 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 261 270 "type": "string", 262 - "const": "shell:default" 271 + "const": "shell:default", 272 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 263 273 }, 264 274 { 265 275 "description": "Enables the execute command without any pre-configured scope.", 266 276 "type": "string", 267 - "const": "shell:allow-execute" 277 + "const": "shell:allow-execute", 278 + "markdownDescription": "Enables the execute command without any pre-configured scope." 268 279 }, 269 280 { 270 281 "description": "Enables the kill command without any pre-configured scope.", 271 282 "type": "string", 272 - "const": "shell:allow-kill" 283 + "const": "shell:allow-kill", 284 + "markdownDescription": "Enables the kill command without any pre-configured scope." 273 285 }, 274 286 { 275 287 "description": "Enables the open command without any pre-configured scope.", 276 288 "type": "string", 277 - "const": "shell:allow-open" 289 + "const": "shell:allow-open", 290 + "markdownDescription": "Enables the open command without any pre-configured scope." 278 291 }, 279 292 { 280 293 "description": "Enables the spawn command without any pre-configured scope.", 281 294 "type": "string", 282 - "const": "shell:allow-spawn" 295 + "const": "shell:allow-spawn", 296 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 283 297 }, 284 298 { 285 299 "description": "Enables the stdin_write command without any pre-configured scope.", 286 300 "type": "string", 287 - "const": "shell:allow-stdin-write" 301 + "const": "shell:allow-stdin-write", 302 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 288 303 }, 289 304 { 290 305 "description": "Denies the execute command without any pre-configured scope.", 291 306 "type": "string", 292 - "const": "shell:deny-execute" 307 + "const": "shell:deny-execute", 308 + "markdownDescription": "Denies the execute command without any pre-configured scope." 293 309 }, 294 310 { 295 311 "description": "Denies the kill command without any pre-configured scope.", 296 312 "type": "string", 297 - "const": "shell:deny-kill" 313 + "const": "shell:deny-kill", 314 + "markdownDescription": "Denies the kill command without any pre-configured scope." 298 315 }, 299 316 { 300 317 "description": "Denies the open command without any pre-configured scope.", 301 318 "type": "string", 302 - "const": "shell:deny-open" 319 + "const": "shell:deny-open", 320 + "markdownDescription": "Denies the open command without any pre-configured scope." 303 321 }, 304 322 { 305 323 "description": "Denies the spawn command without any pre-configured scope.", 306 324 "type": "string", 307 - "const": "shell:deny-spawn" 325 + "const": "shell:deny-spawn", 326 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 308 327 }, 309 328 { 310 329 "description": "Denies the stdin_write command without any pre-configured scope.", 311 330 "type": "string", 312 - "const": "shell:deny-stdin-write" 331 + "const": "shell:deny-stdin-write", 332 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 313 333 } 314 334 ] 315 335 } ··· 493 513 "description": "Permission identifier", 494 514 "oneOf": [ 495 515 { 496 - "description": "Default core plugins set which includes:\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'\n", 516 + "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`", 497 517 "type": "string", 498 - "const": "core:default" 518 + "const": "core:default", 519 + "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`" 499 520 }, 500 521 { 501 - "description": "Default permissions for the plugin.", 522 + "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`", 502 523 "type": "string", 503 - "const": "core:app:default" 524 + "const": "core:app:default", 525 + "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`" 504 526 }, 505 527 { 506 528 "description": "Enables the app_hide command without any pre-configured scope.", 507 529 "type": "string", 508 - "const": "core:app:allow-app-hide" 530 + "const": "core:app:allow-app-hide", 531 + "markdownDescription": "Enables the app_hide command without any pre-configured scope." 509 532 }, 510 533 { 511 534 "description": "Enables the app_show command without any pre-configured scope.", 512 535 "type": "string", 513 - "const": "core:app:allow-app-show" 536 + "const": "core:app:allow-app-show", 537 + "markdownDescription": "Enables the app_show command without any pre-configured scope." 538 + }, 539 + { 540 + "description": "Enables the bundle_type command without any pre-configured scope.", 541 + "type": "string", 542 + "const": "core:app:allow-bundle-type", 543 + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." 514 544 }, 515 545 { 516 546 "description": "Enables the default_window_icon command without any pre-configured scope.", 517 547 "type": "string", 518 - "const": "core:app:allow-default-window-icon" 548 + "const": "core:app:allow-default-window-icon", 549 + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." 550 + }, 551 + { 552 + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", 553 + "type": "string", 554 + "const": "core:app:allow-fetch-data-store-identifiers", 555 + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." 556 + }, 557 + { 558 + "description": "Enables the identifier command without any pre-configured scope.", 559 + "type": "string", 560 + "const": "core:app:allow-identifier", 561 + "markdownDescription": "Enables the identifier command without any pre-configured scope." 519 562 }, 520 563 { 521 564 "description": "Enables the name command without any pre-configured scope.", 522 565 "type": "string", 523 - "const": "core:app:allow-name" 566 + "const": "core:app:allow-name", 567 + "markdownDescription": "Enables the name command without any pre-configured scope." 568 + }, 569 + { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 576 + "description": "Enables the remove_data_store command without any pre-configured scope.", 577 + "type": "string", 578 + "const": "core:app:allow-remove-data-store", 579 + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 580 + }, 581 + { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 524 586 }, 525 587 { 526 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 527 589 "type": "string", 528 - "const": "core:app:allow-set-app-theme" 590 + "const": "core:app:allow-set-app-theme", 591 + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." 592 + }, 593 + { 594 + "description": "Enables the set_dock_visibility command without any pre-configured scope.", 595 + "type": "string", 596 + "const": "core:app:allow-set-dock-visibility", 597 + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." 529 598 }, 530 599 { 531 600 "description": "Enables the tauri_version command without any pre-configured scope.", 532 601 "type": "string", 533 - "const": "core:app:allow-tauri-version" 602 + "const": "core:app:allow-tauri-version", 603 + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." 534 604 }, 535 605 { 536 606 "description": "Enables the version command without any pre-configured scope.", 537 607 "type": "string", 538 - "const": "core:app:allow-version" 608 + "const": "core:app:allow-version", 609 + "markdownDescription": "Enables the version command without any pre-configured scope." 539 610 }, 540 611 { 541 612 "description": "Denies the app_hide command without any pre-configured scope.", 542 613 "type": "string", 543 - "const": "core:app:deny-app-hide" 614 + "const": "core:app:deny-app-hide", 615 + "markdownDescription": "Denies the app_hide command without any pre-configured scope." 544 616 }, 545 617 { 546 618 "description": "Denies the app_show command without any pre-configured scope.", 547 619 "type": "string", 548 - "const": "core:app:deny-app-show" 620 + "const": "core:app:deny-app-show", 621 + "markdownDescription": "Denies the app_show command without any pre-configured scope." 622 + }, 623 + { 624 + "description": "Denies the bundle_type command without any pre-configured scope.", 625 + "type": "string", 626 + "const": "core:app:deny-bundle-type", 627 + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." 549 628 }, 550 629 { 551 630 "description": "Denies the default_window_icon command without any pre-configured scope.", 552 631 "type": "string", 553 - "const": "core:app:deny-default-window-icon" 632 + "const": "core:app:deny-default-window-icon", 633 + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." 634 + }, 635 + { 636 + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", 637 + "type": "string", 638 + "const": "core:app:deny-fetch-data-store-identifiers", 639 + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." 640 + }, 641 + { 642 + "description": "Denies the identifier command without any pre-configured scope.", 643 + "type": "string", 644 + "const": "core:app:deny-identifier", 645 + "markdownDescription": "Denies the identifier command without any pre-configured scope." 554 646 }, 555 647 { 556 648 "description": "Denies the name command without any pre-configured scope.", 557 649 "type": "string", 558 - "const": "core:app:deny-name" 650 + "const": "core:app:deny-name", 651 + "markdownDescription": "Denies the name command without any pre-configured scope." 652 + }, 653 + { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 660 + "description": "Denies the remove_data_store command without any pre-configured scope.", 661 + "type": "string", 662 + "const": "core:app:deny-remove-data-store", 663 + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 559 670 }, 560 671 { 561 672 "description": "Denies the set_app_theme command without any pre-configured scope.", 562 673 "type": "string", 563 - "const": "core:app:deny-set-app-theme" 674 + "const": "core:app:deny-set-app-theme", 675 + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." 676 + }, 677 + { 678 + "description": "Denies the set_dock_visibility command without any pre-configured scope.", 679 + "type": "string", 680 + "const": "core:app:deny-set-dock-visibility", 681 + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." 564 682 }, 565 683 { 566 684 "description": "Denies the tauri_version command without any pre-configured scope.", 567 685 "type": "string", 568 - "const": "core:app:deny-tauri-version" 686 + "const": "core:app:deny-tauri-version", 687 + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." 569 688 }, 570 689 { 571 690 "description": "Denies the version command without any pre-configured scope.", 572 691 "type": "string", 573 - "const": "core:app:deny-version" 692 + "const": "core:app:deny-version", 693 + "markdownDescription": "Denies the version command without any pre-configured scope." 574 694 }, 575 695 { 576 - "description": "Default permissions for the plugin.", 696 + "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`", 577 697 "type": "string", 578 - "const": "core:event:default" 698 + "const": "core:event:default", 699 + "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`" 579 700 }, 580 701 { 581 702 "description": "Enables the emit command without any pre-configured scope.", 582 703 "type": "string", 583 - "const": "core:event:allow-emit" 704 + "const": "core:event:allow-emit", 705 + "markdownDescription": "Enables the emit command without any pre-configured scope." 584 706 }, 585 707 { 586 708 "description": "Enables the emit_to command without any pre-configured scope.", 587 709 "type": "string", 588 - "const": "core:event:allow-emit-to" 710 + "const": "core:event:allow-emit-to", 711 + "markdownDescription": "Enables the emit_to command without any pre-configured scope." 589 712 }, 590 713 { 591 714 "description": "Enables the listen command without any pre-configured scope.", 592 715 "type": "string", 593 - "const": "core:event:allow-listen" 716 + "const": "core:event:allow-listen", 717 + "markdownDescription": "Enables the listen command without any pre-configured scope." 594 718 }, 595 719 { 596 720 "description": "Enables the unlisten command without any pre-configured scope.", 597 721 "type": "string", 598 - "const": "core:event:allow-unlisten" 722 + "const": "core:event:allow-unlisten", 723 + "markdownDescription": "Enables the unlisten command without any pre-configured scope." 599 724 }, 600 725 { 601 726 "description": "Denies the emit command without any pre-configured scope.", 602 727 "type": "string", 603 - "const": "core:event:deny-emit" 728 + "const": "core:event:deny-emit", 729 + "markdownDescription": "Denies the emit command without any pre-configured scope." 604 730 }, 605 731 { 606 732 "description": "Denies the emit_to command without any pre-configured scope.", 607 733 "type": "string", 608 - "const": "core:event:deny-emit-to" 734 + "const": "core:event:deny-emit-to", 735 + "markdownDescription": "Denies the emit_to command without any pre-configured scope." 609 736 }, 610 737 { 611 738 "description": "Denies the listen command without any pre-configured scope.", 612 739 "type": "string", 613 - "const": "core:event:deny-listen" 740 + "const": "core:event:deny-listen", 741 + "markdownDescription": "Denies the listen command without any pre-configured scope." 614 742 }, 615 743 { 616 744 "description": "Denies the unlisten command without any pre-configured scope.", 617 745 "type": "string", 618 - "const": "core:event:deny-unlisten" 746 + "const": "core:event:deny-unlisten", 747 + "markdownDescription": "Denies the unlisten command without any pre-configured scope." 619 748 }, 620 749 { 621 - "description": "Default permissions for the plugin.", 750 + "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`", 622 751 "type": "string", 623 - "const": "core:image:default" 752 + "const": "core:image:default", 753 + "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`" 624 754 }, 625 755 { 626 756 "description": "Enables the from_bytes command without any pre-configured scope.", 627 757 "type": "string", 628 - "const": "core:image:allow-from-bytes" 758 + "const": "core:image:allow-from-bytes", 759 + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." 629 760 }, 630 761 { 631 762 "description": "Enables the from_path command without any pre-configured scope.", 632 763 "type": "string", 633 - "const": "core:image:allow-from-path" 764 + "const": "core:image:allow-from-path", 765 + "markdownDescription": "Enables the from_path command without any pre-configured scope." 634 766 }, 635 767 { 636 768 "description": "Enables the new command without any pre-configured scope.", 637 769 "type": "string", 638 - "const": "core:image:allow-new" 770 + "const": "core:image:allow-new", 771 + "markdownDescription": "Enables the new command without any pre-configured scope." 639 772 }, 640 773 { 641 774 "description": "Enables the rgba command without any pre-configured scope.", 642 775 "type": "string", 643 - "const": "core:image:allow-rgba" 776 + "const": "core:image:allow-rgba", 777 + "markdownDescription": "Enables the rgba command without any pre-configured scope." 644 778 }, 645 779 { 646 780 "description": "Enables the size command without any pre-configured scope.", 647 781 "type": "string", 648 - "const": "core:image:allow-size" 782 + "const": "core:image:allow-size", 783 + "markdownDescription": "Enables the size command without any pre-configured scope." 649 784 }, 650 785 { 651 786 "description": "Denies the from_bytes command without any pre-configured scope.", 652 787 "type": "string", 653 - "const": "core:image:deny-from-bytes" 788 + "const": "core:image:deny-from-bytes", 789 + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." 654 790 }, 655 791 { 656 792 "description": "Denies the from_path command without any pre-configured scope.", 657 793 "type": "string", 658 - "const": "core:image:deny-from-path" 794 + "const": "core:image:deny-from-path", 795 + "markdownDescription": "Denies the from_path command without any pre-configured scope." 659 796 }, 660 797 { 661 798 "description": "Denies the new command without any pre-configured scope.", 662 799 "type": "string", 663 - "const": "core:image:deny-new" 800 + "const": "core:image:deny-new", 801 + "markdownDescription": "Denies the new command without any pre-configured scope." 664 802 }, 665 803 { 666 804 "description": "Denies the rgba command without any pre-configured scope.", 667 805 "type": "string", 668 - "const": "core:image:deny-rgba" 806 + "const": "core:image:deny-rgba", 807 + "markdownDescription": "Denies the rgba command without any pre-configured scope." 669 808 }, 670 809 { 671 810 "description": "Denies the size command without any pre-configured scope.", 672 811 "type": "string", 673 - "const": "core:image:deny-size" 812 + "const": "core:image:deny-size", 813 + "markdownDescription": "Denies the size command without any pre-configured scope." 674 814 }, 675 815 { 676 - "description": "Default permissions for the plugin.", 816 + "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`", 677 817 "type": "string", 678 - "const": "core:menu:default" 818 + "const": "core:menu:default", 819 + "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`" 679 820 }, 680 821 { 681 822 "description": "Enables the append command without any pre-configured scope.", 682 823 "type": "string", 683 - "const": "core:menu:allow-append" 824 + "const": "core:menu:allow-append", 825 + "markdownDescription": "Enables the append command without any pre-configured scope." 684 826 }, 685 827 { 686 828 "description": "Enables the create_default command without any pre-configured scope.", 687 829 "type": "string", 688 - "const": "core:menu:allow-create-default" 830 + "const": "core:menu:allow-create-default", 831 + "markdownDescription": "Enables the create_default command without any pre-configured scope." 689 832 }, 690 833 { 691 834 "description": "Enables the get command without any pre-configured scope.", 692 835 "type": "string", 693 - "const": "core:menu:allow-get" 836 + "const": "core:menu:allow-get", 837 + "markdownDescription": "Enables the get command without any pre-configured scope." 694 838 }, 695 839 { 696 840 "description": "Enables the insert command without any pre-configured scope.", 697 841 "type": "string", 698 - "const": "core:menu:allow-insert" 842 + "const": "core:menu:allow-insert", 843 + "markdownDescription": "Enables the insert command without any pre-configured scope." 699 844 }, 700 845 { 701 846 "description": "Enables the is_checked command without any pre-configured scope.", 702 847 "type": "string", 703 - "const": "core:menu:allow-is-checked" 848 + "const": "core:menu:allow-is-checked", 849 + "markdownDescription": "Enables the is_checked command without any pre-configured scope." 704 850 }, 705 851 { 706 852 "description": "Enables the is_enabled command without any pre-configured scope.", 707 853 "type": "string", 708 - "const": "core:menu:allow-is-enabled" 854 + "const": "core:menu:allow-is-enabled", 855 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 709 856 }, 710 857 { 711 858 "description": "Enables the items command without any pre-configured scope.", 712 859 "type": "string", 713 - "const": "core:menu:allow-items" 860 + "const": "core:menu:allow-items", 861 + "markdownDescription": "Enables the items command without any pre-configured scope." 714 862 }, 715 863 { 716 864 "description": "Enables the new command without any pre-configured scope.", 717 865 "type": "string", 718 - "const": "core:menu:allow-new" 866 + "const": "core:menu:allow-new", 867 + "markdownDescription": "Enables the new command without any pre-configured scope." 719 868 }, 720 869 { 721 870 "description": "Enables the popup command without any pre-configured scope.", 722 871 "type": "string", 723 - "const": "core:menu:allow-popup" 872 + "const": "core:menu:allow-popup", 873 + "markdownDescription": "Enables the popup command without any pre-configured scope." 724 874 }, 725 875 { 726 876 "description": "Enables the prepend command without any pre-configured scope.", 727 877 "type": "string", 728 - "const": "core:menu:allow-prepend" 878 + "const": "core:menu:allow-prepend", 879 + "markdownDescription": "Enables the prepend command without any pre-configured scope." 729 880 }, 730 881 { 731 882 "description": "Enables the remove command without any pre-configured scope.", 732 883 "type": "string", 733 - "const": "core:menu:allow-remove" 884 + "const": "core:menu:allow-remove", 885 + "markdownDescription": "Enables the remove command without any pre-configured scope." 734 886 }, 735 887 { 736 888 "description": "Enables the remove_at command without any pre-configured scope.", 737 889 "type": "string", 738 - "const": "core:menu:allow-remove-at" 890 + "const": "core:menu:allow-remove-at", 891 + "markdownDescription": "Enables the remove_at command without any pre-configured scope." 739 892 }, 740 893 { 741 894 "description": "Enables the set_accelerator command without any pre-configured scope.", 742 895 "type": "string", 743 - "const": "core:menu:allow-set-accelerator" 896 + "const": "core:menu:allow-set-accelerator", 897 + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." 744 898 }, 745 899 { 746 900 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 747 901 "type": "string", 748 - "const": "core:menu:allow-set-as-app-menu" 902 + "const": "core:menu:allow-set-as-app-menu", 903 + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." 749 904 }, 750 905 { 751 906 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 752 907 "type": "string", 753 - "const": "core:menu:allow-set-as-help-menu-for-nsapp" 908 + "const": "core:menu:allow-set-as-help-menu-for-nsapp", 909 + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." 754 910 }, 755 911 { 756 912 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 757 913 "type": "string", 758 - "const": "core:menu:allow-set-as-window-menu" 914 + "const": "core:menu:allow-set-as-window-menu", 915 + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." 759 916 }, 760 917 { 761 918 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 762 919 "type": "string", 763 - "const": "core:menu:allow-set-as-windows-menu-for-nsapp" 920 + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", 921 + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." 764 922 }, 765 923 { 766 924 "description": "Enables the set_checked command without any pre-configured scope.", 767 925 "type": "string", 768 - "const": "core:menu:allow-set-checked" 926 + "const": "core:menu:allow-set-checked", 927 + "markdownDescription": "Enables the set_checked command without any pre-configured scope." 769 928 }, 770 929 { 771 930 "description": "Enables the set_enabled command without any pre-configured scope.", 772 931 "type": "string", 773 - "const": "core:menu:allow-set-enabled" 932 + "const": "core:menu:allow-set-enabled", 933 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 774 934 }, 775 935 { 776 936 "description": "Enables the set_icon command without any pre-configured scope.", 777 937 "type": "string", 778 - "const": "core:menu:allow-set-icon" 938 + "const": "core:menu:allow-set-icon", 939 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 779 940 }, 780 941 { 781 942 "description": "Enables the set_text command without any pre-configured scope.", 782 943 "type": "string", 783 - "const": "core:menu:allow-set-text" 944 + "const": "core:menu:allow-set-text", 945 + "markdownDescription": "Enables the set_text command without any pre-configured scope." 784 946 }, 785 947 { 786 948 "description": "Enables the text command without any pre-configured scope.", 787 949 "type": "string", 788 - "const": "core:menu:allow-text" 950 + "const": "core:menu:allow-text", 951 + "markdownDescription": "Enables the text command without any pre-configured scope." 789 952 }, 790 953 { 791 954 "description": "Denies the append command without any pre-configured scope.", 792 955 "type": "string", 793 - "const": "core:menu:deny-append" 956 + "const": "core:menu:deny-append", 957 + "markdownDescription": "Denies the append command without any pre-configured scope." 794 958 }, 795 959 { 796 960 "description": "Denies the create_default command without any pre-configured scope.", 797 961 "type": "string", 798 - "const": "core:menu:deny-create-default" 962 + "const": "core:menu:deny-create-default", 963 + "markdownDescription": "Denies the create_default command without any pre-configured scope." 799 964 }, 800 965 { 801 966 "description": "Denies the get command without any pre-configured scope.", 802 967 "type": "string", 803 - "const": "core:menu:deny-get" 968 + "const": "core:menu:deny-get", 969 + "markdownDescription": "Denies the get command without any pre-configured scope." 804 970 }, 805 971 { 806 972 "description": "Denies the insert command without any pre-configured scope.", 807 973 "type": "string", 808 - "const": "core:menu:deny-insert" 974 + "const": "core:menu:deny-insert", 975 + "markdownDescription": "Denies the insert command without any pre-configured scope." 809 976 }, 810 977 { 811 978 "description": "Denies the is_checked command without any pre-configured scope.", 812 979 "type": "string", 813 - "const": "core:menu:deny-is-checked" 980 + "const": "core:menu:deny-is-checked", 981 + "markdownDescription": "Denies the is_checked command without any pre-configured scope." 814 982 }, 815 983 { 816 984 "description": "Denies the is_enabled command without any pre-configured scope.", 817 985 "type": "string", 818 - "const": "core:menu:deny-is-enabled" 986 + "const": "core:menu:deny-is-enabled", 987 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 819 988 }, 820 989 { 821 990 "description": "Denies the items command without any pre-configured scope.", 822 991 "type": "string", 823 - "const": "core:menu:deny-items" 992 + "const": "core:menu:deny-items", 993 + "markdownDescription": "Denies the items command without any pre-configured scope." 824 994 }, 825 995 { 826 996 "description": "Denies the new command without any pre-configured scope.", 827 997 "type": "string", 828 - "const": "core:menu:deny-new" 998 + "const": "core:menu:deny-new", 999 + "markdownDescription": "Denies the new command without any pre-configured scope." 829 1000 }, 830 1001 { 831 1002 "description": "Denies the popup command without any pre-configured scope.", 832 1003 "type": "string", 833 - "const": "core:menu:deny-popup" 1004 + "const": "core:menu:deny-popup", 1005 + "markdownDescription": "Denies the popup command without any pre-configured scope." 834 1006 }, 835 1007 { 836 1008 "description": "Denies the prepend command without any pre-configured scope.", 837 1009 "type": "string", 838 - "const": "core:menu:deny-prepend" 1010 + "const": "core:menu:deny-prepend", 1011 + "markdownDescription": "Denies the prepend command without any pre-configured scope." 839 1012 }, 840 1013 { 841 1014 "description": "Denies the remove command without any pre-configured scope.", 842 1015 "type": "string", 843 - "const": "core:menu:deny-remove" 1016 + "const": "core:menu:deny-remove", 1017 + "markdownDescription": "Denies the remove command without any pre-configured scope." 844 1018 }, 845 1019 { 846 1020 "description": "Denies the remove_at command without any pre-configured scope.", 847 1021 "type": "string", 848 - "const": "core:menu:deny-remove-at" 1022 + "const": "core:menu:deny-remove-at", 1023 + "markdownDescription": "Denies the remove_at command without any pre-configured scope." 849 1024 }, 850 1025 { 851 1026 "description": "Denies the set_accelerator command without any pre-configured scope.", 852 1027 "type": "string", 853 - "const": "core:menu:deny-set-accelerator" 1028 + "const": "core:menu:deny-set-accelerator", 1029 + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." 854 1030 }, 855 1031 { 856 1032 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 857 1033 "type": "string", 858 - "const": "core:menu:deny-set-as-app-menu" 1034 + "const": "core:menu:deny-set-as-app-menu", 1035 + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." 859 1036 }, 860 1037 { 861 1038 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 862 1039 "type": "string", 863 - "const": "core:menu:deny-set-as-help-menu-for-nsapp" 1040 + "const": "core:menu:deny-set-as-help-menu-for-nsapp", 1041 + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." 864 1042 }, 865 1043 { 866 1044 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 867 1045 "type": "string", 868 - "const": "core:menu:deny-set-as-window-menu" 1046 + "const": "core:menu:deny-set-as-window-menu", 1047 + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." 869 1048 }, 870 1049 { 871 1050 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 872 1051 "type": "string", 873 - "const": "core:menu:deny-set-as-windows-menu-for-nsapp" 1052 + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", 1053 + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." 874 1054 }, 875 1055 { 876 1056 "description": "Denies the set_checked command without any pre-configured scope.", 877 1057 "type": "string", 878 - "const": "core:menu:deny-set-checked" 1058 + "const": "core:menu:deny-set-checked", 1059 + "markdownDescription": "Denies the set_checked command without any pre-configured scope." 879 1060 }, 880 1061 { 881 1062 "description": "Denies the set_enabled command without any pre-configured scope.", 882 1063 "type": "string", 883 - "const": "core:menu:deny-set-enabled" 1064 + "const": "core:menu:deny-set-enabled", 1065 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 884 1066 }, 885 1067 { 886 1068 "description": "Denies the set_icon command without any pre-configured scope.", 887 1069 "type": "string", 888 - "const": "core:menu:deny-set-icon" 1070 + "const": "core:menu:deny-set-icon", 1071 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 889 1072 }, 890 1073 { 891 1074 "description": "Denies the set_text command without any pre-configured scope.", 892 1075 "type": "string", 893 - "const": "core:menu:deny-set-text" 1076 + "const": "core:menu:deny-set-text", 1077 + "markdownDescription": "Denies the set_text command without any pre-configured scope." 894 1078 }, 895 1079 { 896 1080 "description": "Denies the text command without any pre-configured scope.", 897 1081 "type": "string", 898 - "const": "core:menu:deny-text" 1082 + "const": "core:menu:deny-text", 1083 + "markdownDescription": "Denies the text command without any pre-configured scope." 899 1084 }, 900 1085 { 901 - "description": "Default permissions for the plugin.", 1086 + "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`", 902 1087 "type": "string", 903 - "const": "core:path:default" 1088 + "const": "core:path:default", 1089 + "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`" 904 1090 }, 905 1091 { 906 1092 "description": "Enables the basename command without any pre-configured scope.", 907 1093 "type": "string", 908 - "const": "core:path:allow-basename" 1094 + "const": "core:path:allow-basename", 1095 + "markdownDescription": "Enables the basename command without any pre-configured scope." 909 1096 }, 910 1097 { 911 1098 "description": "Enables the dirname command without any pre-configured scope.", 912 1099 "type": "string", 913 - "const": "core:path:allow-dirname" 1100 + "const": "core:path:allow-dirname", 1101 + "markdownDescription": "Enables the dirname command without any pre-configured scope." 914 1102 }, 915 1103 { 916 1104 "description": "Enables the extname command without any pre-configured scope.", 917 1105 "type": "string", 918 - "const": "core:path:allow-extname" 1106 + "const": "core:path:allow-extname", 1107 + "markdownDescription": "Enables the extname command without any pre-configured scope." 919 1108 }, 920 1109 { 921 1110 "description": "Enables the is_absolute command without any pre-configured scope.", 922 1111 "type": "string", 923 - "const": "core:path:allow-is-absolute" 1112 + "const": "core:path:allow-is-absolute", 1113 + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." 924 1114 }, 925 1115 { 926 1116 "description": "Enables the join command without any pre-configured scope.", 927 1117 "type": "string", 928 - "const": "core:path:allow-join" 1118 + "const": "core:path:allow-join", 1119 + "markdownDescription": "Enables the join command without any pre-configured scope." 929 1120 }, 930 1121 { 931 1122 "description": "Enables the normalize command without any pre-configured scope.", 932 1123 "type": "string", 933 - "const": "core:path:allow-normalize" 1124 + "const": "core:path:allow-normalize", 1125 + "markdownDescription": "Enables the normalize command without any pre-configured scope." 934 1126 }, 935 1127 { 936 1128 "description": "Enables the resolve command without any pre-configured scope.", 937 1129 "type": "string", 938 - "const": "core:path:allow-resolve" 1130 + "const": "core:path:allow-resolve", 1131 + "markdownDescription": "Enables the resolve command without any pre-configured scope." 939 1132 }, 940 1133 { 941 1134 "description": "Enables the resolve_directory command without any pre-configured scope.", 942 1135 "type": "string", 943 - "const": "core:path:allow-resolve-directory" 1136 + "const": "core:path:allow-resolve-directory", 1137 + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." 944 1138 }, 945 1139 { 946 1140 "description": "Denies the basename command without any pre-configured scope.", 947 1141 "type": "string", 948 - "const": "core:path:deny-basename" 1142 + "const": "core:path:deny-basename", 1143 + "markdownDescription": "Denies the basename command without any pre-configured scope." 949 1144 }, 950 1145 { 951 1146 "description": "Denies the dirname command without any pre-configured scope.", 952 1147 "type": "string", 953 - "const": "core:path:deny-dirname" 1148 + "const": "core:path:deny-dirname", 1149 + "markdownDescription": "Denies the dirname command without any pre-configured scope." 954 1150 }, 955 1151 { 956 1152 "description": "Denies the extname command without any pre-configured scope.", 957 1153 "type": "string", 958 - "const": "core:path:deny-extname" 1154 + "const": "core:path:deny-extname", 1155 + "markdownDescription": "Denies the extname command without any pre-configured scope." 959 1156 }, 960 1157 { 961 1158 "description": "Denies the is_absolute command without any pre-configured scope.", 962 1159 "type": "string", 963 - "const": "core:path:deny-is-absolute" 1160 + "const": "core:path:deny-is-absolute", 1161 + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." 964 1162 }, 965 1163 { 966 1164 "description": "Denies the join command without any pre-configured scope.", 967 1165 "type": "string", 968 - "const": "core:path:deny-join" 1166 + "const": "core:path:deny-join", 1167 + "markdownDescription": "Denies the join command without any pre-configured scope." 969 1168 }, 970 1169 { 971 1170 "description": "Denies the normalize command without any pre-configured scope.", 972 1171 "type": "string", 973 - "const": "core:path:deny-normalize" 1172 + "const": "core:path:deny-normalize", 1173 + "markdownDescription": "Denies the normalize command without any pre-configured scope." 974 1174 }, 975 1175 { 976 1176 "description": "Denies the resolve command without any pre-configured scope.", 977 1177 "type": "string", 978 - "const": "core:path:deny-resolve" 1178 + "const": "core:path:deny-resolve", 1179 + "markdownDescription": "Denies the resolve command without any pre-configured scope." 979 1180 }, 980 1181 { 981 1182 "description": "Denies the resolve_directory command without any pre-configured scope.", 982 1183 "type": "string", 983 - "const": "core:path:deny-resolve-directory" 1184 + "const": "core:path:deny-resolve-directory", 1185 + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." 984 1186 }, 985 1187 { 986 - "description": "Default permissions for the plugin.", 1188 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", 987 1189 "type": "string", 988 - "const": "core:resources:default" 1190 + "const": "core:resources:default", 1191 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" 989 1192 }, 990 1193 { 991 1194 "description": "Enables the close command without any pre-configured scope.", 992 1195 "type": "string", 993 - "const": "core:resources:allow-close" 1196 + "const": "core:resources:allow-close", 1197 + "markdownDescription": "Enables the close command without any pre-configured scope." 994 1198 }, 995 1199 { 996 1200 "description": "Denies the close command without any pre-configured scope.", 997 1201 "type": "string", 998 - "const": "core:resources:deny-close" 1202 + "const": "core:resources:deny-close", 1203 + "markdownDescription": "Denies the close command without any pre-configured scope." 999 1204 }, 1000 1205 { 1001 - "description": "Default permissions for the plugin.", 1206 + "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`", 1002 1207 "type": "string", 1003 - "const": "core:tray:default" 1208 + "const": "core:tray:default", 1209 + "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`" 1004 1210 }, 1005 1211 { 1006 1212 "description": "Enables the get_by_id command without any pre-configured scope.", 1007 1213 "type": "string", 1008 - "const": "core:tray:allow-get-by-id" 1214 + "const": "core:tray:allow-get-by-id", 1215 + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." 1009 1216 }, 1010 1217 { 1011 1218 "description": "Enables the new command without any pre-configured scope.", 1012 1219 "type": "string", 1013 - "const": "core:tray:allow-new" 1220 + "const": "core:tray:allow-new", 1221 + "markdownDescription": "Enables the new command without any pre-configured scope." 1014 1222 }, 1015 1223 { 1016 1224 "description": "Enables the remove_by_id command without any pre-configured scope.", 1017 1225 "type": "string", 1018 - "const": "core:tray:allow-remove-by-id" 1226 + "const": "core:tray:allow-remove-by-id", 1227 + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." 1019 1228 }, 1020 1229 { 1021 1230 "description": "Enables the set_icon command without any pre-configured scope.", 1022 1231 "type": "string", 1023 - "const": "core:tray:allow-set-icon" 1232 + "const": "core:tray:allow-set-icon", 1233 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1024 1234 }, 1025 1235 { 1026 1236 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1027 1237 "type": "string", 1028 - "const": "core:tray:allow-set-icon-as-template" 1238 + "const": "core:tray:allow-set-icon-as-template", 1239 + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." 1029 1240 }, 1030 1241 { 1031 1242 "description": "Enables the set_menu command without any pre-configured scope.", 1032 1243 "type": "string", 1033 - "const": "core:tray:allow-set-menu" 1244 + "const": "core:tray:allow-set-menu", 1245 + "markdownDescription": "Enables the set_menu command without any pre-configured scope." 1034 1246 }, 1035 1247 { 1036 1248 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1037 1249 "type": "string", 1038 - "const": "core:tray:allow-set-show-menu-on-left-click" 1250 + "const": "core:tray:allow-set-show-menu-on-left-click", 1251 + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." 1039 1252 }, 1040 1253 { 1041 1254 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1042 1255 "type": "string", 1043 - "const": "core:tray:allow-set-temp-dir-path" 1256 + "const": "core:tray:allow-set-temp-dir-path", 1257 + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." 1044 1258 }, 1045 1259 { 1046 1260 "description": "Enables the set_title command without any pre-configured scope.", 1047 1261 "type": "string", 1048 - "const": "core:tray:allow-set-title" 1262 + "const": "core:tray:allow-set-title", 1263 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1049 1264 }, 1050 1265 { 1051 1266 "description": "Enables the set_tooltip command without any pre-configured scope.", 1052 1267 "type": "string", 1053 - "const": "core:tray:allow-set-tooltip" 1268 + "const": "core:tray:allow-set-tooltip", 1269 + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." 1054 1270 }, 1055 1271 { 1056 1272 "description": "Enables the set_visible command without any pre-configured scope.", 1057 1273 "type": "string", 1058 - "const": "core:tray:allow-set-visible" 1274 + "const": "core:tray:allow-set-visible", 1275 + "markdownDescription": "Enables the set_visible command without any pre-configured scope." 1059 1276 }, 1060 1277 { 1061 1278 "description": "Denies the get_by_id command without any pre-configured scope.", 1062 1279 "type": "string", 1063 - "const": "core:tray:deny-get-by-id" 1280 + "const": "core:tray:deny-get-by-id", 1281 + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." 1064 1282 }, 1065 1283 { 1066 1284 "description": "Denies the new command without any pre-configured scope.", 1067 1285 "type": "string", 1068 - "const": "core:tray:deny-new" 1286 + "const": "core:tray:deny-new", 1287 + "markdownDescription": "Denies the new command without any pre-configured scope." 1069 1288 }, 1070 1289 { 1071 1290 "description": "Denies the remove_by_id command without any pre-configured scope.", 1072 1291 "type": "string", 1073 - "const": "core:tray:deny-remove-by-id" 1292 + "const": "core:tray:deny-remove-by-id", 1293 + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." 1074 1294 }, 1075 1295 { 1076 1296 "description": "Denies the set_icon command without any pre-configured scope.", 1077 1297 "type": "string", 1078 - "const": "core:tray:deny-set-icon" 1298 + "const": "core:tray:deny-set-icon", 1299 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1079 1300 }, 1080 1301 { 1081 1302 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1082 1303 "type": "string", 1083 - "const": "core:tray:deny-set-icon-as-template" 1304 + "const": "core:tray:deny-set-icon-as-template", 1305 + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." 1084 1306 }, 1085 1307 { 1086 1308 "description": "Denies the set_menu command without any pre-configured scope.", 1087 1309 "type": "string", 1088 - "const": "core:tray:deny-set-menu" 1310 + "const": "core:tray:deny-set-menu", 1311 + "markdownDescription": "Denies the set_menu command without any pre-configured scope." 1089 1312 }, 1090 1313 { 1091 1314 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1092 1315 "type": "string", 1093 - "const": "core:tray:deny-set-show-menu-on-left-click" 1316 + "const": "core:tray:deny-set-show-menu-on-left-click", 1317 + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." 1094 1318 }, 1095 1319 { 1096 1320 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1097 1321 "type": "string", 1098 - "const": "core:tray:deny-set-temp-dir-path" 1322 + "const": "core:tray:deny-set-temp-dir-path", 1323 + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." 1099 1324 }, 1100 1325 { 1101 1326 "description": "Denies the set_title command without any pre-configured scope.", 1102 1327 "type": "string", 1103 - "const": "core:tray:deny-set-title" 1328 + "const": "core:tray:deny-set-title", 1329 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 1104 1330 }, 1105 1331 { 1106 1332 "description": "Denies the set_tooltip command without any pre-configured scope.", 1107 1333 "type": "string", 1108 - "const": "core:tray:deny-set-tooltip" 1334 + "const": "core:tray:deny-set-tooltip", 1335 + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." 1109 1336 }, 1110 1337 { 1111 1338 "description": "Denies the set_visible command without any pre-configured scope.", 1112 1339 "type": "string", 1113 - "const": "core:tray:deny-set-visible" 1340 + "const": "core:tray:deny-set-visible", 1341 + "markdownDescription": "Denies the set_visible command without any pre-configured scope." 1114 1342 }, 1115 1343 { 1116 - "description": "Default permissions for the plugin.", 1344 + "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`", 1117 1345 "type": "string", 1118 - "const": "core:webview:default" 1346 + "const": "core:webview:default", 1347 + "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`" 1119 1348 }, 1120 1349 { 1121 1350 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1122 1351 "type": "string", 1123 - "const": "core:webview:allow-clear-all-browsing-data" 1352 + "const": "core:webview:allow-clear-all-browsing-data", 1353 + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." 1124 1354 }, 1125 1355 { 1126 1356 "description": "Enables the create_webview command without any pre-configured scope.", 1127 1357 "type": "string", 1128 - "const": "core:webview:allow-create-webview" 1358 + "const": "core:webview:allow-create-webview", 1359 + "markdownDescription": "Enables the create_webview command without any pre-configured scope." 1129 1360 }, 1130 1361 { 1131 1362 "description": "Enables the create_webview_window command without any pre-configured scope.", 1132 1363 "type": "string", 1133 - "const": "core:webview:allow-create-webview-window" 1364 + "const": "core:webview:allow-create-webview-window", 1365 + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." 1134 1366 }, 1135 1367 { 1136 1368 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1137 1369 "type": "string", 1138 - "const": "core:webview:allow-get-all-webviews" 1370 + "const": "core:webview:allow-get-all-webviews", 1371 + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." 1139 1372 }, 1140 1373 { 1141 1374 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1142 1375 "type": "string", 1143 - "const": "core:webview:allow-internal-toggle-devtools" 1376 + "const": "core:webview:allow-internal-toggle-devtools", 1377 + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." 1144 1378 }, 1145 1379 { 1146 1380 "description": "Enables the print command without any pre-configured scope.", 1147 1381 "type": "string", 1148 - "const": "core:webview:allow-print" 1382 + "const": "core:webview:allow-print", 1383 + "markdownDescription": "Enables the print command without any pre-configured scope." 1149 1384 }, 1150 1385 { 1151 1386 "description": "Enables the reparent command without any pre-configured scope.", 1152 1387 "type": "string", 1153 - "const": "core:webview:allow-reparent" 1388 + "const": "core:webview:allow-reparent", 1389 + "markdownDescription": "Enables the reparent command without any pre-configured scope." 1390 + }, 1391 + { 1392 + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", 1393 + "type": "string", 1394 + "const": "core:webview:allow-set-webview-auto-resize", 1395 + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." 1396 + }, 1397 + { 1398 + "description": "Enables the set_webview_background_color command without any pre-configured scope.", 1399 + "type": "string", 1400 + "const": "core:webview:allow-set-webview-background-color", 1401 + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." 1154 1402 }, 1155 1403 { 1156 1404 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1157 1405 "type": "string", 1158 - "const": "core:webview:allow-set-webview-focus" 1406 + "const": "core:webview:allow-set-webview-focus", 1407 + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." 1159 1408 }, 1160 1409 { 1161 1410 "description": "Enables the set_webview_position command without any pre-configured scope.", 1162 1411 "type": "string", 1163 - "const": "core:webview:allow-set-webview-position" 1412 + "const": "core:webview:allow-set-webview-position", 1413 + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." 1164 1414 }, 1165 1415 { 1166 1416 "description": "Enables the set_webview_size command without any pre-configured scope.", 1167 1417 "type": "string", 1168 - "const": "core:webview:allow-set-webview-size" 1418 + "const": "core:webview:allow-set-webview-size", 1419 + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." 1169 1420 }, 1170 1421 { 1171 1422 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1172 1423 "type": "string", 1173 - "const": "core:webview:allow-set-webview-zoom" 1424 + "const": "core:webview:allow-set-webview-zoom", 1425 + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." 1174 1426 }, 1175 1427 { 1176 1428 "description": "Enables the webview_close command without any pre-configured scope.", 1177 1429 "type": "string", 1178 - "const": "core:webview:allow-webview-close" 1430 + "const": "core:webview:allow-webview-close", 1431 + "markdownDescription": "Enables the webview_close command without any pre-configured scope." 1179 1432 }, 1180 1433 { 1181 1434 "description": "Enables the webview_hide command without any pre-configured scope.", 1182 1435 "type": "string", 1183 - "const": "core:webview:allow-webview-hide" 1436 + "const": "core:webview:allow-webview-hide", 1437 + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." 1184 1438 }, 1185 1439 { 1186 1440 "description": "Enables the webview_position command without any pre-configured scope.", 1187 1441 "type": "string", 1188 - "const": "core:webview:allow-webview-position" 1442 + "const": "core:webview:allow-webview-position", 1443 + "markdownDescription": "Enables the webview_position command without any pre-configured scope." 1189 1444 }, 1190 1445 { 1191 1446 "description": "Enables the webview_show command without any pre-configured scope.", 1192 1447 "type": "string", 1193 - "const": "core:webview:allow-webview-show" 1448 + "const": "core:webview:allow-webview-show", 1449 + "markdownDescription": "Enables the webview_show command without any pre-configured scope." 1194 1450 }, 1195 1451 { 1196 1452 "description": "Enables the webview_size command without any pre-configured scope.", 1197 1453 "type": "string", 1198 - "const": "core:webview:allow-webview-size" 1454 + "const": "core:webview:allow-webview-size", 1455 + "markdownDescription": "Enables the webview_size command without any pre-configured scope." 1199 1456 }, 1200 1457 { 1201 1458 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1202 1459 "type": "string", 1203 - "const": "core:webview:deny-clear-all-browsing-data" 1460 + "const": "core:webview:deny-clear-all-browsing-data", 1461 + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." 1204 1462 }, 1205 1463 { 1206 1464 "description": "Denies the create_webview command without any pre-configured scope.", 1207 1465 "type": "string", 1208 - "const": "core:webview:deny-create-webview" 1466 + "const": "core:webview:deny-create-webview", 1467 + "markdownDescription": "Denies the create_webview command without any pre-configured scope." 1209 1468 }, 1210 1469 { 1211 1470 "description": "Denies the create_webview_window command without any pre-configured scope.", 1212 1471 "type": "string", 1213 - "const": "core:webview:deny-create-webview-window" 1472 + "const": "core:webview:deny-create-webview-window", 1473 + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." 1214 1474 }, 1215 1475 { 1216 1476 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1217 1477 "type": "string", 1218 - "const": "core:webview:deny-get-all-webviews" 1478 + "const": "core:webview:deny-get-all-webviews", 1479 + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." 1219 1480 }, 1220 1481 { 1221 1482 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1222 1483 "type": "string", 1223 - "const": "core:webview:deny-internal-toggle-devtools" 1484 + "const": "core:webview:deny-internal-toggle-devtools", 1485 + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." 1224 1486 }, 1225 1487 { 1226 1488 "description": "Denies the print command without any pre-configured scope.", 1227 1489 "type": "string", 1228 - "const": "core:webview:deny-print" 1490 + "const": "core:webview:deny-print", 1491 + "markdownDescription": "Denies the print command without any pre-configured scope." 1229 1492 }, 1230 1493 { 1231 1494 "description": "Denies the reparent command without any pre-configured scope.", 1232 1495 "type": "string", 1233 - "const": "core:webview:deny-reparent" 1496 + "const": "core:webview:deny-reparent", 1497 + "markdownDescription": "Denies the reparent command without any pre-configured scope." 1498 + }, 1499 + { 1500 + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", 1501 + "type": "string", 1502 + "const": "core:webview:deny-set-webview-auto-resize", 1503 + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." 1504 + }, 1505 + { 1506 + "description": "Denies the set_webview_background_color command without any pre-configured scope.", 1507 + "type": "string", 1508 + "const": "core:webview:deny-set-webview-background-color", 1509 + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." 1234 1510 }, 1235 1511 { 1236 1512 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1237 1513 "type": "string", 1238 - "const": "core:webview:deny-set-webview-focus" 1514 + "const": "core:webview:deny-set-webview-focus", 1515 + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." 1239 1516 }, 1240 1517 { 1241 1518 "description": "Denies the set_webview_position command without any pre-configured scope.", 1242 1519 "type": "string", 1243 - "const": "core:webview:deny-set-webview-position" 1520 + "const": "core:webview:deny-set-webview-position", 1521 + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." 1244 1522 }, 1245 1523 { 1246 1524 "description": "Denies the set_webview_size command without any pre-configured scope.", 1247 1525 "type": "string", 1248 - "const": "core:webview:deny-set-webview-size" 1526 + "const": "core:webview:deny-set-webview-size", 1527 + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." 1249 1528 }, 1250 1529 { 1251 1530 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1252 1531 "type": "string", 1253 - "const": "core:webview:deny-set-webview-zoom" 1532 + "const": "core:webview:deny-set-webview-zoom", 1533 + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." 1254 1534 }, 1255 1535 { 1256 1536 "description": "Denies the webview_close command without any pre-configured scope.", 1257 1537 "type": "string", 1258 - "const": "core:webview:deny-webview-close" 1538 + "const": "core:webview:deny-webview-close", 1539 + "markdownDescription": "Denies the webview_close command without any pre-configured scope." 1259 1540 }, 1260 1541 { 1261 1542 "description": "Denies the webview_hide command without any pre-configured scope.", 1262 1543 "type": "string", 1263 - "const": "core:webview:deny-webview-hide" 1544 + "const": "core:webview:deny-webview-hide", 1545 + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." 1264 1546 }, 1265 1547 { 1266 1548 "description": "Denies the webview_position command without any pre-configured scope.", 1267 1549 "type": "string", 1268 - "const": "core:webview:deny-webview-position" 1550 + "const": "core:webview:deny-webview-position", 1551 + "markdownDescription": "Denies the webview_position command without any pre-configured scope." 1269 1552 }, 1270 1553 { 1271 1554 "description": "Denies the webview_show command without any pre-configured scope.", 1272 1555 "type": "string", 1273 - "const": "core:webview:deny-webview-show" 1556 + "const": "core:webview:deny-webview-show", 1557 + "markdownDescription": "Denies the webview_show command without any pre-configured scope." 1274 1558 }, 1275 1559 { 1276 1560 "description": "Denies the webview_size command without any pre-configured scope.", 1277 1561 "type": "string", 1278 - "const": "core:webview:deny-webview-size" 1562 + "const": "core:webview:deny-webview-size", 1563 + "markdownDescription": "Denies the webview_size command without any pre-configured scope." 1279 1564 }, 1280 1565 { 1281 - "description": "Default permissions for the plugin.", 1566 + "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`", 1282 1567 "type": "string", 1283 - "const": "core:window:default" 1568 + "const": "core:window:default", 1569 + "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`" 1284 1570 }, 1285 1571 { 1286 1572 "description": "Enables the available_monitors command without any pre-configured scope.", 1287 1573 "type": "string", 1288 - "const": "core:window:allow-available-monitors" 1574 + "const": "core:window:allow-available-monitors", 1575 + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." 1289 1576 }, 1290 1577 { 1291 1578 "description": "Enables the center command without any pre-configured scope.", 1292 1579 "type": "string", 1293 - "const": "core:window:allow-center" 1580 + "const": "core:window:allow-center", 1581 + "markdownDescription": "Enables the center command without any pre-configured scope." 1294 1582 }, 1295 1583 { 1296 1584 "description": "Enables the close command without any pre-configured scope.", 1297 1585 "type": "string", 1298 - "const": "core:window:allow-close" 1586 + "const": "core:window:allow-close", 1587 + "markdownDescription": "Enables the close command without any pre-configured scope." 1299 1588 }, 1300 1589 { 1301 1590 "description": "Enables the create command without any pre-configured scope.", 1302 1591 "type": "string", 1303 - "const": "core:window:allow-create" 1592 + "const": "core:window:allow-create", 1593 + "markdownDescription": "Enables the create command without any pre-configured scope." 1304 1594 }, 1305 1595 { 1306 1596 "description": "Enables the current_monitor command without any pre-configured scope.", 1307 1597 "type": "string", 1308 - "const": "core:window:allow-current-monitor" 1598 + "const": "core:window:allow-current-monitor", 1599 + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." 1309 1600 }, 1310 1601 { 1311 1602 "description": "Enables the cursor_position command without any pre-configured scope.", 1312 1603 "type": "string", 1313 - "const": "core:window:allow-cursor-position" 1604 + "const": "core:window:allow-cursor-position", 1605 + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." 1314 1606 }, 1315 1607 { 1316 1608 "description": "Enables the destroy command without any pre-configured scope.", 1317 1609 "type": "string", 1318 - "const": "core:window:allow-destroy" 1610 + "const": "core:window:allow-destroy", 1611 + "markdownDescription": "Enables the destroy command without any pre-configured scope." 1319 1612 }, 1320 1613 { 1321 1614 "description": "Enables the get_all_windows command without any pre-configured scope.", 1322 1615 "type": "string", 1323 - "const": "core:window:allow-get-all-windows" 1616 + "const": "core:window:allow-get-all-windows", 1617 + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." 1324 1618 }, 1325 1619 { 1326 1620 "description": "Enables the hide command without any pre-configured scope.", 1327 1621 "type": "string", 1328 - "const": "core:window:allow-hide" 1622 + "const": "core:window:allow-hide", 1623 + "markdownDescription": "Enables the hide command without any pre-configured scope." 1329 1624 }, 1330 1625 { 1331 1626 "description": "Enables the inner_position command without any pre-configured scope.", 1332 1627 "type": "string", 1333 - "const": "core:window:allow-inner-position" 1628 + "const": "core:window:allow-inner-position", 1629 + "markdownDescription": "Enables the inner_position command without any pre-configured scope." 1334 1630 }, 1335 1631 { 1336 1632 "description": "Enables the inner_size command without any pre-configured scope.", 1337 1633 "type": "string", 1338 - "const": "core:window:allow-inner-size" 1634 + "const": "core:window:allow-inner-size", 1635 + "markdownDescription": "Enables the inner_size command without any pre-configured scope." 1339 1636 }, 1340 1637 { 1341 1638 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1342 1639 "type": "string", 1343 - "const": "core:window:allow-internal-toggle-maximize" 1640 + "const": "core:window:allow-internal-toggle-maximize", 1641 + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." 1642 + }, 1643 + { 1644 + "description": "Enables the is_always_on_top command without any pre-configured scope.", 1645 + "type": "string", 1646 + "const": "core:window:allow-is-always-on-top", 1647 + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." 1344 1648 }, 1345 1649 { 1346 1650 "description": "Enables the is_closable command without any pre-configured scope.", 1347 1651 "type": "string", 1348 - "const": "core:window:allow-is-closable" 1652 + "const": "core:window:allow-is-closable", 1653 + "markdownDescription": "Enables the is_closable command without any pre-configured scope." 1349 1654 }, 1350 1655 { 1351 1656 "description": "Enables the is_decorated command without any pre-configured scope.", 1352 1657 "type": "string", 1353 - "const": "core:window:allow-is-decorated" 1658 + "const": "core:window:allow-is-decorated", 1659 + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." 1354 1660 }, 1355 1661 { 1356 1662 "description": "Enables the is_enabled command without any pre-configured scope.", 1357 1663 "type": "string", 1358 - "const": "core:window:allow-is-enabled" 1664 + "const": "core:window:allow-is-enabled", 1665 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 1359 1666 }, 1360 1667 { 1361 1668 "description": "Enables the is_focused command without any pre-configured scope.", 1362 1669 "type": "string", 1363 - "const": "core:window:allow-is-focused" 1670 + "const": "core:window:allow-is-focused", 1671 + "markdownDescription": "Enables the is_focused command without any pre-configured scope." 1364 1672 }, 1365 1673 { 1366 1674 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1367 1675 "type": "string", 1368 - "const": "core:window:allow-is-fullscreen" 1676 + "const": "core:window:allow-is-fullscreen", 1677 + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." 1369 1678 }, 1370 1679 { 1371 1680 "description": "Enables the is_maximizable command without any pre-configured scope.", 1372 1681 "type": "string", 1373 - "const": "core:window:allow-is-maximizable" 1682 + "const": "core:window:allow-is-maximizable", 1683 + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." 1374 1684 }, 1375 1685 { 1376 1686 "description": "Enables the is_maximized command without any pre-configured scope.", 1377 1687 "type": "string", 1378 - "const": "core:window:allow-is-maximized" 1688 + "const": "core:window:allow-is-maximized", 1689 + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." 1379 1690 }, 1380 1691 { 1381 1692 "description": "Enables the is_minimizable command without any pre-configured scope.", 1382 1693 "type": "string", 1383 - "const": "core:window:allow-is-minimizable" 1694 + "const": "core:window:allow-is-minimizable", 1695 + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." 1384 1696 }, 1385 1697 { 1386 1698 "description": "Enables the is_minimized command without any pre-configured scope.", 1387 1699 "type": "string", 1388 - "const": "core:window:allow-is-minimized" 1700 + "const": "core:window:allow-is-minimized", 1701 + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." 1389 1702 }, 1390 1703 { 1391 1704 "description": "Enables the is_resizable command without any pre-configured scope.", 1392 1705 "type": "string", 1393 - "const": "core:window:allow-is-resizable" 1706 + "const": "core:window:allow-is-resizable", 1707 + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." 1394 1708 }, 1395 1709 { 1396 1710 "description": "Enables the is_visible command without any pre-configured scope.", 1397 1711 "type": "string", 1398 - "const": "core:window:allow-is-visible" 1712 + "const": "core:window:allow-is-visible", 1713 + "markdownDescription": "Enables the is_visible command without any pre-configured scope." 1399 1714 }, 1400 1715 { 1401 1716 "description": "Enables the maximize command without any pre-configured scope.", 1402 1717 "type": "string", 1403 - "const": "core:window:allow-maximize" 1718 + "const": "core:window:allow-maximize", 1719 + "markdownDescription": "Enables the maximize command without any pre-configured scope." 1404 1720 }, 1405 1721 { 1406 1722 "description": "Enables the minimize command without any pre-configured scope.", 1407 1723 "type": "string", 1408 - "const": "core:window:allow-minimize" 1724 + "const": "core:window:allow-minimize", 1725 + "markdownDescription": "Enables the minimize command without any pre-configured scope." 1409 1726 }, 1410 1727 { 1411 1728 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1412 1729 "type": "string", 1413 - "const": "core:window:allow-monitor-from-point" 1730 + "const": "core:window:allow-monitor-from-point", 1731 + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." 1414 1732 }, 1415 1733 { 1416 1734 "description": "Enables the outer_position command without any pre-configured scope.", 1417 1735 "type": "string", 1418 - "const": "core:window:allow-outer-position" 1736 + "const": "core:window:allow-outer-position", 1737 + "markdownDescription": "Enables the outer_position command without any pre-configured scope." 1419 1738 }, 1420 1739 { 1421 1740 "description": "Enables the outer_size command without any pre-configured scope.", 1422 1741 "type": "string", 1423 - "const": "core:window:allow-outer-size" 1742 + "const": "core:window:allow-outer-size", 1743 + "markdownDescription": "Enables the outer_size command without any pre-configured scope." 1424 1744 }, 1425 1745 { 1426 1746 "description": "Enables the primary_monitor command without any pre-configured scope.", 1427 1747 "type": "string", 1428 - "const": "core:window:allow-primary-monitor" 1748 + "const": "core:window:allow-primary-monitor", 1749 + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." 1429 1750 }, 1430 1751 { 1431 1752 "description": "Enables the request_user_attention command without any pre-configured scope.", 1432 1753 "type": "string", 1433 - "const": "core:window:allow-request-user-attention" 1754 + "const": "core:window:allow-request-user-attention", 1755 + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." 1434 1756 }, 1435 1757 { 1436 1758 "description": "Enables the scale_factor command without any pre-configured scope.", 1437 1759 "type": "string", 1438 - "const": "core:window:allow-scale-factor" 1760 + "const": "core:window:allow-scale-factor", 1761 + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." 1439 1762 }, 1440 1763 { 1441 1764 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1442 1765 "type": "string", 1443 - "const": "core:window:allow-set-always-on-bottom" 1766 + "const": "core:window:allow-set-always-on-bottom", 1767 + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." 1444 1768 }, 1445 1769 { 1446 1770 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1447 1771 "type": "string", 1448 - "const": "core:window:allow-set-always-on-top" 1772 + "const": "core:window:allow-set-always-on-top", 1773 + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." 1774 + }, 1775 + { 1776 + "description": "Enables the set_background_color command without any pre-configured scope.", 1777 + "type": "string", 1778 + "const": "core:window:allow-set-background-color", 1779 + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." 1780 + }, 1781 + { 1782 + "description": "Enables the set_badge_count command without any pre-configured scope.", 1783 + "type": "string", 1784 + "const": "core:window:allow-set-badge-count", 1785 + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." 1786 + }, 1787 + { 1788 + "description": "Enables the set_badge_label command without any pre-configured scope.", 1789 + "type": "string", 1790 + "const": "core:window:allow-set-badge-label", 1791 + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." 1449 1792 }, 1450 1793 { 1451 1794 "description": "Enables the set_closable command without any pre-configured scope.", 1452 1795 "type": "string", 1453 - "const": "core:window:allow-set-closable" 1796 + "const": "core:window:allow-set-closable", 1797 + "markdownDescription": "Enables the set_closable command without any pre-configured scope." 1454 1798 }, 1455 1799 { 1456 1800 "description": "Enables the set_content_protected command without any pre-configured scope.", 1457 1801 "type": "string", 1458 - "const": "core:window:allow-set-content-protected" 1802 + "const": "core:window:allow-set-content-protected", 1803 + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." 1459 1804 }, 1460 1805 { 1461 1806 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1462 1807 "type": "string", 1463 - "const": "core:window:allow-set-cursor-grab" 1808 + "const": "core:window:allow-set-cursor-grab", 1809 + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." 1464 1810 }, 1465 1811 { 1466 1812 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1467 1813 "type": "string", 1468 - "const": "core:window:allow-set-cursor-icon" 1814 + "const": "core:window:allow-set-cursor-icon", 1815 + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." 1469 1816 }, 1470 1817 { 1471 1818 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1472 1819 "type": "string", 1473 - "const": "core:window:allow-set-cursor-position" 1820 + "const": "core:window:allow-set-cursor-position", 1821 + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." 1474 1822 }, 1475 1823 { 1476 1824 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1477 1825 "type": "string", 1478 - "const": "core:window:allow-set-cursor-visible" 1826 + "const": "core:window:allow-set-cursor-visible", 1827 + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." 1479 1828 }, 1480 1829 { 1481 1830 "description": "Enables the set_decorations command without any pre-configured scope.", 1482 1831 "type": "string", 1483 - "const": "core:window:allow-set-decorations" 1832 + "const": "core:window:allow-set-decorations", 1833 + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." 1484 1834 }, 1485 1835 { 1486 1836 "description": "Enables the set_effects command without any pre-configured scope.", 1487 1837 "type": "string", 1488 - "const": "core:window:allow-set-effects" 1838 + "const": "core:window:allow-set-effects", 1839 + "markdownDescription": "Enables the set_effects command without any pre-configured scope." 1489 1840 }, 1490 1841 { 1491 1842 "description": "Enables the set_enabled command without any pre-configured scope.", 1492 1843 "type": "string", 1493 - "const": "core:window:allow-set-enabled" 1844 + "const": "core:window:allow-set-enabled", 1845 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 1494 1846 }, 1495 1847 { 1496 1848 "description": "Enables the set_focus command without any pre-configured scope.", 1497 1849 "type": "string", 1498 - "const": "core:window:allow-set-focus" 1850 + "const": "core:window:allow-set-focus", 1851 + "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1852 + }, 1853 + { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1499 1858 }, 1500 1859 { 1501 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1502 1861 "type": "string", 1503 - "const": "core:window:allow-set-fullscreen" 1862 + "const": "core:window:allow-set-fullscreen", 1863 + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." 1504 1864 }, 1505 1865 { 1506 1866 "description": "Enables the set_icon command without any pre-configured scope.", 1507 1867 "type": "string", 1508 - "const": "core:window:allow-set-icon" 1868 + "const": "core:window:allow-set-icon", 1869 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1509 1870 }, 1510 1871 { 1511 1872 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1512 1873 "type": "string", 1513 - "const": "core:window:allow-set-ignore-cursor-events" 1874 + "const": "core:window:allow-set-ignore-cursor-events", 1875 + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." 1514 1876 }, 1515 1877 { 1516 1878 "description": "Enables the set_max_size command without any pre-configured scope.", 1517 1879 "type": "string", 1518 - "const": "core:window:allow-set-max-size" 1880 + "const": "core:window:allow-set-max-size", 1881 + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." 1519 1882 }, 1520 1883 { 1521 1884 "description": "Enables the set_maximizable command without any pre-configured scope.", 1522 1885 "type": "string", 1523 - "const": "core:window:allow-set-maximizable" 1886 + "const": "core:window:allow-set-maximizable", 1887 + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." 1524 1888 }, 1525 1889 { 1526 1890 "description": "Enables the set_min_size command without any pre-configured scope.", 1527 1891 "type": "string", 1528 - "const": "core:window:allow-set-min-size" 1892 + "const": "core:window:allow-set-min-size", 1893 + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." 1529 1894 }, 1530 1895 { 1531 1896 "description": "Enables the set_minimizable command without any pre-configured scope.", 1532 1897 "type": "string", 1533 - "const": "core:window:allow-set-minimizable" 1898 + "const": "core:window:allow-set-minimizable", 1899 + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." 1900 + }, 1901 + { 1902 + "description": "Enables the set_overlay_icon command without any pre-configured scope.", 1903 + "type": "string", 1904 + "const": "core:window:allow-set-overlay-icon", 1905 + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." 1534 1906 }, 1535 1907 { 1536 1908 "description": "Enables the set_position command without any pre-configured scope.", 1537 1909 "type": "string", 1538 - "const": "core:window:allow-set-position" 1910 + "const": "core:window:allow-set-position", 1911 + "markdownDescription": "Enables the set_position command without any pre-configured scope." 1539 1912 }, 1540 1913 { 1541 1914 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1542 1915 "type": "string", 1543 - "const": "core:window:allow-set-progress-bar" 1916 + "const": "core:window:allow-set-progress-bar", 1917 + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." 1544 1918 }, 1545 1919 { 1546 1920 "description": "Enables the set_resizable command without any pre-configured scope.", 1547 1921 "type": "string", 1548 - "const": "core:window:allow-set-resizable" 1922 + "const": "core:window:allow-set-resizable", 1923 + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." 1549 1924 }, 1550 1925 { 1551 1926 "description": "Enables the set_shadow command without any pre-configured scope.", 1552 1927 "type": "string", 1553 - "const": "core:window:allow-set-shadow" 1928 + "const": "core:window:allow-set-shadow", 1929 + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1554 1936 }, 1555 1937 { 1556 1938 "description": "Enables the set_size command without any pre-configured scope.", 1557 1939 "type": "string", 1558 - "const": "core:window:allow-set-size" 1940 + "const": "core:window:allow-set-size", 1941 + "markdownDescription": "Enables the set_size command without any pre-configured scope." 1559 1942 }, 1560 1943 { 1561 1944 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1562 1945 "type": "string", 1563 - "const": "core:window:allow-set-size-constraints" 1946 + "const": "core:window:allow-set-size-constraints", 1947 + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." 1564 1948 }, 1565 1949 { 1566 1950 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1567 1951 "type": "string", 1568 - "const": "core:window:allow-set-skip-taskbar" 1952 + "const": "core:window:allow-set-skip-taskbar", 1953 + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." 1569 1954 }, 1570 1955 { 1571 1956 "description": "Enables the set_theme command without any pre-configured scope.", 1572 1957 "type": "string", 1573 - "const": "core:window:allow-set-theme" 1958 + "const": "core:window:allow-set-theme", 1959 + "markdownDescription": "Enables the set_theme command without any pre-configured scope." 1574 1960 }, 1575 1961 { 1576 1962 "description": "Enables the set_title command without any pre-configured scope.", 1577 1963 "type": "string", 1578 - "const": "core:window:allow-set-title" 1964 + "const": "core:window:allow-set-title", 1965 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1579 1966 }, 1580 1967 { 1581 1968 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1582 1969 "type": "string", 1583 - "const": "core:window:allow-set-title-bar-style" 1970 + "const": "core:window:allow-set-title-bar-style", 1971 + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." 1584 1972 }, 1585 1973 { 1586 1974 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1587 1975 "type": "string", 1588 - "const": "core:window:allow-set-visible-on-all-workspaces" 1976 + "const": "core:window:allow-set-visible-on-all-workspaces", 1977 + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." 1589 1978 }, 1590 1979 { 1591 1980 "description": "Enables the show command without any pre-configured scope.", 1592 1981 "type": "string", 1593 - "const": "core:window:allow-show" 1982 + "const": "core:window:allow-show", 1983 + "markdownDescription": "Enables the show command without any pre-configured scope." 1594 1984 }, 1595 1985 { 1596 1986 "description": "Enables the start_dragging command without any pre-configured scope.", 1597 1987 "type": "string", 1598 - "const": "core:window:allow-start-dragging" 1988 + "const": "core:window:allow-start-dragging", 1989 + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." 1599 1990 }, 1600 1991 { 1601 1992 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1602 1993 "type": "string", 1603 - "const": "core:window:allow-start-resize-dragging" 1994 + "const": "core:window:allow-start-resize-dragging", 1995 + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." 1604 1996 }, 1605 1997 { 1606 1998 "description": "Enables the theme command without any pre-configured scope.", 1607 1999 "type": "string", 1608 - "const": "core:window:allow-theme" 2000 + "const": "core:window:allow-theme", 2001 + "markdownDescription": "Enables the theme command without any pre-configured scope." 1609 2002 }, 1610 2003 { 1611 2004 "description": "Enables the title command without any pre-configured scope.", 1612 2005 "type": "string", 1613 - "const": "core:window:allow-title" 2006 + "const": "core:window:allow-title", 2007 + "markdownDescription": "Enables the title command without any pre-configured scope." 1614 2008 }, 1615 2009 { 1616 2010 "description": "Enables the toggle_maximize command without any pre-configured scope.", 1617 2011 "type": "string", 1618 - "const": "core:window:allow-toggle-maximize" 2012 + "const": "core:window:allow-toggle-maximize", 2013 + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." 1619 2014 }, 1620 2015 { 1621 2016 "description": "Enables the unmaximize command without any pre-configured scope.", 1622 2017 "type": "string", 1623 - "const": "core:window:allow-unmaximize" 2018 + "const": "core:window:allow-unmaximize", 2019 + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." 1624 2020 }, 1625 2021 { 1626 2022 "description": "Enables the unminimize command without any pre-configured scope.", 1627 2023 "type": "string", 1628 - "const": "core:window:allow-unminimize" 2024 + "const": "core:window:allow-unminimize", 2025 + "markdownDescription": "Enables the unminimize command without any pre-configured scope." 1629 2026 }, 1630 2027 { 1631 2028 "description": "Denies the available_monitors command without any pre-configured scope.", 1632 2029 "type": "string", 1633 - "const": "core:window:deny-available-monitors" 2030 + "const": "core:window:deny-available-monitors", 2031 + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." 1634 2032 }, 1635 2033 { 1636 2034 "description": "Denies the center command without any pre-configured scope.", 1637 2035 "type": "string", 1638 - "const": "core:window:deny-center" 2036 + "const": "core:window:deny-center", 2037 + "markdownDescription": "Denies the center command without any pre-configured scope." 1639 2038 }, 1640 2039 { 1641 2040 "description": "Denies the close command without any pre-configured scope.", 1642 2041 "type": "string", 1643 - "const": "core:window:deny-close" 2042 + "const": "core:window:deny-close", 2043 + "markdownDescription": "Denies the close command without any pre-configured scope." 1644 2044 }, 1645 2045 { 1646 2046 "description": "Denies the create command without any pre-configured scope.", 1647 2047 "type": "string", 1648 - "const": "core:window:deny-create" 2048 + "const": "core:window:deny-create", 2049 + "markdownDescription": "Denies the create command without any pre-configured scope." 1649 2050 }, 1650 2051 { 1651 2052 "description": "Denies the current_monitor command without any pre-configured scope.", 1652 2053 "type": "string", 1653 - "const": "core:window:deny-current-monitor" 2054 + "const": "core:window:deny-current-monitor", 2055 + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." 1654 2056 }, 1655 2057 { 1656 2058 "description": "Denies the cursor_position command without any pre-configured scope.", 1657 2059 "type": "string", 1658 - "const": "core:window:deny-cursor-position" 2060 + "const": "core:window:deny-cursor-position", 2061 + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." 1659 2062 }, 1660 2063 { 1661 2064 "description": "Denies the destroy command without any pre-configured scope.", 1662 2065 "type": "string", 1663 - "const": "core:window:deny-destroy" 2066 + "const": "core:window:deny-destroy", 2067 + "markdownDescription": "Denies the destroy command without any pre-configured scope." 1664 2068 }, 1665 2069 { 1666 2070 "description": "Denies the get_all_windows command without any pre-configured scope.", 1667 2071 "type": "string", 1668 - "const": "core:window:deny-get-all-windows" 2072 + "const": "core:window:deny-get-all-windows", 2073 + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." 1669 2074 }, 1670 2075 { 1671 2076 "description": "Denies the hide command without any pre-configured scope.", 1672 2077 "type": "string", 1673 - "const": "core:window:deny-hide" 2078 + "const": "core:window:deny-hide", 2079 + "markdownDescription": "Denies the hide command without any pre-configured scope." 1674 2080 }, 1675 2081 { 1676 2082 "description": "Denies the inner_position command without any pre-configured scope.", 1677 2083 "type": "string", 1678 - "const": "core:window:deny-inner-position" 2084 + "const": "core:window:deny-inner-position", 2085 + "markdownDescription": "Denies the inner_position command without any pre-configured scope." 1679 2086 }, 1680 2087 { 1681 2088 "description": "Denies the inner_size command without any pre-configured scope.", 1682 2089 "type": "string", 1683 - "const": "core:window:deny-inner-size" 2090 + "const": "core:window:deny-inner-size", 2091 + "markdownDescription": "Denies the inner_size command without any pre-configured scope." 1684 2092 }, 1685 2093 { 1686 2094 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 1687 2095 "type": "string", 1688 - "const": "core:window:deny-internal-toggle-maximize" 2096 + "const": "core:window:deny-internal-toggle-maximize", 2097 + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." 2098 + }, 2099 + { 2100 + "description": "Denies the is_always_on_top command without any pre-configured scope.", 2101 + "type": "string", 2102 + "const": "core:window:deny-is-always-on-top", 2103 + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." 1689 2104 }, 1690 2105 { 1691 2106 "description": "Denies the is_closable command without any pre-configured scope.", 1692 2107 "type": "string", 1693 - "const": "core:window:deny-is-closable" 2108 + "const": "core:window:deny-is-closable", 2109 + "markdownDescription": "Denies the is_closable command without any pre-configured scope." 1694 2110 }, 1695 2111 { 1696 2112 "description": "Denies the is_decorated command without any pre-configured scope.", 1697 2113 "type": "string", 1698 - "const": "core:window:deny-is-decorated" 2114 + "const": "core:window:deny-is-decorated", 2115 + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." 1699 2116 }, 1700 2117 { 1701 2118 "description": "Denies the is_enabled command without any pre-configured scope.", 1702 2119 "type": "string", 1703 - "const": "core:window:deny-is-enabled" 2120 + "const": "core:window:deny-is-enabled", 2121 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 1704 2122 }, 1705 2123 { 1706 2124 "description": "Denies the is_focused command without any pre-configured scope.", 1707 2125 "type": "string", 1708 - "const": "core:window:deny-is-focused" 2126 + "const": "core:window:deny-is-focused", 2127 + "markdownDescription": "Denies the is_focused command without any pre-configured scope." 1709 2128 }, 1710 2129 { 1711 2130 "description": "Denies the is_fullscreen command without any pre-configured scope.", 1712 2131 "type": "string", 1713 - "const": "core:window:deny-is-fullscreen" 2132 + "const": "core:window:deny-is-fullscreen", 2133 + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." 1714 2134 }, 1715 2135 { 1716 2136 "description": "Denies the is_maximizable command without any pre-configured scope.", 1717 2137 "type": "string", 1718 - "const": "core:window:deny-is-maximizable" 2138 + "const": "core:window:deny-is-maximizable", 2139 + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." 1719 2140 }, 1720 2141 { 1721 2142 "description": "Denies the is_maximized command without any pre-configured scope.", 1722 2143 "type": "string", 1723 - "const": "core:window:deny-is-maximized" 2144 + "const": "core:window:deny-is-maximized", 2145 + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." 1724 2146 }, 1725 2147 { 1726 2148 "description": "Denies the is_minimizable command without any pre-configured scope.", 1727 2149 "type": "string", 1728 - "const": "core:window:deny-is-minimizable" 2150 + "const": "core:window:deny-is-minimizable", 2151 + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." 1729 2152 }, 1730 2153 { 1731 2154 "description": "Denies the is_minimized command without any pre-configured scope.", 1732 2155 "type": "string", 1733 - "const": "core:window:deny-is-minimized" 2156 + "const": "core:window:deny-is-minimized", 2157 + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." 1734 2158 }, 1735 2159 { 1736 2160 "description": "Denies the is_resizable command without any pre-configured scope.", 1737 2161 "type": "string", 1738 - "const": "core:window:deny-is-resizable" 2162 + "const": "core:window:deny-is-resizable", 2163 + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." 1739 2164 }, 1740 2165 { 1741 2166 "description": "Denies the is_visible command without any pre-configured scope.", 1742 2167 "type": "string", 1743 - "const": "core:window:deny-is-visible" 2168 + "const": "core:window:deny-is-visible", 2169 + "markdownDescription": "Denies the is_visible command without any pre-configured scope." 1744 2170 }, 1745 2171 { 1746 2172 "description": "Denies the maximize command without any pre-configured scope.", 1747 2173 "type": "string", 1748 - "const": "core:window:deny-maximize" 2174 + "const": "core:window:deny-maximize", 2175 + "markdownDescription": "Denies the maximize command without any pre-configured scope." 1749 2176 }, 1750 2177 { 1751 2178 "description": "Denies the minimize command without any pre-configured scope.", 1752 2179 "type": "string", 1753 - "const": "core:window:deny-minimize" 2180 + "const": "core:window:deny-minimize", 2181 + "markdownDescription": "Denies the minimize command without any pre-configured scope." 1754 2182 }, 1755 2183 { 1756 2184 "description": "Denies the monitor_from_point command without any pre-configured scope.", 1757 2185 "type": "string", 1758 - "const": "core:window:deny-monitor-from-point" 2186 + "const": "core:window:deny-monitor-from-point", 2187 + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." 1759 2188 }, 1760 2189 { 1761 2190 "description": "Denies the outer_position command without any pre-configured scope.", 1762 2191 "type": "string", 1763 - "const": "core:window:deny-outer-position" 2192 + "const": "core:window:deny-outer-position", 2193 + "markdownDescription": "Denies the outer_position command without any pre-configured scope." 1764 2194 }, 1765 2195 { 1766 2196 "description": "Denies the outer_size command without any pre-configured scope.", 1767 2197 "type": "string", 1768 - "const": "core:window:deny-outer-size" 2198 + "const": "core:window:deny-outer-size", 2199 + "markdownDescription": "Denies the outer_size command without any pre-configured scope." 1769 2200 }, 1770 2201 { 1771 2202 "description": "Denies the primary_monitor command without any pre-configured scope.", 1772 2203 "type": "string", 1773 - "const": "core:window:deny-primary-monitor" 2204 + "const": "core:window:deny-primary-monitor", 2205 + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." 1774 2206 }, 1775 2207 { 1776 2208 "description": "Denies the request_user_attention command without any pre-configured scope.", 1777 2209 "type": "string", 1778 - "const": "core:window:deny-request-user-attention" 2210 + "const": "core:window:deny-request-user-attention", 2211 + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." 1779 2212 }, 1780 2213 { 1781 2214 "description": "Denies the scale_factor command without any pre-configured scope.", 1782 2215 "type": "string", 1783 - "const": "core:window:deny-scale-factor" 2216 + "const": "core:window:deny-scale-factor", 2217 + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." 1784 2218 }, 1785 2219 { 1786 2220 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 1787 2221 "type": "string", 1788 - "const": "core:window:deny-set-always-on-bottom" 2222 + "const": "core:window:deny-set-always-on-bottom", 2223 + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." 1789 2224 }, 1790 2225 { 1791 2226 "description": "Denies the set_always_on_top command without any pre-configured scope.", 1792 2227 "type": "string", 1793 - "const": "core:window:deny-set-always-on-top" 2228 + "const": "core:window:deny-set-always-on-top", 2229 + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." 2230 + }, 2231 + { 2232 + "description": "Denies the set_background_color command without any pre-configured scope.", 2233 + "type": "string", 2234 + "const": "core:window:deny-set-background-color", 2235 + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." 2236 + }, 2237 + { 2238 + "description": "Denies the set_badge_count command without any pre-configured scope.", 2239 + "type": "string", 2240 + "const": "core:window:deny-set-badge-count", 2241 + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." 2242 + }, 2243 + { 2244 + "description": "Denies the set_badge_label command without any pre-configured scope.", 2245 + "type": "string", 2246 + "const": "core:window:deny-set-badge-label", 2247 + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." 1794 2248 }, 1795 2249 { 1796 2250 "description": "Denies the set_closable command without any pre-configured scope.", 1797 2251 "type": "string", 1798 - "const": "core:window:deny-set-closable" 2252 + "const": "core:window:deny-set-closable", 2253 + "markdownDescription": "Denies the set_closable command without any pre-configured scope." 1799 2254 }, 1800 2255 { 1801 2256 "description": "Denies the set_content_protected command without any pre-configured scope.", 1802 2257 "type": "string", 1803 - "const": "core:window:deny-set-content-protected" 2258 + "const": "core:window:deny-set-content-protected", 2259 + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." 1804 2260 }, 1805 2261 { 1806 2262 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 1807 2263 "type": "string", 1808 - "const": "core:window:deny-set-cursor-grab" 2264 + "const": "core:window:deny-set-cursor-grab", 2265 + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." 1809 2266 }, 1810 2267 { 1811 2268 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 1812 2269 "type": "string", 1813 - "const": "core:window:deny-set-cursor-icon" 2270 + "const": "core:window:deny-set-cursor-icon", 2271 + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." 1814 2272 }, 1815 2273 { 1816 2274 "description": "Denies the set_cursor_position command without any pre-configured scope.", 1817 2275 "type": "string", 1818 - "const": "core:window:deny-set-cursor-position" 2276 + "const": "core:window:deny-set-cursor-position", 2277 + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." 1819 2278 }, 1820 2279 { 1821 2280 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 1822 2281 "type": "string", 1823 - "const": "core:window:deny-set-cursor-visible" 2282 + "const": "core:window:deny-set-cursor-visible", 2283 + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." 1824 2284 }, 1825 2285 { 1826 2286 "description": "Denies the set_decorations command without any pre-configured scope.", 1827 2287 "type": "string", 1828 - "const": "core:window:deny-set-decorations" 2288 + "const": "core:window:deny-set-decorations", 2289 + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." 1829 2290 }, 1830 2291 { 1831 2292 "description": "Denies the set_effects command without any pre-configured scope.", 1832 2293 "type": "string", 1833 - "const": "core:window:deny-set-effects" 2294 + "const": "core:window:deny-set-effects", 2295 + "markdownDescription": "Denies the set_effects command without any pre-configured scope." 1834 2296 }, 1835 2297 { 1836 2298 "description": "Denies the set_enabled command without any pre-configured scope.", 1837 2299 "type": "string", 1838 - "const": "core:window:deny-set-enabled" 2300 + "const": "core:window:deny-set-enabled", 2301 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 1839 2302 }, 1840 2303 { 1841 2304 "description": "Denies the set_focus command without any pre-configured scope.", 1842 2305 "type": "string", 1843 - "const": "core:window:deny-set-focus" 2306 + "const": "core:window:deny-set-focus", 2307 + "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2308 + }, 2309 + { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 1844 2314 }, 1845 2315 { 1846 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 1847 2317 "type": "string", 1848 - "const": "core:window:deny-set-fullscreen" 2318 + "const": "core:window:deny-set-fullscreen", 2319 + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." 1849 2320 }, 1850 2321 { 1851 2322 "description": "Denies the set_icon command without any pre-configured scope.", 1852 2323 "type": "string", 1853 - "const": "core:window:deny-set-icon" 2324 + "const": "core:window:deny-set-icon", 2325 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1854 2326 }, 1855 2327 { 1856 2328 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 1857 2329 "type": "string", 1858 - "const": "core:window:deny-set-ignore-cursor-events" 2330 + "const": "core:window:deny-set-ignore-cursor-events", 2331 + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." 1859 2332 }, 1860 2333 { 1861 2334 "description": "Denies the set_max_size command without any pre-configured scope.", 1862 2335 "type": "string", 1863 - "const": "core:window:deny-set-max-size" 2336 + "const": "core:window:deny-set-max-size", 2337 + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." 1864 2338 }, 1865 2339 { 1866 2340 "description": "Denies the set_maximizable command without any pre-configured scope.", 1867 2341 "type": "string", 1868 - "const": "core:window:deny-set-maximizable" 2342 + "const": "core:window:deny-set-maximizable", 2343 + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." 1869 2344 }, 1870 2345 { 1871 2346 "description": "Denies the set_min_size command without any pre-configured scope.", 1872 2347 "type": "string", 1873 - "const": "core:window:deny-set-min-size" 2348 + "const": "core:window:deny-set-min-size", 2349 + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." 1874 2350 }, 1875 2351 { 1876 2352 "description": "Denies the set_minimizable command without any pre-configured scope.", 1877 2353 "type": "string", 1878 - "const": "core:window:deny-set-minimizable" 2354 + "const": "core:window:deny-set-minimizable", 2355 + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." 2356 + }, 2357 + { 2358 + "description": "Denies the set_overlay_icon command without any pre-configured scope.", 2359 + "type": "string", 2360 + "const": "core:window:deny-set-overlay-icon", 2361 + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." 1879 2362 }, 1880 2363 { 1881 2364 "description": "Denies the set_position command without any pre-configured scope.", 1882 2365 "type": "string", 1883 - "const": "core:window:deny-set-position" 2366 + "const": "core:window:deny-set-position", 2367 + "markdownDescription": "Denies the set_position command without any pre-configured scope." 1884 2368 }, 1885 2369 { 1886 2370 "description": "Denies the set_progress_bar command without any pre-configured scope.", 1887 2371 "type": "string", 1888 - "const": "core:window:deny-set-progress-bar" 2372 + "const": "core:window:deny-set-progress-bar", 2373 + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." 1889 2374 }, 1890 2375 { 1891 2376 "description": "Denies the set_resizable command without any pre-configured scope.", 1892 2377 "type": "string", 1893 - "const": "core:window:deny-set-resizable" 2378 + "const": "core:window:deny-set-resizable", 2379 + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." 1894 2380 }, 1895 2381 { 1896 2382 "description": "Denies the set_shadow command without any pre-configured scope.", 1897 2383 "type": "string", 1898 - "const": "core:window:deny-set-shadow" 2384 + "const": "core:window:deny-set-shadow", 2385 + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 1899 2392 }, 1900 2393 { 1901 2394 "description": "Denies the set_size command without any pre-configured scope.", 1902 2395 "type": "string", 1903 - "const": "core:window:deny-set-size" 2396 + "const": "core:window:deny-set-size", 2397 + "markdownDescription": "Denies the set_size command without any pre-configured scope." 1904 2398 }, 1905 2399 { 1906 2400 "description": "Denies the set_size_constraints command without any pre-configured scope.", 1907 2401 "type": "string", 1908 - "const": "core:window:deny-set-size-constraints" 2402 + "const": "core:window:deny-set-size-constraints", 2403 + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." 1909 2404 }, 1910 2405 { 1911 2406 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 1912 2407 "type": "string", 1913 - "const": "core:window:deny-set-skip-taskbar" 2408 + "const": "core:window:deny-set-skip-taskbar", 2409 + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." 1914 2410 }, 1915 2411 { 1916 2412 "description": "Denies the set_theme command without any pre-configured scope.", 1917 2413 "type": "string", 1918 - "const": "core:window:deny-set-theme" 2414 + "const": "core:window:deny-set-theme", 2415 + "markdownDescription": "Denies the set_theme command without any pre-configured scope." 1919 2416 }, 1920 2417 { 1921 2418 "description": "Denies the set_title command without any pre-configured scope.", 1922 2419 "type": "string", 1923 - "const": "core:window:deny-set-title" 2420 + "const": "core:window:deny-set-title", 2421 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 1924 2422 }, 1925 2423 { 1926 2424 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 1927 2425 "type": "string", 1928 - "const": "core:window:deny-set-title-bar-style" 2426 + "const": "core:window:deny-set-title-bar-style", 2427 + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." 1929 2428 }, 1930 2429 { 1931 2430 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 1932 2431 "type": "string", 1933 - "const": "core:window:deny-set-visible-on-all-workspaces" 2432 + "const": "core:window:deny-set-visible-on-all-workspaces", 2433 + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." 1934 2434 }, 1935 2435 { 1936 2436 "description": "Denies the show command without any pre-configured scope.", 1937 2437 "type": "string", 1938 - "const": "core:window:deny-show" 2438 + "const": "core:window:deny-show", 2439 + "markdownDescription": "Denies the show command without any pre-configured scope." 1939 2440 }, 1940 2441 { 1941 2442 "description": "Denies the start_dragging command without any pre-configured scope.", 1942 2443 "type": "string", 1943 - "const": "core:window:deny-start-dragging" 2444 + "const": "core:window:deny-start-dragging", 2445 + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." 1944 2446 }, 1945 2447 { 1946 2448 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 1947 2449 "type": "string", 1948 - "const": "core:window:deny-start-resize-dragging" 2450 + "const": "core:window:deny-start-resize-dragging", 2451 + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." 1949 2452 }, 1950 2453 { 1951 2454 "description": "Denies the theme command without any pre-configured scope.", 1952 2455 "type": "string", 1953 - "const": "core:window:deny-theme" 2456 + "const": "core:window:deny-theme", 2457 + "markdownDescription": "Denies the theme command without any pre-configured scope." 1954 2458 }, 1955 2459 { 1956 2460 "description": "Denies the title command without any pre-configured scope.", 1957 2461 "type": "string", 1958 - "const": "core:window:deny-title" 2462 + "const": "core:window:deny-title", 2463 + "markdownDescription": "Denies the title command without any pre-configured scope." 1959 2464 }, 1960 2465 { 1961 2466 "description": "Denies the toggle_maximize command without any pre-configured scope.", 1962 2467 "type": "string", 1963 - "const": "core:window:deny-toggle-maximize" 2468 + "const": "core:window:deny-toggle-maximize", 2469 + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." 1964 2470 }, 1965 2471 { 1966 2472 "description": "Denies the unmaximize command without any pre-configured scope.", 1967 2473 "type": "string", 1968 - "const": "core:window:deny-unmaximize" 2474 + "const": "core:window:deny-unmaximize", 2475 + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." 1969 2476 }, 1970 2477 { 1971 2478 "description": "Denies the unminimize command without any pre-configured scope.", 1972 2479 "type": "string", 1973 - "const": "core:window:deny-unminimize" 1974 - }, 1975 - { 1976 - "description": "Allows reading the opened deep link via the get_current command", 1977 - "type": "string", 1978 - "const": "deep-link:default" 1979 - }, 1980 - { 1981 - "description": "Enables the get_current command without any pre-configured scope.", 1982 - "type": "string", 1983 - "const": "deep-link:allow-get-current" 1984 - }, 1985 - { 1986 - "description": "Enables the is_registered command without any pre-configured scope.", 1987 - "type": "string", 1988 - "const": "deep-link:allow-is-registered" 1989 - }, 1990 - { 1991 - "description": "Enables the register command without any pre-configured scope.", 1992 - "type": "string", 1993 - "const": "deep-link:allow-register" 1994 - }, 1995 - { 1996 - "description": "Enables the unregister command without any pre-configured scope.", 1997 - "type": "string", 1998 - "const": "deep-link:allow-unregister" 1999 - }, 2000 - { 2001 - "description": "Denies the get_current command without any pre-configured scope.", 2002 - "type": "string", 2003 - "const": "deep-link:deny-get-current" 2004 - }, 2005 - { 2006 - "description": "Denies the is_registered command without any pre-configured scope.", 2007 - "type": "string", 2008 - "const": "deep-link:deny-is-registered" 2009 - }, 2010 - { 2011 - "description": "Denies the register command without any pre-configured scope.", 2012 - "type": "string", 2013 - "const": "deep-link:deny-register" 2014 - }, 2015 - { 2016 - "description": "Denies the unregister command without any pre-configured scope.", 2017 - "type": "string", 2018 - "const": "deep-link:deny-unregister" 2480 + "const": "core:window:deny-unminimize", 2481 + "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2019 2482 }, 2020 2483 { 2021 - "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", 2484 + "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-read-body`\n- `allow-fetch-send`", 2022 2485 "type": "string", 2023 - "const": "http:default" 2486 + "const": "http:default", 2487 + "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-read-body`\n- `allow-fetch-send`" 2024 2488 }, 2025 2489 { 2026 2490 "description": "Enables the fetch command without any pre-configured scope.", 2027 2491 "type": "string", 2028 - "const": "http:allow-fetch" 2492 + "const": "http:allow-fetch", 2493 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 2029 2494 }, 2030 2495 { 2031 2496 "description": "Enables the fetch_cancel command without any pre-configured scope.", 2032 2497 "type": "string", 2033 - "const": "http:allow-fetch-cancel" 2498 + "const": "http:allow-fetch-cancel", 2499 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 2034 2500 }, 2035 2501 { 2036 2502 "description": "Enables the fetch_read_body command without any pre-configured scope.", 2037 2503 "type": "string", 2038 - "const": "http:allow-fetch-read-body" 2504 + "const": "http:allow-fetch-read-body", 2505 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 2039 2506 }, 2040 2507 { 2041 2508 "description": "Enables the fetch_send command without any pre-configured scope.", 2042 2509 "type": "string", 2043 - "const": "http:allow-fetch-send" 2510 + "const": "http:allow-fetch-send", 2511 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 2044 2512 }, 2045 2513 { 2046 2514 "description": "Denies the fetch command without any pre-configured scope.", 2047 2515 "type": "string", 2048 - "const": "http:deny-fetch" 2516 + "const": "http:deny-fetch", 2517 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 2049 2518 }, 2050 2519 { 2051 2520 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2052 2521 "type": "string", 2053 - "const": "http:deny-fetch-cancel" 2522 + "const": "http:deny-fetch-cancel", 2523 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 2054 2524 }, 2055 2525 { 2056 2526 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2057 2527 "type": "string", 2058 - "const": "http:deny-fetch-read-body" 2528 + "const": "http:deny-fetch-read-body", 2529 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 2059 2530 }, 2060 2531 { 2061 2532 "description": "Denies the fetch_send command without any pre-configured scope.", 2062 2533 "type": "string", 2063 - "const": "http:deny-fetch-send" 2534 + "const": "http:deny-fetch-send", 2535 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 2064 2536 }, 2065 2537 { 2066 - "description": "This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n", 2538 + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", 2067 2539 "type": "string", 2068 - "const": "process:default" 2540 + "const": "process:default", 2541 + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" 2069 2542 }, 2070 2543 { 2071 2544 "description": "Enables the exit command without any pre-configured scope.", 2072 2545 "type": "string", 2073 - "const": "process:allow-exit" 2546 + "const": "process:allow-exit", 2547 + "markdownDescription": "Enables the exit command without any pre-configured scope." 2074 2548 }, 2075 2549 { 2076 2550 "description": "Enables the restart command without any pre-configured scope.", 2077 2551 "type": "string", 2078 - "const": "process:allow-restart" 2552 + "const": "process:allow-restart", 2553 + "markdownDescription": "Enables the restart command without any pre-configured scope." 2079 2554 }, 2080 2555 { 2081 2556 "description": "Denies the exit command without any pre-configured scope.", 2082 2557 "type": "string", 2083 - "const": "process:deny-exit" 2558 + "const": "process:deny-exit", 2559 + "markdownDescription": "Denies the exit command without any pre-configured scope." 2084 2560 }, 2085 2561 { 2086 2562 "description": "Denies the restart command without any pre-configured scope.", 2087 2563 "type": "string", 2088 - "const": "process:deny-restart" 2564 + "const": "process:deny-restart", 2565 + "markdownDescription": "Denies the restart command without any pre-configured scope." 2089 2566 }, 2090 2567 { 2091 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", 2568 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 2092 2569 "type": "string", 2093 - "const": "shell:default" 2570 + "const": "shell:default", 2571 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 2094 2572 }, 2095 2573 { 2096 2574 "description": "Enables the execute command without any pre-configured scope.", 2097 2575 "type": "string", 2098 - "const": "shell:allow-execute" 2576 + "const": "shell:allow-execute", 2577 + "markdownDescription": "Enables the execute command without any pre-configured scope." 2099 2578 }, 2100 2579 { 2101 2580 "description": "Enables the kill command without any pre-configured scope.", 2102 2581 "type": "string", 2103 - "const": "shell:allow-kill" 2582 + "const": "shell:allow-kill", 2583 + "markdownDescription": "Enables the kill command without any pre-configured scope." 2104 2584 }, 2105 2585 { 2106 2586 "description": "Enables the open command without any pre-configured scope.", 2107 2587 "type": "string", 2108 - "const": "shell:allow-open" 2588 + "const": "shell:allow-open", 2589 + "markdownDescription": "Enables the open command without any pre-configured scope." 2109 2590 }, 2110 2591 { 2111 2592 "description": "Enables the spawn command without any pre-configured scope.", 2112 2593 "type": "string", 2113 - "const": "shell:allow-spawn" 2594 + "const": "shell:allow-spawn", 2595 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 2114 2596 }, 2115 2597 { 2116 2598 "description": "Enables the stdin_write command without any pre-configured scope.", 2117 2599 "type": "string", 2118 - "const": "shell:allow-stdin-write" 2600 + "const": "shell:allow-stdin-write", 2601 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 2119 2602 }, 2120 2603 { 2121 2604 "description": "Denies the execute command without any pre-configured scope.", 2122 2605 "type": "string", 2123 - "const": "shell:deny-execute" 2606 + "const": "shell:deny-execute", 2607 + "markdownDescription": "Denies the execute command without any pre-configured scope." 2124 2608 }, 2125 2609 { 2126 2610 "description": "Denies the kill command without any pre-configured scope.", 2127 2611 "type": "string", 2128 - "const": "shell:deny-kill" 2612 + "const": "shell:deny-kill", 2613 + "markdownDescription": "Denies the kill command without any pre-configured scope." 2129 2614 }, 2130 2615 { 2131 2616 "description": "Denies the open command without any pre-configured scope.", 2132 2617 "type": "string", 2133 - "const": "shell:deny-open" 2618 + "const": "shell:deny-open", 2619 + "markdownDescription": "Denies the open command without any pre-configured scope." 2134 2620 }, 2135 2621 { 2136 2622 "description": "Denies the spawn command without any pre-configured scope.", 2137 2623 "type": "string", 2138 - "const": "shell:deny-spawn" 2624 + "const": "shell:deny-spawn", 2625 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 2139 2626 }, 2140 2627 { 2141 2628 "description": "Denies the stdin_write command without any pre-configured scope.", 2142 2629 "type": "string", 2143 - "const": "shell:deny-stdin-write" 2630 + "const": "shell:deny-stdin-write", 2631 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 2144 2632 } 2145 2633 ] 2146 2634 },
+17 -9
src-tauri/src/frontend_calls/change_final_path.rs
··· 1 1 use std::fs; 2 2 3 - #[tauri::command] 4 - pub fn change_final_path(new_path: &str) { 5 - let config_path = dirs::config_dir() 6 - .unwrap() 7 - .join("PhazeDev/VRChatPhotoManager/.photos_path"); 3 + use tauri::{Emitter, State, Window}; 8 4 9 - fs::write(&config_path, new_path.as_bytes()).unwrap(); 5 + use crate::util::cache::Cache; 10 6 7 + #[tauri::command] 8 + pub fn change_final_path(new_path: &str, window: Window, cache: State<Cache>) -> bool { 11 9 match fs::metadata(&new_path) { 12 - Ok(_) => {} 10 + Ok(_) => { 11 + let config_path = dirs::config_dir() 12 + .unwrap() 13 + .join("PhazeDev/VRChatPhotoManager/.photos_path"); 14 + 15 + fs::write(&config_path, new_path.as_bytes()).unwrap(); 16 + cache.insert("photo-path".into(), new_path.to_owned()); 17 + 18 + true 19 + } 13 20 Err(_) => { 14 - fs::create_dir(&new_path).unwrap(); 21 + window.emit("vrcpm-error", "Error Changing Path: Path does not exist.").unwrap(); 22 + false 15 23 } 16 - }; 24 + } 17 25 }
+9 -4
src-tauri/src/frontend_calls/close_splashscreen.rs
··· 1 1 use std::env; 2 - use tauri::Manager; 2 + use tauri::{ Emitter, Manager, State }; 3 + 4 + use crate::frontend_calls::config::Config; 3 5 4 6 use super::config::get_config_value_string; 5 7 6 8 #[tauri::command] 7 - pub fn close_splashscreen(window: tauri::Window) { 9 + pub fn close_splashscreen( window: tauri::Window, config: State<Config> ) { 8 10 let args: Vec<String> = env::args().collect(); 9 11 10 12 let mut show = true; ··· 14 16 } 15 17 } 16 18 17 - let value: String = match get_config_value_string("start-in-bg".to_owned()) { Some(val) => val, None => "false".to_owned() }; 19 + let value: String = match get_config_value_string("start-in-bg".to_owned(), config) { Some(val) => val, None => "false".to_owned() }; 18 20 if value == "true"{ 19 21 show = false; 20 22 } 21 23 22 24 if show { 23 - window.get_webview_window("main").unwrap().show().unwrap(); 25 + let webview = window.get_webview_window("main").unwrap(); 26 + 27 + webview.show().unwrap(); 28 + webview.emit("show-window", 0).unwrap(); 24 29 } 25 30 }
+43 -22
src-tauri/src/frontend_calls/config.rs
··· 1 - use std::{fs, path::PathBuf}; 1 + use std::{fs, path::PathBuf, sync::Mutex}; 2 2 3 3 use serde_json::Value; 4 + use tauri::State; 4 5 5 6 pub fn get_config_path() -> PathBuf { 6 7 let path = dirs::config_dir() ··· 17 18 path 18 19 } 19 20 20 - #[tauri::command] 21 - pub fn set_config_value_string(key: String, value: String) { 22 - let path = get_config_path(); 21 + pub struct Config{ 22 + config: Mutex<Value> 23 + } 24 + 25 + impl Config{ 26 + pub fn new() -> Config{ 27 + let path = get_config_path(); 28 + let config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 29 + 30 + Config { 31 + config: Mutex::new(config) 32 + } 33 + } 34 + 35 + pub fn set( &self, key: String, value: Value ){ 36 + let mut lock = self.config.lock().unwrap(); 37 + lock[key] = value; 38 + } 39 + 40 + pub fn get( &self, key: String ) -> Value{ 41 + let lock = self.config.lock().unwrap(); 42 + lock[key].clone() 43 + } 44 + 45 + pub fn save( &self ){ 46 + let path = get_config_path(); 47 + let string = serde_json::to_string(&self.config).unwrap(); 23 48 24 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 25 - config[key] = Value::from(value); 49 + fs::write(path, string).unwrap(); 50 + } 51 + } 26 52 27 - fs::write(path, config.to_string()).unwrap(); 53 + #[tauri::command] 54 + pub fn set_config_value_string( key: String, value: String, config: State<Config> ) { 55 + config.set(key, Value::from(value)); 28 56 } 29 57 30 58 #[tauri::command] 31 - pub fn get_config_value_string(key: String) -> Option<String> { 32 - let config: Value = 33 - serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap(); 34 - let string = config[key].as_str(); 59 + pub fn get_config_value_string( key: String, config: State<Config> ) -> Option<String> { 60 + let string = config.get(key); 61 + let string = string.as_str(); 35 62 36 63 if string.is_some() { 37 64 Some(string.unwrap().to_owned()) ··· 41 68 } 42 69 43 70 #[tauri::command] 44 - pub fn set_config_value_int(key: String, value: i64) { 45 - let path = get_config_path(); 46 - 47 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 48 - config[key] = Value::from(value); 49 - 50 - fs::write(path, config.to_string()).unwrap(); 71 + pub fn set_config_value_int( key: String, value: i64, config: State<Config> ) { 72 + config.set(key, Value::from(value)); 51 73 } 52 74 53 75 #[tauri::command] 54 - pub fn get_config_value_int(key: String) -> Option<i64> { 55 - let config: Value = 56 - serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap(); 57 - config[key].as_i64() 76 + pub fn get_config_value_int( key: String, config: State<Config> ) -> Option<i64> { 77 + let string = config.get(key); 78 + string.as_i64() 58 79 }
+25
src-tauri/src/frontend_calls/copy_image.rs
··· 1 + use std::{ borrow::Cow, sync::Mutex }; 2 + 3 + use arboard::{ Clipboard, ImageData }; 4 + use image::GenericImageView; 5 + use tauri::State; 6 + 7 + use crate::{ frontend_calls::get_user_photos_path::get_user_photos_path, util::cache::Cache }; 8 + 9 + #[tauri::command] 10 + pub fn copy_image( path: String, clipboard: State<Mutex<Clipboard>>, cache: State<Cache> ) { 11 + let path = format!("{}/{}", get_user_photos_path(cache), path); 12 + println!("Copying Image: {}", &path); 13 + 14 + let img = image::open(path).unwrap(); 15 + let size = img.dimensions(); 16 + 17 + let img_data = ImageData { 18 + width: size.0 as usize, 19 + height: size.1 as usize, 20 + bytes: Cow::from(img.into_rgba8().to_vec()) 21 + }; 22 + 23 + let mut lock = clipboard.lock().unwrap(); 24 + lock.set_image(img_data).unwrap(); 25 + }
+2 -16
src-tauri/src/frontend_calls/delete_photo.rs
··· 1 1 use tauri::State; 2 2 3 3 use crate::util::cache::Cache; 4 - use std::{ fs, thread, time::Duration }; 4 + use std::{ fs, thread }; 5 5 6 6 // Delete a photo when the users confirms the prompt in the ui 7 7 #[tauri::command] 8 - pub fn delete_photo(path: String, token: String, is_syncing: bool, cache: State<Cache>) { 8 + pub fn delete_photo(path: String, cache: State<Cache>) { 9 9 let photo_path = cache.get("photo-path".into()); 10 10 11 11 thread::spawn(move || { 12 12 let p = photo_path.unwrap() + "/" + &path; 13 13 fs::remove_file(p).unwrap(); 14 - 15 - let photo = path.split("/").last().unwrap(); 16 - 17 - if is_syncing { 18 - let client = reqwest::blocking::Client::new(); 19 - client 20 - .delete(format!( 21 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}&photo={}", 22 - token, photo 23 - )) 24 - .timeout(Duration::from_secs(120)) 25 - .send() 26 - .unwrap(); 27 - } 28 14 }); 29 15 }
+21 -3
src-tauri/src/frontend_calls/load_photo_meta.rs
··· 20 20 let mut buffer = Vec::new(); 21 21 22 22 let _out = file.read_to_end(&mut buffer); 23 - window 24 - .emit("photo_meta_loaded", PNGImage::new(buffer, photo)) 25 - .unwrap(); 23 + let png = PNGImage::new(buffer, photo.clone()); 24 + 25 + if png.is_err(){ 26 + println!("Failed to load: {} => {}", base_dir, png.unwrap_err()); 27 + 28 + window.emit("photo_meta_loaded", PNGImage { 29 + width: 1920, 30 + height: 1080, 31 + bit_depth: 0, 32 + colour_type: 0, 33 + compression_method: 0, 34 + filter_method: 0, 35 + interlace_method: 0, 36 + metadata: "".into(), 37 + error: true, 38 + path: photo 39 + }).unwrap(); 40 + } else{ 41 + println!("Loaded: {}", base_dir); 42 + window.emit("photo_meta_loaded", png.unwrap()).unwrap(); 43 + } 26 44 } 27 45 Err(_) => { 28 46 println!("Cannot read image file: {:?}", base_dir);
+14 -8
src-tauri/src/frontend_calls/load_photos.rs
··· 16 16 let base_dir = cache.get("photo-path".into()).unwrap(); 17 17 18 18 thread::spawn(move || { 19 - 20 19 let mut photos: Vec<path::PathBuf> = Vec::new(); 21 20 let mut size: usize = 0; 22 21 22 + let re = Regex::new(r"^[0-9]{4}-[0-9]{2}$").unwrap(); 23 + 23 24 for folder in fs::read_dir(&base_dir).unwrap() { 24 25 let f = folder.unwrap(); 26 + if !re.is_match(f.file_name().to_str().unwrap()){ continue; } 25 27 26 28 if f.metadata().unwrap().is_dir() { 27 29 for photo in fs::read_dir(f.path()).unwrap() { ··· 30 32 if p.metadata().unwrap().is_file() { 31 33 let fname = p.path(); 32 34 33 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 34 - let re2 = Regex::new( 35 - r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap(); 36 - let re3 = Regex::new("VRChat_[0-9]{4}x[0-9]{4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap(); 37 - 38 35 let name = p.file_name(); 39 36 let name = name.to_str().unwrap(); 40 37 41 - let re3_match = re3.is_match(name); 38 + let re1_match = // This is the current format used by VRChat 39 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(name) || 40 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(name) || 41 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(name); 42 + 43 + let re2_match = // This is the format VRCX uses if you enable renaming photos 44 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(name); 42 45 43 - if re1.is_match(name) || re2.is_match(name) || re3_match { 46 + let re3_match = // This is an old format VRChat used for naming photos 47 + Regex::new(r"(?m)VRChat_[0-9]{3,4}x[0-9]{3,4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap().is_match(name); 48 + 49 + if re1_match || re2_match || re3_match { 44 50 let path = fname.to_path_buf().clone(); 45 51 let metadata = fs::metadata(&path).unwrap(); 46 52
+1 -3
src-tauri/src/frontend_calls/mod.rs
··· 9 9 pub mod load_photos; 10 10 pub mod open_folder; 11 11 pub mod open_url; 12 - pub mod relaunch; 13 - pub mod start_user_auth; 14 12 pub mod start_with_win; 15 - pub mod sync_photos; 13 + pub mod copy_image;
+19 -4
src-tauri/src/frontend_calls/open_folder.rs
··· 7 7 8 8 #[cfg(target_os = "linux")] 9 9 { 10 - let url = url.replace("\\", "/"); 11 - let mut path: Vec<&str> = url.split("/").collect(); 10 + let path = url.replace("\\", "/"); 11 + 12 + let mut dir_path: Vec<_> = path.split("/").collect(); 13 + dir_path.pop(); 14 + let dir_path = dir_path.join("/"); 15 + 16 + let commands = vec![ 17 + ( "nautilus", vec![ path.clone() ] ), 18 + ( "nemo", vec![ path.clone() ] ), 19 + ( "thunar", vec![ path.clone() ] ), 20 + ( "caja", vec![ "--select".into(), path.clone() ] ), 21 + ( "pcmanfm-qt", vec![ dir_path.clone() ] ), 22 + ( "pcmanfm", vec![ dir_path.clone() ] ), 23 + ( "dolphin", vec![ "--select".into(), path.clone() ] ), 24 + ( "konqueror", vec![ "--select".into(), path.clone() ] ), 25 + ( "xdg-open", vec![ dir_path.clone() ] ) 26 + ]; 12 27 13 - path.pop(); 14 - Command::new("xdg-open").arg(path.join("/")).spawn().unwrap(); 28 + for command in commands{ 29 + if Command::new(command.0).args(command.1).spawn().is_ok() { break; } } 15 30 } 16 31 }
-17
src-tauri/src/frontend_calls/relaunch.rs
··· 1 - use std::process::{ self, Command }; 2 - 3 - #[tauri::command] 4 - pub fn relaunch() { 5 - #[cfg(windows)] 6 - { 7 - let container_folder = dirs::config_dir() 8 - .unwrap() 9 - .join("PhazeDev/VRChatPhotoManager"); 10 - 11 - let mut cmd = Command::new(&container_folder.join("./vrchat-photo-manager.exe")); 12 - cmd.current_dir(container_folder); 13 - cmd.spawn().expect("Cannot run updater"); 14 - 15 - process::exit(0); 16 - } 17 - }
-4
src-tauri/src/frontend_calls/start_user_auth.rs
··· 1 - #[tauri::command] 2 - pub fn start_user_auth() { 3 - open::that("https://photos.phazed.xyz/api/v1/auth").unwrap(); 4 - }
-11
src-tauri/src/frontend_calls/sync_photos.rs
··· 1 - use crate::photosync; 2 - use crate::util::get_photo_path::get_photo_path; 3 - use std::thread; 4 - 5 - // On requested sync the photos to the cloud 6 - #[tauri::command] 7 - pub fn sync_photos(token: String, window: tauri::Window) { 8 - thread::spawn(move || { 9 - photosync::sync_photos(token, get_photo_path(), window); 10 - }); 11 - }
+37 -31
src-tauri/src/main.rs
··· 1 1 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 2 3 3 mod frontend_calls; 4 - mod photosync; 5 4 mod pngmeta; 6 5 mod util; 7 6 mod worldscraper; 8 7 9 8 use core::time; 9 + use arboard::Clipboard; 10 10 use frontend_calls::*; 11 11 12 12 use notify::{ EventKind, RecursiveMode, Watcher }; 13 13 use pngmeta::PNGImage; 14 14 use regex::Regex; 15 15 use util::{ cache::Cache, get_photo_path::get_photo_path }; 16 - use std::{ env, fs, thread }; 16 + use std::{ env, fs, sync::Mutex, thread }; 17 17 use tauri::{ Emitter, Manager, State, WindowEvent }; 18 - use tauri_plugin_deep_link::DeepLinkExt; 19 18 20 - // TODO: Linux support 19 + use crate::frontend_calls::config::{get_config_value_string, Config}; 21 20 22 21 fn main() { 23 22 #[cfg(target_os = "linux")] 24 - std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkit being shit 23 + std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkitgtk being shit 25 24 26 25 let cache = Cache::new(); 27 26 ··· 78 77 79 78 println!("Loading App..."); 80 79 let photos_path = util::get_photo_path::get_photo_path(); 80 + println!("Loading photos from: {:#?}", &photos_path); 81 81 82 82 cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned()); 83 83 ··· 88 88 } 89 89 }; 90 90 91 - // Updater only supports windows, so don't update if on linux 92 - #[cfg(windows)] 93 - util::check_updates::check_updates(container_folder); 94 - 95 91 // Listen for file updates, store each update in an mpsc channel and send to the frontend 96 92 let (sender, receiver) = std::sync::mpsc::channel(); 97 93 let mut watcher = notify::recommended_watcher(move | res: Result<notify::Event, notify::Error> | { ··· 102 98 let path = event.paths.first().unwrap(); 103 99 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 104 100 105 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 106 - let re2 = Regex::new(r"(?m)/VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png/gm").unwrap(); 101 + let re1_match = // This is the current format used by VRChat 102 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) || 103 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) || 104 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name); 107 105 108 - if 109 - re1.is_match(&name) || 110 - re2.is_match(&name) 111 - { 106 + let re2_match = // This is the format VRCX uses if you enable renaming photos 107 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(&name); 108 + 109 + if re1_match || re2_match{ 112 110 sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 113 111 } 114 112 }, ··· 116 114 let path = event.paths.first().unwrap(); 117 115 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 118 116 119 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 120 - let re2 = Regex::new(r"(?m)/VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png/gm").unwrap(); 117 + let re1_match = // This is the current format used by VRChat 118 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) || 119 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) || 120 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name); 121 121 122 - if 123 - re1.is_match(&name) || 124 - re2.is_match(&name) 125 - { 122 + let re2_match = // This is the format VRCX uses if you enable renaming photos 123 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(&name); 124 + 125 + if re1_match || re2_match{ 126 126 thread::sleep(time::Duration::from_millis(1000)); 127 127 sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 128 128 } ··· 142 142 ) 143 143 .unwrap(); 144 144 145 + let clipboard = Clipboard::new().unwrap(); 146 + 145 147 tauri::Builder::default() 146 - .plugin(tauri_plugin_single_instance::init(| app, argv, _cwd | { 148 + .plugin(tauri_plugin_single_instance::init(| app, _argv, _cwd | { 147 149 app.get_webview_window("main").unwrap().show().unwrap(); 148 - util::handle_deeplink::handle_deeplink(argv[1].clone(), app); 149 150 })) 150 - .plugin(tauri_plugin_deep_link::init()) 151 151 .plugin(tauri_plugin_process::init()) 152 152 .plugin(tauri_plugin_http::init()) 153 153 .plugin(tauri_plugin_shell::init()) ··· 156 156 util::handle_uri_proto::handle_uri_proto(req, res, cache); 157 157 }) 158 158 .on_window_event(|window, event| match event { 159 - WindowEvent::CloseRequested { api, .. } => { 159 + WindowEvent::CloseRequested { api, .. } => { 160 + let config: State<Config> = window.state(); 161 + 162 + let val = get_config_value_string("close-to-tray".into(), config.clone()); 163 + if val.is_none() || val.unwrap() != "true"{ 164 + config.save(); 165 + return; 166 + } 167 + 160 168 window.hide().unwrap(); 161 169 api.prevent_close(); 162 170 } 163 171 _ => {} 164 172 }) 173 + .manage(Config::new()) 165 174 .manage(cache) 175 + .manage(Mutex::new(clipboard)) 166 176 .setup(|app| { 167 177 let handle = app.handle(); 168 - 169 - app.deep_link().register("vrcpm").unwrap(); 170 178 util::setup_traymenu::setup_traymenu(handle); 171 179 172 180 // reads the file update mpsc channel and sends the events to the frontend ··· 190 198 Ok(()) 191 199 }) 192 200 .invoke_handler(tauri::generate_handler![ 193 - start_user_auth::start_user_auth, 194 201 load_photos::load_photos, 195 202 close_splashscreen::close_splashscreen, 196 203 load_photo_meta::load_photo_meta, ··· 202 209 start_with_win::start_with_win, 203 210 get_user_photos_path::get_user_photos_path, 204 211 change_final_path::change_final_path, 205 - sync_photos::sync_photos, 206 212 util::get_version::get_version, 207 - relaunch::relaunch, 208 213 config::set_config_value_string, 209 214 config::get_config_value_string, 210 215 config::set_config_value_int, 211 216 config::get_config_value_int, 212 - get_os::get_os 217 + get_os::get_os, 218 + copy_image::copy_image 213 219 ]) 214 220 .run(tauri::generate_context!()) 215 221 .expect("error while running tauri application");
-261
src-tauri/src/photosync.rs
··· 1 - use regex::Regex; 2 - use reqwest; 3 - use serde::Serialize; 4 - use serde_json::{Error, Value}; 5 - use std::{fs, io::Write, path, time::Duration}; 6 - use tauri::Emitter; 7 - 8 - #[derive(Clone, Serialize)] 9 - struct PhotoUploadMeta { 10 - photos_uploading: usize, 11 - photos_total: usize, 12 - } 13 - 14 - pub fn sync_photos(token: String, path: path::PathBuf, window: tauri::Window) { 15 - let sync_lock_path = dirs::config_dir() 16 - .unwrap() 17 - .join("PhazeDev/VRChatPhotoManager/.sync_lock"); 18 - 19 - match fs::metadata(&sync_lock_path) { 20 - Ok(_) => { 21 - return; 22 - } 23 - Err(_) => {} 24 - } 25 - 26 - fs::write(&sync_lock_path, "Currently Syncing").unwrap(); 27 - 28 - match fs::metadata(&path) { 29 - Ok(_) => {} 30 - Err(_) => { 31 - fs::create_dir(&path).unwrap(); 32 - } 33 - }; 34 - 35 - let mut photos: Vec<String> = Vec::new(); 36 - 37 - for folder in fs::read_dir(&path).unwrap() { 38 - let f = folder.unwrap(); 39 - 40 - if f.metadata().unwrap().is_dir() { 41 - match fs::read_dir(f.path()) { 42 - Ok(dir) => { 43 - for photo in dir { 44 - let p = photo.unwrap(); 45 - 46 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 47 - let re2 = Regex::new( 48 - r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap(); 49 - 50 - if re1.is_match(p.file_name().to_str().unwrap()) 51 - || re2.is_match(p.file_name().to_str().unwrap()) 52 - { 53 - photos.push(p.file_name().into_string().unwrap()); 54 - } 55 - } 56 - } 57 - Err(_) => {} 58 - } 59 - } 60 - } 61 - 62 - let body = reqwest::blocking::get(format!( 63 - "https://photos-cdn.phazed.xyz/api/v1/photos/exists?token={}", 64 - &token 65 - )) 66 - .unwrap() 67 - .text() 68 - .unwrap(); 69 - 70 - let body: Value = serde_json::from_str(&body).unwrap(); 71 - 72 - let mut photos_to_upload: Vec<String> = Vec::new(); 73 - let uploaded_photos = body["files"].as_array().unwrap(); 74 - 75 - let photos_len = photos.len(); 76 - 77 - for photo in &photos { 78 - let mut found_photo = false; 79 - 80 - for uploaded_photo in uploaded_photos { 81 - if photo == uploaded_photo.as_str().unwrap() { 82 - found_photo = true; 83 - break; 84 - } 85 - } 86 - 87 - if !found_photo { 88 - photos_to_upload.push(photo.clone()); 89 - } 90 - } 91 - 92 - window 93 - .emit( 94 - "photos-upload-meta", 95 - PhotoUploadMeta { 96 - photos_uploading: photos_to_upload.len(), 97 - photos_total: photos_len, 98 - }, 99 - ) 100 - .unwrap(); 101 - 102 - let mut photos_left = photos_to_upload.len(); 103 - 104 - let client = reqwest::blocking::Client::new(); 105 - 106 - loop { 107 - match photos_to_upload.pop() { 108 - Some(photo) => { 109 - let folder_name = photo.clone().replace("VRChat_", ""); 110 - let mut folder_name = folder_name.split("-"); 111 - let folder_name = format!( 112 - "{}-{}", 113 - folder_name.nth(0).unwrap(), 114 - folder_name.nth(0).unwrap() 115 - ); 116 - 117 - let full_path = format!("{}\\{}\\{}", path.to_str().unwrap(), folder_name, photo); 118 - let file = fs::File::open(full_path); 119 - 120 - match file { 121 - Ok(file) => { 122 - let res = client 123 - .put(format!( 124 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}", 125 - &token 126 - )) 127 - .header("Content-Type", "image/png") 128 - .header("filename", photo) 129 - .body(file) 130 - .timeout(Duration::from_secs(120)) 131 - .send() 132 - .unwrap() 133 - .text() 134 - .unwrap(); 135 - 136 - let res: Result<Value, Error> = serde_json::from_str(&res); 137 - 138 - match res { 139 - Ok(res) => { 140 - if !res["ok"].as_bool().unwrap() { 141 - println!("Failed to upload: {}", res["error"].as_str().unwrap()); 142 - 143 - window 144 - .emit("sync-failed", res["error"].as_str().unwrap()) 145 - .unwrap(); 146 - 147 - break; 148 - } 149 - } 150 - Err(err) => { 151 - dbg!(err); 152 - } 153 - } 154 - } 155 - Err(_) => {} 156 - } 157 - 158 - photos_left -= 1; 159 - window 160 - .emit( 161 - "photos-upload-meta", 162 - PhotoUploadMeta { 163 - photos_uploading: photos_left, 164 - photos_total: photos_len, 165 - }, 166 - ) 167 - .unwrap(); 168 - } 169 - None => { 170 - break; 171 - } 172 - } 173 - } 174 - 175 - println!("Finished Uploading."); 176 - let mut photos_to_download: Vec<String> = Vec::new(); 177 - 178 - for photo in uploaded_photos { 179 - let mut found_photo = false; 180 - let photo = photo.as_str().unwrap().to_string(); 181 - 182 - for uploaded_photo in &photos { 183 - if &photo == uploaded_photo { 184 - found_photo = true; 185 - break; 186 - } 187 - } 188 - 189 - if !found_photo { 190 - photos_to_download.push(photo); 191 - } 192 - } 193 - 194 - photos_to_download.reverse(); 195 - 196 - let photos_len = photos_to_download.len(); 197 - let mut photos_left = photos_to_download.len(); 198 - 199 - loop { 200 - match photos_to_download.pop() { 201 - Some(photo) => { 202 - let folder_name = photo.clone().replace("VRChat_", ""); 203 - let mut folder_name = folder_name.split("-"); 204 - let folder_name = format!( 205 - "{}-{}", 206 - folder_name.nth(0).unwrap(), 207 - folder_name.nth(0).unwrap() 208 - ); 209 - 210 - let full_path = format!("{}/{}/{}", path.to_str().unwrap(), folder_name, photo); 211 - 212 - let res = client 213 - .get(format!( 214 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}&photo={}", 215 - &token, &photo 216 - )) 217 - .timeout(Duration::from_secs(120)) 218 - .send() 219 - .unwrap() 220 - .bytes(); 221 - 222 - match res { 223 - Ok(res) => { 224 - let folder_path = format!("{}/{}", path.to_str().unwrap(), folder_name); 225 - match fs::metadata(&folder_path) { 226 - Ok(_) => {} 227 - Err(_) => { 228 - fs::create_dir(folder_path).unwrap(); 229 - } 230 - } 231 - 232 - let mut file = fs::File::create(full_path).unwrap(); 233 - file.write_all(&res).unwrap(); 234 - } 235 - Err(err) => { 236 - dbg!(err); 237 - } 238 - } 239 - 240 - photos_left -= 1; 241 - window 242 - .emit( 243 - "photos-download-meta", 244 - PhotoUploadMeta { 245 - photos_uploading: photos_left, 246 - photos_total: photos_len, 247 - }, 248 - ) 249 - .unwrap(); 250 - } 251 - None => { 252 - break; 253 - } 254 - } 255 - } 256 - 257 - println!("Finished Downloading."); 258 - 259 - fs::remove_file(&sync_lock_path).unwrap(); 260 - window.emit("sync-finished", "h").unwrap(); 261 - }
+17 -33
src-tauri/src/pngmeta.rs
··· 1 - use serde::ser::{Serialize, SerializeStruct, Serializer}; 2 1 use std::str; 3 2 4 - #[derive(Clone)] 3 + use serde::Serialize; 4 + 5 + #[derive(Clone, Debug, Serialize)] 5 6 pub struct PNGImage { 6 - width: u32, 7 - height: u32, 8 - bit_depth: u8, 9 - colour_type: u8, 10 - compression_method: u8, 11 - filter_method: u8, 12 - interlace_method: u8, 13 - metadata: String, 14 - path: String, 7 + pub width: u32, 8 + pub height: u32, 9 + pub bit_depth: u8, 10 + pub colour_type: u8, 11 + pub compression_method: u8, 12 + pub filter_method: u8, 13 + pub interlace_method: u8, 14 + pub metadata: String, 15 + pub path: String, 16 + pub error: bool 15 17 } 16 18 17 19 impl PNGImage { 18 - pub fn new(buff: Vec<u8>, path: String) -> PNGImage { 20 + pub fn new(buff: Vec<u8>, path: String) -> Result<PNGImage, &'static str> { 19 21 if buff[0] != 0x89 20 22 || buff[1] != 0x50 21 23 || buff[2] != 0x4E ··· 26 28 || buff[7] != 0x0A 27 29 { 28 30 dbg!(path); 29 - panic!("Image is not a PNG file"); 31 + return Err("Image is not a PNG file"); 30 32 } 31 33 32 34 let mut img = PNGImage { ··· 39 41 interlace_method: 0, 40 42 metadata: "".to_string(), 41 43 path: path, 44 + error: false 42 45 }; 43 46 44 47 img.read_png_chunk(8, buff); 45 - img 48 + Ok(img) 46 49 } 47 50 48 51 fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) { ··· 82 85 } 83 86 } 84 87 } 85 - 86 - impl Serialize for PNGImage { 87 - fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 88 - where 89 - S: Serializer, 90 - { 91 - let mut s = serializer.serialize_struct("PNGImage", 7)?; 92 - s.serialize_field("width", &self.width)?; 93 - s.serialize_field("height", &self.height)?; 94 - s.serialize_field("bit_depth", &self.bit_depth)?; 95 - s.serialize_field("colour_type", &self.colour_type)?; 96 - s.serialize_field("compression_method", &self.compression_method)?; 97 - s.serialize_field("filter_method", &self.filter_method)?; 98 - s.serialize_field("interlace_method", &self.interlace_method)?; 99 - s.serialize_field("metadata", &self.metadata)?; 100 - s.serialize_field("path", &self.path)?; 101 - s.end() 102 - } 103 - }
+1 -1
src-tauri/src/util/cache.rs
··· 1 - use std::{collections::HashMap, sync::Mutex}; 1 + use std::{ collections::HashMap, sync::Mutex }; 2 2 3 3 pub struct Cache{ 4 4 store: Mutex<HashMap<String, String>>,
-55
src-tauri/src/util/check_updates.rs
··· 1 - use crate::util; 2 - use std::{ 3 - env, fs, path, 4 - process::{ self, Command }, 5 - thread, 6 - time::Duration, 7 - }; 8 - 9 - pub fn check_updates(container_folder: path::PathBuf) { 10 - let args: Vec<String> = env::args().collect(); 11 - 12 - let mut update = true; 13 - for arg in args { 14 - if arg == "--no-update" { 15 - update = false; 16 - } 17 - } 18 - 19 - if update { 20 - // Auto update 21 - thread::spawn(move || { 22 - let client = reqwest::blocking::Client::new(); 23 - 24 - let latest_version = client 25 - .get("https://cdn.phaz.uk/vrcpm/latest") 26 - .send() 27 - .unwrap() 28 - .text() 29 - .unwrap(); 30 - 31 - if latest_version != util::get_version::get_version() { 32 - match fs::metadata(&container_folder.join("./updater.exe")) { 33 - Ok(_) => {} 34 - Err(_) => { 35 - let latest_installer = client 36 - .get("https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe") 37 - .timeout(Duration::from_secs(120)) 38 - .send() 39 - .unwrap() 40 - .bytes() 41 - .unwrap(); 42 - 43 - fs::write(&container_folder.join("./updater.exe"), latest_installer).unwrap(); 44 - } 45 - } 46 - 47 - let mut cmd = Command::new(&container_folder.join("./updater.exe")); 48 - cmd.current_dir(container_folder); 49 - cmd.spawn().expect("Cannot run updater"); 50 - 51 - process::exit(0); 52 - } 53 - }); 54 - } 55 - }
+7 -1
src-tauri/src/util/get_photo_path.rs
··· 7 7 8 8 match fs::read_to_string(config_path) { 9 9 Ok(path) => { 10 - path::PathBuf::from(path) 10 + let p = path::PathBuf::from(path); 11 + 12 + if fs::exists(&p).unwrap(){ 13 + p 14 + } else{ 15 + dirs::picture_dir().unwrap().join("VRChat") 16 + } 11 17 }, 12 18 Err(_) => { 13 19 let p = dirs::picture_dir().unwrap().join("VRChat");
-22
src-tauri/src/util/handle_deeplink.rs
··· 1 - use tauri::{ AppHandle, Emitter }; 2 - 3 - pub fn handle_deeplink( url: String, handle: &AppHandle ) { 4 - let mut command: u8 = 0; 5 - let mut index: u8 = 0; 6 - 7 - for part in url.split('/').into_iter() { 8 - index += 1; 9 - 10 - if index == 3 && part == "auth-callback" { 11 - command = 1; 12 - } 13 - 14 - if index == 3 && part == "auth-denied" { 15 - handle.emit("auth-denied", "null").unwrap(); 16 - } 17 - 18 - if index == 4 && command == 1 { 19 - handle.emit("auth-callback", part).unwrap(); 20 - } 21 - } 22 - }
-6
src-tauri/src/util/handle_uri_proto.rs
··· 33 33 return; 34 34 } 35 35 36 - // TODO: Only accept files that are in the vrchat photos folder 37 - // Slightly more complex than originally thought, need to find a way to cache the VRC photos path 38 - // since i need to be able to load lots of photos very quickly. This shouldn't be a security issue 39 - // because tauri should only let the frontend of VRCPhotoManager read files throught this. Only 40 - // becomes a potential issue if the frontend gets modified or there's an issue with tauri. 41 - 42 36 #[cfg(windows)] 43 37 let path = uri.path().split_at(1).1; 44 38
-2
src-tauri/src/util/mod.rs
··· 1 - pub mod check_updates; 2 1 pub mod get_photo_path; 3 2 pub mod get_version; 4 3 pub mod handle_uri_proto; 5 - pub mod handle_deeplink; 6 4 pub mod setup_traymenu; 7 5 pub mod cache;
+8 -1
src-tauri/src/util/setup_traymenu.rs
··· 1 1 use tauri::{ 2 2 menu::{MenuBuilder, MenuItemBuilder}, 3 3 tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, 4 - AppHandle, Emitter, Manager, 4 + AppHandle, Emitter, Manager, State, 5 5 }; 6 + 7 + use crate::frontend_calls::config::Config; 6 8 7 9 #[derive(serde::Serialize, Clone)] 8 10 struct EmptyEvent {} ··· 27 29 TrayIconBuilder::with_id("main") 28 30 .icon(tauri::image::Image::from_bytes(include_bytes!("../../icons/32x32.png")).unwrap()) 29 31 .menu(&tray_menu) 32 + .title("VRChat Photo Manager") 33 + .tooltip("VRChat Photo Manager") 30 34 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 31 35 "quit" => { 36 + let config: State<Config> = app.state(); 37 + config.save(); 38 + 32 39 std::process::exit(0); 33 40 } 34 41 "hide" => {
+7 -6
src-tauri/tauri.conf.json
··· 15 15 "icons/icon.ico" 16 16 ] 17 17 }, 18 - "productName": "vrchat-photo-manager", 18 + "productName": "VRChat Photo Manager", 19 19 "version": "0.0.1", 20 20 "identifier": "uk.phaz.vrcpm", 21 - "plugins": {}, 21 + "plugins": { 22 + "shell": { "open": true } 23 + }, 22 24 "app": { 23 25 "security": { 24 - "csp": "https://photos.phazed.xyz; connect-src ipc: http://ipc.localhost" 26 + "csp": "connect-src https://api.github.com ipc: http://ipc.localhost" 25 27 }, 26 28 "windows": [ 27 29 { ··· 33 35 "minWidth": 600, 34 36 "minHeight": 400, 35 37 "visible": false, 36 - "decorations": false, 37 - "transparent": true, 38 - "titleBarStyle": "Transparent" 38 + "decorations": true, 39 + "transparent": true 39 40 } 40 41 ] 41 42 }
+1 -1
vite.config.ts
··· 11 11 12 12 // https://vitejs.dev/config/ 13 13 export default defineConfig(async () => ({ 14 - plugins: [solid(),], //fullReloadAlways], 14 + plugins: [solid(), fullReloadAlways], 15 15 16 16 // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 17 17 //