A photo manager for VRChat.

Compare changes

Choose any two refs to compare.

+2 -1
.gitignore
··· 1 node_modules 2 - dist
··· 1 node_modules 2 + dist 3 + builds/
+13 -13
README.md
··· 1 # VRChat Photo Manager (BETA) 2 3 - Install [here](https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe) (Windows) 4 5 - Install [COMING SOON](about:blank) (Linux) 6 - 7 - This is the rust rewrite. 8 9 ## Feedback / Bug Reports 10 ··· 12 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 14 15 - You can download the debug EXEs using this url format: 16 - https://cdn.phaz.uk/vrcpm/builds/debug/vrcpm-[YOUR-APP-VERSION]-debug.exe 17 18 You can find your app version under appllication settings. 19 - 20 - (Please note that there are not debug releases for versions: 0.1.0, 0.1.1, 0.1.2, 0.1.3) 21 22 ## A photo manager for VRChat. 23 24 - ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/c573e27f-52e6-4608-a8ea-a8a83336fbb9) 25 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 29 - - Searching for photos taken in specific worlds / with specific users ![image](https://github.com/user-attachments/assets/ea67c4ef-c7e8-4f93-a29a-74aff5f35903)
··· 1 # VRChat Photo Manager (BETA) 2 3 + Windows users: Download the setup.exe file [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest) 4 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 8 9 ## Feedback / Bug Reports 10 ··· 12 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 14 15 + You can download the debug EXEs [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases) 16 17 You can find your app version under appllication settings. 18 19 ## A photo manager for VRChat. 20 21 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/bc702ee6-8891-463d-a987-c2db1dc24678" /> 22 + 23 + Files with VRCX metadata + Fetches world information from VRChat: 24 + 25 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/aae88c53-aab6-4520-bb89-d6f2bca1c51a" /> 26 + 27 + Searching for photos taken in specific worlds / with specific users: 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 v0.2.4: 79 - Refactor loading system to not load all photos at the start 80 (should help with large numbers of photos) 81 - - Update UI to work on linux 82 - Opening files on linux now works 83 - - Fixed not rendering properly on linux 84 - Switch world data api to vrchat 85 - Photos are in the correct order on linux now 86 87 Dev Stuff: 88 - - Implemented a view transition handler, should help with transitions when the app is scaled
··· 78 v0.2.4: 79 - Refactor loading system to not load all photos at the start 80 (should help with large numbers of photos) 81 + - Update UI to work on webkitgtk 82 - Opening files on linux now works 83 + - Fixed not rendering properly when using webkitgtk 84 - Switch world data api to vrchat 85 + - Fixed icons being MASSIVE when using webkitgtk 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 90 91 Dev Stuff: 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 }, 13 "license": "MIT", 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" 23 }, 24 "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" 29 } 30 }
··· 12 }, 13 "license": "MIT", 14 "dependencies": { 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" 22 }, 23 "devDependencies": { 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 } 30 }
+562 -464
pnpm-lock.yaml
··· 9 .: 10 dependencies: 11 '@tauri-apps/api': 12 - specifier: 2.0.0-rc.0 13 - version: 2.0.0-rc.0 14 '@tauri-apps/plugin-deep-link': 15 - specifier: ^2.4.1 16 - version: 2.4.1 17 '@tauri-apps/plugin-http': 18 - specifier: 2.0.0-rc.1 19 - version: 2.0.0-rc.1 20 '@tauri-apps/plugin-process': 21 - specifier: 2.0.0-rc.0 22 - version: 2.0.0-rc.0 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 29 animejs: 30 - specifier: ^3.2.2 31 - version: 3.2.2 32 solid-js: 33 - specifier: ^1.9.7 34 - version: 1.9.7 35 devDependencies: 36 '@tauri-apps/cli': 37 - specifier: 2.0.0-rc.5 38 - version: 2.0.0-rc.5 39 typescript: 40 - specifier: ^5.8.3 41 - version: 5.8.3 42 vite: 43 - specifier: ^5.4.19 44 - version: 5.4.19 45 vite-plugin-solid: 46 - specifier: ^2.11.8 47 - version: 2.11.8(solid-js@1.9.7)(vite@5.4.19) 48 49 packages: 50 51 - '@ampproject/remapping@2.3.0': 52 - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 53 - engines: {node: '>=6.0.0'} 54 - 55 '@babel/code-frame@7.27.1': 56 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 57 engines: {node: '>=6.9.0'} 58 59 - '@babel/compat-data@7.28.0': 60 - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} 61 engines: {node: '>=6.9.0'} 62 63 - '@babel/core@7.28.0': 64 - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} 65 engines: {node: '>=6.9.0'} 66 67 - '@babel/generator@7.28.0': 68 - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} 69 engines: {node: '>=6.9.0'} 70 71 '@babel/helper-compilation-targets@7.27.2': ··· 84 resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 85 engines: {node: '>=6.9.0'} 86 87 - '@babel/helper-module-transforms@7.27.3': 88 - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} 89 engines: {node: '>=6.9.0'} 90 peerDependencies: 91 '@babel/core': ^7.0.0 ··· 98 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 99 engines: {node: '>=6.9.0'} 100 101 - '@babel/helper-validator-identifier@7.27.1': 102 - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 103 engines: {node: '>=6.9.0'} 104 105 '@babel/helper-validator-option@7.27.1': 106 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 107 engines: {node: '>=6.9.0'} 108 109 - '@babel/helpers@7.28.2': 110 - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} 111 engines: {node: '>=6.9.0'} 112 113 - '@babel/parser@7.28.0': 114 - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} 115 engines: {node: '>=6.0.0'} 116 hasBin: true 117 ··· 125 resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 126 engines: {node: '>=6.9.0'} 127 128 - '@babel/traverse@7.28.0': 129 - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} 130 engines: {node: '>=6.9.0'} 131 132 - '@babel/types@7.28.2': 133 - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 134 engines: {node: '>=6.9.0'} 135 136 - '@esbuild/aix-ppc64@0.21.5': 137 - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 138 - engines: {node: '>=12'} 139 cpu: [ppc64] 140 os: [aix] 141 142 - '@esbuild/android-arm64@0.21.5': 143 - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 144 - engines: {node: '>=12'} 145 cpu: [arm64] 146 os: [android] 147 148 - '@esbuild/android-arm@0.21.5': 149 - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 150 - engines: {node: '>=12'} 151 cpu: [arm] 152 os: [android] 153 154 - '@esbuild/android-x64@0.21.5': 155 - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 156 - engines: {node: '>=12'} 157 cpu: [x64] 158 os: [android] 159 160 - '@esbuild/darwin-arm64@0.21.5': 161 - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 162 - engines: {node: '>=12'} 163 cpu: [arm64] 164 os: [darwin] 165 166 - '@esbuild/darwin-x64@0.21.5': 167 - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 168 - engines: {node: '>=12'} 169 cpu: [x64] 170 os: [darwin] 171 172 - '@esbuild/freebsd-arm64@0.21.5': 173 - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 174 - engines: {node: '>=12'} 175 cpu: [arm64] 176 os: [freebsd] 177 178 - '@esbuild/freebsd-x64@0.21.5': 179 - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 180 - engines: {node: '>=12'} 181 cpu: [x64] 182 os: [freebsd] 183 184 - '@esbuild/linux-arm64@0.21.5': 185 - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 186 - engines: {node: '>=12'} 187 cpu: [arm64] 188 os: [linux] 189 190 - '@esbuild/linux-arm@0.21.5': 191 - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 192 - engines: {node: '>=12'} 193 cpu: [arm] 194 os: [linux] 195 196 - '@esbuild/linux-ia32@0.21.5': 197 - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 198 - engines: {node: '>=12'} 199 cpu: [ia32] 200 os: [linux] 201 202 - '@esbuild/linux-loong64@0.21.5': 203 - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 204 - engines: {node: '>=12'} 205 cpu: [loong64] 206 os: [linux] 207 208 - '@esbuild/linux-mips64el@0.21.5': 209 - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 210 - engines: {node: '>=12'} 211 cpu: [mips64el] 212 os: [linux] 213 214 - '@esbuild/linux-ppc64@0.21.5': 215 - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 216 - engines: {node: '>=12'} 217 cpu: [ppc64] 218 os: [linux] 219 220 - '@esbuild/linux-riscv64@0.21.5': 221 - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 222 - engines: {node: '>=12'} 223 cpu: [riscv64] 224 os: [linux] 225 226 - '@esbuild/linux-s390x@0.21.5': 227 - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 228 - engines: {node: '>=12'} 229 cpu: [s390x] 230 os: [linux] 231 232 - '@esbuild/linux-x64@0.21.5': 233 - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 234 - engines: {node: '>=12'} 235 cpu: [x64] 236 os: [linux] 237 238 - '@esbuild/netbsd-x64@0.21.5': 239 - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 240 - engines: {node: '>=12'} 241 cpu: [x64] 242 os: [netbsd] 243 244 - '@esbuild/openbsd-x64@0.21.5': 245 - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 246 - engines: {node: '>=12'} 247 cpu: [x64] 248 os: [openbsd] 249 250 - '@esbuild/sunos-x64@0.21.5': 251 - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 252 - engines: {node: '>=12'} 253 cpu: [x64] 254 os: [sunos] 255 256 - '@esbuild/win32-arm64@0.21.5': 257 - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 258 - engines: {node: '>=12'} 259 cpu: [arm64] 260 os: [win32] 261 262 - '@esbuild/win32-ia32@0.21.5': 263 - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 264 - engines: {node: '>=12'} 265 cpu: [ia32] 266 os: [win32] 267 268 - '@esbuild/win32-x64@0.21.5': 269 - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 270 - engines: {node: '>=12'} 271 cpu: [x64] 272 os: [win32] 273 274 - '@jridgewell/gen-mapping@0.3.12': 275 - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} 276 277 '@jridgewell/resolve-uri@3.1.2': 278 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 279 engines: {node: '>=6.0.0'} 280 281 - '@jridgewell/sourcemap-codec@1.5.4': 282 - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} 283 284 - '@jridgewell/trace-mapping@0.3.29': 285 - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} 286 287 - '@rollup/rollup-android-arm-eabi@4.46.2': 288 - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} 289 cpu: [arm] 290 os: [android] 291 292 - '@rollup/rollup-android-arm64@4.46.2': 293 - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} 294 cpu: [arm64] 295 os: [android] 296 297 - '@rollup/rollup-darwin-arm64@4.46.2': 298 - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} 299 cpu: [arm64] 300 os: [darwin] 301 302 - '@rollup/rollup-darwin-x64@4.46.2': 303 - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} 304 cpu: [x64] 305 os: [darwin] 306 307 - '@rollup/rollup-freebsd-arm64@4.46.2': 308 - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} 309 cpu: [arm64] 310 os: [freebsd] 311 312 - '@rollup/rollup-freebsd-x64@4.46.2': 313 - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} 314 cpu: [x64] 315 os: [freebsd] 316 317 - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': 318 - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} 319 cpu: [arm] 320 os: [linux] 321 322 - '@rollup/rollup-linux-arm-musleabihf@4.46.2': 323 - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} 324 cpu: [arm] 325 os: [linux] 326 327 - '@rollup/rollup-linux-arm64-gnu@4.46.2': 328 - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} 329 cpu: [arm64] 330 os: [linux] 331 332 - '@rollup/rollup-linux-arm64-musl@4.46.2': 333 - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} 334 cpu: [arm64] 335 os: [linux] 336 337 - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': 338 - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} 339 cpu: [loong64] 340 os: [linux] 341 342 - '@rollup/rollup-linux-ppc64-gnu@4.46.2': 343 - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} 344 cpu: [ppc64] 345 os: [linux] 346 347 - '@rollup/rollup-linux-riscv64-gnu@4.46.2': 348 - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} 349 cpu: [riscv64] 350 os: [linux] 351 352 - '@rollup/rollup-linux-riscv64-musl@4.46.2': 353 - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} 354 cpu: [riscv64] 355 os: [linux] 356 357 - '@rollup/rollup-linux-s390x-gnu@4.46.2': 358 - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} 359 cpu: [s390x] 360 os: [linux] 361 362 - '@rollup/rollup-linux-x64-gnu@4.46.2': 363 - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} 364 cpu: [x64] 365 os: [linux] 366 367 - '@rollup/rollup-linux-x64-musl@4.46.2': 368 - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} 369 cpu: [x64] 370 os: [linux] 371 372 - '@rollup/rollup-win32-arm64-msvc@4.46.2': 373 - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} 374 cpu: [arm64] 375 os: [win32] 376 377 - '@rollup/rollup-win32-ia32-msvc@4.46.2': 378 - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} 379 cpu: [ia32] 380 os: [win32] 381 382 - '@rollup/rollup-win32-x64-msvc@4.46.2': 383 - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} 384 cpu: [x64] 385 os: [win32] 386 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'} 390 391 - '@tauri-apps/api@2.7.0': 392 - resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==} 393 394 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 395 - resolution: {integrity: sha512-EoduJ5SeMfBKCe7I291JBH+lkrf2E0+mQF1rP+Jq4CjWPer11OeEcUSFtHURB3Z3ItzObQ7ALPulMGhMe6E9rg==} 396 engines: {node: '>= 10'} 397 cpu: [arm64] 398 os: [darwin] 399 400 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 401 - resolution: {integrity: sha512-GdphvNgQWAbVGoD6e2Z5auWFXBcmmbhiwf9UNoKpBQPLfFO6EEJHjXbACr/hAZsqT0nNpZLRoh/5v5HGTmU0XQ==} 402 engines: {node: '>= 10'} 403 cpu: [x64] 404 os: [darwin] 405 406 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 407 - resolution: {integrity: sha512-S47KwAfyRsO2qTqSoadHP4a1cjO9kfQi4QWkoaDjb0BEETdrhPM94qp43cnKP7QWW+msOToMTdlks9HYlhRUww==} 408 engines: {node: '>= 10'} 409 cpu: [arm] 410 os: [linux] 411 412 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 413 - resolution: {integrity: sha512-Ii9aP/24Rtlci5MaeSaqb6JOLt3cUBA4z4XmGz5VOLLZ+ntRxpfd3xNpLki04V2MOgbAu9BxLAp5UTzELc1/Rg==} 414 engines: {node: '>= 10'} 415 cpu: [arm64] 416 os: [linux] 417 418 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 419 - resolution: {integrity: sha512-noV2sDusI+DsEHl0uMOZ04sQmj65Jo9yjfSg2iv1fnfjBYVbwi6Qj/MaCqyApXESQrpv1XZB3kYI+CkyPnjj2Q==} 420 engines: {node: '>= 10'} 421 cpu: [arm64] 422 os: [linux] 423 424 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 425 - resolution: {integrity: sha512-iTe9gKO+qgFRjU1sxBvbI8bIRbkOedWvFm/yh8RFi1iJcFwbVnsHWQ8z7BwoNMJLnL2dseZgrGntmS5n9/xSSQ==} 426 engines: {node: '>= 10'} 427 cpu: [x64] 428 os: [linux] 429 430 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 431 - resolution: {integrity: sha512-R7EyfvfdMtRAKC3QxPn5jVGEH56R4g6hSnR5xXkFnEpioND7SNru5UMBGgseGJ22h/hdjFfqS2vc19291gkVsg==} 432 engines: {node: '>= 10'} 433 cpu: [x64] 434 os: [linux] 435 436 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 437 - resolution: {integrity: sha512-EE7CF//hMWsVZpu9IWXGLDDdMhAiNfHwfLnW4Na1INHKBBb/ynhOd4gKRC3Mi/kgcMfXJAq0nBJFw1mal1q7jg==} 438 engines: {node: '>= 10'} 439 cpu: [arm64] 440 os: [win32] 441 442 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 443 - resolution: {integrity: sha512-zJosPEw1X1H9nTNsrYVSypRLdMLOiLAY8hlBrgsmw7dmN61lOMLyItWsbiAezYeKIpaFeADurR+5qMHHwzbqeg==} 444 engines: {node: '>= 10'} 445 cpu: [ia32] 446 os: [win32] 447 448 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 449 - resolution: {integrity: sha512-PqxbL/e6GraazdwEKN1oX33gYCRf0ns6yuaxHafHM5+Zsv0MZpyPTPLDot/JLKvNBefk6QXZn5fKAIETVtQaGg==} 450 engines: {node: '>= 10'} 451 cpu: [x64] 452 os: [win32] 453 454 - '@tauri-apps/cli@2.0.0-rc.5': 455 - resolution: {integrity: sha512-JtFfJg8ZNOrj+S+8RKpcrNIcU5hw0X8JSNs2tUjQq0OZgqIGnRSILYjg7BaZDPEakQXUKsDEufbjbYVNJDIp8g==} 456 engines: {node: '>= 10'} 457 hasBin: true 458 459 - '@tauri-apps/plugin-deep-link@2.4.1': 460 - resolution: {integrity: sha512-I8Bo+spcAKGhIIJ1qN/gapp/Ot3mosQL98znxr975Zn2ODAkUZ++BQ9FnTpR7PDwfIl5ANSGdIW/YU01zVTcJw==} 461 462 - '@tauri-apps/plugin-http@2.0.0-rc.1': 463 - resolution: {integrity: sha512-j4WdTEKx0CFa6u8ubke0mo75pCrnu6XtrFtvjsh+zjuNYgMG/l0+A1woWXHm73f2Levskhs+KbKcLQA/nr8k2w==} 464 465 - '@tauri-apps/plugin-process@2.0.0-rc.0': 466 - resolution: {integrity: sha512-Z12D/kmQzG1vCVf+jLXPhPDUA0pEjFrsg4p0uwO2sotVLM9287IuTM+aIz9cuAYOxFLKcsnDG7amSCL9IfA1gw==} 467 468 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 469 - resolution: {integrity: sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==} 470 471 '@types/animejs@3.1.13': 472 resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==} ··· 480 '@types/babel__template@7.4.4': 481 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 482 483 - '@types/babel__traverse@7.20.7': 484 - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} 485 486 '@types/estree@1.0.8': 487 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 488 489 - animejs@3.2.2: 490 - resolution: {integrity: sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ==} 491 492 - babel-plugin-jsx-dom-expressions@0.39.8: 493 - resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} 494 peerDependencies: 495 '@babel/core': ^7.20.12 496 497 - babel-preset-solid@1.9.6: 498 - resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} 499 peerDependencies: 500 '@babel/core': ^7.0.0 501 502 - browserslist@4.25.1: 503 - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} 504 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 505 hasBin: true 506 507 - caniuse-lite@1.0.30001731: 508 - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} 509 510 convert-source-map@2.0.0: 511 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} ··· 513 csstype@3.1.3: 514 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 515 516 - debug@4.4.1: 517 - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 518 engines: {node: '>=6.0'} 519 peerDependencies: 520 supports-color: '*' ··· 522 supports-color: 523 optional: true 524 525 - electron-to-chromium@1.5.193: 526 - resolution: {integrity: sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA==} 527 528 entities@6.0.1: 529 resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 530 engines: {node: '>=0.12'} 531 532 - esbuild@0.21.5: 533 - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 534 - engines: {node: '>=12'} 535 hasBin: true 536 537 escalade@3.2.0: 538 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 539 engines: {node: '>=6'} 540 541 fsevents@2.3.3: 542 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} ··· 582 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 583 hasBin: true 584 585 - node-releases@2.0.19: 586 - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 587 588 parse5@7.3.0: 589 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} ··· 591 picocolors@1.1.1: 592 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 593 594 postcss@8.5.6: 595 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 596 engines: {node: ^10 || ^12 || >=14} 597 598 - rollup@4.46.2: 599 - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} 600 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 601 hasBin: true 602 ··· 604 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 605 hasBin: true 606 607 - seroval-plugins@1.3.2: 608 - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} 609 engines: {node: '>=10'} 610 peerDependencies: 611 seroval: ^1.0 ··· 614 resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 615 engines: {node: '>=10'} 616 617 - solid-js@1.9.7: 618 - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} 619 620 solid-refresh@0.6.3: 621 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 626 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 627 engines: {node: '>=0.10.0'} 628 629 - typescript@5.8.3: 630 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 631 engines: {node: '>=14.17'} 632 hasBin: true 633 634 - update-browserslist-db@1.1.3: 635 - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 636 hasBin: true 637 peerDependencies: 638 browserslist: '>= 4.21.0' 639 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==} 645 peerDependencies: 646 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 647 solid-js: ^1.7.2 ··· 650 '@testing-library/jest-dom': 651 optional: true 652 653 - vite@5.4.19: 654 - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} 655 - engines: {node: ^18.0.0 || >=20.0.0} 656 hasBin: true 657 peerDependencies: 658 - '@types/node': ^18.0.0 || >=20.0.0 659 - less: '*' 660 lightningcss: ^1.21.0 661 - sass: '*' 662 - sass-embedded: '*' 663 - stylus: '*' 664 - sugarss: '*' 665 - terser: ^5.4.0 666 peerDependenciesMeta: 667 '@types/node': 668 optional: true 669 less: 670 optional: true ··· 679 sugarss: 680 optional: true 681 terser: 682 optional: true 683 684 vitefu@1.1.1: ··· 694 695 snapshots: 696 697 - '@ampproject/remapping@2.3.0': 698 - dependencies: 699 - '@jridgewell/gen-mapping': 0.3.12 700 - '@jridgewell/trace-mapping': 0.3.29 701 - 702 '@babel/code-frame@7.27.1': 703 dependencies: 704 - '@babel/helper-validator-identifier': 7.27.1 705 js-tokens: 4.0.0 706 picocolors: 1.1.1 707 708 - '@babel/compat-data@7.28.0': {} 709 710 - '@babel/core@7.28.0': 711 dependencies: 712 - '@ampproject/remapping': 2.3.0 713 '@babel/code-frame': 7.27.1 714 - '@babel/generator': 7.28.0 715 '@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 719 '@babel/template': 7.27.2 720 - '@babel/traverse': 7.28.0 721 - '@babel/types': 7.28.2 722 convert-source-map: 2.0.0 723 - debug: 4.4.1 724 gensync: 1.0.0-beta.2 725 json5: 2.2.3 726 semver: 6.3.1 727 transitivePeerDependencies: 728 - supports-color 729 730 - '@babel/generator@7.28.0': 731 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 736 jsesc: 3.1.0 737 738 '@babel/helper-compilation-targets@7.27.2': 739 dependencies: 740 - '@babel/compat-data': 7.28.0 741 '@babel/helper-validator-option': 7.27.1 742 - browserslist: 4.25.1 743 lru-cache: 5.1.1 744 semver: 6.3.1 745 ··· 747 748 '@babel/helper-module-imports@7.18.6': 749 dependencies: 750 - '@babel/types': 7.28.2 751 752 '@babel/helper-module-imports@7.27.1': 753 dependencies: 754 - '@babel/traverse': 7.28.0 755 - '@babel/types': 7.28.2 756 transitivePeerDependencies: 757 - supports-color 758 759 - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': 760 dependencies: 761 - '@babel/core': 7.28.0 762 '@babel/helper-module-imports': 7.27.1 763 - '@babel/helper-validator-identifier': 7.27.1 764 - '@babel/traverse': 7.28.0 765 transitivePeerDependencies: 766 - supports-color 767 ··· 769 770 '@babel/helper-string-parser@7.27.1': {} 771 772 - '@babel/helper-validator-identifier@7.27.1': {} 773 774 '@babel/helper-validator-option@7.27.1': {} 775 776 - '@babel/helpers@7.28.2': 777 dependencies: 778 '@babel/template': 7.27.2 779 - '@babel/types': 7.28.2 780 781 - '@babel/parser@7.28.0': 782 dependencies: 783 - '@babel/types': 7.28.2 784 785 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': 786 dependencies: 787 - '@babel/core': 7.28.0 788 '@babel/helper-plugin-utils': 7.27.1 789 790 '@babel/template@7.27.2': 791 dependencies: 792 '@babel/code-frame': 7.27.1 793 - '@babel/parser': 7.28.0 794 - '@babel/types': 7.28.2 795 796 - '@babel/traverse@7.28.0': 797 dependencies: 798 '@babel/code-frame': 7.27.1 799 - '@babel/generator': 7.28.0 800 '@babel/helper-globals': 7.28.0 801 - '@babel/parser': 7.28.0 802 '@babel/template': 7.27.2 803 - '@babel/types': 7.28.2 804 - debug: 4.4.1 805 transitivePeerDependencies: 806 - supports-color 807 808 - '@babel/types@7.28.2': 809 dependencies: 810 '@babel/helper-string-parser': 7.27.1 811 - '@babel/helper-validator-identifier': 7.27.1 812 813 - '@esbuild/aix-ppc64@0.21.5': 814 optional: true 815 816 - '@esbuild/android-arm64@0.21.5': 817 optional: true 818 819 - '@esbuild/android-arm@0.21.5': 820 optional: true 821 822 - '@esbuild/android-x64@0.21.5': 823 optional: true 824 825 - '@esbuild/darwin-arm64@0.21.5': 826 optional: true 827 828 - '@esbuild/darwin-x64@0.21.5': 829 optional: true 830 831 - '@esbuild/freebsd-arm64@0.21.5': 832 optional: true 833 834 - '@esbuild/freebsd-x64@0.21.5': 835 optional: true 836 837 - '@esbuild/linux-arm64@0.21.5': 838 optional: true 839 840 - '@esbuild/linux-arm@0.21.5': 841 optional: true 842 843 - '@esbuild/linux-ia32@0.21.5': 844 optional: true 845 846 - '@esbuild/linux-loong64@0.21.5': 847 optional: true 848 849 - '@esbuild/linux-mips64el@0.21.5': 850 optional: true 851 852 - '@esbuild/linux-ppc64@0.21.5': 853 optional: true 854 855 - '@esbuild/linux-riscv64@0.21.5': 856 optional: true 857 858 - '@esbuild/linux-s390x@0.21.5': 859 optional: true 860 861 - '@esbuild/linux-x64@0.21.5': 862 optional: true 863 864 - '@esbuild/netbsd-x64@0.21.5': 865 optional: true 866 867 - '@esbuild/openbsd-x64@0.21.5': 868 optional: true 869 870 - '@esbuild/sunos-x64@0.21.5': 871 optional: true 872 873 - '@esbuild/win32-arm64@0.21.5': 874 optional: true 875 876 - '@esbuild/win32-ia32@0.21.5': 877 optional: true 878 879 - '@esbuild/win32-x64@0.21.5': 880 optional: true 881 882 - '@jridgewell/gen-mapping@0.3.12': 883 dependencies: 884 - '@jridgewell/sourcemap-codec': 1.5.4 885 - '@jridgewell/trace-mapping': 0.3.29 886 887 '@jridgewell/resolve-uri@3.1.2': {} 888 889 - '@jridgewell/sourcemap-codec@1.5.4': {} 890 891 - '@jridgewell/trace-mapping@0.3.29': 892 dependencies: 893 '@jridgewell/resolve-uri': 3.1.2 894 - '@jridgewell/sourcemap-codec': 1.5.4 895 896 - '@rollup/rollup-android-arm-eabi@4.46.2': 897 optional: true 898 899 - '@rollup/rollup-android-arm64@4.46.2': 900 optional: true 901 902 - '@rollup/rollup-darwin-arm64@4.46.2': 903 optional: true 904 905 - '@rollup/rollup-darwin-x64@4.46.2': 906 optional: true 907 908 - '@rollup/rollup-freebsd-arm64@4.46.2': 909 optional: true 910 911 - '@rollup/rollup-freebsd-x64@4.46.2': 912 optional: true 913 914 - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': 915 optional: true 916 917 - '@rollup/rollup-linux-arm-musleabihf@4.46.2': 918 optional: true 919 920 - '@rollup/rollup-linux-arm64-gnu@4.46.2': 921 optional: true 922 923 - '@rollup/rollup-linux-arm64-musl@4.46.2': 924 optional: true 925 926 - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': 927 optional: true 928 929 - '@rollup/rollup-linux-ppc64-gnu@4.46.2': 930 optional: true 931 932 - '@rollup/rollup-linux-riscv64-gnu@4.46.2': 933 optional: true 934 935 - '@rollup/rollup-linux-riscv64-musl@4.46.2': 936 optional: true 937 938 - '@rollup/rollup-linux-s390x-gnu@4.46.2': 939 optional: true 940 941 - '@rollup/rollup-linux-x64-gnu@4.46.2': 942 optional: true 943 944 - '@rollup/rollup-linux-x64-musl@4.46.2': 945 optional: true 946 947 - '@rollup/rollup-win32-arm64-msvc@4.46.2': 948 optional: true 949 950 - '@rollup/rollup-win32-ia32-msvc@4.46.2': 951 optional: true 952 953 - '@rollup/rollup-win32-x64-msvc@4.46.2': 954 optional: true 955 956 - '@tauri-apps/api@2.0.0-rc.0': {} 957 958 - '@tauri-apps/api@2.7.0': {} 959 960 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 961 optional: true 962 963 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 964 optional: true 965 966 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 967 optional: true 968 969 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 970 optional: true 971 972 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 973 optional: true 974 975 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 976 optional: true 977 978 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 979 optional: true 980 981 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 982 optional: true 983 984 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 985 optional: true 986 987 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 988 optional: true 989 990 - '@tauri-apps/cli@2.0.0-rc.5': 991 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 1002 1003 - '@tauri-apps/plugin-deep-link@2.4.1': 1004 dependencies: 1005 - '@tauri-apps/api': 2.7.0 1006 1007 - '@tauri-apps/plugin-http@2.0.0-rc.1': 1008 dependencies: 1009 - '@tauri-apps/api': 2.7.0 1010 1011 - '@tauri-apps/plugin-process@2.0.0-rc.0': 1012 dependencies: 1013 - '@tauri-apps/api': 2.0.0-rc.0 1014 1015 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 1016 dependencies: 1017 - '@tauri-apps/api': 2.0.0-rc.0 1018 1019 '@types/animejs@3.1.13': {} 1020 1021 '@types/babel__core@7.20.5': 1022 dependencies: 1023 - '@babel/parser': 7.28.0 1024 - '@babel/types': 7.28.2 1025 '@types/babel__generator': 7.27.0 1026 '@types/babel__template': 7.4.4 1027 - '@types/babel__traverse': 7.20.7 1028 1029 '@types/babel__generator@7.27.0': 1030 dependencies: 1031 - '@babel/types': 7.28.2 1032 1033 '@types/babel__template@7.4.4': 1034 dependencies: 1035 - '@babel/parser': 7.28.0 1036 - '@babel/types': 7.28.2 1037 1038 - '@types/babel__traverse@7.20.7': 1039 dependencies: 1040 - '@babel/types': 7.28.2 1041 1042 '@types/estree@1.0.8': {} 1043 1044 - animejs@3.2.2: {} 1045 1046 - babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0): 1047 dependencies: 1048 - '@babel/core': 7.28.0 1049 '@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 1052 html-entities: 2.3.3 1053 parse5: 7.3.0 1054 - validate-html-nesting: 1.2.3 1055 1056 - babel-preset-solid@1.9.6(@babel/core@7.28.0): 1057 dependencies: 1058 - '@babel/core': 7.28.0 1059 - babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0) 1060 1061 - browserslist@4.25.1: 1062 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) 1067 1068 - caniuse-lite@1.0.30001731: {} 1069 1070 convert-source-map@2.0.0: {} 1071 1072 csstype@3.1.3: {} 1073 1074 - debug@4.4.1: 1075 dependencies: 1076 ms: 2.1.3 1077 1078 - electron-to-chromium@1.5.193: {} 1079 1080 entities@6.0.1: {} 1081 1082 - esbuild@0.21.5: 1083 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 1107 1108 escalade@3.2.0: {} 1109 1110 fsevents@2.3.3: 1111 optional: true 1112 ··· 1134 1135 nanoid@3.3.11: {} 1136 1137 - node-releases@2.0.19: {} 1138 1139 parse5@7.3.0: 1140 dependencies: ··· 1142 1143 picocolors@1.1.1: {} 1144 1145 postcss@8.5.6: 1146 dependencies: 1147 nanoid: 3.3.11 1148 picocolors: 1.1.1 1149 source-map-js: 1.2.1 1150 1151 - rollup@4.46.2: 1152 dependencies: 1153 '@types/estree': 1.0.8 1154 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 1175 fsevents: 2.3.3 1176 1177 semver@6.3.1: {} 1178 1179 - seroval-plugins@1.3.2(seroval@1.3.2): 1180 dependencies: 1181 seroval: 1.3.2 1182 1183 seroval@1.3.2: {} 1184 1185 - solid-js@1.9.7: 1186 dependencies: 1187 csstype: 3.1.3 1188 seroval: 1.3.2 1189 - seroval-plugins: 1.3.2(seroval@1.3.2) 1190 1191 - solid-refresh@0.6.3(solid-js@1.9.7): 1192 dependencies: 1193 - '@babel/generator': 7.28.0 1194 '@babel/helper-module-imports': 7.27.1 1195 - '@babel/types': 7.28.2 1196 - solid-js: 1.9.7 1197 transitivePeerDependencies: 1198 - supports-color 1199 1200 source-map-js@1.2.1: {} 1201 1202 - typescript@5.8.3: {} 1203 1204 - update-browserslist-db@1.1.3(browserslist@4.25.1): 1205 dependencies: 1206 - browserslist: 4.25.1 1207 escalade: 3.2.0 1208 picocolors: 1.1.1 1209 1210 - validate-html-nesting@1.2.3: {} 1211 - 1212 - vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@5.4.19): 1213 dependencies: 1214 - '@babel/core': 7.28.0 1215 '@types/babel__core': 7.20.5 1216 - babel-preset-solid: 1.9.6(@babel/core@7.28.0) 1217 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) 1222 transitivePeerDependencies: 1223 - supports-color 1224 1225 - vite@5.4.19: 1226 dependencies: 1227 - esbuild: 0.21.5 1228 postcss: 8.5.6 1229 - rollup: 4.46.2 1230 optionalDependencies: 1231 fsevents: 2.3.3 1232 1233 - vitefu@1.1.1(vite@5.4.19): 1234 optionalDependencies: 1235 - vite: 5.4.19 1236 1237 yallist@3.1.1: {}
··· 9 .: 10 dependencies: 11 '@tauri-apps/api': 12 + specifier: 2.9.0 13 + version: 2.9.0 14 '@tauri-apps/plugin-deep-link': 15 + specifier: ^2.4.5 16 + version: 2.4.5 17 '@tauri-apps/plugin-http': 18 + specifier: 2.5.4 19 + version: 2.5.4 20 '@tauri-apps/plugin-process': 21 + specifier: 2.3.1 22 + version: 2.3.1 23 '@tauri-apps/plugin-shell': 24 + specifier: 2.3.3 25 + version: 2.3.3 26 animejs: 27 + specifier: ^4.2.2 28 + version: 4.2.2 29 solid-js: 30 + specifier: ^1.9.10 31 + version: 1.9.10 32 devDependencies: 33 '@tauri-apps/cli': 34 + specifier: 2.9.3 35 + version: 2.9.3 36 + '@types/animejs': 37 + specifier: ^3.1.13 38 + version: 3.1.13 39 typescript: 40 + specifier: ^5.9.3 41 + version: 5.9.3 42 vite: 43 + specifier: ^7.2.2 44 + version: 7.2.2 45 vite-plugin-solid: 46 + specifier: ^2.11.10 47 + version: 2.11.10(solid-js@1.9.10)(vite@7.2.2) 48 49 packages: 50 51 '@babel/code-frame@7.27.1': 52 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 53 engines: {node: '>=6.9.0'} 54 55 + '@babel/compat-data@7.28.5': 56 + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} 57 engines: {node: '>=6.9.0'} 58 59 + '@babel/core@7.28.5': 60 + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} 61 engines: {node: '>=6.9.0'} 62 63 + '@babel/generator@7.28.5': 64 + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 65 engines: {node: '>=6.9.0'} 66 67 '@babel/helper-compilation-targets@7.27.2': ··· 80 resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 81 engines: {node: '>=6.9.0'} 82 83 + '@babel/helper-module-transforms@7.28.3': 84 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 85 engines: {node: '>=6.9.0'} 86 peerDependencies: 87 '@babel/core': ^7.0.0 ··· 94 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 95 engines: {node: '>=6.9.0'} 96 97 + '@babel/helper-validator-identifier@7.28.5': 98 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 99 engines: {node: '>=6.9.0'} 100 101 '@babel/helper-validator-option@7.27.1': 102 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 103 engines: {node: '>=6.9.0'} 104 105 + '@babel/helpers@7.28.4': 106 + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 107 engines: {node: '>=6.9.0'} 108 109 + '@babel/parser@7.28.5': 110 + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 111 engines: {node: '>=6.0.0'} 112 hasBin: true 113 ··· 121 resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 122 engines: {node: '>=6.9.0'} 123 124 + '@babel/traverse@7.28.5': 125 + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} 126 engines: {node: '>=6.9.0'} 127 128 + '@babel/types@7.28.5': 129 + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 130 engines: {node: '>=6.9.0'} 131 132 + '@esbuild/aix-ppc64@0.25.12': 133 + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 134 + engines: {node: '>=18'} 135 cpu: [ppc64] 136 os: [aix] 137 138 + '@esbuild/android-arm64@0.25.12': 139 + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 140 + engines: {node: '>=18'} 141 cpu: [arm64] 142 os: [android] 143 144 + '@esbuild/android-arm@0.25.12': 145 + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 146 + engines: {node: '>=18'} 147 cpu: [arm] 148 os: [android] 149 150 + '@esbuild/android-x64@0.25.12': 151 + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 152 + engines: {node: '>=18'} 153 cpu: [x64] 154 os: [android] 155 156 + '@esbuild/darwin-arm64@0.25.12': 157 + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 158 + engines: {node: '>=18'} 159 cpu: [arm64] 160 os: [darwin] 161 162 + '@esbuild/darwin-x64@0.25.12': 163 + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 164 + engines: {node: '>=18'} 165 cpu: [x64] 166 os: [darwin] 167 168 + '@esbuild/freebsd-arm64@0.25.12': 169 + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 170 + engines: {node: '>=18'} 171 cpu: [arm64] 172 os: [freebsd] 173 174 + '@esbuild/freebsd-x64@0.25.12': 175 + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 176 + engines: {node: '>=18'} 177 cpu: [x64] 178 os: [freebsd] 179 180 + '@esbuild/linux-arm64@0.25.12': 181 + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 182 + engines: {node: '>=18'} 183 cpu: [arm64] 184 os: [linux] 185 186 + '@esbuild/linux-arm@0.25.12': 187 + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 188 + engines: {node: '>=18'} 189 cpu: [arm] 190 os: [linux] 191 192 + '@esbuild/linux-ia32@0.25.12': 193 + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 194 + engines: {node: '>=18'} 195 cpu: [ia32] 196 os: [linux] 197 198 + '@esbuild/linux-loong64@0.25.12': 199 + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 200 + engines: {node: '>=18'} 201 cpu: [loong64] 202 os: [linux] 203 204 + '@esbuild/linux-mips64el@0.25.12': 205 + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 206 + engines: {node: '>=18'} 207 cpu: [mips64el] 208 os: [linux] 209 210 + '@esbuild/linux-ppc64@0.25.12': 211 + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 212 + engines: {node: '>=18'} 213 cpu: [ppc64] 214 os: [linux] 215 216 + '@esbuild/linux-riscv64@0.25.12': 217 + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 218 + engines: {node: '>=18'} 219 cpu: [riscv64] 220 os: [linux] 221 222 + '@esbuild/linux-s390x@0.25.12': 223 + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 224 + engines: {node: '>=18'} 225 cpu: [s390x] 226 os: [linux] 227 228 + '@esbuild/linux-x64@0.25.12': 229 + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 230 + engines: {node: '>=18'} 231 cpu: [x64] 232 os: [linux] 233 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'} 243 cpu: [x64] 244 os: [netbsd] 245 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'} 255 cpu: [x64] 256 os: [openbsd] 257 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'} 267 cpu: [x64] 268 os: [sunos] 269 270 + '@esbuild/win32-arm64@0.25.12': 271 + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 272 + engines: {node: '>=18'} 273 cpu: [arm64] 274 os: [win32] 275 276 + '@esbuild/win32-ia32@0.25.12': 277 + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 278 + engines: {node: '>=18'} 279 cpu: [ia32] 280 os: [win32] 281 282 + '@esbuild/win32-x64@0.25.12': 283 + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 284 + engines: {node: '>=18'} 285 cpu: [x64] 286 os: [win32] 287 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==} 293 294 '@jridgewell/resolve-uri@3.1.2': 295 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 296 engines: {node: '>=6.0.0'} 297 298 + '@jridgewell/sourcemap-codec@1.5.5': 299 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 300 301 + '@jridgewell/trace-mapping@0.3.31': 302 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 303 304 + '@rollup/rollup-android-arm-eabi@4.52.5': 305 + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 306 cpu: [arm] 307 os: [android] 308 309 + '@rollup/rollup-android-arm64@4.52.5': 310 + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 311 cpu: [arm64] 312 os: [android] 313 314 + '@rollup/rollup-darwin-arm64@4.52.5': 315 + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 316 cpu: [arm64] 317 os: [darwin] 318 319 + '@rollup/rollup-darwin-x64@4.52.5': 320 + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 321 cpu: [x64] 322 os: [darwin] 323 324 + '@rollup/rollup-freebsd-arm64@4.52.5': 325 + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 326 cpu: [arm64] 327 os: [freebsd] 328 329 + '@rollup/rollup-freebsd-x64@4.52.5': 330 + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 331 cpu: [x64] 332 os: [freebsd] 333 334 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 335 + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 336 cpu: [arm] 337 os: [linux] 338 339 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 340 + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 341 cpu: [arm] 342 os: [linux] 343 344 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 345 + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 346 cpu: [arm64] 347 os: [linux] 348 349 + '@rollup/rollup-linux-arm64-musl@4.52.5': 350 + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 351 cpu: [arm64] 352 os: [linux] 353 354 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 355 + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 356 cpu: [loong64] 357 os: [linux] 358 359 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 360 + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 361 cpu: [ppc64] 362 os: [linux] 363 364 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 365 + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 366 cpu: [riscv64] 367 os: [linux] 368 369 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 370 + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 371 cpu: [riscv64] 372 os: [linux] 373 374 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 375 + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 376 cpu: [s390x] 377 os: [linux] 378 379 + '@rollup/rollup-linux-x64-gnu@4.52.5': 380 + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 381 cpu: [x64] 382 os: [linux] 383 384 + '@rollup/rollup-linux-x64-musl@4.52.5': 385 + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 386 cpu: [x64] 387 os: [linux] 388 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==} 396 cpu: [arm64] 397 os: [win32] 398 399 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 400 + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 401 cpu: [ia32] 402 os: [win32] 403 404 + '@rollup/rollup-win32-x64-gnu@4.52.5': 405 + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 406 cpu: [x64] 407 os: [win32] 408 409 + '@rollup/rollup-win32-x64-msvc@4.52.5': 410 + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 411 + cpu: [x64] 412 + os: [win32] 413 414 + '@tauri-apps/api@2.9.0': 415 + resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==} 416 417 + '@tauri-apps/cli-darwin-arm64@2.9.3': 418 + resolution: {integrity: sha512-W8FQXZXQmQ0Fmj9UJXNrm2mLdIaLLriKVY7o/FzmizyIKTPIvHjfZALTNybbpTQRbJvKoGHLrW1DNzAWVDWJYg==} 419 engines: {node: '>= 10'} 420 cpu: [arm64] 421 os: [darwin] 422 423 + '@tauri-apps/cli-darwin-x64@2.9.3': 424 + resolution: {integrity: sha512-zDwu40rlshijt3TU6aRvzPUyVpapsx1sNfOlreDMTaMelQLHl6YoQzSRpLHYwrHrhimxyX2uDqnKIiuGel0Lhg==} 425 engines: {node: '>= 10'} 426 cpu: [x64] 427 os: [darwin] 428 429 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 430 + resolution: {integrity: sha512-+Oc2OfcTRwYtW93VJqd/HOk77buORwC9IToj/qsEvM7bTMq6Kda4alpZprzwrCHYANSw+zD8PgjJdljTpe4p+g==} 431 engines: {node: '>= 10'} 432 cpu: [arm] 433 os: [linux] 434 435 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 436 + resolution: {integrity: sha512-59GqU/J1n9wFyAtleoQOaU0oVIo+kwQynEw4meFDoKRXszKGor6lTsbsS3r0QKLSPbc0o/yYGJhqqCtkYjb/eg==} 437 engines: {node: '>= 10'} 438 cpu: [arm64] 439 os: [linux] 440 441 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 442 + resolution: {integrity: sha512-fzvG+jEn5/iYGNH6Z2IRMheYFC4pJdXa19BR9fFm6Bdn2cuajRLDKdUcEME/DCtwqclphXtFZTrT4oezY5vI/A==} 443 engines: {node: '>= 10'} 444 cpu: [arm64] 445 os: [linux] 446 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==} 455 engines: {node: '>= 10'} 456 cpu: [x64] 457 os: [linux] 458 459 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 460 + resolution: {integrity: sha512-v2cBIB/6ji8DL+aiL5QUykU3ZO8OoJGyx50/qv2HQVzkf85KdaYSis3D/oVRemN/pcDz+vyCnnL3XnzFnDl4JQ==} 461 engines: {node: '>= 10'} 462 cpu: [x64] 463 os: [linux] 464 465 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 466 + resolution: {integrity: sha512-ZGvBy7nvrHPbE0HeKp/ioaiw8bNgAHxWnb7JRZ4/G0A+oFj0SeSFxl9k5uU6FKnM7bHM23Gd1oeaDex9g5Fceg==} 467 engines: {node: '>= 10'} 468 cpu: [arm64] 469 os: [win32] 470 471 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 472 + resolution: {integrity: sha512-UsgIwOnpCoY9NK9/65QiwgmWVIE80LE7SwRYVblGtmlY9RYfsYvpbItwsovA/AcHMTiO+OCvS/q9yLeqS3m6Sg==} 473 engines: {node: '>= 10'} 474 cpu: [ia32] 475 os: [win32] 476 477 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 478 + resolution: {integrity: sha512-fmw7NrrHE5m49idCvJAx9T9bsupjdJ0a3p3DPCNCZRGANU6R1tA1L+KTlVuUtdAldX2NqU/9UPo2SCslYKgJHQ==} 479 engines: {node: '>= 10'} 480 cpu: [x64] 481 os: [win32] 482 483 + '@tauri-apps/cli@2.9.3': 484 + resolution: {integrity: sha512-BQ7iLUXTQcyG1PpzLWeVSmBCedYDpnA/6Cm/kRFGtqjTf/eVUlyYO5S2ee07tLum3nWwDBWTGFZeruO8yEukfA==} 485 engines: {node: '>= 10'} 486 hasBin: true 487 488 + '@tauri-apps/plugin-deep-link@2.4.5': 489 + resolution: {integrity: sha512-Zf2RTj1D9IQQ45/jqW8XTKvql24HqlPjcpv0mV/O2jHQkNe11HOTZBVj6IK37qs+MWV7xZzcmazx/QVZnhAwaQ==} 490 491 + '@tauri-apps/plugin-http@2.5.4': 492 + resolution: {integrity: sha512-/i4U/9za3mrytTgfRn5RHneKubZE/dwRmshYwyMvNRlkWjvu1m4Ma72kcbVJMZFGXpkbl+qLyWMGrihtWB76Zg==} 493 494 + '@tauri-apps/plugin-process@2.3.1': 495 + resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} 496 497 + '@tauri-apps/plugin-shell@2.3.3': 498 + resolution: {integrity: sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==} 499 500 '@types/animejs@3.1.13': 501 resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==} ··· 509 '@types/babel__template@7.4.4': 510 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 511 512 + '@types/babel__traverse@7.28.0': 513 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 514 515 '@types/estree@1.0.8': 516 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 517 518 + animejs@4.2.2: 519 + resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==} 520 521 + babel-plugin-jsx-dom-expressions@0.40.3: 522 + resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==} 523 peerDependencies: 524 '@babel/core': ^7.20.12 525 526 + babel-preset-solid@1.9.10: 527 + resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==} 528 peerDependencies: 529 '@babel/core': ^7.0.0 530 + solid-js: ^1.9.10 531 + peerDependenciesMeta: 532 + solid-js: 533 + optional: true 534 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==} 541 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 542 hasBin: true 543 544 + caniuse-lite@1.0.30001754: 545 + resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} 546 547 convert-source-map@2.0.0: 548 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} ··· 550 csstype@3.1.3: 551 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 552 553 + debug@4.4.3: 554 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 555 engines: {node: '>=6.0'} 556 peerDependencies: 557 supports-color: '*' ··· 559 supports-color: 560 optional: true 561 562 + electron-to-chromium@1.5.248: 563 + resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==} 564 565 entities@6.0.1: 566 resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 567 engines: {node: '>=0.12'} 568 569 + esbuild@0.25.12: 570 + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 571 + engines: {node: '>=18'} 572 hasBin: true 573 574 escalade@3.2.0: 575 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 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 586 587 fsevents@2.3.3: 588 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} ··· 628 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 629 hasBin: true 630 631 + node-releases@2.0.27: 632 + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} 633 634 parse5@7.3.0: 635 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} ··· 637 picocolors@1.1.1: 638 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 639 640 + picomatch@4.0.3: 641 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 642 + engines: {node: '>=12'} 643 + 644 postcss@8.5.6: 645 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 646 engines: {node: ^10 || ^12 || >=14} 647 648 + rollup@4.52.5: 649 + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 650 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 651 hasBin: true 652 ··· 654 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 655 hasBin: true 656 657 + seroval-plugins@1.3.3: 658 + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} 659 engines: {node: '>=10'} 660 peerDependencies: 661 seroval: ^1.0 ··· 664 resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 665 engines: {node: '>=10'} 666 667 + solid-js@1.9.10: 668 + resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} 669 670 solid-refresh@0.6.3: 671 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 676 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 677 engines: {node: '>=0.10.0'} 678 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==} 685 engines: {node: '>=14.17'} 686 hasBin: true 687 688 + update-browserslist-db@1.1.4: 689 + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} 690 hasBin: true 691 peerDependencies: 692 browserslist: '>= 4.21.0' 693 694 + vite-plugin-solid@2.11.10: 695 + resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==} 696 peerDependencies: 697 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 698 solid-js: ^1.7.2 ··· 701 '@testing-library/jest-dom': 702 optional: true 703 704 + vite@7.2.2: 705 + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} 706 + engines: {node: ^20.19.0 || >=22.12.0} 707 hasBin: true 708 peerDependencies: 709 + '@types/node': ^20.19.0 || >=22.12.0 710 + jiti: '>=1.21.0' 711 + less: ^4.0.0 712 lightningcss: ^1.21.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 720 peerDependenciesMeta: 721 '@types/node': 722 + optional: true 723 + jiti: 724 optional: true 725 less: 726 optional: true ··· 735 sugarss: 736 optional: true 737 terser: 738 + optional: true 739 + tsx: 740 + optional: true 741 + yaml: 742 optional: true 743 744 vitefu@1.1.1: ··· 754 755 snapshots: 756 757 '@babel/code-frame@7.27.1': 758 dependencies: 759 + '@babel/helper-validator-identifier': 7.28.5 760 js-tokens: 4.0.0 761 picocolors: 1.1.1 762 763 + '@babel/compat-data@7.28.5': {} 764 765 + '@babel/core@7.28.5': 766 dependencies: 767 '@babel/code-frame': 7.27.1 768 + '@babel/generator': 7.28.5 769 '@babel/helper-compilation-targets': 7.27.2 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 773 '@babel/template': 7.27.2 774 + '@babel/traverse': 7.28.5 775 + '@babel/types': 7.28.5 776 + '@jridgewell/remapping': 2.3.5 777 convert-source-map: 2.0.0 778 + debug: 4.4.3 779 gensync: 1.0.0-beta.2 780 json5: 2.2.3 781 semver: 6.3.1 782 transitivePeerDependencies: 783 - supports-color 784 785 + '@babel/generator@7.28.5': 786 dependencies: 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 791 jsesc: 3.1.0 792 793 '@babel/helper-compilation-targets@7.27.2': 794 dependencies: 795 + '@babel/compat-data': 7.28.5 796 '@babel/helper-validator-option': 7.27.1 797 + browserslist: 4.27.0 798 lru-cache: 5.1.1 799 semver: 6.3.1 800 ··· 802 803 '@babel/helper-module-imports@7.18.6': 804 dependencies: 805 + '@babel/types': 7.28.5 806 807 '@babel/helper-module-imports@7.27.1': 808 dependencies: 809 + '@babel/traverse': 7.28.5 810 + '@babel/types': 7.28.5 811 transitivePeerDependencies: 812 - supports-color 813 814 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': 815 dependencies: 816 + '@babel/core': 7.28.5 817 '@babel/helper-module-imports': 7.27.1 818 + '@babel/helper-validator-identifier': 7.28.5 819 + '@babel/traverse': 7.28.5 820 transitivePeerDependencies: 821 - supports-color 822 ··· 824 825 '@babel/helper-string-parser@7.27.1': {} 826 827 + '@babel/helper-validator-identifier@7.28.5': {} 828 829 '@babel/helper-validator-option@7.27.1': {} 830 831 + '@babel/helpers@7.28.4': 832 dependencies: 833 '@babel/template': 7.27.2 834 + '@babel/types': 7.28.5 835 836 + '@babel/parser@7.28.5': 837 dependencies: 838 + '@babel/types': 7.28.5 839 840 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': 841 dependencies: 842 + '@babel/core': 7.28.5 843 '@babel/helper-plugin-utils': 7.27.1 844 845 '@babel/template@7.27.2': 846 dependencies: 847 '@babel/code-frame': 7.27.1 848 + '@babel/parser': 7.28.5 849 + '@babel/types': 7.28.5 850 851 + '@babel/traverse@7.28.5': 852 dependencies: 853 '@babel/code-frame': 7.27.1 854 + '@babel/generator': 7.28.5 855 '@babel/helper-globals': 7.28.0 856 + '@babel/parser': 7.28.5 857 '@babel/template': 7.27.2 858 + '@babel/types': 7.28.5 859 + debug: 4.4.3 860 transitivePeerDependencies: 861 - supports-color 862 863 + '@babel/types@7.28.5': 864 dependencies: 865 '@babel/helper-string-parser': 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 876 877 + '@esbuild/android-x64@0.25.12': 878 optional: true 879 880 + '@esbuild/darwin-arm64@0.25.12': 881 optional: true 882 883 + '@esbuild/darwin-x64@0.25.12': 884 optional: true 885 886 + '@esbuild/freebsd-arm64@0.25.12': 887 optional: true 888 889 + '@esbuild/freebsd-x64@0.25.12': 890 optional: true 891 892 + '@esbuild/linux-arm64@0.25.12': 893 optional: true 894 895 + '@esbuild/linux-arm@0.25.12': 896 optional: true 897 898 + '@esbuild/linux-ia32@0.25.12': 899 optional: true 900 901 + '@esbuild/linux-loong64@0.25.12': 902 optional: true 903 904 + '@esbuild/linux-mips64el@0.25.12': 905 optional: true 906 907 + '@esbuild/linux-ppc64@0.25.12': 908 optional: true 909 910 + '@esbuild/linux-riscv64@0.25.12': 911 optional: true 912 913 + '@esbuild/linux-s390x@0.25.12': 914 optional: true 915 916 + '@esbuild/linux-x64@0.25.12': 917 optional: true 918 919 + '@esbuild/netbsd-arm64@0.25.12': 920 optional: true 921 922 + '@esbuild/netbsd-x64@0.25.12': 923 optional: true 924 925 + '@esbuild/openbsd-arm64@0.25.12': 926 optional: true 927 928 + '@esbuild/openbsd-x64@0.25.12': 929 optional: true 930 931 + '@esbuild/openharmony-arm64@0.25.12': 932 optional: true 933 934 + '@esbuild/sunos-x64@0.25.12': 935 optional: true 936 937 + '@esbuild/win32-arm64@0.25.12': 938 optional: true 939 940 + '@esbuild/win32-ia32@0.25.12': 941 optional: true 942 943 + '@esbuild/win32-x64@0.25.12': 944 optional: true 945 946 + '@jridgewell/gen-mapping@0.3.13': 947 dependencies: 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 955 956 '@jridgewell/resolve-uri@3.1.2': {} 957 958 + '@jridgewell/sourcemap-codec@1.5.5': {} 959 960 + '@jridgewell/trace-mapping@0.3.31': 961 dependencies: 962 '@jridgewell/resolve-uri': 3.1.2 963 + '@jridgewell/sourcemap-codec': 1.5.5 964 965 + '@rollup/rollup-android-arm-eabi@4.52.5': 966 optional: true 967 968 + '@rollup/rollup-android-arm64@4.52.5': 969 optional: true 970 971 + '@rollup/rollup-darwin-arm64@4.52.5': 972 optional: true 973 974 + '@rollup/rollup-darwin-x64@4.52.5': 975 optional: true 976 977 + '@rollup/rollup-freebsd-arm64@4.52.5': 978 optional: true 979 980 + '@rollup/rollup-freebsd-x64@4.52.5': 981 optional: true 982 983 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 984 optional: true 985 986 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 987 optional: true 988 989 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 990 optional: true 991 992 + '@rollup/rollup-linux-arm64-musl@4.52.5': 993 optional: true 994 995 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 996 optional: true 997 998 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 999 optional: true 1000 1001 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 1002 optional: true 1003 1004 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 1005 optional: true 1006 1007 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 1008 optional: true 1009 1010 + '@rollup/rollup-linux-x64-gnu@4.52.5': 1011 optional: true 1012 1013 + '@rollup/rollup-linux-x64-musl@4.52.5': 1014 optional: true 1015 1016 + '@rollup/rollup-openharmony-arm64@4.52.5': 1017 optional: true 1018 1019 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 1020 optional: true 1021 1022 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 1023 optional: true 1024 1025 + '@rollup/rollup-win32-x64-gnu@4.52.5': 1026 + optional: true 1027 1028 + '@rollup/rollup-win32-x64-msvc@4.52.5': 1029 + optional: true 1030 1031 + '@tauri-apps/api@2.9.0': {} 1032 + 1033 + '@tauri-apps/cli-darwin-arm64@2.9.3': 1034 optional: true 1035 1036 + '@tauri-apps/cli-darwin-x64@2.9.3': 1037 optional: true 1038 1039 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 1040 optional: true 1041 1042 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 1043 optional: true 1044 1045 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 1046 optional: true 1047 1048 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 1049 optional: true 1050 1051 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 1052 + optional: true 1053 + 1054 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 1055 optional: true 1056 1057 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 1058 optional: true 1059 1060 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 1061 optional: true 1062 1063 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 1064 optional: true 1065 1066 + '@tauri-apps/cli@2.9.3': 1067 optionalDependencies: 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 1079 1080 + '@tauri-apps/plugin-deep-link@2.4.5': 1081 dependencies: 1082 + '@tauri-apps/api': 2.9.0 1083 1084 + '@tauri-apps/plugin-http@2.5.4': 1085 dependencies: 1086 + '@tauri-apps/api': 2.9.0 1087 1088 + '@tauri-apps/plugin-process@2.3.1': 1089 dependencies: 1090 + '@tauri-apps/api': 2.9.0 1091 1092 + '@tauri-apps/plugin-shell@2.3.3': 1093 dependencies: 1094 + '@tauri-apps/api': 2.9.0 1095 1096 '@types/animejs@3.1.13': {} 1097 1098 '@types/babel__core@7.20.5': 1099 dependencies: 1100 + '@babel/parser': 7.28.5 1101 + '@babel/types': 7.28.5 1102 '@types/babel__generator': 7.27.0 1103 '@types/babel__template': 7.4.4 1104 + '@types/babel__traverse': 7.28.0 1105 1106 '@types/babel__generator@7.27.0': 1107 dependencies: 1108 + '@babel/types': 7.28.5 1109 1110 '@types/babel__template@7.4.4': 1111 dependencies: 1112 + '@babel/parser': 7.28.5 1113 + '@babel/types': 7.28.5 1114 1115 + '@types/babel__traverse@7.28.0': 1116 dependencies: 1117 + '@babel/types': 7.28.5 1118 1119 '@types/estree@1.0.8': {} 1120 1121 + animejs@4.2.2: {} 1122 1123 + babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.28.5): 1124 dependencies: 1125 + '@babel/core': 7.28.5 1126 '@babel/helper-module-imports': 7.18.6 1127 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) 1128 + '@babel/types': 7.28.5 1129 html-entities: 2.3.3 1130 parse5: 7.3.0 1131 1132 + babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10): 1133 dependencies: 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 1138 1139 + baseline-browser-mapping@2.8.25: {} 1140 + 1141 + browserslist@4.27.0: 1142 dependencies: 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) 1148 1149 + caniuse-lite@1.0.30001754: {} 1150 1151 convert-source-map@2.0.0: {} 1152 1153 csstype@3.1.3: {} 1154 1155 + debug@4.4.3: 1156 dependencies: 1157 ms: 2.1.3 1158 1159 + electron-to-chromium@1.5.248: {} 1160 1161 entities@6.0.1: {} 1162 1163 + esbuild@0.25.12: 1164 optionalDependencies: 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 1191 1192 escalade@3.2.0: {} 1193 1194 + fdir@6.5.0(picomatch@4.0.3): 1195 + optionalDependencies: 1196 + picomatch: 4.0.3 1197 + 1198 fsevents@2.3.3: 1199 optional: true 1200 ··· 1222 1223 nanoid@3.3.11: {} 1224 1225 + node-releases@2.0.27: {} 1226 1227 parse5@7.3.0: 1228 dependencies: ··· 1230 1231 picocolors@1.1.1: {} 1232 1233 + picomatch@4.0.3: {} 1234 + 1235 postcss@8.5.6: 1236 dependencies: 1237 nanoid: 3.3.11 1238 picocolors: 1.1.1 1239 source-map-js: 1.2.1 1240 1241 + rollup@4.52.5: 1242 dependencies: 1243 '@types/estree': 1.0.8 1244 optionalDependencies: 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 1267 fsevents: 2.3.3 1268 1269 semver@6.3.1: {} 1270 1271 + seroval-plugins@1.3.3(seroval@1.3.2): 1272 dependencies: 1273 seroval: 1.3.2 1274 1275 seroval@1.3.2: {} 1276 1277 + solid-js@1.9.10: 1278 dependencies: 1279 csstype: 3.1.3 1280 seroval: 1.3.2 1281 + seroval-plugins: 1.3.3(seroval@1.3.2) 1282 1283 + solid-refresh@0.6.3(solid-js@1.9.10): 1284 dependencies: 1285 + '@babel/generator': 7.28.5 1286 '@babel/helper-module-imports': 7.27.1 1287 + '@babel/types': 7.28.5 1288 + solid-js: 1.9.10 1289 transitivePeerDependencies: 1290 - supports-color 1291 1292 source-map-js@1.2.1: {} 1293 1294 + tinyglobby@0.2.15: 1295 + dependencies: 1296 + fdir: 6.5.0(picomatch@4.0.3) 1297 + picomatch: 4.0.3 1298 1299 + typescript@5.9.3: {} 1300 + 1301 + update-browserslist-db@1.1.4(browserslist@4.27.0): 1302 dependencies: 1303 + browserslist: 4.27.0 1304 escalade: 3.2.0 1305 picocolors: 1.1.1 1306 1307 + vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.2): 1308 dependencies: 1309 + '@babel/core': 7.28.5 1310 '@types/babel__core': 7.20.5 1311 + babel-preset-solid: 1.9.10(@babel/core@7.28.5)(solid-js@1.9.10) 1312 merge-anything: 5.1.7 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) 1317 transitivePeerDependencies: 1318 - supports-color 1319 1320 + vite@7.2.2: 1321 dependencies: 1322 + esbuild: 0.25.12 1323 + fdir: 6.5.0(picomatch@4.0.3) 1324 + picomatch: 4.0.3 1325 postcss: 8.5.6 1326 + rollup: 4.52.5 1327 + tinyglobby: 0.2.15 1328 optionalDependencies: 1329 fsevents: 2.3.3 1330 1331 + vitefu@1.1.1(vite@7.2.2): 1332 optionalDependencies: 1333 + vite: 7.2.2 1334 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'; 4 5 - import NavBar from "./NavBar"; 6 import PhotoList from "./PhotoList"; 7 import PhotoViewer from "./PhotoViewer"; 8 import SettingsMenu from "./SettingsMenu"; 9 10 - function App() { 11 - invoke('close_splashscreen') 12 13 onMount(() => { 14 - anime.set('.settings', 15 { 16 display: 'none', 17 opacity: 0, 18 translateX: '500px' 19 }) 20 }) 21 22 return ( 23 <div class="container"> 24 - <NavBar /> 25 - 26 <PhotoList /> 27 <PhotoViewer /> 28 29 <SettingsMenu /> 30 31 <div class="copy-notif">Image Copied!</div> 32 </div> 33 ); 34 }
··· 1 + import { createSignal, onMount } from "solid-js"; 2 3 import PhotoList from "./PhotoList"; 4 import PhotoViewer from "./PhotoViewer"; 5 import SettingsMenu from "./SettingsMenu"; 6 + import { animate, utils } from "animejs"; 7 + import { listen } from "@tauri-apps/api/event"; 8 9 + let App = () => { 10 + let [ errorText, setErrorText ] = createSignal(''); 11 12 onMount(() => { 13 + utils.set('.settings', 14 { 15 display: 'none', 16 opacity: 0, 17 translateX: '500px' 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 + }); 38 }) 39 40 return ( 41 <div class="container"> 42 <PhotoList /> 43 <PhotoViewer /> 44 45 <SettingsMenu /> 46 47 <div class="copy-notif">Image Copied!</div> 48 + <div class="error-notif">{ errorText() }</div> 49 </div> 50 ); 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 6 const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 7 8 export class PhotoListRenderingManager{ 9 private _layout: PhotoListRow[] = []; 10 private _canvas!: HTMLCanvasElement; ··· 22 23 let lastDateString = null; 24 let row = new PhotoListRow(); 25 - row.Height = 100; 26 27 for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) { 28 let photo = window.PhotoManager.FilteredPhotos[i]; ··· 60 61 public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){ 62 let currentY = 0; 63 - 64 // Loop through each row 65 for (let i = 0; i < this._layout.length; i++) { 66 let row = this._layout[i]; ··· 124 // ctx.strokeStyle = '#f00'; 125 // ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height); 126 127 - if(!photo.loaded) 128 // If the photo is not loaded, start a new task and load it in that task 129 setTimeout(() => photo.loadImage(), 1); 130 else{ ··· 136 // Photo is already loaded so we should draw it on the application 137 ctx.globalAlpha = photo.frames / 100; 138 ctx.drawImage(photo.image!, (rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, photo.scaledHeight!); 139 140 if(photo.frames < 100) 141 photo.frames += 10;
··· 5 6 const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 7 8 + let multilayerIcon = new Image(); 9 + multilayerIcon.src = '/icon/layer-group-solid-full.svg'; 10 + 11 export class PhotoListRenderingManager{ 12 private _layout: PhotoListRow[] = []; 13 private _canvas!: HTMLCanvasElement; ··· 25 26 let lastDateString = null; 27 let row = new PhotoListRow(); 28 + row.Height = 0; 29 30 for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) { 31 let photo = window.PhotoManager.FilteredPhotos[i]; ··· 63 64 public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){ 65 let currentY = 0; 66 + 67 // Loop through each row 68 for (let i = 0; i < this._layout.length; i++) { 69 let row = this._layout[i]; ··· 127 // ctx.strokeStyle = '#f00'; 128 // ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height); 129 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) 141 // If the photo is not loaded, start a new task and load it in that task 142 setTimeout(() => photo.loadImage(), 1); 143 else{ ··· 149 // Photo is already loaded so we should draw it on the application 150 ctx.globalAlpha = photo.frames / 100; 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); 155 156 if(photo.frames < 100) 157 photo.frames += 10;
+86 -24
src/Components/Managers/PhotoManager.tsx
··· 35 36 let setHasBeenIndexed; 37 [ this._hasBeenIndexed, setHasBeenIndexed ] = createSignal(false); 38 - console.log(this._hasBeenIndexed()) 39 40 listen('photos_loaded', ( event: any ) => { 41 let photoPaths = event.payload.photos.reverse(); ··· 44 setPhotoCount(photoPaths.length); 45 setPhotoSize(event.payload.size); 46 47 - let doesHaveLegacy = false; 48 - 49 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 50 setHasBeenIndexed(true); 51 52 photoPaths.forEach(( path: string, i: number ) => { 53 let photo 54 55 - if(path.slice(0, 9) === "legacy://"){ 56 photo = new Photo(path.slice(9), true, i); 57 - doesHaveLegacy = true; 58 - } else 59 photo = new Photo(path, false, i); 60 61 - this.Photos.push(photo); 62 63 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 64 photo.loadMeta(); 65 }) 66 67 this.Photos = MergeSort(this.Photos); 68 69 console.log(this.Photos.length + ' Photos found.'); 70 if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){ 71 console.log('No photos found or over bulk load limit, Skipping loading stage.'); 72 ··· 75 76 this._finishedLoadingCallbacks.forEach(cb => cb()); 77 } 78 - 79 - console.log(this._hasBeenIndexed()) 80 }); 81 82 listen('photo_meta_loaded', ( event: any ) => { 83 let data: PhotoMetadata = event.payload; 84 - 85 let photo = this.Photos.find(x => x.path === data.path); 86 if(!photo)return console.error('Cannot find photo.', data); 87 88 this._lastLoaded = photo.index; 89 90 if(this._onLoadedMeta[photo.index]){ ··· 102 103 photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1]; 104 this._amountLoaded++; 105 - 106 photo.metaLoaded = true; 107 photo.onMetaLoaded(); 108 109 if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){ 110 this.FilteredPhotos = this.Photos; ··· 116 117 listen('photo_create', async ( event: any ) => { 118 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); 122 123 photo.onMetaLoaded = () => this.ReloadFilters(); 124 photo.loadMeta(); 125 - 126 - if(!window.SyncManager.IsSyncing() && window.AccountManager.Storage()?.isSyncing){ 127 - window.SyncManager.TriggerSync(); 128 - } 129 }) 130 - 131 listen('photo_remove', ( event: any ) => { 132 this.Photos = this.Photos.filter(x => x.path !== event.payload); 133 - this.FilteredPhotos = this.FilteredPhotos.filter(x => x.path !== event.payload); 134 - 135 if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path) 136 window.PhotoViewerManager.Close() 137 ··· 174 public ReloadFilters(){ 175 this.FilteredPhotos = []; 176 177 switch(this._filterType){ 178 case FilterType.USER: 179 this.Photos.map(p => { 180 if(p.metadata){ 181 try{ 182 let meta = JSON.parse(p.metadata); 183 - let photo = meta.players.find(( y: any ) => y.displayName.toLowerCase().includes(this._filter) || y.id === this._filter); 184 185 if(photo)this.FilteredPhotos.push(p); 186 } catch(e){} ··· 192 if(p.metadata){ 193 try{ 194 let meta = JSON.parse(p.metadata); 195 - let photo = meta.world.name.toLowerCase().includes(this._filter) || meta.world.id === this._filter; 196 - 197 if(photo)this.FilteredPhotos.push(p); 198 } catch(e){} 199 }
··· 35 36 let setHasBeenIndexed; 37 [ this._hasBeenIndexed, setHasBeenIndexed ] = createSignal(false); 38 39 listen('photos_loaded', ( event: any ) => { 40 let photoPaths = event.payload.photos.reverse(); ··· 43 setPhotoCount(photoPaths.length); 44 setPhotoSize(event.payload.size); 45 46 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 47 setHasBeenIndexed(true); 48 49 + let photoLayers: Photo[] = []; 50 + 51 photoPaths.forEach(( path: string, i: number ) => { 52 let photo 53 54 + if(path.slice(0, 9) === "legacy://") 55 photo = new Photo(path.slice(9), true, i); 56 + else 57 photo = new Photo(path, false, i); 58 59 + if(!photo.legacy && photo.splitPath[4]){ 60 + photoLayers.push(photo); 61 + } else 62 + this.Photos.push(photo); 63 64 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 65 photo.loadMeta(); 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 + 91 this.Photos = MergeSort(this.Photos); 92 + console.log(this.Photos[0]); 93 94 console.log(this.Photos.length + ' Photos found.'); 95 + 96 if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){ 97 console.log('No photos found or over bulk load limit, Skipping loading stage.'); 98 ··· 101 102 this._finishedLoadingCallbacks.forEach(cb => cb()); 103 } 104 }); 105 106 listen('photo_meta_loaded', ( event: any ) => { 107 let data: PhotoMetadata = event.payload; 108 + 109 let photo = this.Photos.find(x => x.path === data.path); 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. 114 115 + photo.error = data.error; 116 this._lastLoaded = photo.index; 117 118 if(this._onLoadedMeta[photo.index]){ ··· 130 131 photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1]; 132 this._amountLoaded++; 133 + 134 + photo.loadingMeta = false; 135 photo.metaLoaded = true; 136 photo.onMetaLoaded(); 137 + 138 + window.PhotoListRenderingManager.ComputeLayout(); 139 140 if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){ 141 this.FilteredPhotos = this.Photos; ··· 147 148 listen('photo_create', async ( event: any ) => { 149 let photo = new Photo(event.payload, false, 0); 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 + } 177 178 photo.onMetaLoaded = () => this.ReloadFilters(); 179 photo.loadMeta(); 180 }) 181 + 182 listen('photo_remove', ( event: any ) => { 183 this.Photos = this.Photos.filter(x => x.path !== event.payload); 184 + 185 if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path) 186 window.PhotoViewerManager.Close() 187 ··· 224 public ReloadFilters(){ 225 this.FilteredPhotos = []; 226 227 + if(this._filter === ''){ 228 + this.FilteredPhotos = this.Photos; 229 + window.PhotoListRenderingManager.ComputeLayout(); 230 + 231 + return; 232 + } 233 + 234 switch(this._filterType){ 235 case FilterType.USER: 236 this.Photos.map(p => { 237 if(p.metadata){ 238 try{ 239 let meta = JSON.parse(p.metadata); 240 + let photo = meta.players.find(( y: any ) => 241 + y.displayName.toLowerCase().includes(this._filter) || 242 + y.id === this._filter 243 + ); 244 245 if(photo)this.FilteredPhotos.push(p); 246 } catch(e){} ··· 252 if(p.metadata){ 253 try{ 254 let meta = JSON.parse(p.metadata); 255 + let photo = 256 + meta.world.name.toLowerCase().includes(this._filter) || 257 + meta.world.id === this._filter; 258 + 259 if(photo)this.FilteredPhotos.push(p); 260 } catch(e){} 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 private _eventListeners: { from: ViewState, to: ViewState, cb: () => void }[] = []; 10 11 public ChangeState( state: ViewState ){ 12 this._eventListeners.filter(x => x.from === this._state && x.to === state).forEach(c => c.cb()); 13 this._state = state; 14 }
··· 9 private _eventListeners: { from: ViewState, to: ViewState, cb: () => void }[] = []; 10 11 public ChangeState( state: ViewState ){ 12 + console.log('From: ' + this._state + ' To: ' + state); 13 this._eventListeners.filter(x => x.from === this._state && x.to === state).forEach(c => c.cb()); 14 this._state = state; 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"; 2 import { listen } from '@tauri-apps/api/event'; 3 import { Window } from "@tauri-apps/api/window"; 4 5 - import anime from "animejs"; 6 import FilterMenu from "./FilterMenu"; 7 import { ViewState } from "./Managers/ViewManager"; 8 9 enum ListPopup{ 10 FILTERS, ··· 12 } 13 14 let PhotoList = () => { 15 - let photoTreeLoadingContainer: HTMLElement; 16 - 17 let scrollToTop: HTMLElement; 18 let scrollToTopActive = false; 19 20 let photoContainer: HTMLCanvasElement; 21 - let photoContainerBG: HTMLCanvasElement; 22 23 let filterContainer: HTMLDivElement; 24 25 let ctx: CanvasRenderingContext2D; 26 - let ctxBG: CanvasRenderingContext2D; 27 28 let scroll: number = 0; 29 let targetScroll: number = 0; ··· 32 33 let currentPopup = ListPopup.NONE; 34 35 Window.getCurrent().isVisible().then(visible => { 36 quitRender = !visible; 37 }) 38 39 40 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => { 41 - anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 42 }); 43 44 window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => { 45 - anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 46 }); 47 48 49 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 }); 54 55 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 }); 60 61 ··· 65 } 66 } 67 68 let closeCurrentPopup = () => { 69 switch(currentPopup){ 70 case ListPopup.FILTERS: 71 - anime({ 72 - targets: filterContainer!, 73 opacity: 0, 74 easing: 'easeInOutQuad', 75 duration: 100, 76 - complete: () => { 77 filterContainer!.style.display = 'none'; 78 currentPopup = ListPopup.NONE; 79 } ··· 83 } 84 } 85 86 - let render = () => { 87 if(!quitRender) 88 requestAnimationFrame(render); 89 else ··· 91 92 if(!scrollToTopActive && scroll > photoContainer.height){ 93 scrollToTop.style.display = 'flex'; 94 - anime({ targets: scrollToTop, opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 95 96 scrollToTopActive = true; 97 } else if(scrollToTopActive && scroll < photoContainer.height){ 98 - anime({ targets: scrollToTop, opacity: 0, translateY: '-10px', complete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 99 scrollToTopActive = false; 100 } 101 102 - if(!ctx || !ctxBG)return; 103 ctx.clearRect(0, 0, photoContainer.width, photoContainer.height); 104 - ctxBG.clearRect(0, 0, photoContainerBG.width, photoContainerBG.height); 105 106 - scroll = scroll + (targetScroll - scroll) * 0.2; 107 108 window.PhotoListRenderingManager.Render(ctx, photoContainer!, scroll); 109 ··· 116 117 ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2); 118 } 119 - 120 - ctxBG.drawImage(photoContainer, 0, 0); 121 } 122 123 listen('hide-window', () => { 124 - console.log('Hide Window'); 125 quitRender = true; 126 }) 127 128 listen('show-window', () => { 129 console.log('Shown Window'); 130 - quitRender = false; 131 132 - if(window.PhotoManager.HasFirstLoaded) 133 requestAnimationFrame(render); 134 }) 135 136 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 - }) 147 148 - anime({ 149 - targets: '.reload-photos', 150 opacity: 1, 151 duration: 150, 152 easing: 'easeInOutQuad' 153 }) 154 155 window.PhotoListRenderingManager.SetCanvas(photoContainer!); 156 - window.PhotoListRenderingManager.ComputeLayout(); 157 - 158 render(); 159 }); 160 161 onMount(() => { 162 ctx = photoContainer.getContext('2d')!; 163 - ctxBG = photoContainerBG.getContext('2d')!; 164 165 window.PhotoManager.Load(); 166 167 - anime.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 168 169 - photoContainer.addEventListener('wheel', ( e: WheelEvent ) => { 170 - targetScroll += e.deltaY; 171 172 if(targetScroll < 0) 173 targetScroll = 0; 174 - }); 175 176 window.addEventListener('keyup', closeWithKey); 177 178 photoContainer.width = window.innerWidth; 179 photoContainer.height = window.innerHeight; 180 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 ) => { 195 let photo = window.PhotoManager.FilteredPhotos.find(x => 196 e.clientX > x.x && 197 e.clientY > x.y && ··· 204 window.PhotoViewerManager.OpenPhoto(photo); 205 // else 206 // currentPhotoIndex = -1; 207 - }) 208 }) 209 210 onCleanup(() => { 211 window.removeEventListener('keyup', closeWithKey); 212 }) 213 214 return ( 215 <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 - }}> 220 <FilterMenu /> 221 </div> 222 - 223 - <div class="photo-tree-loading" ref={( el ) => photoTreeLoadingContainer = el}>Scanning Photo Tree...</div> 224 225 <div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}> 226 <div class="icon"> 227 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 228 </div> 229 </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 236 <div class="filter-options"> 237 <div> ··· 241 242 filterContainer!.style.display = 'block'; 243 244 - anime({ 245 - targets: filterContainer!, 246 opacity: 1, 247 easing: 'easeInOutQuad', 248 duration: 100 249 }); 250 - }} class="icon" style={{ width: '20px', height: '20px', padding: '20px' }}> 251 <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img> 252 </div> 253 <div class="icon-label">Filters</div> 254 </div> 255 </div> 256 257 <canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas> 258 - <canvas class="photo-container-bg" ref={( el ) => photoContainerBG = el}></canvas> 259 </div> 260 ) 261 }
··· 1 + import { createSignal, onCleanup, onMount, Show } from "solid-js"; 2 import { listen } from '@tauri-apps/api/event'; 3 import { Window } from "@tauri-apps/api/window"; 4 5 import FilterMenu from "./FilterMenu"; 6 import { ViewState } from "./Managers/ViewManager"; 7 + import { invoke } from "@tauri-apps/api/core"; 8 + import { animate, utils } from "animejs"; 9 10 enum ListPopup{ 11 FILTERS, ··· 13 } 14 15 let PhotoList = () => { 16 let scrollToTop: HTMLElement; 17 let scrollToTopActive = false; 18 19 let photoContainer: HTMLCanvasElement; 20 21 let filterContainer: HTMLDivElement; 22 23 let ctx: CanvasRenderingContext2D; 24 25 let scroll: number = 0; 26 let targetScroll: number = 0; ··· 29 30 let currentPopup = ListPopup.NONE; 31 32 + let [ updateAvailable, setUpdateAvailable ] = createSignal(false); 33 + 34 Window.getCurrent().isVisible().then(visible => { 35 quitRender = !visible; 36 }) 37 38 39 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => { 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 }); 43 }); 44 45 window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => { 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 }); 49 }); 50 51 52 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.PHOTO_VIEWER, () => { 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 }); 56 }); 57 58 window.ViewManager.OnStateTransition(ViewState.PHOTO_VIEWER, ViewState.PHOTO_LIST, () => { 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 }); 62 }); 63 64 ··· 68 } 69 } 70 71 + let onResize = () => { 72 + photoContainer.width = window.innerWidth; 73 + photoContainer.height = window.innerHeight; 74 + 75 + window.PhotoListRenderingManager.ComputeLayout(); 76 + } 77 + 78 let closeCurrentPopup = () => { 79 switch(currentPopup){ 80 case ListPopup.FILTERS: 81 + animate(filterContainer!, { 82 opacity: 0, 83 + translateY: '10px', 84 easing: 'easeInOutQuad', 85 duration: 100, 86 + onComplete: () => { 87 filterContainer!.style.display = 'none'; 88 currentPopup = ListPopup.NONE; 89 } ··· 93 } 94 } 95 96 + let render = () => { 97 if(!quitRender) 98 requestAnimationFrame(render); 99 else ··· 101 102 if(!scrollToTopActive && scroll > photoContainer.height){ 103 scrollToTop.style.display = 'flex'; 104 + animate(scrollToTop, { opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 105 106 scrollToTopActive = true; 107 } else if(scrollToTopActive && scroll < photoContainer.height){ 108 + animate(scrollToTop, { opacity: 0, translateY: '-10px', onComplete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 109 + 110 scrollToTopActive = false; 111 } 112 113 + if(!ctx)return; 114 ctx.clearRect(0, 0, photoContainer.width, photoContainer.height); 115 116 + scroll = scroll + (targetScroll - scroll) * 0.1; 117 118 window.PhotoListRenderingManager.Render(ctx, photoContainer!, scroll); 119 ··· 126 127 ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2); 128 } 129 } 130 131 listen('hide-window', () => { 132 quitRender = true; 133 + console.log('Hide Window'); 134 }) 135 136 listen('show-window', () => { 137 + if(quitRender)quitRender = false; 138 console.log('Shown Window'); 139 140 + photoContainer.width = window.innerWidth; 141 + photoContainer.height = window.innerHeight; 142 + 143 + if(window.PhotoManager.HasFirstLoaded){ 144 requestAnimationFrame(render); 145 + window.PhotoManager.HasFirstLoaded = false; 146 + } 147 }) 148 149 window.PhotoManager.OnLoadingFinished(() => { 150 + invoke('close_splashscreen'); 151 152 + animate('.reload-photos', { 153 opacity: 1, 154 duration: 150, 155 easing: 'easeInOutQuad' 156 }) 157 158 window.PhotoListRenderingManager.SetCanvas(photoContainer!); 159 render(); 160 }); 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 179 ctx = photoContainer.getContext('2d')!; 180 181 window.PhotoManager.Load(); 182 183 + utils.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 184 185 + photoContainer.onwheel = ( e: WheelEvent ) => { 186 + targetScroll += e.deltaY * 2; 187 188 if(targetScroll < 0) 189 targetScroll = 0; 190 + }; 191 192 window.addEventListener('keyup', closeWithKey); 193 + window.addEventListener('resize', onResize); 194 195 photoContainer.width = window.innerWidth; 196 photoContainer.height = window.innerHeight; 197 198 + photoContainer.onclick = ( e: MouseEvent ) => { 199 let photo = window.PhotoManager.FilteredPhotos.find(x => 200 e.clientX > x.x && 201 e.clientY > x.y && ··· 208 window.PhotoViewerManager.OpenPhoto(photo); 209 // else 210 // currentPhotoIndex = -1; 211 + } 212 }) 213 214 onCleanup(() => { 215 + photoContainer.onwheel = () => {}; 216 + photoContainer.onclick = () => {}; 217 + 218 window.removeEventListener('keyup', closeWithKey); 219 + window.removeEventListener('resize', onResize); 220 }) 221 222 return ( 223 <div class="photo-list"> 224 + <div ref={filterContainer!} class="filter-container"> 225 <FilterMenu /> 226 </div> 227 228 <div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}> 229 <div class="icon"> 230 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 231 </div> 232 </div> 233 234 <div class="filter-options"> 235 <div> ··· 239 240 filterContainer!.style.display = 'block'; 241 242 + animate(filterContainer!, { 243 opacity: 1, 244 + translateY: 0, 245 easing: 'easeInOutQuad', 246 duration: 100 247 }); 248 + }} class="icon"> 249 <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img> 250 </div> 251 <div class="icon-label">Filters</div> 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> 290 </div> 291 292 <canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas> 293 </div> 294 ) 295 }
+218 -110
src/Components/PhotoViewer.tsx
··· 1 import { For, Show, createEffect, onCleanup, onMount } from "solid-js"; 2 import { invoke } from '@tauri-apps/api/core'; 3 - import anime from 'animejs'; 4 import { WorldCache } from "./Structs/WorldCache"; 5 6 let PhotoViewer = () => { 7 let viewer: HTMLElement; ··· 21 let viewerContextMenuButtons: HTMLElement[] = []; 22 23 let allowedToOpenTray = false; 24 - let trayInAnimation = false; 25 26 let authorProfileButton: HTMLDivElement; 27 28 let switchPhotoWithKey = ( e: KeyboardEvent ) => { 29 switch(e.key){ ··· 52 } 53 } 54 55 let openTray = () => { 56 - if(trayOpen || trayInAnimation)return; 57 58 - trayOpen = true; 59 - trayInAnimation = true; 60 61 window.CloseAllPopups.forEach(p => p()); 62 - anime({ targets: photoTray, bottom: '0px', duration: 500 }); 63 64 - anime({ 65 - targets: photoControls, 66 bottom: '160px', 67 scale: '0.75', 68 opacity: 0, 69 duration: 500, 70 - complete: () => { 71 photoControls.style.display = 'none'; 72 - trayInAnimation = false; 73 } 74 }); 75 76 photoTrayCloseBtn.style.display = 'flex'; 77 - anime({ 78 - targets: photoTrayCloseBtn, 79 bottom: '160px', 80 opacity: 1, 81 scale: 1, 82 duration: 500 ··· 84 } 85 86 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(); 103 104 - anime.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 105 - anime({ 106 - targets: '.copy-notif', 107 - opacity: 1, 108 - translateY: '0px' 109 - }); 110 111 - setTimeout(() => { 112 - anime({ 113 - targets: '.copy-notif', 114 - opacity: 0, 115 - translateY: '-100px' 116 }); 117 - }, 2000); 118 - }); 119 } 120 121 let closeTray = () => { 122 - if(!trayOpen || trayInAnimation)return; 123 - trayInAnimation = true; 124 125 window.CloseAllPopups.forEach(p => p()); 126 - anime({ targets: photoTray, bottom: '-150px', duration: 500 }); 127 128 - anime({ 129 - targets: photoTrayCloseBtn, 130 bottom: '10px', 131 scale: '0.75', 132 opacity: 0, 133 duration: 500, 134 - complete: () => { 135 photoTrayCloseBtn.style.display = 'none'; 136 - trayOpen = false; 137 - trayInAnimation = false; 138 } 139 }); 140 141 photoControls.style.display = 'flex'; 142 - anime({ 143 - targets: photoControls, 144 bottom: '10px', 145 opacity: 1, 146 scale: 1, 147 duration: 500, 148 }) 149 } 150 151 onMount(() => { 152 - anime.set(photoControls, { translateX: '-50%' }); 153 - anime.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 154 155 window.addEventListener('keyup', switchPhotoWithKey); 156 157 let contextMenuOpen = false; 158 window.CloseAllPopups.push(() => { 159 contextMenuOpen = false; 160 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 161 162 - anime({ 163 - targets: viewerContextMenu, 164 opacity: 0, 165 easing: 'easeInOutQuad', 166 rotate: '30deg', 167 duration: 100, 168 - complete: () => { 169 viewerContextMenu.style.display = 'none'; 170 } 171 }) 172 }); 173 174 viewerContextMenuButtons[0].onclick = async () => { 175 window.CloseAllPopups.forEach(p => p()); 176 // Context Menu -> Open file location ··· 189 if(contextMenuOpen){ 190 contextMenuOpen = false; 191 192 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 193 194 - anime({ 195 - targets: viewerContextMenu, 196 opacity: 0, 197 rotate: '30deg', 198 easing: 'easeInOutQuad', 199 duration: 100, 200 - complete: () => { 201 viewerContextMenu.style.display = 'none'; 202 } 203 }) ··· 208 viewerContextMenu.style.left = e.clientX + 'px'; 209 viewerContextMenu.style.display = 'block'; 210 211 - anime.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 212 213 - anime({ 214 - targets: viewerContextMenu, 215 opacity: 1, 216 rotate: '0deg', 217 easing: 'easeInOutQuad', ··· 230 imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full"; 231 imageViewer.crossOrigin = 'anonymous'; 232 233 - anime({ 234 - targets: imageViewer, 235 opacity: 1, 236 delay: 50, 237 duration: 150, ··· 291 let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML; 292 293 authorProfileButton!.style.display = 'flex'; 294 - authorProfileButton!.onclick = () => 295 invoke('open_url', { url: 'https://vrchat.com/home/user/' + id }); 296 } catch(e){ 297 console.error(e); 298 console.log('Couldn\'t decode metadata') ··· 305 } 306 } else{ 307 trayButton.style.display = 'none'; 308 closeTray(); 309 } 310 } ··· 315 if(photo && !isOpen){ 316 viewer.style.display = 'flex'; 317 318 - anime({ 319 - targets: viewer, 320 opacity: 1, 321 easing: 'easeInOutQuad', 322 duration: 150 323 }); 324 - 325 - anime({ 326 - targets: '.navbar', 327 - top: '-50px' 328 - }) 329 330 - anime.set('.prev-button', { left: '-50px', top: '50%' }); 331 - anime.set('.next-button', { right: '-50px', top: '50%' }); 332 333 - anime({ targets: '.prev-button', left: '0', easing: 'easeInOutQuad', duration: 100 }); 334 - anime({ targets: '.next-button', right: '0', easing: 'easeInOutQuad', duration: 100 }); 335 336 window.CloseAllPopups.forEach(p => p()); 337 } else if(!photo && isOpen){ 338 - anime({ 339 - targets: viewer, 340 opacity: 0, 341 easing: 'easeInOutQuad', 342 duration: 150, 343 - complete: () => { 344 viewer.style.display = 'none'; 345 } 346 }); 347 - 348 - anime({ 349 - targets: '.navbar', 350 - top: '0px' 351 - }) 352 353 window.CloseAllPopups.forEach(p => p()); 354 355 - anime({ targets: '.prev-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 356 - anime({ targets: '.next-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 357 } 358 359 isOpen = photo != null; ··· 394 ) 395 } 396 397 return ( 398 <div class="photo-viewer" ref={( el ) => viewer = el}> 399 <div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}> 400 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div> 401 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div> 402 </div> 403 404 <div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}> 405 - <div class="icon" style={{ width: '10px', margin: '0' }}> 406 <img draggable="false" src="/icon/x-solid.svg"></img> 407 </div> 408 </div> 409 - <img class="image-container" ref={( el ) => imageViewer = el} /> 410 411 <div class="prev-button" onClick={() => { 412 window.CloseAllPopups.forEach(p => p()); 413 window.PhotoViewerManager.PreviousPhoto(); 414 }}> 415 - <div class="icon" style={{ width: '15px', margin: '0' }}> 416 <img draggable="false" src="/icon/arrow-left-solid.svg"></img> 417 </div> 418 </div> ··· 421 window.CloseAllPopups.forEach(p => p()); 422 window.PhotoViewerManager.NextPhoto(); 423 }}> 424 - <div class="icon" style={{ width: '15px', margin: '0' }}> 425 <img draggable="false" src="/icon/arrow-right-solid.svg"></img> 426 </div> 427 </div> ··· 432 onClick={() => closeTray()} 433 ref={( el ) => photoTrayCloseBtn = el} 434 > 435 - <div class="icon" style={{ width: '12px', margin: '0' }}> 436 <img draggable="false" src="/icon/angle-down-solid.svg"></img> 437 </div> 438 </div> 439 440 <div class="control-buttons" ref={( el ) => photoControls = el}> 441 <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' })} 444 onClick={() => { copyImage(); }}> 445 - <div class="icon" style={{ width: '12px', margin: '0' }}> 446 <img draggable="false" src="/icon/copy-solid.svg"></img> 447 </div> 448 </div> 449 <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' })} 452 ref={( el ) => trayButton = el} 453 onClick={() => openTray()} 454 > 455 - <div class="icon" style={{ width: '12px', margin: '0' }}> 456 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 457 </div> 458 </div> 459 460 <div class="viewer-button" 461 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' })} 464 > 465 - <div class="icon" style={{ width: '12px', margin: '0' }}> 466 <img draggable="false" src="/icon/user-solid.svg"></img> 467 </div> 468 </div> 469 470 <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 - }); 478 })}> 479 - <div class="icon" style={{ width: '12px', margin: '0' }}> 480 <img draggable="false" src="/icon/trash-solid.svg"></img> 481 </div> 482 </div>
··· 1 import { For, Show, createEffect, onCleanup, onMount } from "solid-js"; 2 import { invoke } from '@tauri-apps/api/core'; 3 import { WorldCache } from "./Structs/WorldCache"; 4 + import { animate, JSAnimation, utils } from "animejs"; 5 6 let PhotoViewer = () => { 7 let viewer: HTMLElement; ··· 21 let viewerContextMenuButtons: HTMLElement[] = []; 22 23 let allowedToOpenTray = false; 24 25 let authorProfileButton: HTMLDivElement; 26 + 27 + let photoLayerManager!: HTMLDivElement; 28 29 let switchPhotoWithKey = ( e: KeyboardEvent ) => { 30 switch(e.key){ ··· 53 } 54 } 55 56 + let trayAnimation: JSAnimation[] = []; 57 + 58 let openTray = () => { 59 + if(trayOpen)return; 60 + trayOpen = true; 61 62 + trayAnimation.forEach(anim => anim.cancel()); 63 64 window.CloseAllPopups.forEach(p => p()); 65 + trayAnimation[0] = animate(photoTray, { bottom: '-150px', duration: 500, ease: 'outElastic' }); 66 67 + trayAnimation[1] = animate(photoControls, { 68 bottom: '160px', 69 + ease: 'outElastic', 70 scale: '0.75', 71 opacity: 0, 72 duration: 500, 73 + onComplete: () => { 74 photoControls.style.display = 'none'; 75 } 76 }); 77 78 photoTrayCloseBtn.style.display = 'flex'; 79 + trayAnimation[2] = animate(photoTrayCloseBtn, { 80 bottom: '160px', 81 + ease: 'outElastic', 82 opacity: 1, 83 scale: 1, 84 duration: 500 ··· 86 } 87 88 let copyImage = () => { 89 + let path; 90 + let photo = window.PhotoViewerManager.CurrentPhoto()!; 91 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 + } 103 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' 111 }); 112 + 113 + setTimeout(() => { 114 + animate('.copy-notif', { 115 + ease: 'outElastic', 116 + opacity: 0, 117 + translateY: '-100px' 118 + }); 119 + }, 2000); 120 + }) 121 } 122 123 let closeTray = () => { 124 + if(!trayOpen)return; 125 + trayOpen = false; 126 + 127 + trayAnimation.forEach(anim => anim.cancel()); 128 129 window.CloseAllPopups.forEach(p => p()); 130 + trayAnimation[0] = animate(photoTray, { bottom: '-300px', duration: 500, ease: 'outElastic' }); 131 132 + trayAnimation[2] = animate(photoTrayCloseBtn, { 133 bottom: '10px', 134 scale: '0.75', 135 + ease: 'outElastic', 136 opacity: 0, 137 duration: 500, 138 + onComplete: () => { 139 photoTrayCloseBtn.style.display = 'none'; 140 } 141 }); 142 143 photoControls.style.display = 'flex'; 144 + trayAnimation[1] = animate(photoControls, { 145 bottom: '10px', 146 + ease: 'outElastic', 147 opacity: 1, 148 scale: 1, 149 duration: 500, 150 }) 151 } 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 + 175 onMount(() => { 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' }); 179 180 window.addEventListener('keyup', switchPhotoWithKey); 181 + window.addEventListener('resize', () => resizeImage()); 182 183 let contextMenuOpen = false; 184 window.CloseAllPopups.push(() => { 185 contextMenuOpen = false; 186 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 187 188 + animate(viewerContextMenu, { 189 opacity: 0, 190 easing: 'easeInOutQuad', 191 rotate: '30deg', 192 duration: 100, 193 + onComplete: () => { 194 viewerContextMenu.style.display = 'none'; 195 } 196 }) 197 }); 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 + 206 viewerContextMenuButtons[0].onclick = async () => { 207 window.CloseAllPopups.forEach(p => p()); 208 // Context Menu -> Open file location ··· 221 if(contextMenuOpen){ 222 contextMenuOpen = false; 223 224 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 225 226 + animate(viewerContextMenu, { 227 opacity: 0, 228 rotate: '30deg', 229 easing: 'easeInOutQuad', 230 duration: 100, 231 + onComplete: () => { 232 viewerContextMenu.style.display = 'none'; 233 } 234 }) ··· 239 viewerContextMenu.style.left = e.clientX + 'px'; 240 viewerContextMenu.style.display = 'block'; 241 242 + utils.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 243 244 + animate(viewerContextMenu, { 245 opacity: 1, 246 rotate: '0deg', 247 easing: 'easeInOutQuad', ··· 260 imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full"; 261 imageViewer.crossOrigin = 'anonymous'; 262 263 + imageViewer.onload = () => { resizeImage(); } 264 + 265 + animate(imageViewer, { 266 opacity: 1, 267 delay: 50, 268 duration: 150, ··· 322 let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML; 323 324 authorProfileButton!.style.display = 'flex'; 325 + authorProfileButton!.onclick = () => { 326 + console.log(id); 327 invoke('open_url', { url: 'https://vrchat.com/home/user/' + id }); 328 + } 329 } catch(e){ 330 console.error(e); 331 console.log('Couldn\'t decode metadata') ··· 338 } 339 } else{ 340 trayButton.style.display = 'none'; 341 + authorProfileButton!.style.display = 'none'; 342 + 343 closeTray(); 344 } 345 } ··· 350 if(photo && !isOpen){ 351 viewer.style.display = 'flex'; 352 353 + animate(viewer, { 354 opacity: 1, 355 easing: 'easeInOutQuad', 356 duration: 150 357 }); 358 359 + utils.set('.prev-button', { left: '-50px', top: '50%' }); 360 + utils.set('.next-button', { right: '-50px', top: '50%' }); 361 362 + animate('.prev-button', { left: '0', easing: 'easeInOutQuad', duration: 100 }); 363 + animate('.next-button', { right: '0', easing: 'easeInOutQuad', duration: 100 }); 364 365 window.CloseAllPopups.forEach(p => p()); 366 } else if(!photo && isOpen){ 367 + animate(viewer, { 368 opacity: 0, 369 easing: 'easeInOutQuad', 370 duration: 150, 371 + onComplete: () => { 372 viewer.style.display = 'none'; 373 } 374 }); 375 376 window.CloseAllPopups.forEach(p => p()); 377 378 + animate('.prev-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 379 + animate('.next-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 380 } 381 382 isOpen = photo != null; ··· 417 ) 418 } 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 + 447 return ( 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 + 483 <div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}> 484 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div> 485 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div> 486 </div> 487 488 <div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}> 489 + <div class="icon-small" style={{ width: '10px', margin: '0' }}> 490 <img draggable="false" src="/icon/x-solid.svg"></img> 491 </div> 492 </div> 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> 503 504 <div class="prev-button" onClick={() => { 505 window.CloseAllPopups.forEach(p => p()); 506 window.PhotoViewerManager.PreviousPhoto(); 507 }}> 508 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 509 <img draggable="false" src="/icon/arrow-left-solid.svg"></img> 510 </div> 511 </div> ··· 514 window.CloseAllPopups.forEach(p => p()); 515 window.PhotoViewerManager.NextPhoto(); 516 }}> 517 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 518 <img draggable="false" src="/icon/arrow-right-solid.svg"></img> 519 </div> 520 </div> ··· 525 onClick={() => closeTray()} 526 ref={( el ) => photoTrayCloseBtn = el} 527 > 528 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 529 <img draggable="false" src="/icon/angle-down-solid.svg"></img> 530 </div> 531 </div> 532 533 <div class="control-buttons" ref={( el ) => photoControls = el}> 534 <div class="viewer-button" 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' })} 537 onClick={() => { copyImage(); }}> 538 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 539 <img draggable="false" src="/icon/copy-solid.svg"></img> 540 </div> 541 </div> 542 <div class="viewer-button" style={{ width: '50px' }} 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' })} 545 ref={( el ) => trayButton = el} 546 onClick={() => openTray()} 547 > 548 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 549 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 550 </div> 551 </div> 552 553 <div class="viewer-button" 554 ref={authorProfileButton!} 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' })} 557 > 558 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 559 <img draggable="false" src="/icon/user-solid.svg"></img> 560 </div> 561 </div> 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 + 575 <div class="viewer-button" 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 }); 586 })}> 587 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 588 <img draggable="false" src="/icon/trash-solid.svg"></img> 589 </div> 590 </div>
+191 -208
src/Components/SettingsMenu.tsx
··· 1 import { onCleanup, onMount, Show } from "solid-js"; 2 import { bytesToFormatted } from "../utils"; 3 import { invoke } from '@tauri-apps/api/core'; 4 - import anime from "animejs"; 5 import { ViewState } from "./Managers/ViewManager"; 6 7 let SettingsMenu = () => { 8 - let sliderBar: HTMLElement; 9 - let settingsContainer: HTMLElement; 10 - let currentButton = 0; 11 - let lastClickedButton = -1; 12 let finalPathConfirm: HTMLElement; 13 let finalPathInput: HTMLElement; 14 let finalPathData: string; ··· 17 let closeWithKey = ( e: KeyboardEvent ) => { 18 if(e.key === 'Escape'){ 19 window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 20 - anime({ 21 - targets: '.settings', 22 opacity: 0, 23 translateX: '500px', 24 easing: 'easeInOutQuad', 25 duration: 250, 26 - complete: () => { 27 - anime.set('.settings', { display: 'none' }); 28 } 29 }) 30 } ··· 34 if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){ 35 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 36 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 }); 39 } else{ 40 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 41 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 }); 44 } 45 46 - let sliderMouseDown = false; 47 - let mouseStartX = 0; 48 49 - let width = window.innerWidth; 50 - let buttons = [ 370, 680 ]; 51 52 - let sliderPos = width / 2 - buttons[currentButton]; 53 - let sliderScale = width / (buttons[1] - buttons[0]); 54 55 - let render = () => { 56 - requestAnimationFrame(render); 57 58 - if(!sliderMouseDown){ 59 - sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 60 - anime.set(sliderBar, { translateX: sliderPos }); 61 62 - settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 63 - } 64 - } 65 66 - render(); 67 - anime.set(sliderBar, { translateX: sliderPos }); 68 69 - sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 70 - sliderMouseDown = true; 71 - mouseStartX = e.touches[0].clientX; 72 - }) 73 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 - }) 80 81 window.addEventListener('keyup', closeWithKey); 82 83 - window.addEventListener('touchend', ( e: TouchEvent ) => { 84 - if(sliderMouseDown){ 85 - sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 86 87 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 88 - sliderMouseDown = false; 89 90 - if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 91 - let shortestDistance = 0; 92 - let selectedButton = -1; 93 94 - buttons.forEach(( pos, indx ) => { 95 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 96 97 - if(selectedButton === -1){ 98 - shortestDistance = dis; 99 - selectedButton = indx; 100 - } else if(shortestDistance > dis){ 101 - shortestDistance = dis; 102 - selectedButton = indx; 103 - } 104 - }) 105 106 - currentButton = selectedButton; 107 - } else if(lastClickedButton != -1){ 108 - currentButton = lastClickedButton; 109 - lastClickedButton = -1 110 - } 111 - } 112 - }) 113 114 - sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 115 - sliderMouseDown = true; 116 - mouseStartX = e.clientX; 117 - }); 118 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 - }) 126 127 - window.addEventListener('mouseup', ( e: MouseEvent ) => { 128 - if(sliderMouseDown){ 129 - sliderPos = sliderPos - (mouseStartX - e.clientX); 130 131 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 132 - sliderMouseDown = false; 133 134 - if(Math.abs(mouseStartX - e.clientX) > 50){ 135 - let shortestDistance = 0; 136 - let selectedButton = -1; 137 138 - buttons.forEach(( pos, indx ) => { 139 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 140 141 - if(selectedButton === -1){ 142 - shortestDistance = dis; 143 - selectedButton = indx; 144 - } else if(shortestDistance > dis){ 145 - shortestDistance = dis; 146 - selectedButton = indx; 147 - } 148 - }) 149 150 - currentButton = selectedButton; 151 - } else if(lastClickedButton != -1){ 152 - currentButton = lastClickedButton; 153 - lastClickedButton = -1 154 - } 155 - } 156 - }) 157 158 - window.addEventListener('resize', () => { 159 - width = window.innerWidth; 160 - sliderPos = width / 2 - buttons[currentButton]; 161 - sliderScale = width / (buttons[1] - buttons[0]); 162 163 - anime.set(sliderBar, { translateX: sliderPos }); 164 - }) 165 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 - }) 175 }) 176 177 onCleanup(() => { ··· 180 181 return ( 182 <div class="settings"> 183 - <div class="settings-container" ref={( el ) => settingsContainer = el}> 184 <div class="settings-block"> 185 <h1>Storage Settings</h1> 186 <p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p> ··· 199 200 <label for="start-in-bg-check"> 201 <div class="selection-box"> 202 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 203 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 204 </div> 205 </div> ··· 207 </div> 208 209 <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; 212 }} onChange={( el ) => { 213 if(el.target.checked){ 214 - invoke('set_config_value_string', { key: 'start-with-win', value: 'true' }); 215 - invoke("start_with_win", { start: true }); 216 } else{ 217 - invoke('set_config_value_string', { key: 'start-with-win', value: 'false' }); 218 - invoke("start_with_win", { start: false }); 219 } 220 }} /> 221 - Start with windows 222 223 - <label for="start-with-win-check"> 224 <div class="selection-box"> 225 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 226 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 227 </div> 228 </div> 229 </label> 230 </div> 231 232 <div class="selector"> 233 <input type="checkbox" id="transparent-check" ref={async ( el ) => { 234 el.checked = await invoke('get_config_value_string', { key: 'transparent' }) === "true" ? true : false; ··· 236 if(el.target.checked){ 237 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 238 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 }); 241 } else{ 242 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 243 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 }); 246 } 247 }} /> 248 Window Transparency 249 250 <label for="transparent-check"> 251 <div class="selection-box"> 252 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 253 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 254 </div> 255 </div> ··· 274 </span> 275 <span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}> 276 <span class="path" style={{ color: 'green' }} onClick={async () => { 277 - finalPathPreviousData = finalPathData; 278 - finalPathConfirm.style.display = 'none'; 279 280 - await invoke('change_final_path', { newPath: finalPathData }); 281 - await invoke('relaunch'); 282 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 - }) 293 294 - window.location.reload(); 295 }}> 296 Save 297 </span> ··· 314 <br /> 315 <p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p> 316 </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 </div> 377 378 - <div class="slide-bar-tri"></div> 379 <div class="slide-bar"> 380 <div class="inner-slide-bar" ref={( el ) => sliderBar = el}> 381 <div class="slider-dot"></div> ··· 386 <div class="slider-text" onMouseDown={() => lastClickedButton = 0}>Program Settings</div> 387 <div class="slider-dot"></div> 388 <div class="slider-dot"></div> 389 - <div class="slider-text" onMouseDown={() => lastClickedButton = 1}>Account Settings</div> 390 <div class="slider-dot"></div> 391 <div class="slider-dot"></div> 392 <div class="slider-dot"></div> 393 <div class="slider-dot"></div> 394 <div class="slider-dot"></div> 395 </div> 396 - </div> 397 </div> 398 ) 399 }
··· 1 import { onCleanup, onMount, Show } from "solid-js"; 2 import { bytesToFormatted } from "../utils"; 3 import { invoke } from '@tauri-apps/api/core'; 4 import { ViewState } from "./Managers/ViewManager"; 5 + import { animate, utils } from "animejs"; 6 7 let SettingsMenu = () => { 8 + // let sliderBar: HTMLElement; 9 + // let settingsContainer: HTMLElement; 10 + // let currentButton = 0; 11 + // let lastClickedButton = -1; 12 let finalPathConfirm: HTMLElement; 13 let finalPathInput: HTMLElement; 14 let finalPathData: string; ··· 17 let closeWithKey = ( e: KeyboardEvent ) => { 18 if(e.key === 'Escape'){ 19 window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 20 + console.log('h'); 21 + animate('.settings',{ 22 opacity: 0, 23 translateX: '500px', 24 easing: 'easeInOutQuad', 25 duration: 250, 26 + onComplete: () => { 27 + console.log('h'); 28 + utils.set('.settings', { display: 'none' }); 29 } 30 }) 31 } ··· 35 if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){ 36 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 37 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 }); 40 } else{ 41 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 42 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 }); 45 } 46 47 + // let sliderMouseDown = false; 48 + // let mouseStartX = 0; 49 50 + // let width = window.innerWidth; 51 + // let buttons = [ 370, 680 ]; 52 53 + // let sliderPos = width / 2 - buttons[currentButton]; 54 + // let sliderScale = width / (buttons[1] - buttons[0]); 55 56 + // let render = () => { 57 + // requestAnimationFrame(render); 58 59 + // if(!sliderMouseDown){ 60 + // sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 61 + // utils.set(sliderBar, { translateX: sliderPos }); 62 63 + // settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 64 + // } 65 + // } 66 67 + // render(); 68 + // utils.set(sliderBar, { translateX: sliderPos }); 69 70 + // sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 71 + // sliderMouseDown = true; 72 + // mouseStartX = e.touches[0].clientX; 73 + // }) 74 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 + // }) 81 82 window.addEventListener('keyup', closeWithKey); 83 84 + // window.addEventListener('touchend', ( e: TouchEvent ) => { 85 + // if(sliderMouseDown){ 86 + // sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 87 88 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 89 + // sliderMouseDown = false; 90 91 + // if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 92 + // let shortestDistance = 0; 93 + // let selectedButton = -1; 94 95 + // buttons.forEach(( pos, indx ) => { 96 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 97 98 + // if(selectedButton === -1){ 99 + // shortestDistance = dis; 100 + // selectedButton = indx; 101 + // } else if(shortestDistance > dis){ 102 + // shortestDistance = dis; 103 + // selectedButton = indx; 104 + // } 105 + // }) 106 107 + // currentButton = selectedButton; 108 + // } else if(lastClickedButton != -1){ 109 + // currentButton = lastClickedButton; 110 + // lastClickedButton = -1 111 + // } 112 + // } 113 + // }) 114 115 + // sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 116 + // sliderMouseDown = true; 117 + // mouseStartX = e.clientX; 118 + // }); 119 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 + // }) 127 128 + // window.addEventListener('mouseup', ( e: MouseEvent ) => { 129 + // if(sliderMouseDown){ 130 + // sliderPos = sliderPos - (mouseStartX - e.clientX); 131 132 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 133 + // sliderMouseDown = false; 134 135 + // if(Math.abs(mouseStartX - e.clientX) > 50){ 136 + // let shortestDistance = 0; 137 + // let selectedButton = -1; 138 139 + // buttons.forEach(( pos, indx ) => { 140 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 141 142 + // if(selectedButton === -1){ 143 + // shortestDistance = dis; 144 + // selectedButton = indx; 145 + // } else if(shortestDistance > dis){ 146 + // shortestDistance = dis; 147 + // selectedButton = indx; 148 + // } 149 + // }) 150 151 + // currentButton = selectedButton; 152 + // } else if(lastClickedButton != -1){ 153 + // currentButton = lastClickedButton; 154 + // lastClickedButton = -1 155 + // } 156 + // } 157 + // }) 158 159 + // window.addEventListener('resize', () => { 160 + // width = window.innerWidth; 161 + // sliderPos = width / 2 - buttons[currentButton]; 162 + // sliderScale = width / (buttons[1] - buttons[0]); 163 164 + // utils.set(sliderBar, { translateX: sliderPos }); 165 + // }) 166 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 + // }) 176 }) 177 178 onCleanup(() => { ··· 181 182 return ( 183 <div class="settings"> 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"> 201 <div class="settings-block"> 202 <h1>Storage Settings</h1> 203 <p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p> ··· 216 217 <label for="start-in-bg-check"> 218 <div class="selection-box"> 219 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 220 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 221 </div> 222 </div> ··· 224 </div> 225 226 <div class="selector"> 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; 229 }} onChange={( el ) => { 230 if(el.target.checked){ 231 + invoke('set_config_value_string', { key: 'close-to-tray', value: 'true' }); 232 } else{ 233 + invoke('set_config_value_string', { key: 'close-to-tray', value: 'false' }); 234 } 235 }} /> 236 + Close to tray 237 238 + <label for="close-to-tray-check"> 239 <div class="selection-box"> 240 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 241 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 242 </div> 243 </div> 244 </label> 245 </div> 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 + 272 <div class="selector"> 273 <input type="checkbox" id="transparent-check" ref={async ( el ) => { 274 el.checked = await invoke('get_config_value_string', { key: 'transparent' }) === "true" ? true : false; ··· 276 if(el.target.checked){ 277 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 278 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 }); 281 } else{ 282 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 283 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 }); 286 } 287 }} /> 288 Window Transparency 289 290 <label for="transparent-check"> 291 <div class="selection-box"> 292 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 293 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 294 </div> 295 </div> ··· 314 </span> 315 <span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}> 316 <span class="path" style={{ color: 'green' }} onClick={async () => { 317 + let changed = await invoke('change_final_path', { newPath: finalPathData }); 318 319 + if(changed){ 320 + finalPathPreviousData = finalPathData; 321 + finalPathConfirm.style.display = 'none'; 322 323 + window.location.reload(); 324 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 + } 337 }}> 338 Save 339 </span> ··· 356 <br /> 357 <p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p> 358 </div> 359 </div> 360 361 + {/* <div class="slide-bar-tri"></div> 362 <div class="slide-bar"> 363 <div class="inner-slide-bar" ref={( el ) => sliderBar = el}> 364 <div class="slider-dot"></div> ··· 369 <div class="slider-text" onMouseDown={() => lastClickedButton = 0}>Program Settings</div> 370 <div class="slider-dot"></div> 371 <div class="slider-dot"></div> 372 + <div class="slider-text" onMouseDown={() => lastClickedButton = 1}>Sync Settings</div> 373 <div class="slider-dot"></div> 374 <div class="slider-dot"></div> 375 <div class="slider-dot"></div> 376 <div class="slider-dot"></div> 377 <div class="slider-dot"></div> 378 </div> 379 + </div> */} 380 </div> 381 ) 382 }
+43 -16
src/Components/Structs/Photo.ts
··· 6 export class Photo{ 7 path: string; 8 loaded: boolean = false; 9 loading: boolean = false; 10 metaLoaded: boolean = false; 11 image?: HTMLCanvasElement; ··· 14 height?: number; 15 loadingRotate: number = 0; 16 metadata: any; 17 18 frames: number = 0; 19 shown: boolean = false; ··· 29 legacy: boolean = false; 30 index: number = 0; 31 32 public onMetaLoaded: () => void = () => {}; 33 34 constructor( path: string, isLegacy: boolean = false, i: number ){ ··· 37 this.index = i; 38 39 let split = this.path.split('_'); 40 41 if(this.legacy) 42 this.dateString = split[2]; 43 else 44 this.dateString = split[1]; 45 46 let splitDateString = this.dateString.split('-'); 47 48 this.date = new Date(); 49 ··· 51 this.date.setMonth(parseInt(splitDateString[1])); 52 this.date.setDate(parseInt(splitDateString[2])); 53 54 - let resSplit = split[3].split('x'); 55 56 - let width = parseInt(resSplit[0]); 57 - let height = parseInt(resSplit[1]); 58 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 - } 68 } 69 70 loadMeta(){ 71 invoke('load_photo_meta', { photo: this.path }); 72 } 73 74 loadImage(){ 75 - if(this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 76 - 77 - // this.loadMeta(); 78 if(!this.metaLoaded)return this.loadMeta(); 79 80 this.loading = true; 81 - 82 imagesLoading++; 83 84 this.image = document.createElement('canvas'); ··· 98 this.loading = false; 99 100 imagesLoading--; 101 } 102 } 103 }
··· 6 export class Photo{ 7 path: string; 8 loaded: boolean = false; 9 + loadingMeta: boolean = false; 10 loading: boolean = false; 11 metaLoaded: boolean = false; 12 image?: HTMLCanvasElement; ··· 15 height?: number; 16 loadingRotate: number = 0; 17 metadata: any; 18 + 19 + error: boolean = false; 20 21 frames: number = 0; 22 shown: boolean = false; ··· 32 legacy: boolean = false; 33 index: number = 0; 34 35 + splitPath: string[]; 36 + 37 + playerLayer: Photo | null = null; 38 + environmentLayer: Photo | null = null; 39 + isMultiLayer = false; 40 + 41 public onMetaLoaded: () => void = () => {}; 42 43 constructor( path: string, isLegacy: boolean = false, i: number ){ ··· 46 this.index = i; 47 48 let split = this.path.split('_'); 49 + this.splitPath = split; 50 51 if(this.legacy) 52 this.dateString = split[2]; 53 else 54 this.dateString = split[1]; 55 56 + let timeString; 57 + if(this.legacy) 58 + timeString = split[3]; 59 + else 60 + timeString = split[2]; 61 + 62 let splitDateString = this.dateString.split('-'); 63 + let splitTimeString = timeString.split('-'); 64 65 this.date = new Date(); 66 ··· 68 this.date.setMonth(parseInt(splitDateString[1])); 69 this.date.setDate(parseInt(splitDateString[2])); 70 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; 87 88 + // let scale = Vars.PHOTO_HEIGHT / this.height; 89 90 + // this.scaledWidth = this.width * scale; 91 + // this.scaledHeight = Vars.PHOTO_HEIGHT; 92 + // } 93 } 94 95 loadMeta(){ 96 + this.loadingMeta = true; 97 invoke('load_photo_meta', { photo: this.path }); 98 } 99 100 loadImage(){ 101 + if(this.loadingMeta || this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 102 if(!this.metaLoaded)return this.loadMeta(); 103 104 this.loading = true; 105 imagesLoading++; 106 107 this.image = document.createElement('canvas'); ··· 121 this.loading = false; 122 123 imagesLoading--; 124 + } 125 + 126 + this.imageEl.onerror = () => { 127 + console.log('Cannot load image'); 128 } 129 } 130 }
-15
src/Components/Structs/PhotoListElements/PhotoListPhoto.ts
··· 1 - <<<<<<< HEAD 2 import { Photo } from "../Photo"; 3 import { PhotoListElement } from "../PhotoListElement"; 4 import { PhotoListElementType } from "../PhotoListElementType"; ··· 11 this.Type = PhotoListElementType.PHOTO; 12 this.Photo = photo; 13 } 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 }
··· 1 import { Photo } from "../Photo"; 2 import { PhotoListElement } from "../PhotoListElement"; 3 import { PhotoListElementType } from "../PhotoListElementType"; ··· 10 this.Type = PhotoListElementType.PHOTO; 11 this.Photo = photo; 12 } 13 }
+1
src/Components/Structs/PhotoMetadata.ts
··· 3 height!: number; 4 metadata!: string; 5 path!: string; 6 }
··· 3 height!: number; 4 metadata!: string; 5 path!: string; 6 + error!: boolean; 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 4 declare global{ 5 interface Window { 6 - AccountManager: AccountManager; 7 LoadingManager: LoadingManager; 8 PhotoManager: PhotoManager; 9 ConfirmationBoxManager: ConfirmationBoxManager; 10 PhotoViewerManager: PhotoViewerManager; 11 WorldCacheManager: WorldCacheManager; 12 PhotoListRenderingManager: PhotoListRenderingManager; 13 - SyncManager: SyncManager; 14 ViewManager: ViewManager; 15 16 CloseAllPopups: (() => void)[]; ··· 23 24 window.oncontextmenu = ( e ) => e.preventDefault(); 25 26 import "./styles.css"; 27 import App from "./Components/App"; 28 import { invoke } from "@tauri-apps/api/core"; 29 30 - import { AccountManager } from "./Components/Managers/AccountManager"; 31 import { LoadingManager } from "./Components/Managers/LoadingManager"; 32 import { PhotoManager } from "./Components/Managers/PhotoManager"; 33 import { ConfirmationBoxManager } from "./Components/Managers/ConfirmationBoxManager"; 34 import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager"; 35 import { WorldCacheManager } from "./Components/Managers/WorldCacheManager"; 36 import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager"; 37 - import { SyncManager } from "./Components/Managers/SyncManager"; 38 import { ViewManager } from "./Components/Managers/ViewManager"; 39 40 - window.AccountManager = new AccountManager(); 41 window.LoadingManager = new LoadingManager(); 42 window.PhotoManager = new PhotoManager(); 43 window.ConfirmationBoxManager = new ConfirmationBoxManager(); 44 window.PhotoViewerManager = new PhotoViewerManager(); 45 window.WorldCacheManager = new WorldCacheManager(); 46 window.PhotoListRenderingManager = new PhotoListRenderingManager(); 47 - window.SyncManager = new SyncManager(); 48 window.ViewManager = new ViewManager(); 49 50 (async () => {
··· 3 4 declare global{ 5 interface Window { 6 LoadingManager: LoadingManager; 7 PhotoManager: PhotoManager; 8 ConfirmationBoxManager: ConfirmationBoxManager; 9 PhotoViewerManager: PhotoViewerManager; 10 WorldCacheManager: WorldCacheManager; 11 PhotoListRenderingManager: PhotoListRenderingManager; 12 ViewManager: ViewManager; 13 14 CloseAllPopups: (() => void)[]; ··· 21 22 window.oncontextmenu = ( e ) => e.preventDefault(); 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 + 32 import "./styles.css"; 33 + 34 import App from "./Components/App"; 35 import { invoke } from "@tauri-apps/api/core"; 36 37 import { LoadingManager } from "./Components/Managers/LoadingManager"; 38 import { PhotoManager } from "./Components/Managers/PhotoManager"; 39 import { ConfirmationBoxManager } from "./Components/Managers/ConfirmationBoxManager"; 40 import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager"; 41 import { WorldCacheManager } from "./Components/Managers/WorldCacheManager"; 42 import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager"; 43 import { ViewManager } from "./Components/Managers/ViewManager"; 44 45 window.LoadingManager = new LoadingManager(); 46 window.PhotoManager = new PhotoManager(); 47 window.ConfirmationBoxManager = new ConfirmationBoxManager(); 48 window.PhotoViewerManager = new PhotoViewerManager(); 49 window.WorldCacheManager = new WorldCacheManager(); 50 window.PhotoListRenderingManager = new PhotoListRenderingManager(); 51 window.ViewManager = new ViewManager(); 52 53 (async () => {
+11 -768
src/styles.css
··· 7 background: #000; 8 margin: 0; 9 font-family: Rubik, 'Courier New'; 10 } 11 12 .loading{ ··· 24 align-items: center; 25 } 26 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 .confirmation-box{ 487 position: fixed; 488 top: 0; ··· 490 width: 100%; 491 height: 100%; 492 z-index: 15; 493 - background: #0005; 494 transition: 0.25s; 495 - backdrop-filter: blur(10px); 496 - -webkit-backdrop-filter: blur(10px); 497 } 498 499 .confirmation-box-container{ ··· 553 box-shadow: #000a inset 0 0 10px; 554 } 555 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; 566 } 567 568 - .copy-notif{ 569 position: fixed; 570 top: 40px; 571 left: 50%; 572 color: white; 573 transform: translateX(-50%) translateY(-100px); 574 - background: #8885; 575 padding: 10px 40px; 576 backdrop-filter: blur(10px); 577 -webkit-backdrop-filter: blur(10px); ··· 580 z-index: 12; 581 opacity: 0; 582 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 }
··· 7 background: #000; 8 margin: 0; 9 font-family: Rubik, 'Courier New'; 10 + overflow: hidden; 11 + } 12 + 13 + * { 14 + box-sizing: border-box; 15 } 16 17 .loading{ ··· 29 align-items: center; 30 } 31 32 .confirmation-box{ 33 position: fixed; 34 top: 0; ··· 36 width: 100%; 37 height: 100%; 38 z-index: 15; 39 + background: rgba(0, 0, 0, 0.76); 40 transition: 0.25s; 41 } 42 43 .confirmation-box-container{ ··· 97 box-shadow: #000a inset 0 0 10px; 98 } 99 100 + img{ 101 + max-width: 100%; 102 + max-height: 100%; 103 } 104 105 + .error-notif{ 106 position: fixed; 107 top: 40px; 108 left: 50%; 109 color: white; 110 transform: translateX(-50%) translateY(-100px); 111 + background: rgba(43, 43, 43, 0.76); 112 padding: 10px 40px; 113 backdrop-filter: blur(10px); 114 -webkit-backdrop-filter: blur(10px); ··· 117 z-index: 12; 118 opacity: 0; 119 pointer-events: none; 120 }
+971 -974
src-tauri/Cargo.lock
··· 3 version = 4 4 5 [[package]] 6 - name = "addr2line" 7 - version = "0.24.2" 8 - source = "registry+https://github.com/rust-lang/crates.io-index" 9 - checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 dependencies = [ 11 - "gimli", 12 ] 13 14 [[package]] ··· 19 20 [[package]] 21 name = "aho-corasick" 22 - version = "1.1.3" 23 source = "registry+https://github.com/rust-lang/crates.io-index" 24 - checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 dependencies = [ 26 "memchr", 27 ] ··· 51 ] 52 53 [[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 name = "android_system_properties" 61 version = "0.1.5" 62 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 67 68 [[package]] 69 name = "anyhow" 70 - version = "1.0.98" 71 source = "registry+https://github.com/rust-lang/crates.io-index" 72 - checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 73 74 [[package]] 75 name = "arbitrary" 76 - version = "1.4.1" 77 source = "registry+https://github.com/rust-lang/crates.io-index" 78 - checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 79 80 [[package]] 81 name = "arg_enum_proc_macro" ··· 85 dependencies = [ 86 "proc-macro2", 87 "quote", 88 - "syn 2.0.104", 89 ] 90 91 [[package]] ··· 120 121 [[package]] 122 name = "async-executor" 123 - version = "1.13.2" 124 source = "registry+https://github.com/rust-lang/crates.io-index" 125 - checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 126 dependencies = [ 127 "async-task", 128 "concurrent-queue", ··· 133 ] 134 135 [[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 name = "async-io" 148 - version = "2.5.0" 149 source = "registry+https://github.com/rust-lang/crates.io-index" 150 - checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" 151 dependencies = [ 152 - "async-lock", 153 "cfg-if", 154 "concurrent-queue", 155 "futures-io", ··· 158 "polling", 159 "rustix", 160 "slab", 161 - "windows-sys 0.60.2", 162 ] 163 164 [[package]] 165 name = "async-lock" 166 - version = "3.4.0" 167 source = "registry+https://github.com/rust-lang/crates.io-index" 168 - checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 169 dependencies = [ 170 "event-listener", 171 "event-listener-strategy", ··· 174 175 [[package]] 176 name = "async-process" 177 - version = "2.4.0" 178 source = "registry+https://github.com/rust-lang/crates.io-index" 179 - checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" 180 dependencies = [ 181 "async-channel", 182 "async-io", ··· 198 dependencies = [ 199 "proc-macro2", 200 "quote", 201 - "syn 2.0.104", 202 ] 203 204 [[package]] 205 name = "async-signal" 206 - version = "0.2.12" 207 source = "registry+https://github.com/rust-lang/crates.io-index" 208 - checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" 209 dependencies = [ 210 "async-io", 211 "async-lock", ··· 216 "rustix", 217 "signal-hook-registry", 218 "slab", 219 - "windows-sys 0.60.2", 220 ] 221 222 [[package]] ··· 227 228 [[package]] 229 name = "async-trait" 230 - version = "0.1.88" 231 source = "registry+https://github.com/rust-lang/crates.io-index" 232 - checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 233 dependencies = [ 234 "proc-macro2", 235 "quote", 236 - "syn 2.0.104", 237 ] 238 239 [[package]] ··· 273 274 [[package]] 275 name = "av1-grain" 276 - version = "0.2.4" 277 source = "registry+https://github.com/rust-lang/crates.io-index" 278 - checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" 279 dependencies = [ 280 "anyhow", 281 "arrayvec", ··· 287 288 [[package]] 289 name = "avif-serialize" 290 - version = "0.8.5" 291 source = "registry+https://github.com/rust-lang/crates.io-index" 292 - checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" 293 dependencies = [ 294 "arrayvec", 295 ] 296 297 [[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 name = "base64" 314 version = "0.21.7" 315 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 323 324 [[package]] 325 name = "bit_field" 326 - version = "0.10.2" 327 source = "registry+https://github.com/rust-lang/crates.io-index" 328 - checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 329 330 [[package]] 331 name = "bitflags" ··· 335 336 [[package]] 337 name = "bitflags" 338 - version = "2.9.1" 339 source = "registry+https://github.com/rust-lang/crates.io-index" 340 - checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 341 dependencies = [ 342 - "serde", 343 ] 344 345 [[package]] ··· 368 369 [[package]] 370 name = "block2" 371 - version = "0.6.1" 372 source = "registry+https://github.com/rust-lang/crates.io-index" 373 - checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" 374 dependencies = [ 375 - "objc2 0.6.1", 376 ] 377 378 [[package]] ··· 390 391 [[package]] 392 name = "brotli" 393 - version = "8.0.1" 394 source = "registry+https://github.com/rust-lang/crates.io-index" 395 - checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" 396 dependencies = [ 397 "alloc-no-stdlib", 398 "alloc-stdlib", ··· 423 424 [[package]] 425 name = "bytemuck" 426 - version = "1.23.1" 427 source = "registry+https://github.com/rust-lang/crates.io-index" 428 - checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" 429 430 [[package]] 431 name = "byteorder" ··· 454 source = "registry+https://github.com/rust-lang/crates.io-index" 455 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 456 dependencies = [ 457 - "bitflags 2.9.1", 458 "cairo-sys-rs", 459 "glib", 460 "libc", ··· 475 476 [[package]] 477 name = "camino" 478 - version = "1.1.10" 479 source = "registry+https://github.com/rust-lang/crates.io-index" 480 - checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" 481 dependencies = [ 482 - "serde", 483 ] 484 485 [[package]] ··· 502 "semver", 503 "serde", 504 "serde_json", 505 - "thiserror 2.0.12", 506 ] 507 508 [[package]] ··· 512 checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" 513 dependencies = [ 514 "serde", 515 - "toml 0.9.4", 516 ] 517 518 [[package]] 519 name = "cc" 520 - version = "1.2.30" 521 source = "registry+https://github.com/rust-lang/crates.io-index" 522 - checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 523 dependencies = [ 524 "jobserver", 525 "libc", 526 "shlex", ··· 555 556 [[package]] 557 name = "cfg-if" 558 - version = "1.0.1" 559 source = "registry+https://github.com/rust-lang/crates.io-index" 560 - checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 561 562 [[package]] 563 name = "cfg_aliases" ··· 567 568 [[package]] 569 name = "chrono" 570 - version = "0.4.41" 571 source = "registry+https://github.com/rust-lang/crates.io-index" 572 - checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 573 dependencies = [ 574 - "android-tzdata", 575 "iana-time-zone", 576 "num-traits", 577 "serde", 578 - "windows-link", 579 ] 580 581 [[package]] ··· 690 source = "registry+https://github.com/rust-lang/crates.io-index" 691 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 692 dependencies = [ 693 - "bitflags 2.9.1", 694 "core-foundation 0.10.1", 695 "core-graphics-types", 696 "foreign-types 0.5.0", ··· 703 source = "registry+https://github.com/rust-lang/crates.io-index" 704 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 705 dependencies = [ 706 - "bitflags 2.9.1", 707 "core-foundation 0.10.1", 708 "libc", 709 ] ··· 800 checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 801 dependencies = [ 802 "quote", 803 - "syn 2.0.104", 804 ] 805 806 [[package]] ··· 810 checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" 811 dependencies = [ 812 "quote", 813 - "syn 2.0.104", 814 ] 815 816 [[package]] 817 name = "darling" 818 - version = "0.20.11" 819 source = "registry+https://github.com/rust-lang/crates.io-index" 820 - checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 821 dependencies = [ 822 "darling_core", 823 "darling_macro", ··· 825 826 [[package]] 827 name = "darling_core" 828 - version = "0.20.11" 829 source = "registry+https://github.com/rust-lang/crates.io-index" 830 - checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 831 dependencies = [ 832 "fnv", 833 "ident_case", 834 "proc-macro2", 835 "quote", 836 "strsim", 837 - "syn 2.0.104", 838 ] 839 840 [[package]] 841 name = "darling_macro" 842 - version = "0.20.11" 843 source = "registry+https://github.com/rust-lang/crates.io-index" 844 - checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 845 dependencies = [ 846 "darling_core", 847 "quote", 848 - "syn 2.0.104", 849 ] 850 851 [[package]] 852 name = "data-url" 853 - version = "0.3.1" 854 source = "registry+https://github.com/rust-lang/crates.io-index" 855 - checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" 856 857 [[package]] 858 name = "deranged" 859 - version = "0.4.0" 860 source = "registry+https://github.com/rust-lang/crates.io-index" 861 - checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 862 dependencies = [ 863 "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", 876 ] 877 878 [[package]] ··· 885 "proc-macro2", 886 "quote", 887 "rustc_version", 888 - "syn 2.0.104", 889 ] 890 891 [[package]] ··· 900 901 [[package]] 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 version = "6.0.0" 913 source = "registry+https://github.com/rust-lang/crates.io-index" 914 checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 915 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", 929 ] 930 931 [[package]] ··· 936 dependencies = [ 937 "libc", 938 "option-ext", 939 - "redox_users 0.5.2", 940 - "windows-sys 0.60.2", 941 ] 942 943 [[package]] ··· 952 source = "registry+https://github.com/rust-lang/crates.io-index" 953 checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 954 dependencies = [ 955 - "bitflags 2.9.1", 956 - "objc2 0.6.1", 957 ] 958 959 [[package]] ··· 964 dependencies = [ 965 "proc-macro2", 966 "quote", 967 - "syn 2.0.104", 968 ] 969 970 [[package]] 971 name = "dlopen2" 972 - version = "0.7.0" 973 source = "registry+https://github.com/rust-lang/crates.io-index" 974 - checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" 975 dependencies = [ 976 "dlopen2_derive", 977 "libc", ··· 987 dependencies = [ 988 "proc-macro2", 989 "quote", 990 - "syn 2.0.104", 991 ] 992 993 [[package]] ··· 1001 1002 [[package]] 1003 name = "document-features" 1004 - version = "0.2.11" 1005 source = "registry+https://github.com/rust-lang/crates.io-index" 1006 - checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 1007 dependencies = [ 1008 "litrs", 1009 ] ··· 1052 1053 [[package]] 1054 name = "embed-resource" 1055 - version = "3.0.5" 1056 source = "registry+https://github.com/rust-lang/crates.io-index" 1057 - checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38" 1058 dependencies = [ 1059 "cc", 1060 "memchr", 1061 "rustc_version", 1062 - "toml 0.9.4", 1063 "vswhom", 1064 "winreg", 1065 ] ··· 1103 dependencies = [ 1104 "proc-macro2", 1105 "quote", 1106 - "syn 2.0.104", 1107 ] 1108 1109 [[package]] ··· 1123 dependencies = [ 1124 "proc-macro2", 1125 "quote", 1126 - "syn 2.0.104", 1127 ] 1128 1129 [[package]] ··· 1134 1135 [[package]] 1136 name = "erased-serde" 1137 - version = "0.4.6" 1138 source = "registry+https://github.com/rust-lang/crates.io-index" 1139 - checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" 1140 dependencies = [ 1141 "serde", 1142 "typeid", 1143 ] 1144 1145 [[package]] 1146 name = "errno" 1147 - version = "0.3.13" 1148 source = "registry+https://github.com/rust-lang/crates.io-index" 1149 - checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 1150 dependencies = [ 1151 "libc", 1152 - "windows-sys 0.60.2", 1153 ] 1154 1155 [[package]] 1156 name = "event-listener" 1157 - version = "5.4.0" 1158 source = "registry+https://github.com/rust-lang/crates.io-index" 1159 - checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 1160 dependencies = [ 1161 "concurrent-queue", 1162 "parking", ··· 1190 1191 [[package]] 1192 name = "fast_image_resize" 1193 - version = "4.2.3" 1194 source = "registry+https://github.com/rust-lang/crates.io-index" 1195 - checksum = "43e5ce628b529e9bd2e2f378c1193215104b526fd494a572aa23414adc4e5553" 1196 dependencies = [ 1197 "bytemuck", 1198 "cfg-if", 1199 "document-features", 1200 "image", 1201 "num-traits", 1202 - "thiserror 1.0.69", 1203 ] 1204 1205 [[package]] ··· 1209 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1210 1211 [[package]] 1212 name = "fdeflate" 1213 version = "0.3.7" 1214 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1228 ] 1229 1230 [[package]] 1231 - name = "filetime" 1232 - version = "0.2.25" 1233 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 - ] 1241 1242 [[package]] 1243 name = "flate2" 1244 - version = "1.1.2" 1245 source = "registry+https://github.com/rust-lang/crates.io-index" 1246 - checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 1247 dependencies = [ 1248 "crc32fast", 1249 "miniz_oxide", ··· 1282 dependencies = [ 1283 "proc-macro2", 1284 "quote", 1285 - "syn 2.0.104", 1286 ] 1287 1288 [[package]] ··· 1299 1300 [[package]] 1301 name = "form_urlencoded" 1302 - version = "1.2.1" 1303 source = "registry+https://github.com/rust-lang/crates.io-index" 1304 - checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1305 dependencies = [ 1306 "percent-encoding", 1307 ] ··· 1360 1361 [[package]] 1362 name = "futures-lite" 1363 - version = "2.6.0" 1364 source = "registry+https://github.com/rust-lang/crates.io-index" 1365 - checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 1366 dependencies = [ 1367 "fastrand", 1368 "futures-core", ··· 1379 dependencies = [ 1380 "proc-macro2", 1381 "quote", 1382 - "syn 2.0.104", 1383 ] 1384 1385 [[package]] ··· 1521 1522 [[package]] 1523 name = "generic-array" 1524 - version = "0.14.7" 1525 source = "registry+https://github.com/rust-lang/crates.io-index" 1526 - checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1527 dependencies = [ 1528 "typenum", 1529 "version_check", 1530 ] 1531 1532 [[package]] ··· 1555 1556 [[package]] 1557 name = "getrandom" 1558 - version = "0.3.3" 1559 source = "registry+https://github.com/rust-lang/crates.io-index" 1560 - checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1561 dependencies = [ 1562 "cfg-if", 1563 "js-sys", 1564 "libc", 1565 "r-efi", 1566 - "wasi 0.14.2+wasi-0.2.4", 1567 "wasm-bindgen", 1568 ] 1569 ··· 1578 ] 1579 1580 [[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 name = "gio" 1588 version = "0.18.4" 1589 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1621 source = "registry+https://github.com/rust-lang/crates.io-index" 1622 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 1623 dependencies = [ 1624 - "bitflags 2.9.1", 1625 "futures-channel", 1626 "futures-core", 1627 "futures-executor", ··· 1649 "proc-macro-error", 1650 "proc-macro2", 1651 "quote", 1652 - "syn 2.0.104", 1653 ] 1654 1655 [[package]] ··· 1664 1665 [[package]] 1666 name = "glob" 1667 - version = "0.3.2" 1668 source = "registry+https://github.com/rust-lang/crates.io-index" 1669 - checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1670 1671 [[package]] 1672 name = "gobject-sys" ··· 1728 "proc-macro-error", 1729 "proc-macro2", 1730 "quote", 1731 - "syn 2.0.104", 1732 ] 1733 1734 [[package]] 1735 name = "h2" 1736 - version = "0.4.11" 1737 source = "registry+https://github.com/rust-lang/crates.io-index" 1738 - checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" 1739 dependencies = [ 1740 "atomic-waker", 1741 "bytes", ··· 1743 "futures-core", 1744 "futures-sink", 1745 "http", 1746 - "indexmap 2.10.0", 1747 "slab", 1748 "tokio", 1749 "tokio-util", ··· 1752 1753 [[package]] 1754 name = "half" 1755 - version = "2.6.0" 1756 source = "registry+https://github.com/rust-lang/crates.io-index" 1757 - checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 1758 dependencies = [ 1759 "cfg-if", 1760 "crunchy", 1761 ] 1762 1763 [[package]] ··· 1774 1775 [[package]] 1776 name = "hashbrown" 1777 - version = "0.15.4" 1778 source = "registry+https://github.com/rust-lang/crates.io-index" 1779 - checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 1780 1781 [[package]] 1782 name = "heck" ··· 1856 1857 [[package]] 1858 name = "hyper" 1859 - version = "1.6.0" 1860 source = "registry+https://github.com/rust-lang/crates.io-index" 1861 - checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1862 dependencies = [ 1863 "bytes", 1864 "futures-channel", 1865 - "futures-util", 1866 "h2", 1867 "http", 1868 "http-body", 1869 "httparse", 1870 "itoa", 1871 "pin-project-lite", 1872 "smallvec", 1873 "tokio", 1874 "want", ··· 1909 1910 [[package]] 1911 name = "hyper-util" 1912 - version = "0.1.16" 1913 source = "registry+https://github.com/rust-lang/crates.io-index" 1914 - checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 1915 dependencies = [ 1916 "base64 0.22.1", 1917 "bytes", ··· 1925 "libc", 1926 "percent-encoding", 1927 "pin-project-lite", 1928 - "socket2 0.6.0", 1929 "system-configuration", 1930 "tokio", 1931 "tower-service", ··· 1935 1936 [[package]] 1937 name = "iana-time-zone" 1938 - version = "0.1.63" 1939 source = "registry+https://github.com/rust-lang/crates.io-index" 1940 - checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1941 dependencies = [ 1942 "android_system_properties", 1943 "core-foundation-sys", ··· 1945 "js-sys", 1946 "log", 1947 "wasm-bindgen", 1948 - "windows-core", 1949 ] 1950 1951 [[package]] ··· 1964 checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" 1965 dependencies = [ 1966 "byteorder", 1967 - "png", 1968 ] 1969 1970 [[package]] 1971 name = "icu_collections" 1972 - version = "2.0.0" 1973 source = "registry+https://github.com/rust-lang/crates.io-index" 1974 - checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1975 dependencies = [ 1976 "displaydoc", 1977 "potential_utf", ··· 1982 1983 [[package]] 1984 name = "icu_locale_core" 1985 - version = "2.0.0" 1986 source = "registry+https://github.com/rust-lang/crates.io-index" 1987 - checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1988 dependencies = [ 1989 "displaydoc", 1990 "litemap", ··· 1995 1996 [[package]] 1997 name = "icu_normalizer" 1998 - version = "2.0.0" 1999 source = "registry+https://github.com/rust-lang/crates.io-index" 2000 - checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 2001 dependencies = [ 2002 - "displaydoc", 2003 "icu_collections", 2004 "icu_normalizer_data", 2005 "icu_properties", ··· 2010 2011 [[package]] 2012 name = "icu_normalizer_data" 2013 - version = "2.0.0" 2014 source = "registry+https://github.com/rust-lang/crates.io-index" 2015 - checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 2016 2017 [[package]] 2018 name = "icu_properties" 2019 - version = "2.0.1" 2020 source = "registry+https://github.com/rust-lang/crates.io-index" 2021 - checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 2022 dependencies = [ 2023 - "displaydoc", 2024 "icu_collections", 2025 "icu_locale_core", 2026 "icu_properties_data", 2027 "icu_provider", 2028 - "potential_utf", 2029 "zerotrie", 2030 "zerovec", 2031 ] 2032 2033 [[package]] 2034 name = "icu_properties_data" 2035 - version = "2.0.1" 2036 source = "registry+https://github.com/rust-lang/crates.io-index" 2037 - checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 2038 2039 [[package]] 2040 name = "icu_provider" 2041 - version = "2.0.0" 2042 source = "registry+https://github.com/rust-lang/crates.io-index" 2043 - checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 2044 dependencies = [ 2045 "displaydoc", 2046 "icu_locale_core", 2047 - "stable_deref_trait", 2048 - "tinystr", 2049 "writeable", 2050 "yoke", 2051 "zerofrom", ··· 2061 2062 [[package]] 2063 name = "idna" 2064 - version = "1.0.3" 2065 source = "registry+https://github.com/rust-lang/crates.io-index" 2066 - checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 2067 dependencies = [ 2068 "idna_adapter", 2069 "smallvec", ··· 2082 2083 [[package]] 2084 name = "image" 2085 - version = "0.25.6" 2086 source = "registry+https://github.com/rust-lang/crates.io-index" 2087 - checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 2088 dependencies = [ 2089 "bytemuck", 2090 "byteorder-lite", ··· 2092 "exr", 2093 "gif", 2094 "image-webp", 2095 "num-traits", 2096 - "png", 2097 "qoi", 2098 "ravif", 2099 "rayon", ··· 2105 2106 [[package]] 2107 name = "image-webp" 2108 - version = "0.2.3" 2109 source = "registry+https://github.com/rust-lang/crates.io-index" 2110 - checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" 2111 dependencies = [ 2112 "byteorder-lite", 2113 "quick-error", ··· 2115 2116 [[package]] 2117 name = "imgref" 2118 - version = "1.11.0" 2119 source = "registry+https://github.com/rust-lang/crates.io-index" 2120 - checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" 2121 2122 [[package]] 2123 name = "indexmap" ··· 2132 2133 [[package]] 2134 name = "indexmap" 2135 - version = "2.10.0" 2136 source = "registry+https://github.com/rust-lang/crates.io-index" 2137 - checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 2138 dependencies = [ 2139 "equivalent", 2140 - "hashbrown 0.15.4", 2141 "serde", 2142 ] 2143 2144 [[package]] ··· 2152 2153 [[package]] 2154 name = "inotify" 2155 - version = "0.9.6" 2156 source = "registry+https://github.com/rust-lang/crates.io-index" 2157 - checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" 2158 dependencies = [ 2159 - "bitflags 1.3.2", 2160 "inotify-sys", 2161 "libc", 2162 ] ··· 2178 dependencies = [ 2179 "proc-macro2", 2180 "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", 2193 ] 2194 2195 [[package]] ··· 2200 2201 [[package]] 2202 name = "iri-string" 2203 - version = "0.7.8" 2204 source = "registry+https://github.com/rust-lang/crates.io-index" 2205 - checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 2206 dependencies = [ 2207 "memchr", 2208 "serde", ··· 2289 2290 [[package]] 2291 name = "jobserver" 2292 - version = "0.1.33" 2293 source = "registry+https://github.com/rust-lang/crates.io-index" 2294 - checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 2295 dependencies = [ 2296 - "getrandom 0.3.3", 2297 "libc", 2298 ] 2299 2300 [[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 name = "js-sys" 2308 - version = "0.3.77" 2309 source = "registry+https://github.com/rust-lang/crates.io-index" 2310 - checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 2311 dependencies = [ 2312 "once_cell", 2313 "wasm-bindgen", ··· 2341 source = "registry+https://github.com/rust-lang/crates.io-index" 2342 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" 2343 dependencies = [ 2344 - "bitflags 2.9.1", 2345 "serde", 2346 "unicode-segmentation", 2347 ] ··· 2374 dependencies = [ 2375 "cssparser", 2376 "html5ever", 2377 - "indexmap 2.10.0", 2378 "selectors", 2379 ] 2380 ··· 2386 2387 [[package]] 2388 name = "lebe" 2389 - version = "0.5.2" 2390 source = "registry+https://github.com/rust-lang/crates.io-index" 2391 - checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 2392 2393 [[package]] 2394 name = "libappindicator" ··· 2416 2417 [[package]] 2418 name = "libc" 2419 - version = "0.2.174" 2420 source = "registry+https://github.com/rust-lang/crates.io-index" 2421 - checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 2422 2423 [[package]] 2424 name = "libfuzzer-sys" ··· 2442 2443 [[package]] 2444 name = "libredox" 2445 - version = "0.1.9" 2446 source = "registry+https://github.com/rust-lang/crates.io-index" 2447 - checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" 2448 dependencies = [ 2449 - "bitflags 2.9.1", 2450 "libc", 2451 - "redox_syscall", 2452 ] 2453 2454 [[package]] 2455 name = "linux-raw-sys" 2456 - version = "0.9.4" 2457 source = "registry+https://github.com/rust-lang/crates.io-index" 2458 - checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 2459 2460 [[package]] 2461 name = "litemap" 2462 - version = "0.8.0" 2463 source = "registry+https://github.com/rust-lang/crates.io-index" 2464 - checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 2465 2466 [[package]] 2467 name = "litrs" 2468 - version = "0.4.2" 2469 source = "registry+https://github.com/rust-lang/crates.io-index" 2470 - checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 2471 2472 [[package]] 2473 name = "lock_api" 2474 - version = "0.4.13" 2475 source = "registry+https://github.com/rust-lang/crates.io-index" 2476 - checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 2477 dependencies = [ 2478 - "autocfg", 2479 "scopeguard", 2480 ] 2481 2482 [[package]] 2483 name = "log" 2484 - version = "0.4.27" 2485 source = "registry+https://github.com/rust-lang/crates.io-index" 2486 - checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 2487 2488 [[package]] 2489 name = "loop9" ··· 2528 dependencies = [ 2529 "proc-macro2", 2530 "quote", 2531 - "syn 2.0.104", 2532 ] 2533 2534 [[package]] ··· 2549 2550 [[package]] 2551 name = "memchr" 2552 - version = "2.7.5" 2553 source = "registry+https://github.com/rust-lang/crates.io-index" 2554 - checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 2555 2556 [[package]] 2557 name = "memoffset" ··· 2569 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2570 2571 [[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 name = "miniz_oxide" 2579 version = "0.8.9" 2580 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2586 2587 [[package]] 2588 name = "mio" 2589 - version = "0.8.11" 2590 source = "registry+https://github.com/rust-lang/crates.io-index" 2591 - checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 2592 dependencies = [ 2593 "libc", 2594 "log", 2595 "wasi 0.11.1+wasi-snapshot-preview1", 2596 - "windows-sys 0.48.0", 2597 ] 2598 2599 [[package]] 2600 - name = "mio" 2601 - version = "1.0.4" 2602 source = "registry+https://github.com/rust-lang/crates.io-index" 2603 - checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 2604 dependencies = [ 2605 - "libc", 2606 - "wasi 0.11.1+wasi-snapshot-preview1", 2607 - "windows-sys 0.59.0", 2608 ] 2609 2610 [[package]] ··· 2628 "dpi", 2629 "gtk", 2630 "keyboard-types", 2631 - "objc2 0.6.1", 2632 "objc2-app-kit", 2633 "objc2-core-foundation", 2634 - "objc2-foundation 0.3.1", 2635 "once_cell", 2636 - "png", 2637 "serde", 2638 - "thiserror 2.0.12", 2639 "windows-sys 0.60.2", 2640 ] 2641 ··· 2662 source = "registry+https://github.com/rust-lang/crates.io-index" 2663 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2664 dependencies = [ 2665 - "bitflags 2.9.1", 2666 "jni-sys", 2667 "log", 2668 "ndk-sys", ··· 2694 2695 [[package]] 2696 name = "nix" 2697 - version = "0.27.1" 2698 source = "registry+https://github.com/rust-lang/crates.io-index" 2699 - checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" 2700 dependencies = [ 2701 - "bitflags 2.9.1", 2702 "cfg-if", 2703 "libc", 2704 "memoffset", 2705 ] ··· 2712 2713 [[package]] 2714 name = "nom" 2715 - version = "7.1.3" 2716 source = "registry+https://github.com/rust-lang/crates.io-index" 2717 - checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2718 dependencies = [ 2719 "memchr", 2720 - "minimal-lexical", 2721 ] 2722 2723 [[package]] ··· 2728 2729 [[package]] 2730 name = "notify" 2731 - version = "6.1.1" 2732 source = "registry+https://github.com/rust-lang/crates.io-index" 2733 - checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" 2734 dependencies = [ 2735 - "bitflags 2.9.1", 2736 - "crossbeam-channel", 2737 - "filetime", 2738 "fsevent-sys", 2739 "inotify", 2740 "kqueue", 2741 "libc", 2742 "log", 2743 - "mio 0.8.11", 2744 "walkdir", 2745 - "windows-sys 0.48.0", 2746 ] 2747 2748 [[package]] 2749 name = "num-bigint" 2750 version = "0.4.6" 2751 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2769 dependencies = [ 2770 "proc-macro2", 2771 "quote", 2772 - "syn 2.0.104", 2773 ] 2774 2775 [[package]] ··· 2803 2804 [[package]] 2805 name = "num_enum" 2806 - version = "0.7.4" 2807 source = "registry+https://github.com/rust-lang/crates.io-index" 2808 - checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 2809 dependencies = [ 2810 "num_enum_derive", 2811 "rustversion", ··· 2813 2814 [[package]] 2815 name = "num_enum_derive" 2816 - version = "0.7.4" 2817 source = "registry+https://github.com/rust-lang/crates.io-index" 2818 - checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 2819 dependencies = [ 2820 - "proc-macro-crate 2.0.2", 2821 "proc-macro2", 2822 "quote", 2823 - "syn 2.0.104", 2824 ] 2825 2826 [[package]] ··· 2841 2842 [[package]] 2843 name = "objc2" 2844 - version = "0.6.1" 2845 source = "registry+https://github.com/rust-lang/crates.io-index" 2846 - checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" 2847 dependencies = [ 2848 "objc2-encode", 2849 "objc2-exception-helper", ··· 2851 2852 [[package]] 2853 name = "objc2-app-kit" 2854 - version = "0.3.1" 2855 source = "registry+https://github.com/rust-lang/crates.io-index" 2856 - checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 2857 dependencies = [ 2858 - "bitflags 2.9.1", 2859 - "block2 0.6.1", 2860 "libc", 2861 - "objc2 0.6.1", 2862 "objc2-cloud-kit", 2863 "objc2-core-data", 2864 "objc2-core-foundation", 2865 "objc2-core-graphics", 2866 "objc2-core-image", 2867 - "objc2-foundation 0.3.1", 2868 - "objc2-quartz-core 0.3.1", 2869 ] 2870 2871 [[package]] 2872 name = "objc2-cloud-kit" 2873 - version = "0.3.1" 2874 source = "registry+https://github.com/rust-lang/crates.io-index" 2875 - checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" 2876 dependencies = [ 2877 - "bitflags 2.9.1", 2878 - "objc2 0.6.1", 2879 - "objc2-foundation 0.3.1", 2880 ] 2881 2882 [[package]] 2883 name = "objc2-core-data" 2884 - version = "0.3.1" 2885 source = "registry+https://github.com/rust-lang/crates.io-index" 2886 - checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" 2887 dependencies = [ 2888 - "bitflags 2.9.1", 2889 - "objc2 0.6.1", 2890 - "objc2-foundation 0.3.1", 2891 ] 2892 2893 [[package]] 2894 name = "objc2-core-foundation" 2895 - version = "0.3.1" 2896 source = "registry+https://github.com/rust-lang/crates.io-index" 2897 - checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 2898 dependencies = [ 2899 - "bitflags 2.9.1", 2900 "dispatch2", 2901 - "objc2 0.6.1", 2902 ] 2903 2904 [[package]] 2905 name = "objc2-core-graphics" 2906 - version = "0.3.1" 2907 source = "registry+https://github.com/rust-lang/crates.io-index" 2908 - checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 2909 dependencies = [ 2910 - "bitflags 2.9.1", 2911 "dispatch2", 2912 - "objc2 0.6.1", 2913 "objc2-core-foundation", 2914 "objc2-io-surface", 2915 ] 2916 2917 [[package]] 2918 name = "objc2-core-image" 2919 - version = "0.3.1" 2920 source = "registry+https://github.com/rust-lang/crates.io-index" 2921 - checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" 2922 dependencies = [ 2923 - "objc2 0.6.1", 2924 - "objc2-foundation 0.3.1", 2925 ] 2926 2927 [[package]] ··· 2945 source = "registry+https://github.com/rust-lang/crates.io-index" 2946 checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2947 dependencies = [ 2948 - "bitflags 2.9.1", 2949 "block2 0.5.1", 2950 "libc", 2951 "objc2 0.5.2", ··· 2953 2954 [[package]] 2955 name = "objc2-foundation" 2956 - version = "0.3.1" 2957 source = "registry+https://github.com/rust-lang/crates.io-index" 2958 - checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 2959 dependencies = [ 2960 - "bitflags 2.9.1", 2961 - "block2 0.6.1", 2962 "libc", 2963 - "objc2 0.6.1", 2964 "objc2-core-foundation", 2965 ] 2966 2967 [[package]] 2968 name = "objc2-io-surface" 2969 - version = "0.3.1" 2970 source = "registry+https://github.com/rust-lang/crates.io-index" 2971 - checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 2972 dependencies = [ 2973 - "bitflags 2.9.1", 2974 - "objc2 0.6.1", 2975 "objc2-core-foundation", 2976 ] 2977 ··· 2981 source = "registry+https://github.com/rust-lang/crates.io-index" 2982 checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2983 dependencies = [ 2984 - "bitflags 2.9.1", 2985 "block2 0.5.1", 2986 "objc2 0.5.2", 2987 "objc2-foundation 0.2.2", ··· 2993 source = "registry+https://github.com/rust-lang/crates.io-index" 2994 checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2995 dependencies = [ 2996 - "bitflags 2.9.1", 2997 "block2 0.5.1", 2998 "objc2 0.5.2", 2999 "objc2-foundation 0.2.2", ··· 3002 3003 [[package]] 3004 name = "objc2-quartz-core" 3005 - version = "0.3.1" 3006 source = "registry+https://github.com/rust-lang/crates.io-index" 3007 - checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" 3008 dependencies = [ 3009 - "bitflags 2.9.1", 3010 - "objc2 0.6.1", 3011 - "objc2-foundation 0.3.1", 3012 ] 3013 3014 [[package]] 3015 - name = "objc2-ui-kit" 3016 - version = "0.3.1" 3017 source = "registry+https://github.com/rust-lang/crates.io-index" 3018 - checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" 3019 dependencies = [ 3020 - "bitflags 2.9.1", 3021 - "objc2 0.6.1", 3022 "objc2-core-foundation", 3023 - "objc2-foundation 0.3.1", 3024 ] 3025 3026 [[package]] 3027 - name = "objc2-web-kit" 3028 - version = "0.3.1" 3029 source = "registry+https://github.com/rust-lang/crates.io-index" 3030 - checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" 3031 dependencies = [ 3032 - "bitflags 2.9.1", 3033 - "block2 0.6.1", 3034 - "objc2 0.6.1", 3035 - "objc2-app-kit", 3036 "objc2-core-foundation", 3037 - "objc2-foundation 0.3.1", 3038 ] 3039 3040 [[package]] 3041 - name = "object" 3042 - version = "0.36.7" 3043 source = "registry+https://github.com/rust-lang/crates.io-index" 3044 - checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 3045 dependencies = [ 3046 - "memchr", 3047 ] 3048 3049 [[package]] ··· 3066 3067 [[package]] 3068 name = "openssl" 3069 - version = "0.10.73" 3070 source = "registry+https://github.com/rust-lang/crates.io-index" 3071 - checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 3072 dependencies = [ 3073 - "bitflags 2.9.1", 3074 "cfg-if", 3075 "foreign-types 0.3.2", 3076 "libc", ··· 3087 dependencies = [ 3088 "proc-macro2", 3089 "quote", 3090 - "syn 2.0.104", 3091 ] 3092 3093 [[package]] ··· 3098 3099 [[package]] 3100 name = "openssl-sys" 3101 - version = "0.9.109" 3102 source = "registry+https://github.com/rust-lang/crates.io-index" 3103 - checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 3104 dependencies = [ 3105 "cc", 3106 "libc", ··· 3136 3137 [[package]] 3138 name = "os_pipe" 3139 - version = "1.2.2" 3140 source = "registry+https://github.com/rust-lang/crates.io-index" 3141 - checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" 3142 dependencies = [ 3143 "libc", 3144 - "windows-sys 0.59.0", 3145 ] 3146 3147 [[package]] ··· 3177 3178 [[package]] 3179 name = "parking_lot" 3180 - version = "0.12.4" 3181 source = "registry+https://github.com/rust-lang/crates.io-index" 3182 - checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 3183 dependencies = [ 3184 "lock_api", 3185 "parking_lot_core", ··· 3187 3188 [[package]] 3189 name = "parking_lot_core" 3190 - version = "0.9.11" 3191 source = "registry+https://github.com/rust-lang/crates.io-index" 3192 - checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 3193 dependencies = [ 3194 "cfg-if", 3195 "libc", 3196 "redox_syscall", 3197 "smallvec", 3198 - "windows-targets 0.52.6", 3199 ] 3200 3201 [[package]] ··· 3212 3213 [[package]] 3214 name = "percent-encoding" 3215 - version = "2.3.1" 3216 source = "registry+https://github.com/rust-lang/crates.io-index" 3217 - checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 3218 3219 [[package]] 3220 name = "phf" ··· 3320 "phf_shared 0.11.3", 3321 "proc-macro2", 3322 "quote", 3323 - "syn 2.0.104", 3324 ] 3325 3326 [[package]] ··· 3381 3382 [[package]] 3383 name = "plist" 3384 - version = "1.7.4" 3385 source = "registry+https://github.com/rust-lang/crates.io-index" 3386 - checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" 3387 dependencies = [ 3388 "base64 0.22.1", 3389 - "indexmap 2.10.0", 3390 "quick-xml", 3391 "serde", 3392 "time", ··· 3406 ] 3407 3408 [[package]] 3409 name = "polling" 3410 - version = "3.9.0" 3411 source = "registry+https://github.com/rust-lang/crates.io-index" 3412 - checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" 3413 dependencies = [ 3414 "cfg-if", 3415 "concurrent-queue", 3416 "hermit-abi", 3417 "pin-project-lite", 3418 "rustix", 3419 - "windows-sys 0.60.2", 3420 ] 3421 3422 [[package]] 3423 name = "potential_utf" 3424 - version = "0.1.2" 3425 source = "registry+https://github.com/rust-lang/crates.io-index" 3426 - checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 3427 dependencies = [ 3428 "zerovec", 3429 ] ··· 3470 ] 3471 3472 [[package]] 3473 name = "proc-macro-error" 3474 version = "1.0.4" 3475 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3501 3502 [[package]] 3503 name = "proc-macro2" 3504 - version = "1.0.95" 3505 source = "registry+https://github.com/rust-lang/crates.io-index" 3506 - checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 3507 dependencies = [ 3508 "unicode-ident", 3509 ] ··· 3524 checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 3525 dependencies = [ 3526 "quote", 3527 - "syn 2.0.104", 3528 ] 3529 3530 [[package]] ··· 3544 ] 3545 3546 [[package]] 3547 name = "qoi" 3548 version = "0.4.1" 3549 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3560 3561 [[package]] 3562 name = "quick-xml" 3563 - version = "0.38.0" 3564 source = "registry+https://github.com/rust-lang/crates.io-index" 3565 - checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" 3566 dependencies = [ 3567 "memchr", 3568 ] 3569 3570 [[package]] 3571 name = "quinn" 3572 - version = "0.11.8" 3573 source = "registry+https://github.com/rust-lang/crates.io-index" 3574 - checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" 3575 dependencies = [ 3576 "bytes", 3577 "cfg_aliases", ··· 3580 "quinn-udp", 3581 "rustc-hash", 3582 "rustls", 3583 - "socket2 0.5.10", 3584 - "thiserror 2.0.12", 3585 "tokio", 3586 "tracing", 3587 "web-time", ··· 3589 3590 [[package]] 3591 name = "quinn-proto" 3592 - version = "0.11.12" 3593 source = "registry+https://github.com/rust-lang/crates.io-index" 3594 - checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" 3595 dependencies = [ 3596 "bytes", 3597 - "getrandom 0.3.3", 3598 "lru-slab", 3599 "rand 0.9.2", 3600 "ring", ··· 3602 "rustls", 3603 "rustls-pki-types", 3604 "slab", 3605 - "thiserror 2.0.12", 3606 "tinyvec", 3607 "tracing", 3608 "web-time", ··· 3610 3611 [[package]] 3612 name = "quinn-udp" 3613 - version = "0.5.13" 3614 source = "registry+https://github.com/rust-lang/crates.io-index" 3615 - checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" 3616 dependencies = [ 3617 "cfg_aliases", 3618 "libc", 3619 "once_cell", 3620 - "socket2 0.5.10", 3621 "tracing", 3622 - "windows-sys 0.59.0", 3623 ] 3624 3625 [[package]] 3626 name = "quote" 3627 - version = "1.0.40" 3628 source = "registry+https://github.com/rust-lang/crates.io-index" 3629 - checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 3630 dependencies = [ 3631 "proc-macro2", 3632 ] ··· 3726 source = "registry+https://github.com/rust-lang/crates.io-index" 3727 checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 3728 dependencies = [ 3729 - "getrandom 0.3.3", 3730 ] 3731 3732 [[package]] ··· 3805 3806 [[package]] 3807 name = "rayon" 3808 - version = "1.10.0" 3809 source = "registry+https://github.com/rust-lang/crates.io-index" 3810 - checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 3811 dependencies = [ 3812 "either", 3813 "rayon-core", ··· 3815 3816 [[package]] 3817 name = "rayon-core" 3818 - version = "1.12.1" 3819 source = "registry+https://github.com/rust-lang/crates.io-index" 3820 - checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 3821 dependencies = [ 3822 "crossbeam-deque", 3823 "crossbeam-utils", ··· 3825 3826 [[package]] 3827 name = "redox_syscall" 3828 - version = "0.5.17" 3829 source = "registry+https://github.com/rust-lang/crates.io-index" 3830 - checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 3831 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", 3844 ] 3845 3846 [[package]] ··· 3851 dependencies = [ 3852 "getrandom 0.2.16", 3853 "libredox", 3854 - "thiserror 2.0.12", 3855 ] 3856 3857 [[package]] 3858 name = "ref-cast" 3859 - version = "1.0.24" 3860 source = "registry+https://github.com/rust-lang/crates.io-index" 3861 - checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" 3862 dependencies = [ 3863 "ref-cast-impl", 3864 ] 3865 3866 [[package]] 3867 name = "ref-cast-impl" 3868 - version = "1.0.24" 3869 source = "registry+https://github.com/rust-lang/crates.io-index" 3870 - checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" 3871 dependencies = [ 3872 "proc-macro2", 3873 "quote", 3874 - "syn 2.0.104", 3875 ] 3876 3877 [[package]] 3878 name = "regex" 3879 - version = "1.11.1" 3880 source = "registry+https://github.com/rust-lang/crates.io-index" 3881 - checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 3882 dependencies = [ 3883 "aho-corasick", 3884 "memchr", ··· 3888 3889 [[package]] 3890 name = "regex-automata" 3891 - version = "0.4.9" 3892 source = "registry+https://github.com/rust-lang/crates.io-index" 3893 - checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 3894 dependencies = [ 3895 "aho-corasick", 3896 "memchr", ··· 3899 3900 [[package]] 3901 name = "regex-syntax" 3902 - version = "0.8.5" 3903 source = "registry+https://github.com/rust-lang/crates.io-index" 3904 - checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 3905 3906 [[package]] 3907 name = "reqwest" 3908 - version = "0.12.22" 3909 source = "registry+https://github.com/rust-lang/crates.io-index" 3910 - checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" 3911 dependencies = [ 3912 "base64 0.22.1", 3913 "bytes", ··· 3975 3976 [[package]] 3977 name = "rust-ini" 3978 - version = "0.21.2" 3979 source = "registry+https://github.com/rust-lang/crates.io-index" 3980 - checksum = "e7295b7ce3bf4806b419dc3420745998b447178b7005e2011947b38fc5aa6791" 3981 dependencies = [ 3982 "cfg-if", 3983 "ordered-multimap", 3984 ] 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 3992 [[package]] 3993 name = "rustc-hash" ··· 4006 4007 [[package]] 4008 name = "rustix" 4009 - version = "1.0.8" 4010 source = "registry+https://github.com/rust-lang/crates.io-index" 4011 - checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 4012 dependencies = [ 4013 - "bitflags 2.9.1", 4014 "errno", 4015 "libc", 4016 "linux-raw-sys", 4017 - "windows-sys 0.60.2", 4018 ] 4019 4020 [[package]] 4021 name = "rustls" 4022 - version = "0.23.31" 4023 source = "registry+https://github.com/rust-lang/crates.io-index" 4024 - checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" 4025 dependencies = [ 4026 "once_cell", 4027 "ring", ··· 4033 4034 [[package]] 4035 name = "rustls-pki-types" 4036 - version = "1.12.0" 4037 source = "registry+https://github.com/rust-lang/crates.io-index" 4038 - checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 4039 dependencies = [ 4040 "web-time", 4041 "zeroize", ··· 4043 4044 [[package]] 4045 name = "rustls-webpki" 4046 - version = "0.103.4" 4047 source = "registry+https://github.com/rust-lang/crates.io-index" 4048 - checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 4049 dependencies = [ 4050 "ring", 4051 "rustls-pki-types", ··· 4054 4055 [[package]] 4056 name = "rustversion" 4057 - version = "1.0.21" 4058 source = "registry+https://github.com/rust-lang/crates.io-index" 4059 - checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 4060 4061 [[package]] 4062 name = "ryu" ··· 4075 4076 [[package]] 4077 name = "schannel" 4078 - version = "0.1.27" 4079 source = "registry+https://github.com/rust-lang/crates.io-index" 4080 - checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 4081 dependencies = [ 4082 - "windows-sys 0.59.0", 4083 ] 4084 4085 [[package]] ··· 4111 4112 [[package]] 4113 name = "schemars" 4114 - version = "1.0.4" 4115 source = "registry+https://github.com/rust-lang/crates.io-index" 4116 - checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" 4117 dependencies = [ 4118 "dyn-clone", 4119 "ref-cast", ··· 4130 "proc-macro2", 4131 "quote", 4132 "serde_derive_internals", 4133 - "syn 2.0.104", 4134 ] 4135 4136 [[package]] ··· 4145 source = "registry+https://github.com/rust-lang/crates.io-index" 4146 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4147 dependencies = [ 4148 - "bitflags 2.9.1", 4149 "core-foundation 0.9.4", 4150 "core-foundation-sys", 4151 "libc", ··· 4154 4155 [[package]] 4156 name = "security-framework-sys" 4157 - version = "2.14.0" 4158 source = "registry+https://github.com/rust-lang/crates.io-index" 4159 - checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 4160 dependencies = [ 4161 "core-foundation-sys", 4162 "libc", ··· 4182 4183 [[package]] 4184 name = "semver" 4185 - version = "1.0.26" 4186 source = "registry+https://github.com/rust-lang/crates.io-index" 4187 - checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 4188 dependencies = [ 4189 "serde", 4190 ] 4191 4192 [[package]] 4193 name = "serde" 4194 - version = "1.0.219" 4195 source = "registry+https://github.com/rust-lang/crates.io-index" 4196 - checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 4197 dependencies = [ 4198 "serde_derive", 4199 ] 4200 4201 [[package]] 4202 name = "serde-untagged" 4203 - version = "0.1.7" 4204 source = "registry+https://github.com/rust-lang/crates.io-index" 4205 - checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" 4206 dependencies = [ 4207 "erased-serde", 4208 "serde", 4209 "typeid", 4210 ] 4211 4212 [[package]] 4213 name = "serde_derive" 4214 - version = "1.0.219" 4215 source = "registry+https://github.com/rust-lang/crates.io-index" 4216 - checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 4217 dependencies = [ 4218 "proc-macro2", 4219 "quote", 4220 - "syn 2.0.104", 4221 ] 4222 4223 [[package]] ··· 4228 dependencies = [ 4229 "proc-macro2", 4230 "quote", 4231 - "syn 2.0.104", 4232 ] 4233 4234 [[package]] 4235 name = "serde_json" 4236 - version = "1.0.141" 4237 source = "registry+https://github.com/rust-lang/crates.io-index" 4238 - checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" 4239 dependencies = [ 4240 "itoa", 4241 "memchr", 4242 "ryu", 4243 "serde", 4244 ] 4245 4246 [[package]] ··· 4251 dependencies = [ 4252 "proc-macro2", 4253 "quote", 4254 - "syn 2.0.104", 4255 ] 4256 4257 [[package]] ··· 4265 4266 [[package]] 4267 name = "serde_spanned" 4268 - version = "1.0.0" 4269 source = "registry+https://github.com/rust-lang/crates.io-index" 4270 - checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" 4271 dependencies = [ 4272 - "serde", 4273 ] 4274 4275 [[package]] ··· 4286 4287 [[package]] 4288 name = "serde_with" 4289 - version = "3.14.0" 4290 source = "registry+https://github.com/rust-lang/crates.io-index" 4291 - checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" 4292 dependencies = [ 4293 "base64 0.22.1", 4294 "chrono", 4295 "hex", 4296 "indexmap 1.9.3", 4297 - "indexmap 2.10.0", 4298 "schemars 0.9.0", 4299 - "schemars 1.0.4", 4300 - "serde", 4301 - "serde_derive", 4302 "serde_json", 4303 "serde_with_macros", 4304 "time", ··· 4306 4307 [[package]] 4308 name = "serde_with_macros" 4309 - version = "3.14.0" 4310 source = "registry+https://github.com/rust-lang/crates.io-index" 4311 - checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" 4312 dependencies = [ 4313 "darling", 4314 "proc-macro2", 4315 "quote", 4316 - "syn 2.0.104", 4317 ] 4318 4319 [[package]] 4320 name = "serialize-to-javascript" 4321 - version = "0.1.1" 4322 source = "registry+https://github.com/rust-lang/crates.io-index" 4323 - checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" 4324 dependencies = [ 4325 "serde", 4326 "serde_json", ··· 4329 4330 [[package]] 4331 name = "serialize-to-javascript-impl" 4332 - version = "0.1.1" 4333 source = "registry+https://github.com/rust-lang/crates.io-index" 4334 - checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" 4335 dependencies = [ 4336 "proc-macro2", 4337 "quote", 4338 - "syn 1.0.109", 4339 ] 4340 4341 [[package]] ··· 4349 ] 4350 4351 [[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 name = "sha2" 4364 version = "0.10.9" 4365 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4410 4411 [[package]] 4412 name = "signal-hook-registry" 4413 - version = "1.4.5" 4414 source = "registry+https://github.com/rust-lang/crates.io-index" 4415 - checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 4416 dependencies = [ 4417 "libc", 4418 ] ··· 4446 4447 [[package]] 4448 name = "slab" 4449 - version = "0.4.10" 4450 source = "registry+https://github.com/rust-lang/crates.io-index" 4451 - checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 4452 4453 [[package]] 4454 name = "smallvec" ··· 4458 4459 [[package]] 4460 name = "socket2" 4461 - version = "0.5.10" 4462 source = "registry+https://github.com/rust-lang/crates.io-index" 4463 - checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 4464 dependencies = [ 4465 "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", 4477 ] 4478 4479 [[package]] ··· 4526 4527 [[package]] 4528 name = "stable_deref_trait" 4529 - version = "1.2.0" 4530 source = "registry+https://github.com/rust-lang/crates.io-index" 4531 - checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 4532 4533 [[package]] 4534 name = "static_assertions" ··· 4597 4598 [[package]] 4599 name = "syn" 4600 - version = "2.0.104" 4601 source = "registry+https://github.com/rust-lang/crates.io-index" 4602 - checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 4603 dependencies = [ 4604 "proc-macro2", 4605 "quote", ··· 4623 dependencies = [ 4624 "proc-macro2", 4625 "quote", 4626 - "syn 2.0.104", 4627 ] 4628 4629 [[package]] ··· 4632 source = "registry+https://github.com/rust-lang/crates.io-index" 4633 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4634 dependencies = [ 4635 - "bitflags 2.9.1", 4636 "core-foundation 0.9.4", 4637 "system-configuration-sys", 4638 ] ··· 4662 4663 [[package]] 4664 name = "tao" 4665 - version = "0.34.0" 4666 source = "registry+https://github.com/rust-lang/crates.io-index" 4667 - checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a" 4668 dependencies = [ 4669 - "bitflags 2.9.1", 4670 "core-foundation 0.10.1", 4671 "core-graphics", 4672 "crossbeam-channel", ··· 4683 "ndk", 4684 "ndk-context", 4685 "ndk-sys", 4686 - "objc2 0.6.1", 4687 "objc2-app-kit", 4688 - "objc2-foundation 0.3.1", 4689 "once_cell", 4690 "parking_lot", 4691 "raw-window-handle", ··· 4694 "unicode-segmentation", 4695 "url", 4696 "windows", 4697 - "windows-core", 4698 "windows-version", 4699 "x11-dl", 4700 ] ··· 4707 dependencies = [ 4708 "proc-macro2", 4709 "quote", 4710 - "syn 2.0.104", 4711 ] 4712 4713 [[package]] ··· 4718 4719 [[package]] 4720 name = "tauri" 4721 - version = "2.7.0" 4722 source = "registry+https://github.com/rust-lang/crates.io-index" 4723 - checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7" 4724 dependencies = [ 4725 "anyhow", 4726 "bytes", 4727 - "dirs 6.0.0", 4728 "dunce", 4729 "embed_plist", 4730 - "getrandom 0.3.3", 4731 "glob", 4732 "gtk", 4733 "heck 0.5.0", ··· 4738 "log", 4739 "mime", 4740 "muda", 4741 - "objc2 0.6.1", 4742 "objc2-app-kit", 4743 - "objc2-foundation 0.3.1", 4744 "objc2-ui-kit", 4745 "percent-encoding", 4746 "plist", 4747 "raw-window-handle", ··· 4756 "tauri-runtime", 4757 "tauri-runtime-wry", 4758 "tauri-utils", 4759 - "thiserror 2.0.12", 4760 "tokio", 4761 "tray-icon", 4762 "url", 4763 - "urlpattern", 4764 "webkit2gtk", 4765 "webview2-com", 4766 "window-vibrancy", ··· 4769 4770 [[package]] 4771 name = "tauri-build" 4772 - version = "2.3.1" 4773 source = "registry+https://github.com/rust-lang/crates.io-index" 4774 - checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064" 4775 dependencies = [ 4776 "anyhow", 4777 "cargo_toml", 4778 - "dirs 6.0.0", 4779 "glob", 4780 "heck 0.5.0", 4781 "json-patch", ··· 4785 "serde_json", 4786 "tauri-utils", 4787 "tauri-winres", 4788 - "toml 0.8.2", 4789 "walkdir", 4790 ] 4791 4792 [[package]] 4793 name = "tauri-codegen" 4794 - version = "2.3.1" 4795 source = "registry+https://github.com/rust-lang/crates.io-index" 4796 - checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a" 4797 dependencies = [ 4798 "base64 0.22.1", 4799 "brotli", 4800 "ico", 4801 "json-patch", 4802 "plist", 4803 - "png", 4804 "proc-macro2", 4805 "quote", 4806 "semver", 4807 "serde", 4808 "serde_json", 4809 "sha2", 4810 - "syn 2.0.104", 4811 "tauri-utils", 4812 - "thiserror 2.0.12", 4813 "time", 4814 "url", 4815 "uuid", ··· 4818 4819 [[package]] 4820 name = "tauri-macros" 4821 - version = "2.3.2" 4822 source = "registry+https://github.com/rust-lang/crates.io-index" 4823 - checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e" 4824 dependencies = [ 4825 "heck 0.5.0", 4826 "proc-macro2", 4827 "quote", 4828 - "syn 2.0.104", 4829 "tauri-codegen", 4830 "tauri-utils", 4831 ] 4832 4833 [[package]] 4834 name = "tauri-plugin" 4835 - version = "2.3.1" 4836 source = "registry+https://github.com/rust-lang/crates.io-index" 4837 - checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02" 4838 dependencies = [ 4839 "anyhow", 4840 "glob", ··· 4843 "serde", 4844 "serde_json", 4845 "tauri-utils", 4846 - "toml 0.8.2", 4847 "walkdir", 4848 ] 4849 4850 [[package]] 4851 name = "tauri-plugin-deep-link" 4852 - version = "2.4.1" 4853 source = "registry+https://github.com/rust-lang/crates.io-index" 4854 - checksum = "1fec67f32d7a06d80bd3dc009fdb678c35a66116d9cb8cd2bb32e406c2b5bbd2" 4855 dependencies = [ 4856 "dunce", 4857 "rust-ini", 4858 "serde", 4859 "serde_json", 4860 "tauri", 4861 "tauri-plugin", 4862 "tauri-utils", 4863 - "thiserror 2.0.12", 4864 "tracing", 4865 "url", 4866 "windows-registry", 4867 - "windows-result", 4868 ] 4869 4870 [[package]] 4871 name = "tauri-plugin-fs" 4872 - version = "2.4.1" 4873 source = "registry+https://github.com/rust-lang/crates.io-index" 4874 - checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99" 4875 dependencies = [ 4876 "anyhow", 4877 "dunce", ··· 4884 "tauri", 4885 "tauri-plugin", 4886 "tauri-utils", 4887 - "thiserror 2.0.12", 4888 - "toml 0.8.2", 4889 "url", 4890 ] 4891 4892 [[package]] 4893 name = "tauri-plugin-http" 4894 - version = "2.5.1" 4895 source = "registry+https://github.com/rust-lang/crates.io-index" 4896 - checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2" 4897 dependencies = [ 4898 "bytes", 4899 "cookie_store", ··· 4907 "tauri", 4908 "tauri-plugin", 4909 "tauri-plugin-fs", 4910 - "thiserror 2.0.12", 4911 "tokio", 4912 "url", 4913 "urlpattern", ··· 4915 4916 [[package]] 4917 name = "tauri-plugin-process" 4918 - version = "2.3.0" 4919 source = "registry+https://github.com/rust-lang/crates.io-index" 4920 - checksum = "7461c622a5ea00eb9cd9f7a08dbd3bf79484499fd5c21aa2964677f64ca651ab" 4921 dependencies = [ 4922 "tauri", 4923 "tauri-plugin", ··· 4925 4926 [[package]] 4927 name = "tauri-plugin-shell" 4928 - version = "2.3.0" 4929 source = "registry+https://github.com/rust-lang/crates.io-index" 4930 - checksum = "2b9ffadec5c3523f11e8273465cacb3d86ea7652a28e6e2a2e9b5c182f791d25" 4931 dependencies = [ 4932 "encoding_rs", 4933 "log", ··· 4940 "shared_child", 4941 "tauri", 4942 "tauri-plugin", 4943 - "thiserror 2.0.12", 4944 "tokio", 4945 ] 4946 4947 [[package]] 4948 name = "tauri-plugin-single-instance" 4949 - version = "2.2.0" 4950 source = "registry+https://github.com/rust-lang/crates.io-index" 4951 - checksum = "0f36019ee9832dc99e4450bb55a21cfad8633b19c2c18bd17c7741939b070ede" 4952 dependencies = [ 4953 "serde", 4954 "serde_json", 4955 "tauri", 4956 "tauri-plugin-deep-link", 4957 - "thiserror 2.0.12", 4958 "tracing", 4959 - "windows-sys 0.59.0", 4960 "zbus", 4961 ] 4962 4963 [[package]] 4964 name = "tauri-runtime" 4965 - version = "2.7.1" 4966 source = "registry+https://github.com/rust-lang/crates.io-index" 4967 - checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676" 4968 dependencies = [ 4969 "cookie", 4970 "dpi", 4971 "gtk", 4972 "http", 4973 "jni", 4974 - "objc2 0.6.1", 4975 "objc2-ui-kit", 4976 "raw-window-handle", 4977 "serde", 4978 "serde_json", 4979 "tauri-utils", 4980 - "thiserror 2.0.12", 4981 "url", 4982 "windows", 4983 ] 4984 4985 [[package]] 4986 name = "tauri-runtime-wry" 4987 - version = "2.7.2" 4988 source = "registry+https://github.com/rust-lang/crates.io-index" 4989 - checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439" 4990 dependencies = [ 4991 "gtk", 4992 "http", 4993 "jni", 4994 "log", 4995 - "objc2 0.6.1", 4996 "objc2-app-kit", 4997 - "objc2-foundation 0.3.1", 4998 "once_cell", 4999 "percent-encoding", 5000 "raw-window-handle", ··· 5011 5012 [[package]] 5013 name = "tauri-utils" 5014 - version = "2.6.0" 5015 source = "registry+https://github.com/rust-lang/crates.io-index" 5016 - checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e" 5017 dependencies = [ 5018 "anyhow", 5019 "brotli", ··· 5039 "serde_json", 5040 "serde_with", 5041 "swift-rs", 5042 - "thiserror 2.0.12", 5043 - "toml 0.8.2", 5044 "url", 5045 "urlpattern", 5046 "uuid", ··· 5049 5050 [[package]] 5051 name = "tauri-winres" 5052 - version = "0.3.2" 5053 source = "registry+https://github.com/rust-lang/crates.io-index" 5054 - checksum = "7c6d9028d41d4de835e3c482c677a8cb88137ac435d6ff9a71f392d4421576c9" 5055 dependencies = [ 5056 "embed-resource", 5057 - "indexmap 2.10.0", 5058 - "toml 0.9.4", 5059 ] 5060 5061 [[package]] 5062 name = "tempfile" 5063 - version = "3.20.0" 5064 source = "registry+https://github.com/rust-lang/crates.io-index" 5065 - checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 5066 dependencies = [ 5067 "fastrand", 5068 - "getrandom 0.3.3", 5069 "once_cell", 5070 "rustix", 5071 - "windows-sys 0.59.0", 5072 ] 5073 5074 [[package]] ··· 5093 5094 [[package]] 5095 name = "thiserror" 5096 - version = "2.0.12" 5097 source = "registry+https://github.com/rust-lang/crates.io-index" 5098 - checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 5099 dependencies = [ 5100 - "thiserror-impl 2.0.12", 5101 ] 5102 5103 [[package]] ··· 5108 dependencies = [ 5109 "proc-macro2", 5110 "quote", 5111 - "syn 2.0.104", 5112 ] 5113 5114 [[package]] 5115 name = "thiserror-impl" 5116 - version = "2.0.12" 5117 source = "registry+https://github.com/rust-lang/crates.io-index" 5118 - checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 5119 dependencies = [ 5120 "proc-macro2", 5121 "quote", 5122 - "syn 2.0.104", 5123 ] 5124 5125 [[package]] 5126 name = "tiff" 5127 - version = "0.9.1" 5128 source = "registry+https://github.com/rust-lang/crates.io-index" 5129 - checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 5130 dependencies = [ 5131 "flate2", 5132 - "jpeg-decoder", 5133 "weezl", 5134 ] 5135 5136 [[package]] 5137 name = "time" 5138 - version = "0.3.41" 5139 source = "registry+https://github.com/rust-lang/crates.io-index" 5140 - checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 5141 dependencies = [ 5142 "deranged", 5143 "itoa", ··· 5150 5151 [[package]] 5152 name = "time-core" 5153 - version = "0.1.4" 5154 source = "registry+https://github.com/rust-lang/crates.io-index" 5155 - checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 5156 5157 [[package]] 5158 name = "time-macros" 5159 - version = "0.2.22" 5160 source = "registry+https://github.com/rust-lang/crates.io-index" 5161 - checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 5162 dependencies = [ 5163 "num-conv", 5164 "time-core", ··· 5175 5176 [[package]] 5177 name = "tinystr" 5178 - version = "0.8.1" 5179 source = "registry+https://github.com/rust-lang/crates.io-index" 5180 - checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 5181 dependencies = [ 5182 "displaydoc", 5183 "zerovec", ··· 5185 5186 [[package]] 5187 name = "tinyvec" 5188 - version = "1.9.0" 5189 source = "registry+https://github.com/rust-lang/crates.io-index" 5190 - checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 5191 dependencies = [ 5192 "tinyvec_macros", 5193 ] ··· 5200 5201 [[package]] 5202 name = "tokio" 5203 - version = "1.47.0" 5204 source = "registry+https://github.com/rust-lang/crates.io-index" 5205 - checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" 5206 dependencies = [ 5207 - "backtrace", 5208 "bytes", 5209 - "io-uring", 5210 "libc", 5211 - "mio 1.0.4", 5212 "pin-project-lite", 5213 - "slab", 5214 - "socket2 0.6.0", 5215 "tokio-macros", 5216 - "windows-sys 0.59.0", 5217 ] 5218 5219 [[package]] 5220 name = "tokio-macros" 5221 - version = "2.5.0" 5222 source = "registry+https://github.com/rust-lang/crates.io-index" 5223 - checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 5224 dependencies = [ 5225 "proc-macro2", 5226 "quote", 5227 - "syn 2.0.104", 5228 ] 5229 5230 [[package]] ··· 5239 5240 [[package]] 5241 name = "tokio-rustls" 5242 - version = "0.26.2" 5243 source = "registry+https://github.com/rust-lang/crates.io-index" 5244 - checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 5245 dependencies = [ 5246 "rustls", 5247 "tokio", ··· 5249 5250 [[package]] 5251 name = "tokio-util" 5252 - version = "0.7.15" 5253 source = "registry+https://github.com/rust-lang/crates.io-index" 5254 - checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 5255 dependencies = [ 5256 "bytes", 5257 "futures-core", ··· 5274 5275 [[package]] 5276 name = "toml" 5277 - version = "0.9.4" 5278 source = "registry+https://github.com/rust-lang/crates.io-index" 5279 - checksum = "41ae868b5a0f67631c14589f7e250c1ea2c574ee5ba21c6c8dd4b1485705a5a1" 5280 dependencies = [ 5281 - "indexmap 2.10.0", 5282 - "serde", 5283 - "serde_spanned 1.0.0", 5284 - "toml_datetime 0.7.0", 5285 "toml_parser", 5286 "toml_writer", 5287 - "winnow 0.7.12", 5288 ] 5289 5290 [[package]] ··· 5298 5299 [[package]] 5300 name = "toml_datetime" 5301 - version = "0.7.0" 5302 source = "registry+https://github.com/rust-lang/crates.io-index" 5303 - checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" 5304 dependencies = [ 5305 - "serde", 5306 ] 5307 5308 [[package]] ··· 5311 source = "registry+https://github.com/rust-lang/crates.io-index" 5312 checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 5313 dependencies = [ 5314 - "indexmap 2.10.0", 5315 "toml_datetime 0.6.3", 5316 "winnow 0.5.40", 5317 ] ··· 5322 source = "registry+https://github.com/rust-lang/crates.io-index" 5323 checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 5324 dependencies = [ 5325 - "indexmap 2.10.0", 5326 "serde", 5327 "serde_spanned 0.6.9", 5328 "toml_datetime 0.6.3", ··· 5330 ] 5331 5332 [[package]] 5333 name = "toml_parser" 5334 - version = "1.0.1" 5335 source = "registry+https://github.com/rust-lang/crates.io-index" 5336 - checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" 5337 dependencies = [ 5338 - "winnow 0.7.12", 5339 ] 5340 5341 [[package]] 5342 name = "toml_writer" 5343 - version = "1.0.2" 5344 source = "registry+https://github.com/rust-lang/crates.io-index" 5345 - checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" 5346 5347 [[package]] 5348 name = "tower" ··· 5365 source = "registry+https://github.com/rust-lang/crates.io-index" 5366 checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 5367 dependencies = [ 5368 - "bitflags 2.9.1", 5369 "bytes", 5370 "futures-util", 5371 "http", ··· 5408 dependencies = [ 5409 "proc-macro2", 5410 "quote", 5411 - "syn 2.0.104", 5412 ] 5413 5414 [[package]] ··· 5422 5423 [[package]] 5424 name = "tray-icon" 5425 - version = "0.21.1" 5426 source = "registry+https://github.com/rust-lang/crates.io-index" 5427 - checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" 5428 dependencies = [ 5429 "crossbeam-channel", 5430 - "dirs 6.0.0", 5431 "libappindicator", 5432 "muda", 5433 - "objc2 0.6.1", 5434 "objc2-app-kit", 5435 "objc2-core-foundation", 5436 "objc2-core-graphics", 5437 - "objc2-foundation 0.3.1", 5438 "once_cell", 5439 - "png", 5440 "serde", 5441 - "thiserror 2.0.12", 5442 - "windows-sys 0.59.0", 5443 ] 5444 5445 [[package]] ··· 5456 5457 [[package]] 5458 name = "typenum" 5459 - version = "1.18.0" 5460 source = "registry+https://github.com/rust-lang/crates.io-index" 5461 - checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 5462 5463 [[package]] 5464 name = "uds_windows" ··· 5514 5515 [[package]] 5516 name = "unicode-ident" 5517 - version = "1.0.18" 5518 source = "registry+https://github.com/rust-lang/crates.io-index" 5519 - checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 5520 5521 [[package]] 5522 name = "unicode-segmentation" ··· 5532 5533 [[package]] 5534 name = "url" 5535 - version = "2.5.4" 5536 source = "registry+https://github.com/rust-lang/crates.io-index" 5537 - checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 5538 dependencies = [ 5539 "form_urlencoded", 5540 "idna", ··· 5568 5569 [[package]] 5570 name = "uuid" 5571 - version = "1.17.0" 5572 source = "registry+https://github.com/rust-lang/crates.io-index" 5573 - checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" 5574 dependencies = [ 5575 - "getrandom 0.3.3", 5576 "js-sys", 5577 "serde", 5578 "wasm-bindgen", ··· 5597 5598 [[package]] 5599 name = "version-compare" 5600 - version = "0.2.0" 5601 source = "registry+https://github.com/rust-lang/crates.io-index" 5602 - checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 5603 5604 [[package]] 5605 name = "version_check" ··· 5608 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 5609 5610 [[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 name = "vswhom" 5635 version = "0.1.0" 5636 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5682 checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 5683 5684 [[package]] 5685 - name = "wasi" 5686 - version = "0.14.2+wasi-0.2.4" 5687 source = "registry+https://github.com/rust-lang/crates.io-index" 5688 - checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 5689 dependencies = [ 5690 - "wit-bindgen-rt", 5691 ] 5692 5693 [[package]] 5694 name = "wasm-bindgen" 5695 - version = "0.2.100" 5696 source = "registry+https://github.com/rust-lang/crates.io-index" 5697 - checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 5698 dependencies = [ 5699 "cfg-if", 5700 "once_cell", 5701 "rustversion", 5702 "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 "wasm-bindgen-shared", 5717 ] 5718 5719 [[package]] 5720 name = "wasm-bindgen-futures" 5721 - version = "0.4.50" 5722 source = "registry+https://github.com/rust-lang/crates.io-index" 5723 - checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 5724 dependencies = [ 5725 "cfg-if", 5726 "js-sys", ··· 5731 5732 [[package]] 5733 name = "wasm-bindgen-macro" 5734 - version = "0.2.100" 5735 source = "registry+https://github.com/rust-lang/crates.io-index" 5736 - checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 5737 dependencies = [ 5738 "quote", 5739 "wasm-bindgen-macro-support", ··· 5741 5742 [[package]] 5743 name = "wasm-bindgen-macro-support" 5744 - version = "0.2.100" 5745 source = "registry+https://github.com/rust-lang/crates.io-index" 5746 - checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 5747 dependencies = [ 5748 "proc-macro2", 5749 "quote", 5750 - "syn 2.0.104", 5751 - "wasm-bindgen-backend", 5752 "wasm-bindgen-shared", 5753 ] 5754 5755 [[package]] 5756 name = "wasm-bindgen-shared" 5757 - version = "0.2.100" 5758 source = "registry+https://github.com/rust-lang/crates.io-index" 5759 - checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 5760 dependencies = [ 5761 "unicode-ident", 5762 ] ··· 5776 5777 [[package]] 5778 name = "web-sys" 5779 - version = "0.3.77" 5780 source = "registry+https://github.com/rust-lang/crates.io-index" 5781 - checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 5782 dependencies = [ 5783 "js-sys", 5784 "wasm-bindgen", ··· 5840 5841 [[package]] 5842 name = "webpki-roots" 5843 - version = "1.0.2" 5844 source = "registry+https://github.com/rust-lang/crates.io-index" 5845 - checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" 5846 dependencies = [ 5847 "rustls-pki-types", 5848 ] ··· 5856 "webview2-com-macros", 5857 "webview2-com-sys", 5858 "windows", 5859 - "windows-core", 5860 "windows-implement", 5861 "windows-interface", 5862 ] ··· 5869 dependencies = [ 5870 "proc-macro2", 5871 "quote", 5872 - "syn 2.0.104", 5873 ] 5874 5875 [[package]] ··· 5878 source = "registry+https://github.com/rust-lang/crates.io-index" 5879 checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" 5880 dependencies = [ 5881 - "thiserror 2.0.12", 5882 "windows", 5883 - "windows-core", 5884 ] 5885 5886 [[package]] ··· 5907 5908 [[package]] 5909 name = "winapi-util" 5910 - version = "0.1.9" 5911 source = "registry+https://github.com/rust-lang/crates.io-index" 5912 - checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 5913 dependencies = [ 5914 - "windows-sys 0.59.0", 5915 ] 5916 5917 [[package]] ··· 5926 source = "registry+https://github.com/rust-lang/crates.io-index" 5927 checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" 5928 dependencies = [ 5929 - "objc2 0.6.1", 5930 "objc2-app-kit", 5931 "objc2-core-foundation", 5932 - "objc2-foundation 0.3.1", 5933 "raw-window-handle", 5934 "windows-sys 0.59.0", 5935 "windows-version", ··· 5942 checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 5943 dependencies = [ 5944 "windows-collections", 5945 - "windows-core", 5946 "windows-future", 5947 - "windows-link", 5948 "windows-numerics", 5949 ] 5950 ··· 5954 source = "registry+https://github.com/rust-lang/crates.io-index" 5955 checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 5956 dependencies = [ 5957 - "windows-core", 5958 ] 5959 5960 [[package]] ··· 5965 dependencies = [ 5966 "windows-implement", 5967 "windows-interface", 5968 - "windows-link", 5969 - "windows-result", 5970 - "windows-strings", 5971 ] 5972 5973 [[package]] ··· 5976 source = "registry+https://github.com/rust-lang/crates.io-index" 5977 checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 5978 dependencies = [ 5979 - "windows-core", 5980 - "windows-link", 5981 "windows-threading", 5982 ] 5983 5984 [[package]] 5985 name = "windows-implement" 5986 - version = "0.60.0" 5987 source = "registry+https://github.com/rust-lang/crates.io-index" 5988 - checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 5989 dependencies = [ 5990 "proc-macro2", 5991 "quote", 5992 - "syn 2.0.104", 5993 ] 5994 5995 [[package]] 5996 name = "windows-interface" 5997 - version = "0.59.1" 5998 source = "registry+https://github.com/rust-lang/crates.io-index" 5999 - checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 6000 dependencies = [ 6001 "proc-macro2", 6002 "quote", 6003 - "syn 2.0.104", 6004 ] 6005 6006 [[package]] ··· 6010 checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 6011 6012 [[package]] 6013 name = "windows-numerics" 6014 version = "0.2.0" 6015 source = "registry+https://github.com/rust-lang/crates.io-index" 6016 checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 6017 dependencies = [ 6018 - "windows-core", 6019 - "windows-link", 6020 ] 6021 6022 [[package]] ··· 6025 source = "registry+https://github.com/rust-lang/crates.io-index" 6026 checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 6027 dependencies = [ 6028 - "windows-link", 6029 - "windows-result", 6030 - "windows-strings", 6031 ] 6032 6033 [[package]] ··· 6036 source = "registry+https://github.com/rust-lang/crates.io-index" 6037 checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 6038 dependencies = [ 6039 - "windows-link", 6040 ] 6041 6042 [[package]] ··· 6045 source = "registry+https://github.com/rust-lang/crates.io-index" 6046 checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 6047 dependencies = [ 6048 - "windows-link", 6049 ] 6050 6051 [[package]] 6052 - name = "windows-sys" 6053 - version = "0.45.0" 6054 source = "registry+https://github.com/rust-lang/crates.io-index" 6055 - checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6056 dependencies = [ 6057 - "windows-targets 0.42.2", 6058 ] 6059 6060 [[package]] 6061 name = "windows-sys" 6062 - version = "0.48.0" 6063 source = "registry+https://github.com/rust-lang/crates.io-index" 6064 - checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 6065 dependencies = [ 6066 - "windows-targets 0.48.5", 6067 ] 6068 6069 [[package]] ··· 6090 source = "registry+https://github.com/rust-lang/crates.io-index" 6091 checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 6092 dependencies = [ 6093 - "windows-targets 0.53.3", 6094 ] 6095 6096 [[package]] ··· 6110 6111 [[package]] 6112 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 version = "0.52.6" 6129 source = "registry+https://github.com/rust-lang/crates.io-index" 6130 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" ··· 6141 6142 [[package]] 6143 name = "windows-targets" 6144 - version = "0.53.3" 6145 source = "registry+https://github.com/rust-lang/crates.io-index" 6146 - checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 6147 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", 6157 ] 6158 6159 [[package]] ··· 6162 source = "registry+https://github.com/rust-lang/crates.io-index" 6163 checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6164 dependencies = [ 6165 - "windows-link", 6166 ] 6167 6168 [[package]] 6169 name = "windows-version" 6170 - version = "0.1.4" 6171 source = "registry+https://github.com/rust-lang/crates.io-index" 6172 - checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" 6173 dependencies = [ 6174 - "windows-link", 6175 ] 6176 6177 [[package]] ··· 6182 6183 [[package]] 6184 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 version = "0.52.6" 6192 source = "registry+https://github.com/rust-lang/crates.io-index" 6193 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 6194 6195 [[package]] 6196 name = "windows_aarch64_gnullvm" 6197 - version = "0.53.0" 6198 source = "registry+https://github.com/rust-lang/crates.io-index" 6199 - checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 6200 6201 [[package]] 6202 name = "windows_aarch64_msvc" ··· 6206 6207 [[package]] 6208 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 version = "0.52.6" 6216 source = "registry+https://github.com/rust-lang/crates.io-index" 6217 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6218 6219 [[package]] 6220 name = "windows_aarch64_msvc" 6221 - version = "0.53.0" 6222 source = "registry+https://github.com/rust-lang/crates.io-index" 6223 - checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 6224 6225 [[package]] 6226 name = "windows_i686_gnu" ··· 6230 6231 [[package]] 6232 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 version = "0.52.6" 6240 source = "registry+https://github.com/rust-lang/crates.io-index" 6241 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6242 6243 [[package]] 6244 name = "windows_i686_gnu" 6245 - version = "0.53.0" 6246 source = "registry+https://github.com/rust-lang/crates.io-index" 6247 - checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 6248 6249 [[package]] 6250 name = "windows_i686_gnullvm" ··· 6254 6255 [[package]] 6256 name = "windows_i686_gnullvm" 6257 - version = "0.53.0" 6258 source = "registry+https://github.com/rust-lang/crates.io-index" 6259 - checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 6260 6261 [[package]] 6262 name = "windows_i686_msvc" ··· 6266 6267 [[package]] 6268 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 version = "0.52.6" 6276 source = "registry+https://github.com/rust-lang/crates.io-index" 6277 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6278 6279 [[package]] 6280 name = "windows_i686_msvc" 6281 - version = "0.53.0" 6282 source = "registry+https://github.com/rust-lang/crates.io-index" 6283 - checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 6284 6285 [[package]] 6286 name = "windows_x86_64_gnu" ··· 6290 6291 [[package]] 6292 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 version = "0.52.6" 6300 source = "registry+https://github.com/rust-lang/crates.io-index" 6301 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6302 6303 [[package]] 6304 name = "windows_x86_64_gnu" 6305 - version = "0.53.0" 6306 source = "registry+https://github.com/rust-lang/crates.io-index" 6307 - checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 6308 6309 [[package]] 6310 name = "windows_x86_64_gnullvm" ··· 6314 6315 [[package]] 6316 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 version = "0.52.6" 6324 source = "registry+https://github.com/rust-lang/crates.io-index" 6325 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6326 6327 [[package]] 6328 name = "windows_x86_64_gnullvm" 6329 - version = "0.53.0" 6330 source = "registry+https://github.com/rust-lang/crates.io-index" 6331 - checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 6332 6333 [[package]] 6334 name = "windows_x86_64_msvc" ··· 6338 6339 [[package]] 6340 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 version = "0.52.6" 6348 source = "registry+https://github.com/rust-lang/crates.io-index" 6349 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6350 6351 [[package]] 6352 name = "windows_x86_64_msvc" 6353 - version = "0.53.0" 6354 source = "registry+https://github.com/rust-lang/crates.io-index" 6355 - checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 6356 6357 [[package]] 6358 name = "winnow" ··· 6365 6366 [[package]] 6367 name = "winnow" 6368 - version = "0.7.12" 6369 source = "registry+https://github.com/rust-lang/crates.io-index" 6370 - checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" 6371 6372 [[package]] 6373 name = "winreg" ··· 6380 ] 6381 6382 [[package]] 6383 - name = "wit-bindgen-rt" 6384 - version = "0.39.0" 6385 source = "registry+https://github.com/rust-lang/crates.io-index" 6386 - checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 6387 - dependencies = [ 6388 - "bitflags 2.9.1", 6389 - ] 6390 6391 [[package]] 6392 name = "writeable" 6393 - version = "0.6.1" 6394 source = "registry+https://github.com/rust-lang/crates.io-index" 6395 - checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 6396 6397 [[package]] 6398 name = "wry" 6399 - version = "0.52.1" 6400 source = "registry+https://github.com/rust-lang/crates.io-index" 6401 - checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9" 6402 dependencies = [ 6403 "base64 0.22.1", 6404 - "block2 0.6.1", 6405 "cookie", 6406 "crossbeam-channel", 6407 "dpi", 6408 "dunce", 6409 "gdkx11", ··· 6415 "kuchikiki", 6416 "libc", 6417 "ndk", 6418 - "objc2 0.6.1", 6419 "objc2-app-kit", 6420 "objc2-core-foundation", 6421 - "objc2-foundation 0.3.1", 6422 "objc2-ui-kit", 6423 "objc2-web-kit", 6424 "once_cell", ··· 6427 "sha2", 6428 "soup3", 6429 "tao-macros", 6430 - "thiserror 2.0.12", 6431 "url", 6432 "webkit2gtk", 6433 "webkit2gtk-sys", 6434 "webview2-com", 6435 "windows", 6436 - "windows-core", 6437 "windows-version", 6438 "x11-dl", 6439 ] ··· 6460 ] 6461 6462 [[package]] 6463 - name = "xdg-home" 6464 - version = "1.3.0" 6465 source = "registry+https://github.com/rust-lang/crates.io-index" 6466 - checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" 6467 dependencies = [ 6468 - "libc", 6469 - "windows-sys 0.59.0", 6470 ] 6471 6472 [[package]] 6473 name = "yoke" 6474 - version = "0.8.0" 6475 source = "registry+https://github.com/rust-lang/crates.io-index" 6476 - checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 6477 dependencies = [ 6478 - "serde", 6479 "stable_deref_trait", 6480 "yoke-derive", 6481 "zerofrom", ··· 6483 6484 [[package]] 6485 name = "yoke-derive" 6486 - version = "0.8.0" 6487 source = "registry+https://github.com/rust-lang/crates.io-index" 6488 - checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 6489 dependencies = [ 6490 "proc-macro2", 6491 "quote", 6492 - "syn 2.0.104", 6493 "synstructure", 6494 ] 6495 6496 [[package]] 6497 name = "zbus" 6498 - version = "4.0.1" 6499 source = "registry+https://github.com/rust-lang/crates.io-index" 6500 - checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" 6501 dependencies = [ 6502 "async-broadcast", 6503 "async-executor", 6504 - "async-fs", 6505 "async-io", 6506 "async-lock", 6507 "async-process", ··· 6509 "async-task", 6510 "async-trait", 6511 "blocking", 6512 - "derivative", 6513 "enumflags2", 6514 "event-listener", 6515 "futures-core", 6516 - "futures-sink", 6517 - "futures-util", 6518 "hex", 6519 "nix", 6520 "ordered-stream", 6521 - "rand 0.8.5", 6522 "serde", 6523 "serde_repr", 6524 - "sha1", 6525 - "static_assertions", 6526 "tracing", 6527 "uds_windows", 6528 - "windows-sys 0.52.0", 6529 - "xdg-home", 6530 "zbus_macros", 6531 "zbus_names", 6532 "zvariant", ··· 6534 6535 [[package]] 6536 name = "zbus_macros" 6537 - version = "4.0.1" 6538 source = "registry+https://github.com/rust-lang/crates.io-index" 6539 - checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" 6540 dependencies = [ 6541 - "proc-macro-crate 1.3.1", 6542 "proc-macro2", 6543 "quote", 6544 - "regex", 6545 - "syn 1.0.109", 6546 "zvariant_utils", 6547 ] 6548 6549 [[package]] 6550 name = "zbus_names" 6551 - version = "3.0.0" 6552 source = "registry+https://github.com/rust-lang/crates.io-index" 6553 - checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" 6554 dependencies = [ 6555 "serde", 6556 "static_assertions", 6557 "zvariant", 6558 ] 6559 6560 [[package]] 6561 name = "zerocopy" 6562 - version = "0.8.26" 6563 source = "registry+https://github.com/rust-lang/crates.io-index" 6564 - checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 6565 dependencies = [ 6566 "zerocopy-derive", 6567 ] 6568 6569 [[package]] 6570 name = "zerocopy-derive" 6571 - version = "0.8.26" 6572 source = "registry+https://github.com/rust-lang/crates.io-index" 6573 - checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 6574 dependencies = [ 6575 "proc-macro2", 6576 "quote", 6577 - "syn 2.0.104", 6578 ] 6579 6580 [[package]] ··· 6594 dependencies = [ 6595 "proc-macro2", 6596 "quote", 6597 - "syn 2.0.104", 6598 "synstructure", 6599 ] 6600 6601 [[package]] 6602 name = "zeroize" 6603 - version = "1.8.1" 6604 source = "registry+https://github.com/rust-lang/crates.io-index" 6605 - checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 6606 6607 [[package]] 6608 name = "zerotrie" 6609 - version = "0.2.2" 6610 source = "registry+https://github.com/rust-lang/crates.io-index" 6611 - checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 6612 dependencies = [ 6613 "displaydoc", 6614 "yoke", ··· 6617 6618 [[package]] 6619 name = "zerovec" 6620 - version = "0.11.2" 6621 source = "registry+https://github.com/rust-lang/crates.io-index" 6622 - checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 6623 dependencies = [ 6624 "yoke", 6625 "zerofrom", ··· 6628 6629 [[package]] 6630 name = "zerovec-derive" 6631 - version = "0.11.1" 6632 source = "registry+https://github.com/rust-lang/crates.io-index" 6633 - checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 6634 dependencies = [ 6635 "proc-macro2", 6636 "quote", 6637 - "syn 2.0.104", 6638 ] 6639 6640 [[package]] ··· 6654 6655 [[package]] 6656 name = "zune-jpeg" 6657 - version = "0.4.20" 6658 source = "registry+https://github.com/rust-lang/crates.io-index" 6659 - checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" 6660 dependencies = [ 6661 "zune-core", 6662 ] 6663 6664 [[package]] 6665 name = "zvariant" 6666 - version = "4.0.0" 6667 source = "registry+https://github.com/rust-lang/crates.io-index" 6668 - checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" 6669 dependencies = [ 6670 "endi", 6671 "enumflags2", 6672 "serde", 6673 - "static_assertions", 6674 "zvariant_derive", 6675 ] 6676 6677 [[package]] 6678 name = "zvariant_derive" 6679 - version = "4.0.0" 6680 source = "registry+https://github.com/rust-lang/crates.io-index" 6681 - checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" 6682 dependencies = [ 6683 - "proc-macro-crate 1.3.1", 6684 "proc-macro2", 6685 "quote", 6686 - "syn 1.0.109", 6687 "zvariant_utils", 6688 ] 6689 6690 [[package]] 6691 name = "zvariant_utils" 6692 - version = "1.1.0" 6693 source = "registry+https://github.com/rust-lang/crates.io-index" 6694 - checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" 6695 dependencies = [ 6696 "proc-macro2", 6697 "quote", 6698 - "syn 1.0.109", 6699 ]
··· 3 version = 4 4 5 [[package]] 6 + name = "VRChatPhotoManager" 7 + version = "0.2.7" 8 dependencies = [ 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", 26 ] 27 28 [[package]] ··· 33 34 [[package]] 35 name = "aho-corasick" 36 + version = "1.1.4" 37 source = "registry+https://github.com/rust-lang/crates.io-index" 38 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 39 dependencies = [ 40 "memchr", 41 ] ··· 65 ] 66 67 [[package]] 68 name = "android_system_properties" 69 version = "0.1.5" 70 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 75 76 [[package]] 77 name = "anyhow" 78 + version = "1.0.100" 79 source = "registry+https://github.com/rust-lang/crates.io-index" 80 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 81 82 [[package]] 83 name = "arbitrary" 84 + version = "1.4.2" 85 source = "registry+https://github.com/rust-lang/crates.io-index" 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 + ] 107 108 [[package]] 109 name = "arg_enum_proc_macro" ··· 113 dependencies = [ 114 "proc-macro2", 115 "quote", 116 + "syn 2.0.109", 117 ] 118 119 [[package]] ··· 148 149 [[package]] 150 name = "async-executor" 151 + version = "1.13.3" 152 source = "registry+https://github.com/rust-lang/crates.io-index" 153 + checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" 154 dependencies = [ 155 "async-task", 156 "concurrent-queue", ··· 161 ] 162 163 [[package]] 164 name = "async-io" 165 + version = "2.6.0" 166 source = "registry+https://github.com/rust-lang/crates.io-index" 167 + checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" 168 dependencies = [ 169 + "autocfg", 170 "cfg-if", 171 "concurrent-queue", 172 "futures-io", ··· 175 "polling", 176 "rustix", 177 "slab", 178 + "windows-sys 0.61.2", 179 ] 180 181 [[package]] 182 name = "async-lock" 183 + version = "3.4.1" 184 source = "registry+https://github.com/rust-lang/crates.io-index" 185 + checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 186 dependencies = [ 187 "event-listener", 188 "event-listener-strategy", ··· 191 192 [[package]] 193 name = "async-process" 194 + version = "2.5.0" 195 source = "registry+https://github.com/rust-lang/crates.io-index" 196 + checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" 197 dependencies = [ 198 "async-channel", 199 "async-io", ··· 215 dependencies = [ 216 "proc-macro2", 217 "quote", 218 + "syn 2.0.109", 219 ] 220 221 [[package]] 222 name = "async-signal" 223 + version = "0.2.13" 224 source = "registry+https://github.com/rust-lang/crates.io-index" 225 + checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" 226 dependencies = [ 227 "async-io", 228 "async-lock", ··· 233 "rustix", 234 "signal-hook-registry", 235 "slab", 236 + "windows-sys 0.61.2", 237 ] 238 239 [[package]] ··· 244 245 [[package]] 246 name = "async-trait" 247 + version = "0.1.89" 248 source = "registry+https://github.com/rust-lang/crates.io-index" 249 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 250 dependencies = [ 251 "proc-macro2", 252 "quote", 253 + "syn 2.0.109", 254 ] 255 256 [[package]] ··· 290 291 [[package]] 292 name = "av1-grain" 293 + version = "0.2.5" 294 source = "registry+https://github.com/rust-lang/crates.io-index" 295 + checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" 296 dependencies = [ 297 "anyhow", 298 "arrayvec", ··· 304 305 [[package]] 306 name = "avif-serialize" 307 + version = "0.8.6" 308 source = "registry+https://github.com/rust-lang/crates.io-index" 309 + checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" 310 dependencies = [ 311 "arrayvec", 312 ] 313 314 [[package]] 315 name = "base64" 316 version = "0.21.7" 317 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 325 326 [[package]] 327 name = "bit_field" 328 + version = "0.10.3" 329 source = "registry+https://github.com/rust-lang/crates.io-index" 330 + checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" 331 332 [[package]] 333 name = "bitflags" ··· 337 338 [[package]] 339 name = "bitflags" 340 + version = "2.10.0" 341 source = "registry+https://github.com/rust-lang/crates.io-index" 342 + checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 343 dependencies = [ 344 + "serde_core", 345 ] 346 347 [[package]] ··· 370 371 [[package]] 372 name = "block2" 373 + version = "0.6.2" 374 source = "registry+https://github.com/rust-lang/crates.io-index" 375 + checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" 376 dependencies = [ 377 + "objc2 0.6.3", 378 ] 379 380 [[package]] ··· 392 393 [[package]] 394 name = "brotli" 395 + version = "8.0.2" 396 source = "registry+https://github.com/rust-lang/crates.io-index" 397 + checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 398 dependencies = [ 399 "alloc-no-stdlib", 400 "alloc-stdlib", ··· 425 426 [[package]] 427 name = "bytemuck" 428 + version = "1.24.0" 429 source = "registry+https://github.com/rust-lang/crates.io-index" 430 + checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 431 432 [[package]] 433 name = "byteorder" ··· 456 source = "registry+https://github.com/rust-lang/crates.io-index" 457 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 458 dependencies = [ 459 + "bitflags 2.10.0", 460 "cairo-sys-rs", 461 "glib", 462 "libc", ··· 477 478 [[package]] 479 name = "camino" 480 + version = "1.2.1" 481 source = "registry+https://github.com/rust-lang/crates.io-index" 482 + checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" 483 dependencies = [ 484 + "serde_core", 485 ] 486 487 [[package]] ··· 504 "semver", 505 "serde", 506 "serde_json", 507 + "thiserror 2.0.17", 508 ] 509 510 [[package]] ··· 514 checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" 515 dependencies = [ 516 "serde", 517 + "toml 0.9.8", 518 ] 519 520 [[package]] 521 name = "cc" 522 + version = "1.2.45" 523 source = "registry+https://github.com/rust-lang/crates.io-index" 524 + checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" 525 dependencies = [ 526 + "find-msvc-tools", 527 "jobserver", 528 "libc", 529 "shlex", ··· 558 559 [[package]] 560 name = "cfg-if" 561 + version = "1.0.4" 562 source = "registry+https://github.com/rust-lang/crates.io-index" 563 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 564 565 [[package]] 566 name = "cfg_aliases" ··· 570 571 [[package]] 572 name = "chrono" 573 + version = "0.4.42" 574 source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 576 dependencies = [ 577 "iana-time-zone", 578 "num-traits", 579 "serde", 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", 590 ] 591 592 [[package]] ··· 701 source = "registry+https://github.com/rust-lang/crates.io-index" 702 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 703 dependencies = [ 704 + "bitflags 2.10.0", 705 "core-foundation 0.10.1", 706 "core-graphics-types", 707 "foreign-types 0.5.0", ··· 714 source = "registry+https://github.com/rust-lang/crates.io-index" 715 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 716 dependencies = [ 717 + "bitflags 2.10.0", 718 "core-foundation 0.10.1", 719 "libc", 720 ] ··· 811 checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 812 dependencies = [ 813 "quote", 814 + "syn 2.0.109", 815 ] 816 817 [[package]] ··· 821 checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" 822 dependencies = [ 823 "quote", 824 + "syn 2.0.109", 825 ] 826 827 [[package]] 828 name = "darling" 829 + version = "0.21.3" 830 source = "registry+https://github.com/rust-lang/crates.io-index" 831 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 832 dependencies = [ 833 "darling_core", 834 "darling_macro", ··· 836 837 [[package]] 838 name = "darling_core" 839 + version = "0.21.3" 840 source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 842 dependencies = [ 843 "fnv", 844 "ident_case", 845 "proc-macro2", 846 "quote", 847 "strsim", 848 + "syn 2.0.109", 849 ] 850 851 [[package]] 852 name = "darling_macro" 853 + version = "0.21.3" 854 source = "registry+https://github.com/rust-lang/crates.io-index" 855 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 856 dependencies = [ 857 "darling_core", 858 "quote", 859 + "syn 2.0.109", 860 ] 861 862 [[package]] 863 name = "data-url" 864 + version = "0.3.2" 865 source = "registry+https://github.com/rust-lang/crates.io-index" 866 + checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" 867 868 [[package]] 869 name = "deranged" 870 + version = "0.5.5" 871 source = "registry+https://github.com/rust-lang/crates.io-index" 872 + checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 873 dependencies = [ 874 "powerfmt", 875 + "serde_core", 876 ] 877 878 [[package]] ··· 885 "proc-macro2", 886 "quote", 887 "rustc_version", 888 + "syn 2.0.109", 889 ] 890 891 [[package]] ··· 900 901 [[package]] 902 name = "dirs" 903 version = "6.0.0" 904 source = "registry+https://github.com/rust-lang/crates.io-index" 905 checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 906 dependencies = [ 907 + "dirs-sys", 908 ] 909 910 [[package]] ··· 915 dependencies = [ 916 "libc", 917 "option-ext", 918 + "redox_users", 919 + "windows-sys 0.61.2", 920 ] 921 922 [[package]] ··· 931 source = "registry+https://github.com/rust-lang/crates.io-index" 932 checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 933 dependencies = [ 934 + "bitflags 2.10.0", 935 + "objc2 0.6.3", 936 ] 937 938 [[package]] ··· 943 dependencies = [ 944 "proc-macro2", 945 "quote", 946 + "syn 2.0.109", 947 ] 948 949 [[package]] 950 name = "dlopen2" 951 + version = "0.8.0" 952 source = "registry+https://github.com/rust-lang/crates.io-index" 953 + checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" 954 dependencies = [ 955 "dlopen2_derive", 956 "libc", ··· 966 dependencies = [ 967 "proc-macro2", 968 "quote", 969 + "syn 2.0.109", 970 ] 971 972 [[package]] ··· 980 981 [[package]] 982 name = "document-features" 983 + version = "0.2.12" 984 source = "registry+https://github.com/rust-lang/crates.io-index" 985 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 986 dependencies = [ 987 "litrs", 988 ] ··· 1031 1032 [[package]] 1033 name = "embed-resource" 1034 + version = "3.0.6" 1035 source = "registry+https://github.com/rust-lang/crates.io-index" 1036 + checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" 1037 dependencies = [ 1038 "cc", 1039 "memchr", 1040 "rustc_version", 1041 + "toml 0.9.8", 1042 "vswhom", 1043 "winreg", 1044 ] ··· 1082 dependencies = [ 1083 "proc-macro2", 1084 "quote", 1085 + "syn 2.0.109", 1086 ] 1087 1088 [[package]] ··· 1102 dependencies = [ 1103 "proc-macro2", 1104 "quote", 1105 + "syn 2.0.109", 1106 ] 1107 1108 [[package]] ··· 1113 1114 [[package]] 1115 name = "erased-serde" 1116 + version = "0.4.9" 1117 source = "registry+https://github.com/rust-lang/crates.io-index" 1118 + checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" 1119 dependencies = [ 1120 "serde", 1121 + "serde_core", 1122 "typeid", 1123 ] 1124 1125 [[package]] 1126 name = "errno" 1127 + version = "0.3.14" 1128 source = "registry+https://github.com/rust-lang/crates.io-index" 1129 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1130 dependencies = [ 1131 "libc", 1132 + "windows-sys 0.61.2", 1133 ] 1134 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]] 1142 name = "event-listener" 1143 + version = "5.4.1" 1144 source = "registry+https://github.com/rust-lang/crates.io-index" 1145 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 1146 dependencies = [ 1147 "concurrent-queue", 1148 "parking", ··· 1176 1177 [[package]] 1178 name = "fast_image_resize" 1179 + version = "5.3.0" 1180 source = "registry+https://github.com/rust-lang/crates.io-index" 1181 + checksum = "1bd1eda71e8af93f8b00e189404235d82f4de77ea4a0d182b44a7f03994d647c" 1182 dependencies = [ 1183 "bytemuck", 1184 "cfg-if", 1185 "document-features", 1186 "image", 1187 "num-traits", 1188 + "thiserror 2.0.17", 1189 ] 1190 1191 [[package]] ··· 1195 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1196 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]] 1218 name = "fdeflate" 1219 version = "0.3.7" 1220 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1234 ] 1235 1236 [[package]] 1237 + name = "find-msvc-tools" 1238 + version = "0.1.4" 1239 source = "registry+https://github.com/rust-lang/crates.io-index" 1240 + checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 1241 1242 [[package]] 1243 name = "flate2" 1244 + version = "1.1.5" 1245 source = "registry+https://github.com/rust-lang/crates.io-index" 1246 + checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 1247 dependencies = [ 1248 "crc32fast", 1249 "miniz_oxide", ··· 1282 dependencies = [ 1283 "proc-macro2", 1284 "quote", 1285 + "syn 2.0.109", 1286 ] 1287 1288 [[package]] ··· 1299 1300 [[package]] 1301 name = "form_urlencoded" 1302 + version = "1.2.2" 1303 source = "registry+https://github.com/rust-lang/crates.io-index" 1304 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1305 dependencies = [ 1306 "percent-encoding", 1307 ] ··· 1360 1361 [[package]] 1362 name = "futures-lite" 1363 + version = "2.6.1" 1364 source = "registry+https://github.com/rust-lang/crates.io-index" 1365 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1366 dependencies = [ 1367 "fastrand", 1368 "futures-core", ··· 1379 dependencies = [ 1380 "proc-macro2", 1381 "quote", 1382 + "syn 2.0.109", 1383 ] 1384 1385 [[package]] ··· 1521 1522 [[package]] 1523 name = "generic-array" 1524 + version = "0.14.9" 1525 source = "registry+https://github.com/rust-lang/crates.io-index" 1526 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1527 dependencies = [ 1528 "typenum", 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", 1540 ] 1541 1542 [[package]] ··· 1565 1566 [[package]] 1567 name = "getrandom" 1568 + version = "0.3.4" 1569 source = "registry+https://github.com/rust-lang/crates.io-index" 1570 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1571 dependencies = [ 1572 "cfg-if", 1573 "js-sys", 1574 "libc", 1575 "r-efi", 1576 + "wasip2", 1577 "wasm-bindgen", 1578 ] 1579 ··· 1588 ] 1589 1590 [[package]] 1591 name = "gio" 1592 version = "0.18.4" 1593 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1625 source = "registry+https://github.com/rust-lang/crates.io-index" 1626 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 1627 dependencies = [ 1628 + "bitflags 2.10.0", 1629 "futures-channel", 1630 "futures-core", 1631 "futures-executor", ··· 1653 "proc-macro-error", 1654 "proc-macro2", 1655 "quote", 1656 + "syn 2.0.109", 1657 ] 1658 1659 [[package]] ··· 1668 1669 [[package]] 1670 name = "glob" 1671 + version = "0.3.3" 1672 source = "registry+https://github.com/rust-lang/crates.io-index" 1673 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1674 1675 [[package]] 1676 name = "gobject-sys" ··· 1732 "proc-macro-error", 1733 "proc-macro2", 1734 "quote", 1735 + "syn 2.0.109", 1736 ] 1737 1738 [[package]] 1739 name = "h2" 1740 + version = "0.4.12" 1741 source = "registry+https://github.com/rust-lang/crates.io-index" 1742 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 1743 dependencies = [ 1744 "atomic-waker", 1745 "bytes", ··· 1747 "futures-core", 1748 "futures-sink", 1749 "http", 1750 + "indexmap 2.12.0", 1751 "slab", 1752 "tokio", 1753 "tokio-util", ··· 1756 1757 [[package]] 1758 name = "half" 1759 + version = "2.7.1" 1760 source = "registry+https://github.com/rust-lang/crates.io-index" 1761 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1762 dependencies = [ 1763 "cfg-if", 1764 "crunchy", 1765 + "zerocopy", 1766 ] 1767 1768 [[package]] ··· 1779 1780 [[package]] 1781 name = "hashbrown" 1782 + version = "0.16.0" 1783 source = "registry+https://github.com/rust-lang/crates.io-index" 1784 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1785 1786 [[package]] 1787 name = "heck" ··· 1861 1862 [[package]] 1863 name = "hyper" 1864 + version = "1.7.0" 1865 source = "registry+https://github.com/rust-lang/crates.io-index" 1866 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1867 dependencies = [ 1868 + "atomic-waker", 1869 "bytes", 1870 "futures-channel", 1871 + "futures-core", 1872 "h2", 1873 "http", 1874 "http-body", 1875 "httparse", 1876 "itoa", 1877 "pin-project-lite", 1878 + "pin-utils", 1879 "smallvec", 1880 "tokio", 1881 "want", ··· 1916 1917 [[package]] 1918 name = "hyper-util" 1919 + version = "0.1.17" 1920 source = "registry+https://github.com/rust-lang/crates.io-index" 1921 + checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" 1922 dependencies = [ 1923 "base64 0.22.1", 1924 "bytes", ··· 1932 "libc", 1933 "percent-encoding", 1934 "pin-project-lite", 1935 + "socket2", 1936 "system-configuration", 1937 "tokio", 1938 "tower-service", ··· 1942 1943 [[package]] 1944 name = "iana-time-zone" 1945 + version = "0.1.64" 1946 source = "registry+https://github.com/rust-lang/crates.io-index" 1947 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 1948 dependencies = [ 1949 "android_system_properties", 1950 "core-foundation-sys", ··· 1952 "js-sys", 1953 "log", 1954 "wasm-bindgen", 1955 + "windows-core 0.62.2", 1956 ] 1957 1958 [[package]] ··· 1971 checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" 1972 dependencies = [ 1973 "byteorder", 1974 + "png 0.17.16", 1975 ] 1976 1977 [[package]] 1978 name = "icu_collections" 1979 + version = "2.1.1" 1980 source = "registry+https://github.com/rust-lang/crates.io-index" 1981 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 1982 dependencies = [ 1983 "displaydoc", 1984 "potential_utf", ··· 1989 1990 [[package]] 1991 name = "icu_locale_core" 1992 + version = "2.1.1" 1993 source = "registry+https://github.com/rust-lang/crates.io-index" 1994 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 1995 dependencies = [ 1996 "displaydoc", 1997 "litemap", ··· 2002 2003 [[package]] 2004 name = "icu_normalizer" 2005 + version = "2.1.1" 2006 source = "registry+https://github.com/rust-lang/crates.io-index" 2007 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 2008 dependencies = [ 2009 "icu_collections", 2010 "icu_normalizer_data", 2011 "icu_properties", ··· 2016 2017 [[package]] 2018 name = "icu_normalizer_data" 2019 + version = "2.1.1" 2020 source = "registry+https://github.com/rust-lang/crates.io-index" 2021 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 2022 2023 [[package]] 2024 name = "icu_properties" 2025 + version = "2.1.1" 2026 source = "registry+https://github.com/rust-lang/crates.io-index" 2027 + checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" 2028 dependencies = [ 2029 "icu_collections", 2030 "icu_locale_core", 2031 "icu_properties_data", 2032 "icu_provider", 2033 "zerotrie", 2034 "zerovec", 2035 ] 2036 2037 [[package]] 2038 name = "icu_properties_data" 2039 + version = "2.1.1" 2040 source = "registry+https://github.com/rust-lang/crates.io-index" 2041 + checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" 2042 2043 [[package]] 2044 name = "icu_provider" 2045 + version = "2.1.1" 2046 source = "registry+https://github.com/rust-lang/crates.io-index" 2047 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 2048 dependencies = [ 2049 "displaydoc", 2050 "icu_locale_core", 2051 "writeable", 2052 "yoke", 2053 "zerofrom", ··· 2063 2064 [[package]] 2065 name = "idna" 2066 + version = "1.1.0" 2067 source = "registry+https://github.com/rust-lang/crates.io-index" 2068 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 2069 dependencies = [ 2070 "idna_adapter", 2071 "smallvec", ··· 2084 2085 [[package]] 2086 name = "image" 2087 + version = "0.25.8" 2088 source = "registry+https://github.com/rust-lang/crates.io-index" 2089 + checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 2090 dependencies = [ 2091 "bytemuck", 2092 "byteorder-lite", ··· 2094 "exr", 2095 "gif", 2096 "image-webp", 2097 + "moxcms", 2098 "num-traits", 2099 + "png 0.18.0", 2100 "qoi", 2101 "ravif", 2102 "rayon", ··· 2108 2109 [[package]] 2110 name = "image-webp" 2111 + version = "0.2.4" 2112 source = "registry+https://github.com/rust-lang/crates.io-index" 2113 + checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" 2114 dependencies = [ 2115 "byteorder-lite", 2116 "quick-error", ··· 2118 2119 [[package]] 2120 name = "imgref" 2121 + version = "1.12.0" 2122 source = "registry+https://github.com/rust-lang/crates.io-index" 2123 + checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" 2124 2125 [[package]] 2126 name = "indexmap" ··· 2135 2136 [[package]] 2137 name = "indexmap" 2138 + version = "2.12.0" 2139 source = "registry+https://github.com/rust-lang/crates.io-index" 2140 + checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" 2141 dependencies = [ 2142 "equivalent", 2143 + "hashbrown 0.16.0", 2144 "serde", 2145 + "serde_core", 2146 ] 2147 2148 [[package]] ··· 2156 2157 [[package]] 2158 name = "inotify" 2159 + version = "0.11.0" 2160 source = "registry+https://github.com/rust-lang/crates.io-index" 2161 + checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" 2162 dependencies = [ 2163 + "bitflags 2.10.0", 2164 "inotify-sys", 2165 "libc", 2166 ] ··· 2182 dependencies = [ 2183 "proc-macro2", 2184 "quote", 2185 + "syn 2.0.109", 2186 ] 2187 2188 [[package]] ··· 2193 2194 [[package]] 2195 name = "iri-string" 2196 + version = "0.7.9" 2197 source = "registry+https://github.com/rust-lang/crates.io-index" 2198 + checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" 2199 dependencies = [ 2200 "memchr", 2201 "serde", ··· 2282 2283 [[package]] 2284 name = "jobserver" 2285 + version = "0.1.34" 2286 source = "registry+https://github.com/rust-lang/crates.io-index" 2287 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 2288 dependencies = [ 2289 + "getrandom 0.3.4", 2290 "libc", 2291 ] 2292 2293 [[package]] 2294 name = "js-sys" 2295 + version = "0.3.82" 2296 source = "registry+https://github.com/rust-lang/crates.io-index" 2297 + checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" 2298 dependencies = [ 2299 "once_cell", 2300 "wasm-bindgen", ··· 2328 source = "registry+https://github.com/rust-lang/crates.io-index" 2329 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" 2330 dependencies = [ 2331 + "bitflags 2.10.0", 2332 "serde", 2333 "unicode-segmentation", 2334 ] ··· 2361 dependencies = [ 2362 "cssparser", 2363 "html5ever", 2364 + "indexmap 2.12.0", 2365 "selectors", 2366 ] 2367 ··· 2373 2374 [[package]] 2375 name = "lebe" 2376 + version = "0.5.3" 2377 source = "registry+https://github.com/rust-lang/crates.io-index" 2378 + checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" 2379 2380 [[package]] 2381 name = "libappindicator" ··· 2403 2404 [[package]] 2405 name = "libc" 2406 + version = "0.2.177" 2407 source = "registry+https://github.com/rust-lang/crates.io-index" 2408 + checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 2409 2410 [[package]] 2411 name = "libfuzzer-sys" ··· 2429 2430 [[package]] 2431 name = "libredox" 2432 + version = "0.1.10" 2433 source = "registry+https://github.com/rust-lang/crates.io-index" 2434 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 2435 dependencies = [ 2436 + "bitflags 2.10.0", 2437 "libc", 2438 ] 2439 2440 [[package]] 2441 name = "linux-raw-sys" 2442 + version = "0.11.0" 2443 source = "registry+https://github.com/rust-lang/crates.io-index" 2444 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 2445 2446 [[package]] 2447 name = "litemap" 2448 + version = "0.8.1" 2449 source = "registry+https://github.com/rust-lang/crates.io-index" 2450 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 2451 2452 [[package]] 2453 name = "litrs" 2454 + version = "1.0.0" 2455 source = "registry+https://github.com/rust-lang/crates.io-index" 2456 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 2457 2458 [[package]] 2459 name = "lock_api" 2460 + version = "0.4.14" 2461 source = "registry+https://github.com/rust-lang/crates.io-index" 2462 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 2463 dependencies = [ 2464 "scopeguard", 2465 ] 2466 2467 [[package]] 2468 name = "log" 2469 + version = "0.4.28" 2470 source = "registry+https://github.com/rust-lang/crates.io-index" 2471 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2472 2473 [[package]] 2474 name = "loop9" ··· 2513 dependencies = [ 2514 "proc-macro2", 2515 "quote", 2516 + "syn 2.0.109", 2517 ] 2518 2519 [[package]] ··· 2534 2535 [[package]] 2536 name = "memchr" 2537 + version = "2.7.6" 2538 source = "registry+https://github.com/rust-lang/crates.io-index" 2539 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2540 2541 [[package]] 2542 name = "memoffset" ··· 2554 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2555 2556 [[package]] 2557 name = "miniz_oxide" 2558 version = "0.8.9" 2559 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2565 2566 [[package]] 2567 name = "mio" 2568 + version = "1.1.0" 2569 source = "registry+https://github.com/rust-lang/crates.io-index" 2570 + checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" 2571 dependencies = [ 2572 "libc", 2573 "log", 2574 "wasi 0.11.1+wasi-snapshot-preview1", 2575 + "windows-sys 0.61.2", 2576 ] 2577 2578 [[package]] 2579 + name = "moxcms" 2580 + version = "0.7.9" 2581 source = "registry+https://github.com/rust-lang/crates.io-index" 2582 + checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" 2583 dependencies = [ 2584 + "num-traits", 2585 + "pxfm", 2586 ] 2587 2588 [[package]] ··· 2606 "dpi", 2607 "gtk", 2608 "keyboard-types", 2609 + "objc2 0.6.3", 2610 "objc2-app-kit", 2611 "objc2-core-foundation", 2612 + "objc2-foundation 0.3.2", 2613 "once_cell", 2614 + "png 0.17.16", 2615 "serde", 2616 + "thiserror 2.0.17", 2617 "windows-sys 0.60.2", 2618 ] 2619 ··· 2640 source = "registry+https://github.com/rust-lang/crates.io-index" 2641 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2642 dependencies = [ 2643 + "bitflags 2.10.0", 2644 "jni-sys", 2645 "log", 2646 "ndk-sys", ··· 2672 2673 [[package]] 2674 name = "nix" 2675 + version = "0.30.1" 2676 source = "registry+https://github.com/rust-lang/crates.io-index" 2677 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 2678 dependencies = [ 2679 + "bitflags 2.10.0", 2680 "cfg-if", 2681 + "cfg_aliases", 2682 "libc", 2683 "memoffset", 2684 ] ··· 2691 2692 [[package]] 2693 name = "nom" 2694 + version = "8.0.0" 2695 source = "registry+https://github.com/rust-lang/crates.io-index" 2696 + checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" 2697 dependencies = [ 2698 "memchr", 2699 ] 2700 2701 [[package]] ··· 2706 2707 [[package]] 2708 name = "notify" 2709 + version = "8.2.0" 2710 source = "registry+https://github.com/rust-lang/crates.io-index" 2711 + checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" 2712 dependencies = [ 2713 + "bitflags 2.10.0", 2714 "fsevent-sys", 2715 "inotify", 2716 "kqueue", 2717 "libc", 2718 "log", 2719 + "mio", 2720 + "notify-types", 2721 "walkdir", 2722 + "windows-sys 0.60.2", 2723 ] 2724 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]] 2732 name = "num-bigint" 2733 version = "0.4.6" 2734 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2752 dependencies = [ 2753 "proc-macro2", 2754 "quote", 2755 + "syn 2.0.109", 2756 ] 2757 2758 [[package]] ··· 2786 2787 [[package]] 2788 name = "num_enum" 2789 + version = "0.7.5" 2790 source = "registry+https://github.com/rust-lang/crates.io-index" 2791 + checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" 2792 dependencies = [ 2793 "num_enum_derive", 2794 "rustversion", ··· 2796 2797 [[package]] 2798 name = "num_enum_derive" 2799 + version = "0.7.5" 2800 source = "registry+https://github.com/rust-lang/crates.io-index" 2801 + checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" 2802 dependencies = [ 2803 + "proc-macro-crate 3.4.0", 2804 "proc-macro2", 2805 "quote", 2806 + "syn 2.0.109", 2807 ] 2808 2809 [[package]] ··· 2824 2825 [[package]] 2826 name = "objc2" 2827 + version = "0.6.3" 2828 source = "registry+https://github.com/rust-lang/crates.io-index" 2829 + checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 2830 dependencies = [ 2831 "objc2-encode", 2832 "objc2-exception-helper", ··· 2834 2835 [[package]] 2836 name = "objc2-app-kit" 2837 + version = "0.3.2" 2838 source = "registry+https://github.com/rust-lang/crates.io-index" 2839 + checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" 2840 dependencies = [ 2841 + "bitflags 2.10.0", 2842 + "block2 0.6.2", 2843 "libc", 2844 + "objc2 0.6.3", 2845 "objc2-cloud-kit", 2846 "objc2-core-data", 2847 "objc2-core-foundation", 2848 "objc2-core-graphics", 2849 "objc2-core-image", 2850 + "objc2-core-text", 2851 + "objc2-core-video", 2852 + "objc2-foundation 0.3.2", 2853 + "objc2-quartz-core 0.3.2", 2854 ] 2855 2856 [[package]] 2857 name = "objc2-cloud-kit" 2858 + version = "0.3.2" 2859 source = "registry+https://github.com/rust-lang/crates.io-index" 2860 + checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" 2861 dependencies = [ 2862 + "bitflags 2.10.0", 2863 + "objc2 0.6.3", 2864 + "objc2-foundation 0.3.2", 2865 ] 2866 2867 [[package]] 2868 name = "objc2-core-data" 2869 + version = "0.3.2" 2870 source = "registry+https://github.com/rust-lang/crates.io-index" 2871 + checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" 2872 dependencies = [ 2873 + "bitflags 2.10.0", 2874 + "objc2 0.6.3", 2875 + "objc2-foundation 0.3.2", 2876 ] 2877 2878 [[package]] 2879 name = "objc2-core-foundation" 2880 + version = "0.3.2" 2881 source = "registry+https://github.com/rust-lang/crates.io-index" 2882 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2883 dependencies = [ 2884 + "bitflags 2.10.0", 2885 "dispatch2", 2886 + "objc2 0.6.3", 2887 ] 2888 2889 [[package]] 2890 name = "objc2-core-graphics" 2891 + version = "0.3.2" 2892 source = "registry+https://github.com/rust-lang/crates.io-index" 2893 + checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" 2894 dependencies = [ 2895 + "bitflags 2.10.0", 2896 "dispatch2", 2897 + "objc2 0.6.3", 2898 "objc2-core-foundation", 2899 "objc2-io-surface", 2900 ] 2901 2902 [[package]] 2903 name = "objc2-core-image" 2904 + version = "0.3.2" 2905 source = "registry+https://github.com/rust-lang/crates.io-index" 2906 + checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" 2907 dependencies = [ 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", 2935 ] 2936 2937 [[package]] ··· 2955 source = "registry+https://github.com/rust-lang/crates.io-index" 2956 checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2957 dependencies = [ 2958 + "bitflags 2.10.0", 2959 "block2 0.5.1", 2960 "libc", 2961 "objc2 0.5.2", ··· 2963 2964 [[package]] 2965 name = "objc2-foundation" 2966 + version = "0.3.2" 2967 source = "registry+https://github.com/rust-lang/crates.io-index" 2968 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 2969 dependencies = [ 2970 + "bitflags 2.10.0", 2971 + "block2 0.6.2", 2972 "libc", 2973 + "objc2 0.6.3", 2974 "objc2-core-foundation", 2975 ] 2976 2977 [[package]] 2978 name = "objc2-io-surface" 2979 + version = "0.3.2" 2980 source = "registry+https://github.com/rust-lang/crates.io-index" 2981 + checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" 2982 dependencies = [ 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", 2995 "objc2-core-foundation", 2996 ] 2997 ··· 3001 source = "registry+https://github.com/rust-lang/crates.io-index" 3002 checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 3003 dependencies = [ 3004 + "bitflags 2.10.0", 3005 "block2 0.5.1", 3006 "objc2 0.5.2", 3007 "objc2-foundation 0.2.2", ··· 3013 source = "registry+https://github.com/rust-lang/crates.io-index" 3014 checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 3015 dependencies = [ 3016 + "bitflags 2.10.0", 3017 "block2 0.5.1", 3018 "objc2 0.5.2", 3019 "objc2-foundation 0.2.2", ··· 3022 3023 [[package]] 3024 name = "objc2-quartz-core" 3025 + version = "0.3.2" 3026 source = "registry+https://github.com/rust-lang/crates.io-index" 3027 + checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" 3028 dependencies = [ 3029 + "bitflags 2.10.0", 3030 + "objc2 0.6.3", 3031 + "objc2-foundation 0.3.2", 3032 ] 3033 3034 [[package]] 3035 + name = "objc2-security" 3036 + version = "0.3.2" 3037 source = "registry+https://github.com/rust-lang/crates.io-index" 3038 + checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" 3039 dependencies = [ 3040 + "bitflags 2.10.0", 3041 + "objc2 0.6.3", 3042 "objc2-core-foundation", 3043 ] 3044 3045 [[package]] 3046 + name = "objc2-ui-kit" 3047 + version = "0.3.2" 3048 source = "registry+https://github.com/rust-lang/crates.io-index" 3049 + checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" 3050 dependencies = [ 3051 + "bitflags 2.10.0", 3052 + "objc2 0.6.3", 3053 "objc2-core-foundation", 3054 + "objc2-foundation 0.3.2", 3055 ] 3056 3057 [[package]] 3058 + name = "objc2-web-kit" 3059 + version = "0.3.2" 3060 source = "registry+https://github.com/rust-lang/crates.io-index" 3061 + checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" 3062 dependencies = [ 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", 3071 ] 3072 3073 [[package]] ··· 3090 3091 [[package]] 3092 name = "openssl" 3093 + version = "0.10.74" 3094 source = "registry+https://github.com/rust-lang/crates.io-index" 3095 + checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" 3096 dependencies = [ 3097 + "bitflags 2.10.0", 3098 "cfg-if", 3099 "foreign-types 0.3.2", 3100 "libc", ··· 3111 dependencies = [ 3112 "proc-macro2", 3113 "quote", 3114 + "syn 2.0.109", 3115 ] 3116 3117 [[package]] ··· 3122 3123 [[package]] 3124 name = "openssl-sys" 3125 + version = "0.9.110" 3126 source = "registry+https://github.com/rust-lang/crates.io-index" 3127 + checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" 3128 dependencies = [ 3129 "cc", 3130 "libc", ··· 3160 3161 [[package]] 3162 name = "os_pipe" 3163 + version = "1.2.3" 3164 source = "registry+https://github.com/rust-lang/crates.io-index" 3165 + checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" 3166 dependencies = [ 3167 "libc", 3168 + "windows-sys 0.61.2", 3169 ] 3170 3171 [[package]] ··· 3201 3202 [[package]] 3203 name = "parking_lot" 3204 + version = "0.12.5" 3205 source = "registry+https://github.com/rust-lang/crates.io-index" 3206 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 3207 dependencies = [ 3208 "lock_api", 3209 "parking_lot_core", ··· 3211 3212 [[package]] 3213 name = "parking_lot_core" 3214 + version = "0.9.12" 3215 source = "registry+https://github.com/rust-lang/crates.io-index" 3216 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 3217 dependencies = [ 3218 "cfg-if", 3219 "libc", 3220 "redox_syscall", 3221 "smallvec", 3222 + "windows-link 0.2.1", 3223 ] 3224 3225 [[package]] ··· 3236 3237 [[package]] 3238 name = "percent-encoding" 3239 + version = "2.3.2" 3240 source = "registry+https://github.com/rust-lang/crates.io-index" 3241 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3242 3243 [[package]] 3244 name = "phf" ··· 3344 "phf_shared 0.11.3", 3345 "proc-macro2", 3346 "quote", 3347 + "syn 2.0.109", 3348 ] 3349 3350 [[package]] ··· 3405 3406 [[package]] 3407 name = "plist" 3408 + version = "1.8.0" 3409 source = "registry+https://github.com/rust-lang/crates.io-index" 3410 + checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" 3411 dependencies = [ 3412 "base64 0.22.1", 3413 + "indexmap 2.12.0", 3414 "quick-xml", 3415 "serde", 3416 "time", ··· 3430 ] 3431 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]] 3446 name = "polling" 3447 + version = "3.11.0" 3448 source = "registry+https://github.com/rust-lang/crates.io-index" 3449 + checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 3450 dependencies = [ 3451 "cfg-if", 3452 "concurrent-queue", 3453 "hermit-abi", 3454 "pin-project-lite", 3455 "rustix", 3456 + "windows-sys 0.61.2", 3457 ] 3458 3459 [[package]] 3460 name = "potential_utf" 3461 + version = "0.1.4" 3462 source = "registry+https://github.com/rust-lang/crates.io-index" 3463 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 3464 dependencies = [ 3465 "zerovec", 3466 ] ··· 3507 ] 3508 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]] 3519 name = "proc-macro-error" 3520 version = "1.0.4" 3521 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3547 3548 [[package]] 3549 name = "proc-macro2" 3550 + version = "1.0.103" 3551 source = "registry+https://github.com/rust-lang/crates.io-index" 3552 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 3553 dependencies = [ 3554 "unicode-ident", 3555 ] ··· 3570 checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 3571 dependencies = [ 3572 "quote", 3573 + "syn 2.0.109", 3574 ] 3575 3576 [[package]] ··· 3590 ] 3591 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]] 3602 name = "qoi" 3603 version = "0.4.1" 3604 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3615 3616 [[package]] 3617 name = "quick-xml" 3618 + version = "0.38.3" 3619 source = "registry+https://github.com/rust-lang/crates.io-index" 3620 + checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" 3621 dependencies = [ 3622 "memchr", 3623 ] 3624 3625 [[package]] 3626 name = "quinn" 3627 + version = "0.11.9" 3628 source = "registry+https://github.com/rust-lang/crates.io-index" 3629 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 3630 dependencies = [ 3631 "bytes", 3632 "cfg_aliases", ··· 3635 "quinn-udp", 3636 "rustc-hash", 3637 "rustls", 3638 + "socket2", 3639 + "thiserror 2.0.17", 3640 "tokio", 3641 "tracing", 3642 "web-time", ··· 3644 3645 [[package]] 3646 name = "quinn-proto" 3647 + version = "0.11.13" 3648 source = "registry+https://github.com/rust-lang/crates.io-index" 3649 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 3650 dependencies = [ 3651 "bytes", 3652 + "getrandom 0.3.4", 3653 "lru-slab", 3654 "rand 0.9.2", 3655 "ring", ··· 3657 "rustls", 3658 "rustls-pki-types", 3659 "slab", 3660 + "thiserror 2.0.17", 3661 "tinyvec", 3662 "tracing", 3663 "web-time", ··· 3665 3666 [[package]] 3667 name = "quinn-udp" 3668 + version = "0.5.14" 3669 source = "registry+https://github.com/rust-lang/crates.io-index" 3670 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 3671 dependencies = [ 3672 "cfg_aliases", 3673 "libc", 3674 "once_cell", 3675 + "socket2", 3676 "tracing", 3677 + "windows-sys 0.60.2", 3678 ] 3679 3680 [[package]] 3681 name = "quote" 3682 + version = "1.0.42" 3683 source = "registry+https://github.com/rust-lang/crates.io-index" 3684 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 3685 dependencies = [ 3686 "proc-macro2", 3687 ] ··· 3781 source = "registry+https://github.com/rust-lang/crates.io-index" 3782 checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 3783 dependencies = [ 3784 + "getrandom 0.3.4", 3785 ] 3786 3787 [[package]] ··· 3860 3861 [[package]] 3862 name = "rayon" 3863 + version = "1.11.0" 3864 source = "registry+https://github.com/rust-lang/crates.io-index" 3865 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 3866 dependencies = [ 3867 "either", 3868 "rayon-core", ··· 3870 3871 [[package]] 3872 name = "rayon-core" 3873 + version = "1.13.0" 3874 source = "registry+https://github.com/rust-lang/crates.io-index" 3875 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 3876 dependencies = [ 3877 "crossbeam-deque", 3878 "crossbeam-utils", ··· 3880 3881 [[package]] 3882 name = "redox_syscall" 3883 + version = "0.5.18" 3884 source = "registry+https://github.com/rust-lang/crates.io-index" 3885 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 3886 dependencies = [ 3887 + "bitflags 2.10.0", 3888 ] 3889 3890 [[package]] ··· 3895 dependencies = [ 3896 "getrandom 0.2.16", 3897 "libredox", 3898 + "thiserror 2.0.17", 3899 ] 3900 3901 [[package]] 3902 name = "ref-cast" 3903 + version = "1.0.25" 3904 source = "registry+https://github.com/rust-lang/crates.io-index" 3905 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 3906 dependencies = [ 3907 "ref-cast-impl", 3908 ] 3909 3910 [[package]] 3911 name = "ref-cast-impl" 3912 + version = "1.0.25" 3913 source = "registry+https://github.com/rust-lang/crates.io-index" 3914 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 3915 dependencies = [ 3916 "proc-macro2", 3917 "quote", 3918 + "syn 2.0.109", 3919 ] 3920 3921 [[package]] 3922 name = "regex" 3923 + version = "1.12.2" 3924 source = "registry+https://github.com/rust-lang/crates.io-index" 3925 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 3926 dependencies = [ 3927 "aho-corasick", 3928 "memchr", ··· 3932 3933 [[package]] 3934 name = "regex-automata" 3935 + version = "0.4.13" 3936 source = "registry+https://github.com/rust-lang/crates.io-index" 3937 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 3938 dependencies = [ 3939 "aho-corasick", 3940 "memchr", ··· 3943 3944 [[package]] 3945 name = "regex-syntax" 3946 + version = "0.8.8" 3947 source = "registry+https://github.com/rust-lang/crates.io-index" 3948 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 3949 3950 [[package]] 3951 name = "reqwest" 3952 + version = "0.12.24" 3953 source = "registry+https://github.com/rust-lang/crates.io-index" 3954 + checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" 3955 dependencies = [ 3956 "base64 0.22.1", 3957 "bytes", ··· 4019 4020 [[package]] 4021 name = "rust-ini" 4022 + version = "0.21.3" 4023 source = "registry+https://github.com/rust-lang/crates.io-index" 4024 + checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" 4025 dependencies = [ 4026 "cfg-if", 4027 "ordered-multimap", 4028 ] 4029 4030 [[package]] 4031 name = "rustc-hash" ··· 4044 4045 [[package]] 4046 name = "rustix" 4047 + version = "1.1.2" 4048 source = "registry+https://github.com/rust-lang/crates.io-index" 4049 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 4050 dependencies = [ 4051 + "bitflags 2.10.0", 4052 "errno", 4053 "libc", 4054 "linux-raw-sys", 4055 + "windows-sys 0.61.2", 4056 ] 4057 4058 [[package]] 4059 name = "rustls" 4060 + version = "0.23.35" 4061 source = "registry+https://github.com/rust-lang/crates.io-index" 4062 + checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" 4063 dependencies = [ 4064 "once_cell", 4065 "ring", ··· 4071 4072 [[package]] 4073 name = "rustls-pki-types" 4074 + version = "1.13.0" 4075 source = "registry+https://github.com/rust-lang/crates.io-index" 4076 + checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" 4077 dependencies = [ 4078 "web-time", 4079 "zeroize", ··· 4081 4082 [[package]] 4083 name = "rustls-webpki" 4084 + version = "0.103.8" 4085 source = "registry+https://github.com/rust-lang/crates.io-index" 4086 + checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" 4087 dependencies = [ 4088 "ring", 4089 "rustls-pki-types", ··· 4092 4093 [[package]] 4094 name = "rustversion" 4095 + version = "1.0.22" 4096 source = "registry+https://github.com/rust-lang/crates.io-index" 4097 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 4098 4099 [[package]] 4100 name = "ryu" ··· 4113 4114 [[package]] 4115 name = "schannel" 4116 + version = "0.1.28" 4117 source = "registry+https://github.com/rust-lang/crates.io-index" 4118 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 4119 dependencies = [ 4120 + "windows-sys 0.61.2", 4121 ] 4122 4123 [[package]] ··· 4149 4150 [[package]] 4151 name = "schemars" 4152 + version = "1.1.0" 4153 source = "registry+https://github.com/rust-lang/crates.io-index" 4154 + checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" 4155 dependencies = [ 4156 "dyn-clone", 4157 "ref-cast", ··· 4168 "proc-macro2", 4169 "quote", 4170 "serde_derive_internals", 4171 + "syn 2.0.109", 4172 ] 4173 4174 [[package]] ··· 4183 source = "registry+https://github.com/rust-lang/crates.io-index" 4184 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4185 dependencies = [ 4186 + "bitflags 2.10.0", 4187 "core-foundation 0.9.4", 4188 "core-foundation-sys", 4189 "libc", ··· 4192 4193 [[package]] 4194 name = "security-framework-sys" 4195 + version = "2.15.0" 4196 source = "registry+https://github.com/rust-lang/crates.io-index" 4197 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 4198 dependencies = [ 4199 "core-foundation-sys", 4200 "libc", ··· 4220 4221 [[package]] 4222 name = "semver" 4223 + version = "1.0.27" 4224 source = "registry+https://github.com/rust-lang/crates.io-index" 4225 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4226 dependencies = [ 4227 "serde", 4228 + "serde_core", 4229 ] 4230 4231 [[package]] 4232 name = "serde" 4233 + version = "1.0.228" 4234 source = "registry+https://github.com/rust-lang/crates.io-index" 4235 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 4236 dependencies = [ 4237 + "serde_core", 4238 "serde_derive", 4239 ] 4240 4241 [[package]] 4242 name = "serde-untagged" 4243 + version = "0.1.9" 4244 source = "registry+https://github.com/rust-lang/crates.io-index" 4245 + checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" 4246 dependencies = [ 4247 "erased-serde", 4248 "serde", 4249 + "serde_core", 4250 "typeid", 4251 ] 4252 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]] 4263 name = "serde_derive" 4264 + version = "1.0.228" 4265 source = "registry+https://github.com/rust-lang/crates.io-index" 4266 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 4267 dependencies = [ 4268 "proc-macro2", 4269 "quote", 4270 + "syn 2.0.109", 4271 ] 4272 4273 [[package]] ··· 4278 dependencies = [ 4279 "proc-macro2", 4280 "quote", 4281 + "syn 2.0.109", 4282 ] 4283 4284 [[package]] 4285 name = "serde_json" 4286 + version = "1.0.145" 4287 source = "registry+https://github.com/rust-lang/crates.io-index" 4288 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 4289 dependencies = [ 4290 "itoa", 4291 "memchr", 4292 "ryu", 4293 "serde", 4294 + "serde_core", 4295 ] 4296 4297 [[package]] ··· 4302 dependencies = [ 4303 "proc-macro2", 4304 "quote", 4305 + "syn 2.0.109", 4306 ] 4307 4308 [[package]] ··· 4316 4317 [[package]] 4318 name = "serde_spanned" 4319 + version = "1.0.3" 4320 source = "registry+https://github.com/rust-lang/crates.io-index" 4321 + checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" 4322 dependencies = [ 4323 + "serde_core", 4324 ] 4325 4326 [[package]] ··· 4337 4338 [[package]] 4339 name = "serde_with" 4340 + version = "3.15.1" 4341 source = "registry+https://github.com/rust-lang/crates.io-index" 4342 + checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" 4343 dependencies = [ 4344 "base64 0.22.1", 4345 "chrono", 4346 "hex", 4347 "indexmap 1.9.3", 4348 + "indexmap 2.12.0", 4349 "schemars 0.9.0", 4350 + "schemars 1.1.0", 4351 + "serde_core", 4352 "serde_json", 4353 "serde_with_macros", 4354 "time", ··· 4356 4357 [[package]] 4358 name = "serde_with_macros" 4359 + version = "3.15.1" 4360 source = "registry+https://github.com/rust-lang/crates.io-index" 4361 + checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" 4362 dependencies = [ 4363 "darling", 4364 "proc-macro2", 4365 "quote", 4366 + "syn 2.0.109", 4367 ] 4368 4369 [[package]] 4370 name = "serialize-to-javascript" 4371 + version = "0.1.2" 4372 source = "registry+https://github.com/rust-lang/crates.io-index" 4373 + checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" 4374 dependencies = [ 4375 "serde", 4376 "serde_json", ··· 4379 4380 [[package]] 4381 name = "serialize-to-javascript-impl" 4382 + version = "0.1.2" 4383 source = "registry+https://github.com/rust-lang/crates.io-index" 4384 + checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" 4385 dependencies = [ 4386 "proc-macro2", 4387 "quote", 4388 + "syn 2.0.109", 4389 ] 4390 4391 [[package]] ··· 4399 ] 4400 4401 [[package]] 4402 name = "sha2" 4403 version = "0.10.9" 4404 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4449 4450 [[package]] 4451 name = "signal-hook-registry" 4452 + version = "1.4.6" 4453 source = "registry+https://github.com/rust-lang/crates.io-index" 4454 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 4455 dependencies = [ 4456 "libc", 4457 ] ··· 4485 4486 [[package]] 4487 name = "slab" 4488 + version = "0.4.11" 4489 source = "registry+https://github.com/rust-lang/crates.io-index" 4490 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 4491 4492 [[package]] 4493 name = "smallvec" ··· 4497 4498 [[package]] 4499 name = "socket2" 4500 + version = "0.6.1" 4501 source = "registry+https://github.com/rust-lang/crates.io-index" 4502 + checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" 4503 dependencies = [ 4504 "libc", 4505 + "windows-sys 0.60.2", 4506 ] 4507 4508 [[package]] ··· 4555 4556 [[package]] 4557 name = "stable_deref_trait" 4558 + version = "1.2.1" 4559 source = "registry+https://github.com/rust-lang/crates.io-index" 4560 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 4561 4562 [[package]] 4563 name = "static_assertions" ··· 4626 4627 [[package]] 4628 name = "syn" 4629 + version = "2.0.109" 4630 source = "registry+https://github.com/rust-lang/crates.io-index" 4631 + checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" 4632 dependencies = [ 4633 "proc-macro2", 4634 "quote", ··· 4652 dependencies = [ 4653 "proc-macro2", 4654 "quote", 4655 + "syn 2.0.109", 4656 ] 4657 4658 [[package]] ··· 4661 source = "registry+https://github.com/rust-lang/crates.io-index" 4662 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4663 dependencies = [ 4664 + "bitflags 2.10.0", 4665 "core-foundation 0.9.4", 4666 "system-configuration-sys", 4667 ] ··· 4691 4692 [[package]] 4693 name = "tao" 4694 + version = "0.34.5" 4695 source = "registry+https://github.com/rust-lang/crates.io-index" 4696 + checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" 4697 dependencies = [ 4698 + "bitflags 2.10.0", 4699 + "block2 0.6.2", 4700 "core-foundation 0.10.1", 4701 "core-graphics", 4702 "crossbeam-channel", ··· 4713 "ndk", 4714 "ndk-context", 4715 "ndk-sys", 4716 + "objc2 0.6.3", 4717 "objc2-app-kit", 4718 + "objc2-foundation 0.3.2", 4719 "once_cell", 4720 "parking_lot", 4721 "raw-window-handle", ··· 4724 "unicode-segmentation", 4725 "url", 4726 "windows", 4727 + "windows-core 0.61.2", 4728 "windows-version", 4729 "x11-dl", 4730 ] ··· 4737 dependencies = [ 4738 "proc-macro2", 4739 "quote", 4740 + "syn 2.0.109", 4741 ] 4742 4743 [[package]] ··· 4748 4749 [[package]] 4750 name = "tauri" 4751 + version = "2.9.2" 4752 source = "registry+https://github.com/rust-lang/crates.io-index" 4753 + checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5" 4754 dependencies = [ 4755 "anyhow", 4756 "bytes", 4757 + "cookie", 4758 + "dirs", 4759 "dunce", 4760 "embed_plist", 4761 + "getrandom 0.3.4", 4762 "glob", 4763 "gtk", 4764 "heck 0.5.0", ··· 4769 "log", 4770 "mime", 4771 "muda", 4772 + "objc2 0.6.3", 4773 "objc2-app-kit", 4774 + "objc2-foundation 0.3.2", 4775 "objc2-ui-kit", 4776 + "objc2-web-kit", 4777 "percent-encoding", 4778 "plist", 4779 "raw-window-handle", ··· 4788 "tauri-runtime", 4789 "tauri-runtime-wry", 4790 "tauri-utils", 4791 + "thiserror 2.0.17", 4792 "tokio", 4793 "tray-icon", 4794 "url", 4795 "webkit2gtk", 4796 "webview2-com", 4797 "window-vibrancy", ··· 4800 4801 [[package]] 4802 name = "tauri-build" 4803 + version = "2.5.1" 4804 source = "registry+https://github.com/rust-lang/crates.io-index" 4805 + checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38" 4806 dependencies = [ 4807 "anyhow", 4808 "cargo_toml", 4809 + "dirs", 4810 "glob", 4811 "heck 0.5.0", 4812 "json-patch", ··· 4816 "serde_json", 4817 "tauri-utils", 4818 "tauri-winres", 4819 + "toml 0.9.8", 4820 "walkdir", 4821 ] 4822 4823 [[package]] 4824 name = "tauri-codegen" 4825 + version = "2.5.0" 4826 source = "registry+https://github.com/rust-lang/crates.io-index" 4827 + checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190" 4828 dependencies = [ 4829 "base64 0.22.1", 4830 "brotli", 4831 "ico", 4832 "json-patch", 4833 "plist", 4834 + "png 0.17.16", 4835 "proc-macro2", 4836 "quote", 4837 "semver", 4838 "serde", 4839 "serde_json", 4840 "sha2", 4841 + "syn 2.0.109", 4842 "tauri-utils", 4843 + "thiserror 2.0.17", 4844 "time", 4845 "url", 4846 "uuid", ··· 4849 4850 [[package]] 4851 name = "tauri-macros" 4852 + version = "2.5.0" 4853 source = "registry+https://github.com/rust-lang/crates.io-index" 4854 + checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f" 4855 dependencies = [ 4856 "heck 0.5.0", 4857 "proc-macro2", 4858 "quote", 4859 + "syn 2.0.109", 4860 "tauri-codegen", 4861 "tauri-utils", 4862 ] 4863 4864 [[package]] 4865 name = "tauri-plugin" 4866 + version = "2.5.1" 4867 source = "registry+https://github.com/rust-lang/crates.io-index" 4868 + checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d" 4869 dependencies = [ 4870 "anyhow", 4871 "glob", ··· 4874 "serde", 4875 "serde_json", 4876 "tauri-utils", 4877 + "toml 0.9.8", 4878 "walkdir", 4879 ] 4880 4881 [[package]] 4882 name = "tauri-plugin-deep-link" 4883 + version = "2.4.5" 4884 source = "registry+https://github.com/rust-lang/crates.io-index" 4885 + checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73" 4886 dependencies = [ 4887 "dunce", 4888 + "plist", 4889 "rust-ini", 4890 "serde", 4891 "serde_json", 4892 "tauri", 4893 "tauri-plugin", 4894 "tauri-utils", 4895 + "thiserror 2.0.17", 4896 "tracing", 4897 "url", 4898 "windows-registry", 4899 + "windows-result 0.3.4", 4900 ] 4901 4902 [[package]] 4903 name = "tauri-plugin-fs" 4904 + version = "2.4.4" 4905 source = "registry+https://github.com/rust-lang/crates.io-index" 4906 + checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9" 4907 dependencies = [ 4908 "anyhow", 4909 "dunce", ··· 4916 "tauri", 4917 "tauri-plugin", 4918 "tauri-utils", 4919 + "thiserror 2.0.17", 4920 + "toml 0.9.8", 4921 "url", 4922 ] 4923 4924 [[package]] 4925 name = "tauri-plugin-http" 4926 + version = "2.5.4" 4927 source = "registry+https://github.com/rust-lang/crates.io-index" 4928 + checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70" 4929 dependencies = [ 4930 "bytes", 4931 "cookie_store", ··· 4939 "tauri", 4940 "tauri-plugin", 4941 "tauri-plugin-fs", 4942 + "thiserror 2.0.17", 4943 "tokio", 4944 "url", 4945 "urlpattern", ··· 4947 4948 [[package]] 4949 name = "tauri-plugin-process" 4950 + version = "2.3.1" 4951 source = "registry+https://github.com/rust-lang/crates.io-index" 4952 + checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" 4953 dependencies = [ 4954 "tauri", 4955 "tauri-plugin", ··· 4957 4958 [[package]] 4959 name = "tauri-plugin-shell" 4960 + version = "2.3.3" 4961 source = "registry+https://github.com/rust-lang/crates.io-index" 4962 + checksum = "c374b6db45f2a8a304f0273a15080d98c70cde86178855fc24653ba657a1144c" 4963 dependencies = [ 4964 "encoding_rs", 4965 "log", ··· 4972 "shared_child", 4973 "tauri", 4974 "tauri-plugin", 4975 + "thiserror 2.0.17", 4976 "tokio", 4977 ] 4978 4979 [[package]] 4980 name = "tauri-plugin-single-instance" 4981 + version = "2.3.6" 4982 source = "registry+https://github.com/rust-lang/crates.io-index" 4983 + checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710" 4984 dependencies = [ 4985 "serde", 4986 "serde_json", 4987 "tauri", 4988 "tauri-plugin-deep-link", 4989 + "thiserror 2.0.17", 4990 "tracing", 4991 + "windows-sys 0.60.2", 4992 "zbus", 4993 ] 4994 4995 [[package]] 4996 name = "tauri-runtime" 4997 + version = "2.9.1" 4998 source = "registry+https://github.com/rust-lang/crates.io-index" 4999 + checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926" 5000 dependencies = [ 5001 "cookie", 5002 "dpi", 5003 "gtk", 5004 "http", 5005 "jni", 5006 + "objc2 0.6.3", 5007 "objc2-ui-kit", 5008 + "objc2-web-kit", 5009 "raw-window-handle", 5010 "serde", 5011 "serde_json", 5012 "tauri-utils", 5013 + "thiserror 2.0.17", 5014 "url", 5015 + "webkit2gtk", 5016 + "webview2-com", 5017 "windows", 5018 ] 5019 5020 [[package]] 5021 name = "tauri-runtime-wry" 5022 + version = "2.9.1" 5023 source = "registry+https://github.com/rust-lang/crates.io-index" 5024 + checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93" 5025 dependencies = [ 5026 "gtk", 5027 "http", 5028 "jni", 5029 "log", 5030 + "objc2 0.6.3", 5031 "objc2-app-kit", 5032 + "objc2-foundation 0.3.2", 5033 "once_cell", 5034 "percent-encoding", 5035 "raw-window-handle", ··· 5046 5047 [[package]] 5048 name = "tauri-utils" 5049 + version = "2.8.0" 5050 source = "registry+https://github.com/rust-lang/crates.io-index" 5051 + checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" 5052 dependencies = [ 5053 "anyhow", 5054 "brotli", ··· 5074 "serde_json", 5075 "serde_with", 5076 "swift-rs", 5077 + "thiserror 2.0.17", 5078 + "toml 0.9.8", 5079 "url", 5080 "urlpattern", 5081 "uuid", ··· 5084 5085 [[package]] 5086 name = "tauri-winres" 5087 + version = "0.3.3" 5088 source = "registry+https://github.com/rust-lang/crates.io-index" 5089 + checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074" 5090 dependencies = [ 5091 "embed-resource", 5092 + "toml 0.9.8", 5093 ] 5094 5095 [[package]] 5096 name = "tempfile" 5097 + version = "3.23.0" 5098 source = "registry+https://github.com/rust-lang/crates.io-index" 5099 + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 5100 dependencies = [ 5101 "fastrand", 5102 + "getrandom 0.3.4", 5103 "once_cell", 5104 "rustix", 5105 + "windows-sys 0.61.2", 5106 ] 5107 5108 [[package]] ··· 5127 5128 [[package]] 5129 name = "thiserror" 5130 + version = "2.0.17" 5131 source = "registry+https://github.com/rust-lang/crates.io-index" 5132 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 5133 dependencies = [ 5134 + "thiserror-impl 2.0.17", 5135 ] 5136 5137 [[package]] ··· 5142 dependencies = [ 5143 "proc-macro2", 5144 "quote", 5145 + "syn 2.0.109", 5146 ] 5147 5148 [[package]] 5149 name = "thiserror-impl" 5150 + version = "2.0.17" 5151 source = "registry+https://github.com/rust-lang/crates.io-index" 5152 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 5153 dependencies = [ 5154 "proc-macro2", 5155 "quote", 5156 + "syn 2.0.109", 5157 ] 5158 5159 [[package]] 5160 name = "tiff" 5161 + version = "0.10.3" 5162 source = "registry+https://github.com/rust-lang/crates.io-index" 5163 + checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 5164 dependencies = [ 5165 + "fax", 5166 "flate2", 5167 + "half", 5168 + "quick-error", 5169 "weezl", 5170 + "zune-jpeg", 5171 ] 5172 5173 [[package]] 5174 name = "time" 5175 + version = "0.3.44" 5176 source = "registry+https://github.com/rust-lang/crates.io-index" 5177 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 5178 dependencies = [ 5179 "deranged", 5180 "itoa", ··· 5187 5188 [[package]] 5189 name = "time-core" 5190 + version = "0.1.6" 5191 source = "registry+https://github.com/rust-lang/crates.io-index" 5192 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 5193 5194 [[package]] 5195 name = "time-macros" 5196 + version = "0.2.24" 5197 source = "registry+https://github.com/rust-lang/crates.io-index" 5198 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 5199 dependencies = [ 5200 "num-conv", 5201 "time-core", ··· 5212 5213 [[package]] 5214 name = "tinystr" 5215 + version = "0.8.2" 5216 source = "registry+https://github.com/rust-lang/crates.io-index" 5217 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 5218 dependencies = [ 5219 "displaydoc", 5220 "zerovec", ··· 5222 5223 [[package]] 5224 name = "tinyvec" 5225 + version = "1.10.0" 5226 source = "registry+https://github.com/rust-lang/crates.io-index" 5227 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 5228 dependencies = [ 5229 "tinyvec_macros", 5230 ] ··· 5237 5238 [[package]] 5239 name = "tokio" 5240 + version = "1.48.0" 5241 source = "registry+https://github.com/rust-lang/crates.io-index" 5242 + checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 5243 dependencies = [ 5244 "bytes", 5245 "libc", 5246 + "mio", 5247 "pin-project-lite", 5248 + "socket2", 5249 "tokio-macros", 5250 + "windows-sys 0.61.2", 5251 ] 5252 5253 [[package]] 5254 name = "tokio-macros" 5255 + version = "2.6.0" 5256 source = "registry+https://github.com/rust-lang/crates.io-index" 5257 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 5258 dependencies = [ 5259 "proc-macro2", 5260 "quote", 5261 + "syn 2.0.109", 5262 ] 5263 5264 [[package]] ··· 5273 5274 [[package]] 5275 name = "tokio-rustls" 5276 + version = "0.26.4" 5277 source = "registry+https://github.com/rust-lang/crates.io-index" 5278 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 5279 dependencies = [ 5280 "rustls", 5281 "tokio", ··· 5283 5284 [[package]] 5285 name = "tokio-util" 5286 + version = "0.7.17" 5287 source = "registry+https://github.com/rust-lang/crates.io-index" 5288 + checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" 5289 dependencies = [ 5290 "bytes", 5291 "futures-core", ··· 5308 5309 [[package]] 5310 name = "toml" 5311 + version = "0.9.8" 5312 source = "registry+https://github.com/rust-lang/crates.io-index" 5313 + checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" 5314 dependencies = [ 5315 + "indexmap 2.12.0", 5316 + "serde_core", 5317 + "serde_spanned 1.0.3", 5318 + "toml_datetime 0.7.3", 5319 "toml_parser", 5320 "toml_writer", 5321 + "winnow 0.7.13", 5322 ] 5323 5324 [[package]] ··· 5332 5333 [[package]] 5334 name = "toml_datetime" 5335 + version = "0.7.3" 5336 source = "registry+https://github.com/rust-lang/crates.io-index" 5337 + checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" 5338 dependencies = [ 5339 + "serde_core", 5340 ] 5341 5342 [[package]] ··· 5345 source = "registry+https://github.com/rust-lang/crates.io-index" 5346 checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 5347 dependencies = [ 5348 + "indexmap 2.12.0", 5349 "toml_datetime 0.6.3", 5350 "winnow 0.5.40", 5351 ] ··· 5356 source = "registry+https://github.com/rust-lang/crates.io-index" 5357 checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 5358 dependencies = [ 5359 + "indexmap 2.12.0", 5360 "serde", 5361 "serde_spanned 0.6.9", 5362 "toml_datetime 0.6.3", ··· 5364 ] 5365 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]] 5379 name = "toml_parser" 5380 + version = "1.0.4" 5381 source = "registry+https://github.com/rust-lang/crates.io-index" 5382 + checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" 5383 dependencies = [ 5384 + "winnow 0.7.13", 5385 ] 5386 5387 [[package]] 5388 name = "toml_writer" 5389 + version = "1.0.4" 5390 source = "registry+https://github.com/rust-lang/crates.io-index" 5391 + checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" 5392 5393 [[package]] 5394 name = "tower" ··· 5411 source = "registry+https://github.com/rust-lang/crates.io-index" 5412 checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 5413 dependencies = [ 5414 + "bitflags 2.10.0", 5415 "bytes", 5416 "futures-util", 5417 "http", ··· 5454 dependencies = [ 5455 "proc-macro2", 5456 "quote", 5457 + "syn 2.0.109", 5458 ] 5459 5460 [[package]] ··· 5468 5469 [[package]] 5470 name = "tray-icon" 5471 + version = "0.21.2" 5472 source = "registry+https://github.com/rust-lang/crates.io-index" 5473 + checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" 5474 dependencies = [ 5475 "crossbeam-channel", 5476 + "dirs", 5477 "libappindicator", 5478 "muda", 5479 + "objc2 0.6.3", 5480 "objc2-app-kit", 5481 "objc2-core-foundation", 5482 "objc2-core-graphics", 5483 + "objc2-foundation 0.3.2", 5484 "once_cell", 5485 + "png 0.17.16", 5486 "serde", 5487 + "thiserror 2.0.17", 5488 + "windows-sys 0.60.2", 5489 ] 5490 5491 [[package]] ··· 5502 5503 [[package]] 5504 name = "typenum" 5505 + version = "1.19.0" 5506 source = "registry+https://github.com/rust-lang/crates.io-index" 5507 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 5508 5509 [[package]] 5510 name = "uds_windows" ··· 5560 5561 [[package]] 5562 name = "unicode-ident" 5563 + version = "1.0.22" 5564 source = "registry+https://github.com/rust-lang/crates.io-index" 5565 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 5566 5567 [[package]] 5568 name = "unicode-segmentation" ··· 5578 5579 [[package]] 5580 name = "url" 5581 + version = "2.5.7" 5582 source = "registry+https://github.com/rust-lang/crates.io-index" 5583 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 5584 dependencies = [ 5585 "form_urlencoded", 5586 "idna", ··· 5614 5615 [[package]] 5616 name = "uuid" 5617 + version = "1.18.1" 5618 source = "registry+https://github.com/rust-lang/crates.io-index" 5619 + checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" 5620 dependencies = [ 5621 + "getrandom 0.3.4", 5622 "js-sys", 5623 "serde", 5624 "wasm-bindgen", ··· 5643 5644 [[package]] 5645 name = "version-compare" 5646 + version = "0.2.1" 5647 source = "registry+https://github.com/rust-lang/crates.io-index" 5648 + checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" 5649 5650 [[package]] 5651 name = "version_check" ··· 5654 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 5655 5656 [[package]] 5657 name = "vswhom" 5658 version = "0.1.0" 5659 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5705 checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 5706 5707 [[package]] 5708 + name = "wasip2" 5709 + version = "1.0.1+wasi-0.2.4" 5710 source = "registry+https://github.com/rust-lang/crates.io-index" 5711 + checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 5712 dependencies = [ 5713 + "wit-bindgen", 5714 ] 5715 5716 [[package]] 5717 name = "wasm-bindgen" 5718 + version = "0.2.105" 5719 source = "registry+https://github.com/rust-lang/crates.io-index" 5720 + checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 5721 dependencies = [ 5722 "cfg-if", 5723 "once_cell", 5724 "rustversion", 5725 "wasm-bindgen-macro", 5726 "wasm-bindgen-shared", 5727 ] 5728 5729 [[package]] 5730 name = "wasm-bindgen-futures" 5731 + version = "0.4.55" 5732 source = "registry+https://github.com/rust-lang/crates.io-index" 5733 + checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" 5734 dependencies = [ 5735 "cfg-if", 5736 "js-sys", ··· 5741 5742 [[package]] 5743 name = "wasm-bindgen-macro" 5744 + version = "0.2.105" 5745 source = "registry+https://github.com/rust-lang/crates.io-index" 5746 + checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" 5747 dependencies = [ 5748 "quote", 5749 "wasm-bindgen-macro-support", ··· 5751 5752 [[package]] 5753 name = "wasm-bindgen-macro-support" 5754 + version = "0.2.105" 5755 source = "registry+https://github.com/rust-lang/crates.io-index" 5756 + checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" 5757 dependencies = [ 5758 + "bumpalo", 5759 "proc-macro2", 5760 "quote", 5761 + "syn 2.0.109", 5762 "wasm-bindgen-shared", 5763 ] 5764 5765 [[package]] 5766 name = "wasm-bindgen-shared" 5767 + version = "0.2.105" 5768 source = "registry+https://github.com/rust-lang/crates.io-index" 5769 + checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" 5770 dependencies = [ 5771 "unicode-ident", 5772 ] ··· 5786 5787 [[package]] 5788 name = "web-sys" 5789 + version = "0.3.82" 5790 source = "registry+https://github.com/rust-lang/crates.io-index" 5791 + checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" 5792 dependencies = [ 5793 "js-sys", 5794 "wasm-bindgen", ··· 5850 5851 [[package]] 5852 name = "webpki-roots" 5853 + version = "1.0.4" 5854 source = "registry+https://github.com/rust-lang/crates.io-index" 5855 + checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" 5856 dependencies = [ 5857 "rustls-pki-types", 5858 ] ··· 5866 "webview2-com-macros", 5867 "webview2-com-sys", 5868 "windows", 5869 + "windows-core 0.61.2", 5870 "windows-implement", 5871 "windows-interface", 5872 ] ··· 5879 dependencies = [ 5880 "proc-macro2", 5881 "quote", 5882 + "syn 2.0.109", 5883 ] 5884 5885 [[package]] ··· 5888 source = "registry+https://github.com/rust-lang/crates.io-index" 5889 checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" 5890 dependencies = [ 5891 + "thiserror 2.0.17", 5892 "windows", 5893 + "windows-core 0.61.2", 5894 ] 5895 5896 [[package]] ··· 5917 5918 [[package]] 5919 name = "winapi-util" 5920 + version = "0.1.11" 5921 source = "registry+https://github.com/rust-lang/crates.io-index" 5922 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 5923 dependencies = [ 5924 + "windows-sys 0.61.2", 5925 ] 5926 5927 [[package]] ··· 5936 source = "registry+https://github.com/rust-lang/crates.io-index" 5937 checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" 5938 dependencies = [ 5939 + "objc2 0.6.3", 5940 "objc2-app-kit", 5941 "objc2-core-foundation", 5942 + "objc2-foundation 0.3.2", 5943 "raw-window-handle", 5944 "windows-sys 0.59.0", 5945 "windows-version", ··· 5952 checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 5953 dependencies = [ 5954 "windows-collections", 5955 + "windows-core 0.61.2", 5956 "windows-future", 5957 + "windows-link 0.1.3", 5958 "windows-numerics", 5959 ] 5960 ··· 5964 source = "registry+https://github.com/rust-lang/crates.io-index" 5965 checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 5966 dependencies = [ 5967 + "windows-core 0.61.2", 5968 ] 5969 5970 [[package]] ··· 5975 dependencies = [ 5976 "windows-implement", 5977 "windows-interface", 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", 5994 ] 5995 5996 [[package]] ··· 5999 source = "registry+https://github.com/rust-lang/crates.io-index" 6000 checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 6001 dependencies = [ 6002 + "windows-core 0.61.2", 6003 + "windows-link 0.1.3", 6004 "windows-threading", 6005 ] 6006 6007 [[package]] 6008 name = "windows-implement" 6009 + version = "0.60.2" 6010 source = "registry+https://github.com/rust-lang/crates.io-index" 6011 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 6012 dependencies = [ 6013 "proc-macro2", 6014 "quote", 6015 + "syn 2.0.109", 6016 ] 6017 6018 [[package]] 6019 name = "windows-interface" 6020 + version = "0.59.3" 6021 source = "registry+https://github.com/rust-lang/crates.io-index" 6022 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 6023 dependencies = [ 6024 "proc-macro2", 6025 "quote", 6026 + "syn 2.0.109", 6027 ] 6028 6029 [[package]] ··· 6033 checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 6034 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]] 6042 name = "windows-numerics" 6043 version = "0.2.0" 6044 source = "registry+https://github.com/rust-lang/crates.io-index" 6045 checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 6046 dependencies = [ 6047 + "windows-core 0.61.2", 6048 + "windows-link 0.1.3", 6049 ] 6050 6051 [[package]] ··· 6054 source = "registry+https://github.com/rust-lang/crates.io-index" 6055 checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 6056 dependencies = [ 6057 + "windows-link 0.1.3", 6058 + "windows-result 0.3.4", 6059 + "windows-strings 0.4.2", 6060 ] 6061 6062 [[package]] ··· 6065 source = "registry+https://github.com/rust-lang/crates.io-index" 6066 checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 6067 dependencies = [ 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", 6078 ] 6079 6080 [[package]] ··· 6083 source = "registry+https://github.com/rust-lang/crates.io-index" 6084 checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 6085 dependencies = [ 6086 + "windows-link 0.1.3", 6087 ] 6088 6089 [[package]] 6090 + name = "windows-strings" 6091 + version = "0.5.1" 6092 source = "registry+https://github.com/rust-lang/crates.io-index" 6093 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 6094 dependencies = [ 6095 + "windows-link 0.2.1", 6096 ] 6097 6098 [[package]] 6099 name = "windows-sys" 6100 + version = "0.45.0" 6101 source = "registry+https://github.com/rust-lang/crates.io-index" 6102 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6103 dependencies = [ 6104 + "windows-targets 0.42.2", 6105 ] 6106 6107 [[package]] ··· 6128 source = "registry+https://github.com/rust-lang/crates.io-index" 6129 checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 6130 dependencies = [ 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", 6141 ] 6142 6143 [[package]] ··· 6157 6158 [[package]] 6159 name = "windows-targets" 6160 version = "0.52.6" 6161 source = "registry+https://github.com/rust-lang/crates.io-index" 6162 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" ··· 6173 6174 [[package]] 6175 name = "windows-targets" 6176 + version = "0.53.5" 6177 source = "registry+https://github.com/rust-lang/crates.io-index" 6178 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 6179 dependencies = [ 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", 6189 ] 6190 6191 [[package]] ··· 6194 source = "registry+https://github.com/rust-lang/crates.io-index" 6195 checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6196 dependencies = [ 6197 + "windows-link 0.1.3", 6198 ] 6199 6200 [[package]] 6201 name = "windows-version" 6202 + version = "0.1.7" 6203 source = "registry+https://github.com/rust-lang/crates.io-index" 6204 + checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" 6205 dependencies = [ 6206 + "windows-link 0.2.1", 6207 ] 6208 6209 [[package]] ··· 6214 6215 [[package]] 6216 name = "windows_aarch64_gnullvm" 6217 version = "0.52.6" 6218 source = "registry+https://github.com/rust-lang/crates.io-index" 6219 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 6220 6221 [[package]] 6222 name = "windows_aarch64_gnullvm" 6223 + version = "0.53.1" 6224 source = "registry+https://github.com/rust-lang/crates.io-index" 6225 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 6226 6227 [[package]] 6228 name = "windows_aarch64_msvc" ··· 6232 6233 [[package]] 6234 name = "windows_aarch64_msvc" 6235 version = "0.52.6" 6236 source = "registry+https://github.com/rust-lang/crates.io-index" 6237 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6238 6239 [[package]] 6240 name = "windows_aarch64_msvc" 6241 + version = "0.53.1" 6242 source = "registry+https://github.com/rust-lang/crates.io-index" 6243 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 6244 6245 [[package]] 6246 name = "windows_i686_gnu" ··· 6250 6251 [[package]] 6252 name = "windows_i686_gnu" 6253 version = "0.52.6" 6254 source = "registry+https://github.com/rust-lang/crates.io-index" 6255 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6256 6257 [[package]] 6258 name = "windows_i686_gnu" 6259 + version = "0.53.1" 6260 source = "registry+https://github.com/rust-lang/crates.io-index" 6261 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 6262 6263 [[package]] 6264 name = "windows_i686_gnullvm" ··· 6268 6269 [[package]] 6270 name = "windows_i686_gnullvm" 6271 + version = "0.53.1" 6272 source = "registry+https://github.com/rust-lang/crates.io-index" 6273 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 6274 6275 [[package]] 6276 name = "windows_i686_msvc" ··· 6280 6281 [[package]] 6282 name = "windows_i686_msvc" 6283 version = "0.52.6" 6284 source = "registry+https://github.com/rust-lang/crates.io-index" 6285 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6286 6287 [[package]] 6288 name = "windows_i686_msvc" 6289 + version = "0.53.1" 6290 source = "registry+https://github.com/rust-lang/crates.io-index" 6291 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 6292 6293 [[package]] 6294 name = "windows_x86_64_gnu" ··· 6298 6299 [[package]] 6300 name = "windows_x86_64_gnu" 6301 version = "0.52.6" 6302 source = "registry+https://github.com/rust-lang/crates.io-index" 6303 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6304 6305 [[package]] 6306 name = "windows_x86_64_gnu" 6307 + version = "0.53.1" 6308 source = "registry+https://github.com/rust-lang/crates.io-index" 6309 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 6310 6311 [[package]] 6312 name = "windows_x86_64_gnullvm" ··· 6316 6317 [[package]] 6318 name = "windows_x86_64_gnullvm" 6319 version = "0.52.6" 6320 source = "registry+https://github.com/rust-lang/crates.io-index" 6321 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6322 6323 [[package]] 6324 name = "windows_x86_64_gnullvm" 6325 + version = "0.53.1" 6326 source = "registry+https://github.com/rust-lang/crates.io-index" 6327 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 6328 6329 [[package]] 6330 name = "windows_x86_64_msvc" ··· 6334 6335 [[package]] 6336 name = "windows_x86_64_msvc" 6337 version = "0.52.6" 6338 source = "registry+https://github.com/rust-lang/crates.io-index" 6339 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6340 6341 [[package]] 6342 name = "windows_x86_64_msvc" 6343 + version = "0.53.1" 6344 source = "registry+https://github.com/rust-lang/crates.io-index" 6345 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 6346 6347 [[package]] 6348 name = "winnow" ··· 6355 6356 [[package]] 6357 name = "winnow" 6358 + version = "0.7.13" 6359 source = "registry+https://github.com/rust-lang/crates.io-index" 6360 + checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 6361 + dependencies = [ 6362 + "memchr", 6363 + ] 6364 6365 [[package]] 6366 name = "winreg" ··· 6373 ] 6374 6375 [[package]] 6376 + name = "wit-bindgen" 6377 + version = "0.46.0" 6378 source = "registry+https://github.com/rust-lang/crates.io-index" 6379 + checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 6380 6381 [[package]] 6382 name = "writeable" 6383 + version = "0.6.2" 6384 source = "registry+https://github.com/rust-lang/crates.io-index" 6385 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 6386 6387 [[package]] 6388 name = "wry" 6389 + version = "0.53.5" 6390 source = "registry+https://github.com/rust-lang/crates.io-index" 6391 + checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" 6392 dependencies = [ 6393 "base64 0.22.1", 6394 + "block2 0.6.2", 6395 "cookie", 6396 "crossbeam-channel", 6397 + "dirs", 6398 "dpi", 6399 "dunce", 6400 "gdkx11", ··· 6406 "kuchikiki", 6407 "libc", 6408 "ndk", 6409 + "objc2 0.6.3", 6410 "objc2-app-kit", 6411 "objc2-core-foundation", 6412 + "objc2-foundation 0.3.2", 6413 "objc2-ui-kit", 6414 "objc2-web-kit", 6415 "once_cell", ··· 6418 "sha2", 6419 "soup3", 6420 "tao-macros", 6421 + "thiserror 2.0.17", 6422 "url", 6423 "webkit2gtk", 6424 "webkit2gtk-sys", 6425 "webview2-com", 6426 "windows", 6427 + "windows-core 0.61.2", 6428 "windows-version", 6429 "x11-dl", 6430 ] ··· 6451 ] 6452 6453 [[package]] 6454 + name = "x11rb" 6455 + version = "0.13.2" 6456 source = "registry+https://github.com/rust-lang/crates.io-index" 6457 + checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 6458 dependencies = [ 6459 + "gethostname", 6460 + "rustix", 6461 + "x11rb-protocol", 6462 ] 6463 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]] 6471 name = "yoke" 6472 + version = "0.8.1" 6473 source = "registry+https://github.com/rust-lang/crates.io-index" 6474 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 6475 dependencies = [ 6476 "stable_deref_trait", 6477 "yoke-derive", 6478 "zerofrom", ··· 6480 6481 [[package]] 6482 name = "yoke-derive" 6483 + version = "0.8.1" 6484 source = "registry+https://github.com/rust-lang/crates.io-index" 6485 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 6486 dependencies = [ 6487 "proc-macro2", 6488 "quote", 6489 + "syn 2.0.109", 6490 "synstructure", 6491 ] 6492 6493 [[package]] 6494 name = "zbus" 6495 + version = "5.12.0" 6496 source = "registry+https://github.com/rust-lang/crates.io-index" 6497 + checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" 6498 dependencies = [ 6499 "async-broadcast", 6500 "async-executor", 6501 "async-io", 6502 "async-lock", 6503 "async-process", ··· 6505 "async-task", 6506 "async-trait", 6507 "blocking", 6508 "enumflags2", 6509 "event-listener", 6510 "futures-core", 6511 + "futures-lite", 6512 "hex", 6513 "nix", 6514 "ordered-stream", 6515 "serde", 6516 "serde_repr", 6517 "tracing", 6518 "uds_windows", 6519 + "uuid", 6520 + "windows-sys 0.61.2", 6521 + "winnow 0.7.13", 6522 "zbus_macros", 6523 "zbus_names", 6524 "zvariant", ··· 6526 6527 [[package]] 6528 name = "zbus_macros" 6529 + version = "5.12.0" 6530 source = "registry+https://github.com/rust-lang/crates.io-index" 6531 + checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" 6532 dependencies = [ 6533 + "proc-macro-crate 3.4.0", 6534 "proc-macro2", 6535 "quote", 6536 + "syn 2.0.109", 6537 + "zbus_names", 6538 + "zvariant", 6539 "zvariant_utils", 6540 ] 6541 6542 [[package]] 6543 name = "zbus_names" 6544 + version = "4.2.0" 6545 source = "registry+https://github.com/rust-lang/crates.io-index" 6546 + checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 6547 dependencies = [ 6548 "serde", 6549 "static_assertions", 6550 + "winnow 0.7.13", 6551 "zvariant", 6552 ] 6553 6554 [[package]] 6555 name = "zerocopy" 6556 + version = "0.8.27" 6557 source = "registry+https://github.com/rust-lang/crates.io-index" 6558 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 6559 dependencies = [ 6560 "zerocopy-derive", 6561 ] 6562 6563 [[package]] 6564 name = "zerocopy-derive" 6565 + version = "0.8.27" 6566 source = "registry+https://github.com/rust-lang/crates.io-index" 6567 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 6568 dependencies = [ 6569 "proc-macro2", 6570 "quote", 6571 + "syn 2.0.109", 6572 ] 6573 6574 [[package]] ··· 6588 dependencies = [ 6589 "proc-macro2", 6590 "quote", 6591 + "syn 2.0.109", 6592 "synstructure", 6593 ] 6594 6595 [[package]] 6596 name = "zeroize" 6597 + version = "1.8.2" 6598 source = "registry+https://github.com/rust-lang/crates.io-index" 6599 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 6600 6601 [[package]] 6602 name = "zerotrie" 6603 + version = "0.2.3" 6604 source = "registry+https://github.com/rust-lang/crates.io-index" 6605 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 6606 dependencies = [ 6607 "displaydoc", 6608 "yoke", ··· 6611 6612 [[package]] 6613 name = "zerovec" 6614 + version = "0.11.5" 6615 source = "registry+https://github.com/rust-lang/crates.io-index" 6616 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 6617 dependencies = [ 6618 "yoke", 6619 "zerofrom", ··· 6622 6623 [[package]] 6624 name = "zerovec-derive" 6625 + version = "0.11.2" 6626 source = "registry+https://github.com/rust-lang/crates.io-index" 6627 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 6628 dependencies = [ 6629 "proc-macro2", 6630 "quote", 6631 + "syn 2.0.109", 6632 ] 6633 6634 [[package]] ··· 6648 6649 [[package]] 6650 name = "zune-jpeg" 6651 + version = "0.4.21" 6652 source = "registry+https://github.com/rust-lang/crates.io-index" 6653 + checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 6654 dependencies = [ 6655 "zune-core", 6656 ] 6657 6658 [[package]] 6659 name = "zvariant" 6660 + version = "5.8.0" 6661 source = "registry+https://github.com/rust-lang/crates.io-index" 6662 + checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" 6663 dependencies = [ 6664 "endi", 6665 "enumflags2", 6666 "serde", 6667 + "winnow 0.7.13", 6668 "zvariant_derive", 6669 + "zvariant_utils", 6670 ] 6671 6672 [[package]] 6673 name = "zvariant_derive" 6674 + version = "5.8.0" 6675 source = "registry+https://github.com/rust-lang/crates.io-index" 6676 + checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" 6677 dependencies = [ 6678 + "proc-macro-crate 3.4.0", 6679 "proc-macro2", 6680 "quote", 6681 + "syn 2.0.109", 6682 "zvariant_utils", 6683 ] 6684 6685 [[package]] 6686 name = "zvariant_utils" 6687 + version = "3.2.1" 6688 source = "registry+https://github.com/rust-lang/crates.io-index" 6689 + checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 6690 dependencies = [ 6691 "proc-macro2", 6692 "quote", 6693 + "serde", 6694 + "syn 2.0.109", 6695 + "winnow 0.7.13", 6696 ]
+15 -16
src-tauri/Cargo.toml
··· 1 [package] 2 - name = "vrcpm-rs" 3 - version = "0.2.4" 4 description = "VRChat Photo Manager" 5 authors = ["_phaz"] 6 edition = "2021" ··· 11 tauri-build = { version = "2.0.0-rc", features = [] } 12 13 [dependencies] 14 - tauri = { version = "2.0.0-rc", features = ["tray-icon", "image-png"] } 15 serde = { version = "1.0", features = ["derive"] } 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" 22 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 - 30 [target.'cfg(windows)'.dependencies] 31 - mslnk = { version = "0.1.8" } 32 33 [features] 34 # this feature is used for production builds or when `devPath` points to the filesystem
··· 1 [package] 2 + name = "VRChatPhotoManager" 3 + version = "0.2.7-hot1" 4 description = "VRChat Photo Manager" 5 authors = ["_phaz"] 6 edition = "2021" ··· 11 tauri-build = { version = "2.0.0-rc", features = [] } 12 13 [dependencies] 14 + tauri = { version = "2.9", features = [ "tray-icon", "image-png", "devtools" ] } 15 serde = { version = "1.0", features = ["derive"] } 16 serde_json = "1.0" 17 + open = "5.3" 18 + dirs = "6.0" 19 + notify = "8.2" 20 + regex = "1.12" 21 reqwest = { version = "0.12", features = ["blocking"] } 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" 29 [target.'cfg(windows)'.dependencies] 30 + mslnk = { version = "0.1" } 31 32 [features] 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 "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 }, 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`", 523 "type": "string", 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`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 }, 569 { 570 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 "type": "string", 572 "const": "core:app:allow-remove-data-store", 573 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 }, 575 { 576 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 "type": "string", 578 "const": "core:app:allow-set-app-theme", ··· 639 "markdownDescription": "Denies the name command without any pre-configured scope." 640 }, 641 { 642 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 "type": "string", 644 "const": "core:app:deny-remove-data-store", 645 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 646 }, 647 { 648 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 }, 1829 { 1830 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 "type": "string", 1832 "const": "core:window:allow-set-fullscreen", ··· 1897 "type": "string", 1898 "const": "core:window:allow-set-shadow", 1899 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1900 }, 1901 { 1902 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 }, 2273 { 2274 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 "type": "string", 2276 "const": "core:window:deny-set-fullscreen", ··· 2341 "type": "string", 2342 "const": "core:window:deny-set-shadow", 2343 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2344 }, 2345 { 2346 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 "type": "string", 2432 "const": "core:window:deny-unminimize", 2433 "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 }, 2489 { 2490 "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`",
··· 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 }, 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`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 "type": "string", 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`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 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." 586 + }, 587 + { 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 589 "type": "string", 590 "const": "core:app:allow-set-app-theme", ··· 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." 670 }, 671 { 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 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." 1858 + }, 1859 + { 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1861 "type": "string", 1862 "const": "core:window:allow-set-fullscreen", ··· 1927 "type": "string", 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." 1936 }, 1937 { 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 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." 2314 + }, 2315 + { 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2317 "type": "string", 2318 "const": "core:window:deny-set-fullscreen", ··· 2383 "type": "string", 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." 2392 }, 2393 { 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2479 "type": "string", 2480 "const": "core:window:deny-unminimize", 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2482 }, 2483 { 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 "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 }, 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`", 523 "type": "string", 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`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 }, 569 { 570 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 "type": "string", 572 "const": "core:app:allow-remove-data-store", 573 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 }, 575 { 576 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 "type": "string", 578 "const": "core:app:allow-set-app-theme", ··· 639 "markdownDescription": "Denies the name command without any pre-configured scope." 640 }, 641 { 642 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 "type": "string", 644 "const": "core:app:deny-remove-data-store", 645 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 646 }, 647 { 648 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 }, 1829 { 1830 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 "type": "string", 1832 "const": "core:window:allow-set-fullscreen", ··· 1897 "type": "string", 1898 "const": "core:window:allow-set-shadow", 1899 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1900 }, 1901 { 1902 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 }, 2273 { 2274 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 "type": "string", 2276 "const": "core:window:deny-set-fullscreen", ··· 2341 "type": "string", 2342 "const": "core:window:deny-set-shadow", 2343 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2344 }, 2345 { 2346 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 "type": "string", 2432 "const": "core:window:deny-unminimize", 2433 "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 }, 2489 { 2490 "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`",
··· 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 }, 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`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 "type": "string", 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`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 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." 586 + }, 587 + { 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 589 "type": "string", 590 "const": "core:app:allow-set-app-theme", ··· 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." 670 }, 671 { 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 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." 1858 + }, 1859 + { 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1861 "type": "string", 1862 "const": "core:window:allow-set-fullscreen", ··· 1927 "type": "string", 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." 1936 }, 1937 { 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 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." 2314 + }, 2315 + { 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2317 "type": "string", 2318 "const": "core:window:deny-set-fullscreen", ··· 2383 "type": "string", 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." 2392 }, 2393 { 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2479 "type": "string", 2480 "const": "core:window:deny-unminimize", 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2482 }, 2483 { 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 ], 38 "definitions": { 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\"] } ```", 41 "type": "object", 42 "required": [ 43 "identifier", ··· 49 "type": "string" 50 }, 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.", 53 "default": "", 54 "type": "string" 55 }, ··· 70 "type": "boolean" 71 }, 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\"]`", 74 "type": "array", 75 "items": { 76 "type": "string" 77 } 78 }, 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\"]`", 81 "type": "array", 82 "items": { 83 "type": "string" 84 } 85 }, 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\" }] } ```", 88 "type": "array", 89 "items": { 90 "$ref": "#/definitions/PermissionEntry" ··· 140 "identifier": { 141 "anyOf": [ 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", 144 "type": "string", 145 - "const": "http:default" 146 }, 147 { 148 "description": "Enables the fetch command without any pre-configured scope.", 149 "type": "string", 150 - "const": "http:allow-fetch" 151 }, 152 { 153 "description": "Enables the fetch_cancel command without any pre-configured scope.", 154 "type": "string", 155 - "const": "http:allow-fetch-cancel" 156 }, 157 { 158 "description": "Enables the fetch_read_body command without any pre-configured scope.", 159 "type": "string", 160 - "const": "http:allow-fetch-read-body" 161 }, 162 { 163 "description": "Enables the fetch_send command without any pre-configured scope.", 164 "type": "string", 165 - "const": "http:allow-fetch-send" 166 }, 167 { 168 "description": "Denies the fetch command without any pre-configured scope.", 169 "type": "string", 170 - "const": "http:deny-fetch" 171 }, 172 { 173 "description": "Denies the fetch_cancel command without any pre-configured scope.", 174 "type": "string", 175 - "const": "http:deny-fetch-cancel" 176 }, 177 { 178 "description": "Denies the fetch_read_body command without any pre-configured scope.", 179 "type": "string", 180 - "const": "http:deny-fetch-read-body" 181 }, 182 { 183 "description": "Denies the fetch_send command without any pre-configured scope.", 184 "type": "string", 185 - "const": "http:deny-fetch-send" 186 } 187 ] 188 } ··· 257 "identifier": { 258 "anyOf": [ 259 { 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", 261 "type": "string", 262 - "const": "shell:default" 263 }, 264 { 265 "description": "Enables the execute command without any pre-configured scope.", 266 "type": "string", 267 - "const": "shell:allow-execute" 268 }, 269 { 270 "description": "Enables the kill command without any pre-configured scope.", 271 "type": "string", 272 - "const": "shell:allow-kill" 273 }, 274 { 275 "description": "Enables the open command without any pre-configured scope.", 276 "type": "string", 277 - "const": "shell:allow-open" 278 }, 279 { 280 "description": "Enables the spawn command without any pre-configured scope.", 281 "type": "string", 282 - "const": "shell:allow-spawn" 283 }, 284 { 285 "description": "Enables the stdin_write command without any pre-configured scope.", 286 "type": "string", 287 - "const": "shell:allow-stdin-write" 288 }, 289 { 290 "description": "Denies the execute command without any pre-configured scope.", 291 "type": "string", 292 - "const": "shell:deny-execute" 293 }, 294 { 295 "description": "Denies the kill command without any pre-configured scope.", 296 "type": "string", 297 - "const": "shell:deny-kill" 298 }, 299 { 300 "description": "Denies the open command without any pre-configured scope.", 301 "type": "string", 302 - "const": "shell:deny-open" 303 }, 304 { 305 "description": "Denies the spawn command without any pre-configured scope.", 306 "type": "string", 307 - "const": "shell:deny-spawn" 308 }, 309 { 310 "description": "Denies the stdin_write command without any pre-configured scope.", 311 "type": "string", 312 - "const": "shell:deny-stdin-write" 313 } 314 ] 315 } ··· 493 "description": "Permission identifier", 494 "oneOf": [ 495 { 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", 497 "type": "string", 498 - "const": "core:default" 499 }, 500 { 501 - "description": "Default permissions for the plugin.", 502 "type": "string", 503 - "const": "core:app:default" 504 }, 505 { 506 "description": "Enables the app_hide command without any pre-configured scope.", 507 "type": "string", 508 - "const": "core:app:allow-app-hide" 509 }, 510 { 511 "description": "Enables the app_show command without any pre-configured scope.", 512 "type": "string", 513 - "const": "core:app:allow-app-show" 514 }, 515 { 516 "description": "Enables the default_window_icon command without any pre-configured scope.", 517 "type": "string", 518 - "const": "core:app:allow-default-window-icon" 519 }, 520 { 521 "description": "Enables the name command without any pre-configured scope.", 522 "type": "string", 523 - "const": "core:app:allow-name" 524 }, 525 { 526 "description": "Enables the set_app_theme command without any pre-configured scope.", 527 "type": "string", 528 - "const": "core:app:allow-set-app-theme" 529 }, 530 { 531 "description": "Enables the tauri_version command without any pre-configured scope.", 532 "type": "string", 533 - "const": "core:app:allow-tauri-version" 534 }, 535 { 536 "description": "Enables the version command without any pre-configured scope.", 537 "type": "string", 538 - "const": "core:app:allow-version" 539 }, 540 { 541 "description": "Denies the app_hide command without any pre-configured scope.", 542 "type": "string", 543 - "const": "core:app:deny-app-hide" 544 }, 545 { 546 "description": "Denies the app_show command without any pre-configured scope.", 547 "type": "string", 548 - "const": "core:app:deny-app-show" 549 }, 550 { 551 "description": "Denies the default_window_icon command without any pre-configured scope.", 552 "type": "string", 553 - "const": "core:app:deny-default-window-icon" 554 }, 555 { 556 "description": "Denies the name command without any pre-configured scope.", 557 "type": "string", 558 - "const": "core:app:deny-name" 559 }, 560 { 561 "description": "Denies the set_app_theme command without any pre-configured scope.", 562 "type": "string", 563 - "const": "core:app:deny-set-app-theme" 564 }, 565 { 566 "description": "Denies the tauri_version command without any pre-configured scope.", 567 "type": "string", 568 - "const": "core:app:deny-tauri-version" 569 }, 570 { 571 "description": "Denies the version command without any pre-configured scope.", 572 "type": "string", 573 - "const": "core:app:deny-version" 574 }, 575 { 576 - "description": "Default permissions for the plugin.", 577 "type": "string", 578 - "const": "core:event:default" 579 }, 580 { 581 "description": "Enables the emit command without any pre-configured scope.", 582 "type": "string", 583 - "const": "core:event:allow-emit" 584 }, 585 { 586 "description": "Enables the emit_to command without any pre-configured scope.", 587 "type": "string", 588 - "const": "core:event:allow-emit-to" 589 }, 590 { 591 "description": "Enables the listen command without any pre-configured scope.", 592 "type": "string", 593 - "const": "core:event:allow-listen" 594 }, 595 { 596 "description": "Enables the unlisten command without any pre-configured scope.", 597 "type": "string", 598 - "const": "core:event:allow-unlisten" 599 }, 600 { 601 "description": "Denies the emit command without any pre-configured scope.", 602 "type": "string", 603 - "const": "core:event:deny-emit" 604 }, 605 { 606 "description": "Denies the emit_to command without any pre-configured scope.", 607 "type": "string", 608 - "const": "core:event:deny-emit-to" 609 }, 610 { 611 "description": "Denies the listen command without any pre-configured scope.", 612 "type": "string", 613 - "const": "core:event:deny-listen" 614 }, 615 { 616 "description": "Denies the unlisten command without any pre-configured scope.", 617 "type": "string", 618 - "const": "core:event:deny-unlisten" 619 }, 620 { 621 - "description": "Default permissions for the plugin.", 622 "type": "string", 623 - "const": "core:image:default" 624 }, 625 { 626 "description": "Enables the from_bytes command without any pre-configured scope.", 627 "type": "string", 628 - "const": "core:image:allow-from-bytes" 629 }, 630 { 631 "description": "Enables the from_path command without any pre-configured scope.", 632 "type": "string", 633 - "const": "core:image:allow-from-path" 634 }, 635 { 636 "description": "Enables the new command without any pre-configured scope.", 637 "type": "string", 638 - "const": "core:image:allow-new" 639 }, 640 { 641 "description": "Enables the rgba command without any pre-configured scope.", 642 "type": "string", 643 - "const": "core:image:allow-rgba" 644 }, 645 { 646 "description": "Enables the size command without any pre-configured scope.", 647 "type": "string", 648 - "const": "core:image:allow-size" 649 }, 650 { 651 "description": "Denies the from_bytes command without any pre-configured scope.", 652 "type": "string", 653 - "const": "core:image:deny-from-bytes" 654 }, 655 { 656 "description": "Denies the from_path command without any pre-configured scope.", 657 "type": "string", 658 - "const": "core:image:deny-from-path" 659 }, 660 { 661 "description": "Denies the new command without any pre-configured scope.", 662 "type": "string", 663 - "const": "core:image:deny-new" 664 }, 665 { 666 "description": "Denies the rgba command without any pre-configured scope.", 667 "type": "string", 668 - "const": "core:image:deny-rgba" 669 }, 670 { 671 "description": "Denies the size command without any pre-configured scope.", 672 "type": "string", 673 - "const": "core:image:deny-size" 674 }, 675 { 676 - "description": "Default permissions for the plugin.", 677 "type": "string", 678 - "const": "core:menu:default" 679 }, 680 { 681 "description": "Enables the append command without any pre-configured scope.", 682 "type": "string", 683 - "const": "core:menu:allow-append" 684 }, 685 { 686 "description": "Enables the create_default command without any pre-configured scope.", 687 "type": "string", 688 - "const": "core:menu:allow-create-default" 689 }, 690 { 691 "description": "Enables the get command without any pre-configured scope.", 692 "type": "string", 693 - "const": "core:menu:allow-get" 694 }, 695 { 696 "description": "Enables the insert command without any pre-configured scope.", 697 "type": "string", 698 - "const": "core:menu:allow-insert" 699 }, 700 { 701 "description": "Enables the is_checked command without any pre-configured scope.", 702 "type": "string", 703 - "const": "core:menu:allow-is-checked" 704 }, 705 { 706 "description": "Enables the is_enabled command without any pre-configured scope.", 707 "type": "string", 708 - "const": "core:menu:allow-is-enabled" 709 }, 710 { 711 "description": "Enables the items command without any pre-configured scope.", 712 "type": "string", 713 - "const": "core:menu:allow-items" 714 }, 715 { 716 "description": "Enables the new command without any pre-configured scope.", 717 "type": "string", 718 - "const": "core:menu:allow-new" 719 }, 720 { 721 "description": "Enables the popup command without any pre-configured scope.", 722 "type": "string", 723 - "const": "core:menu:allow-popup" 724 }, 725 { 726 "description": "Enables the prepend command without any pre-configured scope.", 727 "type": "string", 728 - "const": "core:menu:allow-prepend" 729 }, 730 { 731 "description": "Enables the remove command without any pre-configured scope.", 732 "type": "string", 733 - "const": "core:menu:allow-remove" 734 }, 735 { 736 "description": "Enables the remove_at command without any pre-configured scope.", 737 "type": "string", 738 - "const": "core:menu:allow-remove-at" 739 }, 740 { 741 "description": "Enables the set_accelerator command without any pre-configured scope.", 742 "type": "string", 743 - "const": "core:menu:allow-set-accelerator" 744 }, 745 { 746 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 747 "type": "string", 748 - "const": "core:menu:allow-set-as-app-menu" 749 }, 750 { 751 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 752 "type": "string", 753 - "const": "core:menu:allow-set-as-help-menu-for-nsapp" 754 }, 755 { 756 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 757 "type": "string", 758 - "const": "core:menu:allow-set-as-window-menu" 759 }, 760 { 761 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 762 "type": "string", 763 - "const": "core:menu:allow-set-as-windows-menu-for-nsapp" 764 }, 765 { 766 "description": "Enables the set_checked command without any pre-configured scope.", 767 "type": "string", 768 - "const": "core:menu:allow-set-checked" 769 }, 770 { 771 "description": "Enables the set_enabled command without any pre-configured scope.", 772 "type": "string", 773 - "const": "core:menu:allow-set-enabled" 774 }, 775 { 776 "description": "Enables the set_icon command without any pre-configured scope.", 777 "type": "string", 778 - "const": "core:menu:allow-set-icon" 779 }, 780 { 781 "description": "Enables the set_text command without any pre-configured scope.", 782 "type": "string", 783 - "const": "core:menu:allow-set-text" 784 }, 785 { 786 "description": "Enables the text command without any pre-configured scope.", 787 "type": "string", 788 - "const": "core:menu:allow-text" 789 }, 790 { 791 "description": "Denies the append command without any pre-configured scope.", 792 "type": "string", 793 - "const": "core:menu:deny-append" 794 }, 795 { 796 "description": "Denies the create_default command without any pre-configured scope.", 797 "type": "string", 798 - "const": "core:menu:deny-create-default" 799 }, 800 { 801 "description": "Denies the get command without any pre-configured scope.", 802 "type": "string", 803 - "const": "core:menu:deny-get" 804 }, 805 { 806 "description": "Denies the insert command without any pre-configured scope.", 807 "type": "string", 808 - "const": "core:menu:deny-insert" 809 }, 810 { 811 "description": "Denies the is_checked command without any pre-configured scope.", 812 "type": "string", 813 - "const": "core:menu:deny-is-checked" 814 }, 815 { 816 "description": "Denies the is_enabled command without any pre-configured scope.", 817 "type": "string", 818 - "const": "core:menu:deny-is-enabled" 819 }, 820 { 821 "description": "Denies the items command without any pre-configured scope.", 822 "type": "string", 823 - "const": "core:menu:deny-items" 824 }, 825 { 826 "description": "Denies the new command without any pre-configured scope.", 827 "type": "string", 828 - "const": "core:menu:deny-new" 829 }, 830 { 831 "description": "Denies the popup command without any pre-configured scope.", 832 "type": "string", 833 - "const": "core:menu:deny-popup" 834 }, 835 { 836 "description": "Denies the prepend command without any pre-configured scope.", 837 "type": "string", 838 - "const": "core:menu:deny-prepend" 839 }, 840 { 841 "description": "Denies the remove command without any pre-configured scope.", 842 "type": "string", 843 - "const": "core:menu:deny-remove" 844 }, 845 { 846 "description": "Denies the remove_at command without any pre-configured scope.", 847 "type": "string", 848 - "const": "core:menu:deny-remove-at" 849 }, 850 { 851 "description": "Denies the set_accelerator command without any pre-configured scope.", 852 "type": "string", 853 - "const": "core:menu:deny-set-accelerator" 854 }, 855 { 856 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 857 "type": "string", 858 - "const": "core:menu:deny-set-as-app-menu" 859 }, 860 { 861 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 862 "type": "string", 863 - "const": "core:menu:deny-set-as-help-menu-for-nsapp" 864 }, 865 { 866 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 867 "type": "string", 868 - "const": "core:menu:deny-set-as-window-menu" 869 }, 870 { 871 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 872 "type": "string", 873 - "const": "core:menu:deny-set-as-windows-menu-for-nsapp" 874 }, 875 { 876 "description": "Denies the set_checked command without any pre-configured scope.", 877 "type": "string", 878 - "const": "core:menu:deny-set-checked" 879 }, 880 { 881 "description": "Denies the set_enabled command without any pre-configured scope.", 882 "type": "string", 883 - "const": "core:menu:deny-set-enabled" 884 }, 885 { 886 "description": "Denies the set_icon command without any pre-configured scope.", 887 "type": "string", 888 - "const": "core:menu:deny-set-icon" 889 }, 890 { 891 "description": "Denies the set_text command without any pre-configured scope.", 892 "type": "string", 893 - "const": "core:menu:deny-set-text" 894 }, 895 { 896 "description": "Denies the text command without any pre-configured scope.", 897 "type": "string", 898 - "const": "core:menu:deny-text" 899 }, 900 { 901 - "description": "Default permissions for the plugin.", 902 "type": "string", 903 - "const": "core:path:default" 904 }, 905 { 906 "description": "Enables the basename command without any pre-configured scope.", 907 "type": "string", 908 - "const": "core:path:allow-basename" 909 }, 910 { 911 "description": "Enables the dirname command without any pre-configured scope.", 912 "type": "string", 913 - "const": "core:path:allow-dirname" 914 }, 915 { 916 "description": "Enables the extname command without any pre-configured scope.", 917 "type": "string", 918 - "const": "core:path:allow-extname" 919 }, 920 { 921 "description": "Enables the is_absolute command without any pre-configured scope.", 922 "type": "string", 923 - "const": "core:path:allow-is-absolute" 924 }, 925 { 926 "description": "Enables the join command without any pre-configured scope.", 927 "type": "string", 928 - "const": "core:path:allow-join" 929 }, 930 { 931 "description": "Enables the normalize command without any pre-configured scope.", 932 "type": "string", 933 - "const": "core:path:allow-normalize" 934 }, 935 { 936 "description": "Enables the resolve command without any pre-configured scope.", 937 "type": "string", 938 - "const": "core:path:allow-resolve" 939 }, 940 { 941 "description": "Enables the resolve_directory command without any pre-configured scope.", 942 "type": "string", 943 - "const": "core:path:allow-resolve-directory" 944 }, 945 { 946 "description": "Denies the basename command without any pre-configured scope.", 947 "type": "string", 948 - "const": "core:path:deny-basename" 949 }, 950 { 951 "description": "Denies the dirname command without any pre-configured scope.", 952 "type": "string", 953 - "const": "core:path:deny-dirname" 954 }, 955 { 956 "description": "Denies the extname command without any pre-configured scope.", 957 "type": "string", 958 - "const": "core:path:deny-extname" 959 }, 960 { 961 "description": "Denies the is_absolute command without any pre-configured scope.", 962 "type": "string", 963 - "const": "core:path:deny-is-absolute" 964 }, 965 { 966 "description": "Denies the join command without any pre-configured scope.", 967 "type": "string", 968 - "const": "core:path:deny-join" 969 }, 970 { 971 "description": "Denies the normalize command without any pre-configured scope.", 972 "type": "string", 973 - "const": "core:path:deny-normalize" 974 }, 975 { 976 "description": "Denies the resolve command without any pre-configured scope.", 977 "type": "string", 978 - "const": "core:path:deny-resolve" 979 }, 980 { 981 "description": "Denies the resolve_directory command without any pre-configured scope.", 982 "type": "string", 983 - "const": "core:path:deny-resolve-directory" 984 }, 985 { 986 - "description": "Default permissions for the plugin.", 987 "type": "string", 988 - "const": "core:resources:default" 989 }, 990 { 991 "description": "Enables the close command without any pre-configured scope.", 992 "type": "string", 993 - "const": "core:resources:allow-close" 994 }, 995 { 996 "description": "Denies the close command without any pre-configured scope.", 997 "type": "string", 998 - "const": "core:resources:deny-close" 999 }, 1000 { 1001 - "description": "Default permissions for the plugin.", 1002 "type": "string", 1003 - "const": "core:tray:default" 1004 }, 1005 { 1006 "description": "Enables the get_by_id command without any pre-configured scope.", 1007 "type": "string", 1008 - "const": "core:tray:allow-get-by-id" 1009 }, 1010 { 1011 "description": "Enables the new command without any pre-configured scope.", 1012 "type": "string", 1013 - "const": "core:tray:allow-new" 1014 }, 1015 { 1016 "description": "Enables the remove_by_id command without any pre-configured scope.", 1017 "type": "string", 1018 - "const": "core:tray:allow-remove-by-id" 1019 }, 1020 { 1021 "description": "Enables the set_icon command without any pre-configured scope.", 1022 "type": "string", 1023 - "const": "core:tray:allow-set-icon" 1024 }, 1025 { 1026 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1027 "type": "string", 1028 - "const": "core:tray:allow-set-icon-as-template" 1029 }, 1030 { 1031 "description": "Enables the set_menu command without any pre-configured scope.", 1032 "type": "string", 1033 - "const": "core:tray:allow-set-menu" 1034 }, 1035 { 1036 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1037 "type": "string", 1038 - "const": "core:tray:allow-set-show-menu-on-left-click" 1039 }, 1040 { 1041 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1042 "type": "string", 1043 - "const": "core:tray:allow-set-temp-dir-path" 1044 }, 1045 { 1046 "description": "Enables the set_title command without any pre-configured scope.", 1047 "type": "string", 1048 - "const": "core:tray:allow-set-title" 1049 }, 1050 { 1051 "description": "Enables the set_tooltip command without any pre-configured scope.", 1052 "type": "string", 1053 - "const": "core:tray:allow-set-tooltip" 1054 }, 1055 { 1056 "description": "Enables the set_visible command without any pre-configured scope.", 1057 "type": "string", 1058 - "const": "core:tray:allow-set-visible" 1059 }, 1060 { 1061 "description": "Denies the get_by_id command without any pre-configured scope.", 1062 "type": "string", 1063 - "const": "core:tray:deny-get-by-id" 1064 }, 1065 { 1066 "description": "Denies the new command without any pre-configured scope.", 1067 "type": "string", 1068 - "const": "core:tray:deny-new" 1069 }, 1070 { 1071 "description": "Denies the remove_by_id command without any pre-configured scope.", 1072 "type": "string", 1073 - "const": "core:tray:deny-remove-by-id" 1074 }, 1075 { 1076 "description": "Denies the set_icon command without any pre-configured scope.", 1077 "type": "string", 1078 - "const": "core:tray:deny-set-icon" 1079 }, 1080 { 1081 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1082 "type": "string", 1083 - "const": "core:tray:deny-set-icon-as-template" 1084 }, 1085 { 1086 "description": "Denies the set_menu command without any pre-configured scope.", 1087 "type": "string", 1088 - "const": "core:tray:deny-set-menu" 1089 }, 1090 { 1091 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1092 "type": "string", 1093 - "const": "core:tray:deny-set-show-menu-on-left-click" 1094 }, 1095 { 1096 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1097 "type": "string", 1098 - "const": "core:tray:deny-set-temp-dir-path" 1099 }, 1100 { 1101 "description": "Denies the set_title command without any pre-configured scope.", 1102 "type": "string", 1103 - "const": "core:tray:deny-set-title" 1104 }, 1105 { 1106 "description": "Denies the set_tooltip command without any pre-configured scope.", 1107 "type": "string", 1108 - "const": "core:tray:deny-set-tooltip" 1109 }, 1110 { 1111 "description": "Denies the set_visible command without any pre-configured scope.", 1112 "type": "string", 1113 - "const": "core:tray:deny-set-visible" 1114 }, 1115 { 1116 - "description": "Default permissions for the plugin.", 1117 "type": "string", 1118 - "const": "core:webview:default" 1119 }, 1120 { 1121 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1122 "type": "string", 1123 - "const": "core:webview:allow-clear-all-browsing-data" 1124 }, 1125 { 1126 "description": "Enables the create_webview command without any pre-configured scope.", 1127 "type": "string", 1128 - "const": "core:webview:allow-create-webview" 1129 }, 1130 { 1131 "description": "Enables the create_webview_window command without any pre-configured scope.", 1132 "type": "string", 1133 - "const": "core:webview:allow-create-webview-window" 1134 }, 1135 { 1136 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1137 "type": "string", 1138 - "const": "core:webview:allow-get-all-webviews" 1139 }, 1140 { 1141 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1142 "type": "string", 1143 - "const": "core:webview:allow-internal-toggle-devtools" 1144 }, 1145 { 1146 "description": "Enables the print command without any pre-configured scope.", 1147 "type": "string", 1148 - "const": "core:webview:allow-print" 1149 }, 1150 { 1151 "description": "Enables the reparent command without any pre-configured scope.", 1152 "type": "string", 1153 - "const": "core:webview:allow-reparent" 1154 }, 1155 { 1156 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1157 "type": "string", 1158 - "const": "core:webview:allow-set-webview-focus" 1159 }, 1160 { 1161 "description": "Enables the set_webview_position command without any pre-configured scope.", 1162 "type": "string", 1163 - "const": "core:webview:allow-set-webview-position" 1164 }, 1165 { 1166 "description": "Enables the set_webview_size command without any pre-configured scope.", 1167 "type": "string", 1168 - "const": "core:webview:allow-set-webview-size" 1169 }, 1170 { 1171 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1172 "type": "string", 1173 - "const": "core:webview:allow-set-webview-zoom" 1174 }, 1175 { 1176 "description": "Enables the webview_close command without any pre-configured scope.", 1177 "type": "string", 1178 - "const": "core:webview:allow-webview-close" 1179 }, 1180 { 1181 "description": "Enables the webview_hide command without any pre-configured scope.", 1182 "type": "string", 1183 - "const": "core:webview:allow-webview-hide" 1184 }, 1185 { 1186 "description": "Enables the webview_position command without any pre-configured scope.", 1187 "type": "string", 1188 - "const": "core:webview:allow-webview-position" 1189 }, 1190 { 1191 "description": "Enables the webview_show command without any pre-configured scope.", 1192 "type": "string", 1193 - "const": "core:webview:allow-webview-show" 1194 }, 1195 { 1196 "description": "Enables the webview_size command without any pre-configured scope.", 1197 "type": "string", 1198 - "const": "core:webview:allow-webview-size" 1199 }, 1200 { 1201 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1202 "type": "string", 1203 - "const": "core:webview:deny-clear-all-browsing-data" 1204 }, 1205 { 1206 "description": "Denies the create_webview command without any pre-configured scope.", 1207 "type": "string", 1208 - "const": "core:webview:deny-create-webview" 1209 }, 1210 { 1211 "description": "Denies the create_webview_window command without any pre-configured scope.", 1212 "type": "string", 1213 - "const": "core:webview:deny-create-webview-window" 1214 }, 1215 { 1216 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1217 "type": "string", 1218 - "const": "core:webview:deny-get-all-webviews" 1219 }, 1220 { 1221 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1222 "type": "string", 1223 - "const": "core:webview:deny-internal-toggle-devtools" 1224 }, 1225 { 1226 "description": "Denies the print command without any pre-configured scope.", 1227 "type": "string", 1228 - "const": "core:webview:deny-print" 1229 }, 1230 { 1231 "description": "Denies the reparent command without any pre-configured scope.", 1232 "type": "string", 1233 - "const": "core:webview:deny-reparent" 1234 }, 1235 { 1236 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1237 "type": "string", 1238 - "const": "core:webview:deny-set-webview-focus" 1239 }, 1240 { 1241 "description": "Denies the set_webview_position command without any pre-configured scope.", 1242 "type": "string", 1243 - "const": "core:webview:deny-set-webview-position" 1244 }, 1245 { 1246 "description": "Denies the set_webview_size command without any pre-configured scope.", 1247 "type": "string", 1248 - "const": "core:webview:deny-set-webview-size" 1249 }, 1250 { 1251 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1252 "type": "string", 1253 - "const": "core:webview:deny-set-webview-zoom" 1254 }, 1255 { 1256 "description": "Denies the webview_close command without any pre-configured scope.", 1257 "type": "string", 1258 - "const": "core:webview:deny-webview-close" 1259 }, 1260 { 1261 "description": "Denies the webview_hide command without any pre-configured scope.", 1262 "type": "string", 1263 - "const": "core:webview:deny-webview-hide" 1264 }, 1265 { 1266 "description": "Denies the webview_position command without any pre-configured scope.", 1267 "type": "string", 1268 - "const": "core:webview:deny-webview-position" 1269 }, 1270 { 1271 "description": "Denies the webview_show command without any pre-configured scope.", 1272 "type": "string", 1273 - "const": "core:webview:deny-webview-show" 1274 }, 1275 { 1276 "description": "Denies the webview_size command without any pre-configured scope.", 1277 "type": "string", 1278 - "const": "core:webview:deny-webview-size" 1279 }, 1280 { 1281 - "description": "Default permissions for the plugin.", 1282 "type": "string", 1283 - "const": "core:window:default" 1284 }, 1285 { 1286 "description": "Enables the available_monitors command without any pre-configured scope.", 1287 "type": "string", 1288 - "const": "core:window:allow-available-monitors" 1289 }, 1290 { 1291 "description": "Enables the center command without any pre-configured scope.", 1292 "type": "string", 1293 - "const": "core:window:allow-center" 1294 }, 1295 { 1296 "description": "Enables the close command without any pre-configured scope.", 1297 "type": "string", 1298 - "const": "core:window:allow-close" 1299 }, 1300 { 1301 "description": "Enables the create command without any pre-configured scope.", 1302 "type": "string", 1303 - "const": "core:window:allow-create" 1304 }, 1305 { 1306 "description": "Enables the current_monitor command without any pre-configured scope.", 1307 "type": "string", 1308 - "const": "core:window:allow-current-monitor" 1309 }, 1310 { 1311 "description": "Enables the cursor_position command without any pre-configured scope.", 1312 "type": "string", 1313 - "const": "core:window:allow-cursor-position" 1314 }, 1315 { 1316 "description": "Enables the destroy command without any pre-configured scope.", 1317 "type": "string", 1318 - "const": "core:window:allow-destroy" 1319 }, 1320 { 1321 "description": "Enables the get_all_windows command without any pre-configured scope.", 1322 "type": "string", 1323 - "const": "core:window:allow-get-all-windows" 1324 }, 1325 { 1326 "description": "Enables the hide command without any pre-configured scope.", 1327 "type": "string", 1328 - "const": "core:window:allow-hide" 1329 }, 1330 { 1331 "description": "Enables the inner_position command without any pre-configured scope.", 1332 "type": "string", 1333 - "const": "core:window:allow-inner-position" 1334 }, 1335 { 1336 "description": "Enables the inner_size command without any pre-configured scope.", 1337 "type": "string", 1338 - "const": "core:window:allow-inner-size" 1339 }, 1340 { 1341 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1342 "type": "string", 1343 - "const": "core:window:allow-internal-toggle-maximize" 1344 }, 1345 { 1346 "description": "Enables the is_closable command without any pre-configured scope.", 1347 "type": "string", 1348 - "const": "core:window:allow-is-closable" 1349 }, 1350 { 1351 "description": "Enables the is_decorated command without any pre-configured scope.", 1352 "type": "string", 1353 - "const": "core:window:allow-is-decorated" 1354 }, 1355 { 1356 "description": "Enables the is_enabled command without any pre-configured scope.", 1357 "type": "string", 1358 - "const": "core:window:allow-is-enabled" 1359 }, 1360 { 1361 "description": "Enables the is_focused command without any pre-configured scope.", 1362 "type": "string", 1363 - "const": "core:window:allow-is-focused" 1364 }, 1365 { 1366 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1367 "type": "string", 1368 - "const": "core:window:allow-is-fullscreen" 1369 }, 1370 { 1371 "description": "Enables the is_maximizable command without any pre-configured scope.", 1372 "type": "string", 1373 - "const": "core:window:allow-is-maximizable" 1374 }, 1375 { 1376 "description": "Enables the is_maximized command without any pre-configured scope.", 1377 "type": "string", 1378 - "const": "core:window:allow-is-maximized" 1379 }, 1380 { 1381 "description": "Enables the is_minimizable command without any pre-configured scope.", 1382 "type": "string", 1383 - "const": "core:window:allow-is-minimizable" 1384 }, 1385 { 1386 "description": "Enables the is_minimized command without any pre-configured scope.", 1387 "type": "string", 1388 - "const": "core:window:allow-is-minimized" 1389 }, 1390 { 1391 "description": "Enables the is_resizable command without any pre-configured scope.", 1392 "type": "string", 1393 - "const": "core:window:allow-is-resizable" 1394 }, 1395 { 1396 "description": "Enables the is_visible command without any pre-configured scope.", 1397 "type": "string", 1398 - "const": "core:window:allow-is-visible" 1399 }, 1400 { 1401 "description": "Enables the maximize command without any pre-configured scope.", 1402 "type": "string", 1403 - "const": "core:window:allow-maximize" 1404 }, 1405 { 1406 "description": "Enables the minimize command without any pre-configured scope.", 1407 "type": "string", 1408 - "const": "core:window:allow-minimize" 1409 }, 1410 { 1411 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1412 "type": "string", 1413 - "const": "core:window:allow-monitor-from-point" 1414 }, 1415 { 1416 "description": "Enables the outer_position command without any pre-configured scope.", 1417 "type": "string", 1418 - "const": "core:window:allow-outer-position" 1419 }, 1420 { 1421 "description": "Enables the outer_size command without any pre-configured scope.", 1422 "type": "string", 1423 - "const": "core:window:allow-outer-size" 1424 }, 1425 { 1426 "description": "Enables the primary_monitor command without any pre-configured scope.", 1427 "type": "string", 1428 - "const": "core:window:allow-primary-monitor" 1429 }, 1430 { 1431 "description": "Enables the request_user_attention command without any pre-configured scope.", 1432 "type": "string", 1433 - "const": "core:window:allow-request-user-attention" 1434 }, 1435 { 1436 "description": "Enables the scale_factor command without any pre-configured scope.", 1437 "type": "string", 1438 - "const": "core:window:allow-scale-factor" 1439 }, 1440 { 1441 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1442 "type": "string", 1443 - "const": "core:window:allow-set-always-on-bottom" 1444 }, 1445 { 1446 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1447 "type": "string", 1448 - "const": "core:window:allow-set-always-on-top" 1449 }, 1450 { 1451 "description": "Enables the set_closable command without any pre-configured scope.", 1452 "type": "string", 1453 - "const": "core:window:allow-set-closable" 1454 }, 1455 { 1456 "description": "Enables the set_content_protected command without any pre-configured scope.", 1457 "type": "string", 1458 - "const": "core:window:allow-set-content-protected" 1459 }, 1460 { 1461 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1462 "type": "string", 1463 - "const": "core:window:allow-set-cursor-grab" 1464 }, 1465 { 1466 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1467 "type": "string", 1468 - "const": "core:window:allow-set-cursor-icon" 1469 }, 1470 { 1471 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1472 "type": "string", 1473 - "const": "core:window:allow-set-cursor-position" 1474 }, 1475 { 1476 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1477 "type": "string", 1478 - "const": "core:window:allow-set-cursor-visible" 1479 }, 1480 { 1481 "description": "Enables the set_decorations command without any pre-configured scope.", 1482 "type": "string", 1483 - "const": "core:window:allow-set-decorations" 1484 }, 1485 { 1486 "description": "Enables the set_effects command without any pre-configured scope.", 1487 "type": "string", 1488 - "const": "core:window:allow-set-effects" 1489 }, 1490 { 1491 "description": "Enables the set_enabled command without any pre-configured scope.", 1492 "type": "string", 1493 - "const": "core:window:allow-set-enabled" 1494 }, 1495 { 1496 "description": "Enables the set_focus command without any pre-configured scope.", 1497 "type": "string", 1498 - "const": "core:window:allow-set-focus" 1499 }, 1500 { 1501 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1502 "type": "string", 1503 - "const": "core:window:allow-set-fullscreen" 1504 }, 1505 { 1506 "description": "Enables the set_icon command without any pre-configured scope.", 1507 "type": "string", 1508 - "const": "core:window:allow-set-icon" 1509 }, 1510 { 1511 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1512 "type": "string", 1513 - "const": "core:window:allow-set-ignore-cursor-events" 1514 }, 1515 { 1516 "description": "Enables the set_max_size command without any pre-configured scope.", 1517 "type": "string", 1518 - "const": "core:window:allow-set-max-size" 1519 }, 1520 { 1521 "description": "Enables the set_maximizable command without any pre-configured scope.", 1522 "type": "string", 1523 - "const": "core:window:allow-set-maximizable" 1524 }, 1525 { 1526 "description": "Enables the set_min_size command without any pre-configured scope.", 1527 "type": "string", 1528 - "const": "core:window:allow-set-min-size" 1529 }, 1530 { 1531 "description": "Enables the set_minimizable command without any pre-configured scope.", 1532 "type": "string", 1533 - "const": "core:window:allow-set-minimizable" 1534 }, 1535 { 1536 "description": "Enables the set_position command without any pre-configured scope.", 1537 "type": "string", 1538 - "const": "core:window:allow-set-position" 1539 }, 1540 { 1541 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1542 "type": "string", 1543 - "const": "core:window:allow-set-progress-bar" 1544 }, 1545 { 1546 "description": "Enables the set_resizable command without any pre-configured scope.", 1547 "type": "string", 1548 - "const": "core:window:allow-set-resizable" 1549 }, 1550 { 1551 "description": "Enables the set_shadow command without any pre-configured scope.", 1552 "type": "string", 1553 - "const": "core:window:allow-set-shadow" 1554 }, 1555 { 1556 "description": "Enables the set_size command without any pre-configured scope.", 1557 "type": "string", 1558 - "const": "core:window:allow-set-size" 1559 }, 1560 { 1561 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1562 "type": "string", 1563 - "const": "core:window:allow-set-size-constraints" 1564 }, 1565 { 1566 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1567 "type": "string", 1568 - "const": "core:window:allow-set-skip-taskbar" 1569 }, 1570 { 1571 "description": "Enables the set_theme command without any pre-configured scope.", 1572 "type": "string", 1573 - "const": "core:window:allow-set-theme" 1574 }, 1575 { 1576 "description": "Enables the set_title command without any pre-configured scope.", 1577 "type": "string", 1578 - "const": "core:window:allow-set-title" 1579 }, 1580 { 1581 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1582 "type": "string", 1583 - "const": "core:window:allow-set-title-bar-style" 1584 }, 1585 { 1586 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1587 "type": "string", 1588 - "const": "core:window:allow-set-visible-on-all-workspaces" 1589 }, 1590 { 1591 "description": "Enables the show command without any pre-configured scope.", 1592 "type": "string", 1593 - "const": "core:window:allow-show" 1594 }, 1595 { 1596 "description": "Enables the start_dragging command without any pre-configured scope.", 1597 "type": "string", 1598 - "const": "core:window:allow-start-dragging" 1599 }, 1600 { 1601 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1602 "type": "string", 1603 - "const": "core:window:allow-start-resize-dragging" 1604 }, 1605 { 1606 "description": "Enables the theme command without any pre-configured scope.", 1607 "type": "string", 1608 - "const": "core:window:allow-theme" 1609 }, 1610 { 1611 "description": "Enables the title command without any pre-configured scope.", 1612 "type": "string", 1613 - "const": "core:window:allow-title" 1614 }, 1615 { 1616 "description": "Enables the toggle_maximize command without any pre-configured scope.", 1617 "type": "string", 1618 - "const": "core:window:allow-toggle-maximize" 1619 }, 1620 { 1621 "description": "Enables the unmaximize command without any pre-configured scope.", 1622 "type": "string", 1623 - "const": "core:window:allow-unmaximize" 1624 }, 1625 { 1626 "description": "Enables the unminimize command without any pre-configured scope.", 1627 "type": "string", 1628 - "const": "core:window:allow-unminimize" 1629 }, 1630 { 1631 "description": "Denies the available_monitors command without any pre-configured scope.", 1632 "type": "string", 1633 - "const": "core:window:deny-available-monitors" 1634 }, 1635 { 1636 "description": "Denies the center command without any pre-configured scope.", 1637 "type": "string", 1638 - "const": "core:window:deny-center" 1639 }, 1640 { 1641 "description": "Denies the close command without any pre-configured scope.", 1642 "type": "string", 1643 - "const": "core:window:deny-close" 1644 }, 1645 { 1646 "description": "Denies the create command without any pre-configured scope.", 1647 "type": "string", 1648 - "const": "core:window:deny-create" 1649 }, 1650 { 1651 "description": "Denies the current_monitor command without any pre-configured scope.", 1652 "type": "string", 1653 - "const": "core:window:deny-current-monitor" 1654 }, 1655 { 1656 "description": "Denies the cursor_position command without any pre-configured scope.", 1657 "type": "string", 1658 - "const": "core:window:deny-cursor-position" 1659 }, 1660 { 1661 "description": "Denies the destroy command without any pre-configured scope.", 1662 "type": "string", 1663 - "const": "core:window:deny-destroy" 1664 }, 1665 { 1666 "description": "Denies the get_all_windows command without any pre-configured scope.", 1667 "type": "string", 1668 - "const": "core:window:deny-get-all-windows" 1669 }, 1670 { 1671 "description": "Denies the hide command without any pre-configured scope.", 1672 "type": "string", 1673 - "const": "core:window:deny-hide" 1674 }, 1675 { 1676 "description": "Denies the inner_position command without any pre-configured scope.", 1677 "type": "string", 1678 - "const": "core:window:deny-inner-position" 1679 }, 1680 { 1681 "description": "Denies the inner_size command without any pre-configured scope.", 1682 "type": "string", 1683 - "const": "core:window:deny-inner-size" 1684 }, 1685 { 1686 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 1687 "type": "string", 1688 - "const": "core:window:deny-internal-toggle-maximize" 1689 }, 1690 { 1691 "description": "Denies the is_closable command without any pre-configured scope.", 1692 "type": "string", 1693 - "const": "core:window:deny-is-closable" 1694 }, 1695 { 1696 "description": "Denies the is_decorated command without any pre-configured scope.", 1697 "type": "string", 1698 - "const": "core:window:deny-is-decorated" 1699 }, 1700 { 1701 "description": "Denies the is_enabled command without any pre-configured scope.", 1702 "type": "string", 1703 - "const": "core:window:deny-is-enabled" 1704 }, 1705 { 1706 "description": "Denies the is_focused command without any pre-configured scope.", 1707 "type": "string", 1708 - "const": "core:window:deny-is-focused" 1709 }, 1710 { 1711 "description": "Denies the is_fullscreen command without any pre-configured scope.", 1712 "type": "string", 1713 - "const": "core:window:deny-is-fullscreen" 1714 }, 1715 { 1716 "description": "Denies the is_maximizable command without any pre-configured scope.", 1717 "type": "string", 1718 - "const": "core:window:deny-is-maximizable" 1719 }, 1720 { 1721 "description": "Denies the is_maximized command without any pre-configured scope.", 1722 "type": "string", 1723 - "const": "core:window:deny-is-maximized" 1724 }, 1725 { 1726 "description": "Denies the is_minimizable command without any pre-configured scope.", 1727 "type": "string", 1728 - "const": "core:window:deny-is-minimizable" 1729 }, 1730 { 1731 "description": "Denies the is_minimized command without any pre-configured scope.", 1732 "type": "string", 1733 - "const": "core:window:deny-is-minimized" 1734 }, 1735 { 1736 "description": "Denies the is_resizable command without any pre-configured scope.", 1737 "type": "string", 1738 - "const": "core:window:deny-is-resizable" 1739 }, 1740 { 1741 "description": "Denies the is_visible command without any pre-configured scope.", 1742 "type": "string", 1743 - "const": "core:window:deny-is-visible" 1744 }, 1745 { 1746 "description": "Denies the maximize command without any pre-configured scope.", 1747 "type": "string", 1748 - "const": "core:window:deny-maximize" 1749 }, 1750 { 1751 "description": "Denies the minimize command without any pre-configured scope.", 1752 "type": "string", 1753 - "const": "core:window:deny-minimize" 1754 }, 1755 { 1756 "description": "Denies the monitor_from_point command without any pre-configured scope.", 1757 "type": "string", 1758 - "const": "core:window:deny-monitor-from-point" 1759 }, 1760 { 1761 "description": "Denies the outer_position command without any pre-configured scope.", 1762 "type": "string", 1763 - "const": "core:window:deny-outer-position" 1764 }, 1765 { 1766 "description": "Denies the outer_size command without any pre-configured scope.", 1767 "type": "string", 1768 - "const": "core:window:deny-outer-size" 1769 }, 1770 { 1771 "description": "Denies the primary_monitor command without any pre-configured scope.", 1772 "type": "string", 1773 - "const": "core:window:deny-primary-monitor" 1774 }, 1775 { 1776 "description": "Denies the request_user_attention command without any pre-configured scope.", 1777 "type": "string", 1778 - "const": "core:window:deny-request-user-attention" 1779 }, 1780 { 1781 "description": "Denies the scale_factor command without any pre-configured scope.", 1782 "type": "string", 1783 - "const": "core:window:deny-scale-factor" 1784 }, 1785 { 1786 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 1787 "type": "string", 1788 - "const": "core:window:deny-set-always-on-bottom" 1789 }, 1790 { 1791 "description": "Denies the set_always_on_top command without any pre-configured scope.", 1792 "type": "string", 1793 - "const": "core:window:deny-set-always-on-top" 1794 }, 1795 { 1796 "description": "Denies the set_closable command without any pre-configured scope.", 1797 "type": "string", 1798 - "const": "core:window:deny-set-closable" 1799 }, 1800 { 1801 "description": "Denies the set_content_protected command without any pre-configured scope.", 1802 "type": "string", 1803 - "const": "core:window:deny-set-content-protected" 1804 }, 1805 { 1806 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 1807 "type": "string", 1808 - "const": "core:window:deny-set-cursor-grab" 1809 }, 1810 { 1811 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 1812 "type": "string", 1813 - "const": "core:window:deny-set-cursor-icon" 1814 }, 1815 { 1816 "description": "Denies the set_cursor_position command without any pre-configured scope.", 1817 "type": "string", 1818 - "const": "core:window:deny-set-cursor-position" 1819 }, 1820 { 1821 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 1822 "type": "string", 1823 - "const": "core:window:deny-set-cursor-visible" 1824 }, 1825 { 1826 "description": "Denies the set_decorations command without any pre-configured scope.", 1827 "type": "string", 1828 - "const": "core:window:deny-set-decorations" 1829 }, 1830 { 1831 "description": "Denies the set_effects command without any pre-configured scope.", 1832 "type": "string", 1833 - "const": "core:window:deny-set-effects" 1834 }, 1835 { 1836 "description": "Denies the set_enabled command without any pre-configured scope.", 1837 "type": "string", 1838 - "const": "core:window:deny-set-enabled" 1839 }, 1840 { 1841 "description": "Denies the set_focus command without any pre-configured scope.", 1842 "type": "string", 1843 - "const": "core:window:deny-set-focus" 1844 }, 1845 { 1846 "description": "Denies the set_fullscreen command without any pre-configured scope.", 1847 "type": "string", 1848 - "const": "core:window:deny-set-fullscreen" 1849 }, 1850 { 1851 "description": "Denies the set_icon command without any pre-configured scope.", 1852 "type": "string", 1853 - "const": "core:window:deny-set-icon" 1854 }, 1855 { 1856 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 1857 "type": "string", 1858 - "const": "core:window:deny-set-ignore-cursor-events" 1859 }, 1860 { 1861 "description": "Denies the set_max_size command without any pre-configured scope.", 1862 "type": "string", 1863 - "const": "core:window:deny-set-max-size" 1864 }, 1865 { 1866 "description": "Denies the set_maximizable command without any pre-configured scope.", 1867 "type": "string", 1868 - "const": "core:window:deny-set-maximizable" 1869 }, 1870 { 1871 "description": "Denies the set_min_size command without any pre-configured scope.", 1872 "type": "string", 1873 - "const": "core:window:deny-set-min-size" 1874 }, 1875 { 1876 "description": "Denies the set_minimizable command without any pre-configured scope.", 1877 "type": "string", 1878 - "const": "core:window:deny-set-minimizable" 1879 }, 1880 { 1881 "description": "Denies the set_position command without any pre-configured scope.", 1882 "type": "string", 1883 - "const": "core:window:deny-set-position" 1884 }, 1885 { 1886 "description": "Denies the set_progress_bar command without any pre-configured scope.", 1887 "type": "string", 1888 - "const": "core:window:deny-set-progress-bar" 1889 }, 1890 { 1891 "description": "Denies the set_resizable command without any pre-configured scope.", 1892 "type": "string", 1893 - "const": "core:window:deny-set-resizable" 1894 }, 1895 { 1896 "description": "Denies the set_shadow command without any pre-configured scope.", 1897 "type": "string", 1898 - "const": "core:window:deny-set-shadow" 1899 }, 1900 { 1901 "description": "Denies the set_size command without any pre-configured scope.", 1902 "type": "string", 1903 - "const": "core:window:deny-set-size" 1904 }, 1905 { 1906 "description": "Denies the set_size_constraints command without any pre-configured scope.", 1907 "type": "string", 1908 - "const": "core:window:deny-set-size-constraints" 1909 }, 1910 { 1911 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 1912 "type": "string", 1913 - "const": "core:window:deny-set-skip-taskbar" 1914 }, 1915 { 1916 "description": "Denies the set_theme command without any pre-configured scope.", 1917 "type": "string", 1918 - "const": "core:window:deny-set-theme" 1919 }, 1920 { 1921 "description": "Denies the set_title command without any pre-configured scope.", 1922 "type": "string", 1923 - "const": "core:window:deny-set-title" 1924 }, 1925 { 1926 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 1927 "type": "string", 1928 - "const": "core:window:deny-set-title-bar-style" 1929 }, 1930 { 1931 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 1932 "type": "string", 1933 - "const": "core:window:deny-set-visible-on-all-workspaces" 1934 }, 1935 { 1936 "description": "Denies the show command without any pre-configured scope.", 1937 "type": "string", 1938 - "const": "core:window:deny-show" 1939 }, 1940 { 1941 "description": "Denies the start_dragging command without any pre-configured scope.", 1942 "type": "string", 1943 - "const": "core:window:deny-start-dragging" 1944 }, 1945 { 1946 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 1947 "type": "string", 1948 - "const": "core:window:deny-start-resize-dragging" 1949 }, 1950 { 1951 "description": "Denies the theme command without any pre-configured scope.", 1952 "type": "string", 1953 - "const": "core:window:deny-theme" 1954 }, 1955 { 1956 "description": "Denies the title command without any pre-configured scope.", 1957 "type": "string", 1958 - "const": "core:window:deny-title" 1959 }, 1960 { 1961 "description": "Denies the toggle_maximize command without any pre-configured scope.", 1962 "type": "string", 1963 - "const": "core:window:deny-toggle-maximize" 1964 }, 1965 { 1966 "description": "Denies the unmaximize command without any pre-configured scope.", 1967 "type": "string", 1968 - "const": "core:window:deny-unmaximize" 1969 }, 1970 { 1971 "description": "Denies the unminimize command without any pre-configured scope.", 1972 "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" 2019 }, 2020 { 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", 2022 "type": "string", 2023 - "const": "http:default" 2024 }, 2025 { 2026 "description": "Enables the fetch command without any pre-configured scope.", 2027 "type": "string", 2028 - "const": "http:allow-fetch" 2029 }, 2030 { 2031 "description": "Enables the fetch_cancel command without any pre-configured scope.", 2032 "type": "string", 2033 - "const": "http:allow-fetch-cancel" 2034 }, 2035 { 2036 "description": "Enables the fetch_read_body command without any pre-configured scope.", 2037 "type": "string", 2038 - "const": "http:allow-fetch-read-body" 2039 }, 2040 { 2041 "description": "Enables the fetch_send command without any pre-configured scope.", 2042 "type": "string", 2043 - "const": "http:allow-fetch-send" 2044 }, 2045 { 2046 "description": "Denies the fetch command without any pre-configured scope.", 2047 "type": "string", 2048 - "const": "http:deny-fetch" 2049 }, 2050 { 2051 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2052 "type": "string", 2053 - "const": "http:deny-fetch-cancel" 2054 }, 2055 { 2056 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2057 "type": "string", 2058 - "const": "http:deny-fetch-read-body" 2059 }, 2060 { 2061 "description": "Denies the fetch_send command without any pre-configured scope.", 2062 "type": "string", 2063 - "const": "http:deny-fetch-send" 2064 }, 2065 { 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", 2067 "type": "string", 2068 - "const": "process:default" 2069 }, 2070 { 2071 "description": "Enables the exit command without any pre-configured scope.", 2072 "type": "string", 2073 - "const": "process:allow-exit" 2074 }, 2075 { 2076 "description": "Enables the restart command without any pre-configured scope.", 2077 "type": "string", 2078 - "const": "process:allow-restart" 2079 }, 2080 { 2081 "description": "Denies the exit command without any pre-configured scope.", 2082 "type": "string", 2083 - "const": "process:deny-exit" 2084 }, 2085 { 2086 "description": "Denies the restart command without any pre-configured scope.", 2087 "type": "string", 2088 - "const": "process:deny-restart" 2089 }, 2090 { 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", 2092 "type": "string", 2093 - "const": "shell:default" 2094 }, 2095 { 2096 "description": "Enables the execute command without any pre-configured scope.", 2097 "type": "string", 2098 - "const": "shell:allow-execute" 2099 }, 2100 { 2101 "description": "Enables the kill command without any pre-configured scope.", 2102 "type": "string", 2103 - "const": "shell:allow-kill" 2104 }, 2105 { 2106 "description": "Enables the open command without any pre-configured scope.", 2107 "type": "string", 2108 - "const": "shell:allow-open" 2109 }, 2110 { 2111 "description": "Enables the spawn command without any pre-configured scope.", 2112 "type": "string", 2113 - "const": "shell:allow-spawn" 2114 }, 2115 { 2116 "description": "Enables the stdin_write command without any pre-configured scope.", 2117 "type": "string", 2118 - "const": "shell:allow-stdin-write" 2119 }, 2120 { 2121 "description": "Denies the execute command without any pre-configured scope.", 2122 "type": "string", 2123 - "const": "shell:deny-execute" 2124 }, 2125 { 2126 "description": "Denies the kill command without any pre-configured scope.", 2127 "type": "string", 2128 - "const": "shell:deny-kill" 2129 }, 2130 { 2131 "description": "Denies the open command without any pre-configured scope.", 2132 "type": "string", 2133 - "const": "shell:deny-open" 2134 }, 2135 { 2136 "description": "Denies the spawn command without any pre-configured scope.", 2137 "type": "string", 2138 - "const": "shell:deny-spawn" 2139 }, 2140 { 2141 "description": "Denies the stdin_write command without any pre-configured scope.", 2142 "type": "string", 2143 - "const": "shell:deny-stdin-write" 2144 } 2145 ] 2146 },
··· 37 ], 38 "definitions": { 39 "Capability": { 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 "type": "object", 42 "required": [ 43 "identifier", ··· 49 "type": "string" 50 }, 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 programmatic access to files selected by the user.", 53 "default": "", 54 "type": "string" 55 }, ··· 70 "type": "boolean" 71 }, 72 "windows": { 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 "type": "array", 75 "items": { 76 "type": "string" 77 } 78 }, 79 "webviews": { 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 "type": "array", 82 "items": { 83 "type": "string" 84 } 85 }, 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\" }] } ] ```", 88 "type": "array", 89 "items": { 90 "$ref": "#/definitions/PermissionEntry" ··· 140 "identifier": { 141 "anyOf": [ 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\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 144 "type": "string", 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`" 147 }, 148 { 149 "description": "Enables the fetch command without any pre-configured scope.", 150 "type": "string", 151 + "const": "http:allow-fetch", 152 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 153 }, 154 { 155 "description": "Enables the fetch_cancel command without any pre-configured scope.", 156 "type": "string", 157 + "const": "http:allow-fetch-cancel", 158 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 159 }, 160 { 161 "description": "Enables the fetch_read_body command without any pre-configured scope.", 162 "type": "string", 163 + "const": "http:allow-fetch-read-body", 164 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 165 }, 166 { 167 "description": "Enables the fetch_send command without any pre-configured scope.", 168 "type": "string", 169 + "const": "http:allow-fetch-send", 170 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 171 }, 172 { 173 "description": "Denies the fetch command without any pre-configured scope.", 174 "type": "string", 175 + "const": "http:deny-fetch", 176 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 177 }, 178 { 179 "description": "Denies the fetch_cancel command without any pre-configured scope.", 180 "type": "string", 181 + "const": "http:deny-fetch-cancel", 182 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 183 }, 184 { 185 "description": "Denies the fetch_read_body command without any pre-configured scope.", 186 "type": "string", 187 + "const": "http:deny-fetch-read-body", 188 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 189 }, 190 { 191 "description": "Denies the fetch_send command without any pre-configured scope.", 192 "type": "string", 193 + "const": "http:deny-fetch-send", 194 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 195 } 196 ] 197 } ··· 266 "identifier": { 267 "anyOf": [ 268 { 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`", 270 "type": "string", 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`" 273 }, 274 { 275 "description": "Enables the execute command without any pre-configured scope.", 276 "type": "string", 277 + "const": "shell:allow-execute", 278 + "markdownDescription": "Enables the execute command without any pre-configured scope." 279 }, 280 { 281 "description": "Enables the kill command without any pre-configured scope.", 282 "type": "string", 283 + "const": "shell:allow-kill", 284 + "markdownDescription": "Enables the kill command without any pre-configured scope." 285 }, 286 { 287 "description": "Enables the open command without any pre-configured scope.", 288 "type": "string", 289 + "const": "shell:allow-open", 290 + "markdownDescription": "Enables the open command without any pre-configured scope." 291 }, 292 { 293 "description": "Enables the spawn command without any pre-configured scope.", 294 "type": "string", 295 + "const": "shell:allow-spawn", 296 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 297 }, 298 { 299 "description": "Enables the stdin_write command without any pre-configured scope.", 300 "type": "string", 301 + "const": "shell:allow-stdin-write", 302 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 303 }, 304 { 305 "description": "Denies the execute command without any pre-configured scope.", 306 "type": "string", 307 + "const": "shell:deny-execute", 308 + "markdownDescription": "Denies the execute command without any pre-configured scope." 309 }, 310 { 311 "description": "Denies the kill command without any pre-configured scope.", 312 "type": "string", 313 + "const": "shell:deny-kill", 314 + "markdownDescription": "Denies the kill command without any pre-configured scope." 315 }, 316 { 317 "description": "Denies the open command without any pre-configured scope.", 318 "type": "string", 319 + "const": "shell:deny-open", 320 + "markdownDescription": "Denies the open command without any pre-configured scope." 321 }, 322 { 323 "description": "Denies the spawn command without any pre-configured scope.", 324 "type": "string", 325 + "const": "shell:deny-spawn", 326 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 327 }, 328 { 329 "description": "Denies the stdin_write command without any pre-configured scope.", 330 "type": "string", 331 + "const": "shell:deny-stdin-write", 332 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 333 } 334 ] 335 } ··· 513 "description": "Permission identifier", 514 "oneOf": [ 515 { 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`", 517 "type": "string", 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`" 520 }, 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`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 "type": "string", 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`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", 529 "type": "string", 530 + "const": "core:app:allow-app-hide", 531 + "markdownDescription": "Enables the app_hide command without any pre-configured scope." 532 }, 533 { 534 "description": "Enables the app_show command without any pre-configured scope.", 535 "type": "string", 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." 544 }, 545 { 546 "description": "Enables the default_window_icon command without any pre-configured scope.", 547 "type": "string", 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." 562 }, 563 { 564 "description": "Enables the name command without any pre-configured scope.", 565 "type": "string", 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." 586 }, 587 { 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 589 "type": "string", 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." 598 }, 599 { 600 "description": "Enables the tauri_version command without any pre-configured scope.", 601 "type": "string", 602 + "const": "core:app:allow-tauri-version", 603 + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." 604 }, 605 { 606 "description": "Enables the version command without any pre-configured scope.", 607 "type": "string", 608 + "const": "core:app:allow-version", 609 + "markdownDescription": "Enables the version command without any pre-configured scope." 610 }, 611 { 612 "description": "Denies the app_hide command without any pre-configured scope.", 613 "type": "string", 614 + "const": "core:app:deny-app-hide", 615 + "markdownDescription": "Denies the app_hide command without any pre-configured scope." 616 }, 617 { 618 "description": "Denies the app_show command without any pre-configured scope.", 619 "type": "string", 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." 628 }, 629 { 630 "description": "Denies the default_window_icon command without any pre-configured scope.", 631 "type": "string", 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." 646 }, 647 { 648 "description": "Denies the name command without any pre-configured scope.", 649 "type": "string", 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." 670 }, 671 { 672 "description": "Denies the set_app_theme command without any pre-configured scope.", 673 "type": "string", 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." 682 }, 683 { 684 "description": "Denies the tauri_version command without any pre-configured scope.", 685 "type": "string", 686 + "const": "core:app:deny-tauri-version", 687 + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." 688 }, 689 { 690 "description": "Denies the version command without any pre-configured scope.", 691 "type": "string", 692 + "const": "core:app:deny-version", 693 + "markdownDescription": "Denies the version command without any pre-configured scope." 694 }, 695 { 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`", 697 "type": "string", 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`" 700 }, 701 { 702 "description": "Enables the emit command without any pre-configured scope.", 703 "type": "string", 704 + "const": "core:event:allow-emit", 705 + "markdownDescription": "Enables the emit command without any pre-configured scope." 706 }, 707 { 708 "description": "Enables the emit_to command without any pre-configured scope.", 709 "type": "string", 710 + "const": "core:event:allow-emit-to", 711 + "markdownDescription": "Enables the emit_to command without any pre-configured scope." 712 }, 713 { 714 "description": "Enables the listen command without any pre-configured scope.", 715 "type": "string", 716 + "const": "core:event:allow-listen", 717 + "markdownDescription": "Enables the listen command without any pre-configured scope." 718 }, 719 { 720 "description": "Enables the unlisten command without any pre-configured scope.", 721 "type": "string", 722 + "const": "core:event:allow-unlisten", 723 + "markdownDescription": "Enables the unlisten command without any pre-configured scope." 724 }, 725 { 726 "description": "Denies the emit command without any pre-configured scope.", 727 "type": "string", 728 + "const": "core:event:deny-emit", 729 + "markdownDescription": "Denies the emit command without any pre-configured scope." 730 }, 731 { 732 "description": "Denies the emit_to command without any pre-configured scope.", 733 "type": "string", 734 + "const": "core:event:deny-emit-to", 735 + "markdownDescription": "Denies the emit_to command without any pre-configured scope." 736 }, 737 { 738 "description": "Denies the listen command without any pre-configured scope.", 739 "type": "string", 740 + "const": "core:event:deny-listen", 741 + "markdownDescription": "Denies the listen command without any pre-configured scope." 742 }, 743 { 744 "description": "Denies the unlisten command without any pre-configured scope.", 745 "type": "string", 746 + "const": "core:event:deny-unlisten", 747 + "markdownDescription": "Denies the unlisten command without any pre-configured scope." 748 }, 749 { 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`", 751 "type": "string", 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`" 754 }, 755 { 756 "description": "Enables the from_bytes command without any pre-configured scope.", 757 "type": "string", 758 + "const": "core:image:allow-from-bytes", 759 + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." 760 }, 761 { 762 "description": "Enables the from_path command without any pre-configured scope.", 763 "type": "string", 764 + "const": "core:image:allow-from-path", 765 + "markdownDescription": "Enables the from_path command without any pre-configured scope." 766 }, 767 { 768 "description": "Enables the new command without any pre-configured scope.", 769 "type": "string", 770 + "const": "core:image:allow-new", 771 + "markdownDescription": "Enables the new command without any pre-configured scope." 772 }, 773 { 774 "description": "Enables the rgba command without any pre-configured scope.", 775 "type": "string", 776 + "const": "core:image:allow-rgba", 777 + "markdownDescription": "Enables the rgba command without any pre-configured scope." 778 }, 779 { 780 "description": "Enables the size command without any pre-configured scope.", 781 "type": "string", 782 + "const": "core:image:allow-size", 783 + "markdownDescription": "Enables the size command without any pre-configured scope." 784 }, 785 { 786 "description": "Denies the from_bytes command without any pre-configured scope.", 787 "type": "string", 788 + "const": "core:image:deny-from-bytes", 789 + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." 790 }, 791 { 792 "description": "Denies the from_path command without any pre-configured scope.", 793 "type": "string", 794 + "const": "core:image:deny-from-path", 795 + "markdownDescription": "Denies the from_path command without any pre-configured scope." 796 }, 797 { 798 "description": "Denies the new command without any pre-configured scope.", 799 "type": "string", 800 + "const": "core:image:deny-new", 801 + "markdownDescription": "Denies the new command without any pre-configured scope." 802 }, 803 { 804 "description": "Denies the rgba command without any pre-configured scope.", 805 "type": "string", 806 + "const": "core:image:deny-rgba", 807 + "markdownDescription": "Denies the rgba command without any pre-configured scope." 808 }, 809 { 810 "description": "Denies the size command without any pre-configured scope.", 811 "type": "string", 812 + "const": "core:image:deny-size", 813 + "markdownDescription": "Denies the size command without any pre-configured scope." 814 }, 815 { 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`", 817 "type": "string", 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`" 820 }, 821 { 822 "description": "Enables the append command without any pre-configured scope.", 823 "type": "string", 824 + "const": "core:menu:allow-append", 825 + "markdownDescription": "Enables the append command without any pre-configured scope." 826 }, 827 { 828 "description": "Enables the create_default command without any pre-configured scope.", 829 "type": "string", 830 + "const": "core:menu:allow-create-default", 831 + "markdownDescription": "Enables the create_default command without any pre-configured scope." 832 }, 833 { 834 "description": "Enables the get command without any pre-configured scope.", 835 "type": "string", 836 + "const": "core:menu:allow-get", 837 + "markdownDescription": "Enables the get command without any pre-configured scope." 838 }, 839 { 840 "description": "Enables the insert command without any pre-configured scope.", 841 "type": "string", 842 + "const": "core:menu:allow-insert", 843 + "markdownDescription": "Enables the insert command without any pre-configured scope." 844 }, 845 { 846 "description": "Enables the is_checked command without any pre-configured scope.", 847 "type": "string", 848 + "const": "core:menu:allow-is-checked", 849 + "markdownDescription": "Enables the is_checked command without any pre-configured scope." 850 }, 851 { 852 "description": "Enables the is_enabled command without any pre-configured scope.", 853 "type": "string", 854 + "const": "core:menu:allow-is-enabled", 855 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 856 }, 857 { 858 "description": "Enables the items command without any pre-configured scope.", 859 "type": "string", 860 + "const": "core:menu:allow-items", 861 + "markdownDescription": "Enables the items command without any pre-configured scope." 862 }, 863 { 864 "description": "Enables the new command without any pre-configured scope.", 865 "type": "string", 866 + "const": "core:menu:allow-new", 867 + "markdownDescription": "Enables the new command without any pre-configured scope." 868 }, 869 { 870 "description": "Enables the popup command without any pre-configured scope.", 871 "type": "string", 872 + "const": "core:menu:allow-popup", 873 + "markdownDescription": "Enables the popup command without any pre-configured scope." 874 }, 875 { 876 "description": "Enables the prepend command without any pre-configured scope.", 877 "type": "string", 878 + "const": "core:menu:allow-prepend", 879 + "markdownDescription": "Enables the prepend command without any pre-configured scope." 880 }, 881 { 882 "description": "Enables the remove command without any pre-configured scope.", 883 "type": "string", 884 + "const": "core:menu:allow-remove", 885 + "markdownDescription": "Enables the remove command without any pre-configured scope." 886 }, 887 { 888 "description": "Enables the remove_at command without any pre-configured scope.", 889 "type": "string", 890 + "const": "core:menu:allow-remove-at", 891 + "markdownDescription": "Enables the remove_at command without any pre-configured scope." 892 }, 893 { 894 "description": "Enables the set_accelerator command without any pre-configured scope.", 895 "type": "string", 896 + "const": "core:menu:allow-set-accelerator", 897 + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." 898 }, 899 { 900 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 901 "type": "string", 902 + "const": "core:menu:allow-set-as-app-menu", 903 + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." 904 }, 905 { 906 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 907 "type": "string", 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." 910 }, 911 { 912 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 913 "type": "string", 914 + "const": "core:menu:allow-set-as-window-menu", 915 + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." 916 }, 917 { 918 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 919 "type": "string", 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." 922 }, 923 { 924 "description": "Enables the set_checked command without any pre-configured scope.", 925 "type": "string", 926 + "const": "core:menu:allow-set-checked", 927 + "markdownDescription": "Enables the set_checked command without any pre-configured scope." 928 }, 929 { 930 "description": "Enables the set_enabled command without any pre-configured scope.", 931 "type": "string", 932 + "const": "core:menu:allow-set-enabled", 933 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 934 }, 935 { 936 "description": "Enables the set_icon command without any pre-configured scope.", 937 "type": "string", 938 + "const": "core:menu:allow-set-icon", 939 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 940 }, 941 { 942 "description": "Enables the set_text command without any pre-configured scope.", 943 "type": "string", 944 + "const": "core:menu:allow-set-text", 945 + "markdownDescription": "Enables the set_text command without any pre-configured scope." 946 }, 947 { 948 "description": "Enables the text command without any pre-configured scope.", 949 "type": "string", 950 + "const": "core:menu:allow-text", 951 + "markdownDescription": "Enables the text command without any pre-configured scope." 952 }, 953 { 954 "description": "Denies the append command without any pre-configured scope.", 955 "type": "string", 956 + "const": "core:menu:deny-append", 957 + "markdownDescription": "Denies the append command without any pre-configured scope." 958 }, 959 { 960 "description": "Denies the create_default command without any pre-configured scope.", 961 "type": "string", 962 + "const": "core:menu:deny-create-default", 963 + "markdownDescription": "Denies the create_default command without any pre-configured scope." 964 }, 965 { 966 "description": "Denies the get command without any pre-configured scope.", 967 "type": "string", 968 + "const": "core:menu:deny-get", 969 + "markdownDescription": "Denies the get command without any pre-configured scope." 970 }, 971 { 972 "description": "Denies the insert command without any pre-configured scope.", 973 "type": "string", 974 + "const": "core:menu:deny-insert", 975 + "markdownDescription": "Denies the insert command without any pre-configured scope." 976 }, 977 { 978 "description": "Denies the is_checked command without any pre-configured scope.", 979 "type": "string", 980 + "const": "core:menu:deny-is-checked", 981 + "markdownDescription": "Denies the is_checked command without any pre-configured scope." 982 }, 983 { 984 "description": "Denies the is_enabled command without any pre-configured scope.", 985 "type": "string", 986 + "const": "core:menu:deny-is-enabled", 987 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 988 }, 989 { 990 "description": "Denies the items command without any pre-configured scope.", 991 "type": "string", 992 + "const": "core:menu:deny-items", 993 + "markdownDescription": "Denies the items command without any pre-configured scope." 994 }, 995 { 996 "description": "Denies the new command without any pre-configured scope.", 997 "type": "string", 998 + "const": "core:menu:deny-new", 999 + "markdownDescription": "Denies the new command without any pre-configured scope." 1000 }, 1001 { 1002 "description": "Denies the popup command without any pre-configured scope.", 1003 "type": "string", 1004 + "const": "core:menu:deny-popup", 1005 + "markdownDescription": "Denies the popup command without any pre-configured scope." 1006 }, 1007 { 1008 "description": "Denies the prepend command without any pre-configured scope.", 1009 "type": "string", 1010 + "const": "core:menu:deny-prepend", 1011 + "markdownDescription": "Denies the prepend command without any pre-configured scope." 1012 }, 1013 { 1014 "description": "Denies the remove command without any pre-configured scope.", 1015 "type": "string", 1016 + "const": "core:menu:deny-remove", 1017 + "markdownDescription": "Denies the remove command without any pre-configured scope." 1018 }, 1019 { 1020 "description": "Denies the remove_at command without any pre-configured scope.", 1021 "type": "string", 1022 + "const": "core:menu:deny-remove-at", 1023 + "markdownDescription": "Denies the remove_at command without any pre-configured scope." 1024 }, 1025 { 1026 "description": "Denies the set_accelerator command without any pre-configured scope.", 1027 "type": "string", 1028 + "const": "core:menu:deny-set-accelerator", 1029 + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." 1030 }, 1031 { 1032 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 1033 "type": "string", 1034 + "const": "core:menu:deny-set-as-app-menu", 1035 + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." 1036 }, 1037 { 1038 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 1039 "type": "string", 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." 1042 }, 1043 { 1044 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 1045 "type": "string", 1046 + "const": "core:menu:deny-set-as-window-menu", 1047 + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." 1048 }, 1049 { 1050 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 1051 "type": "string", 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." 1054 }, 1055 { 1056 "description": "Denies the set_checked command without any pre-configured scope.", 1057 "type": "string", 1058 + "const": "core:menu:deny-set-checked", 1059 + "markdownDescription": "Denies the set_checked command without any pre-configured scope." 1060 }, 1061 { 1062 "description": "Denies the set_enabled command without any pre-configured scope.", 1063 "type": "string", 1064 + "const": "core:menu:deny-set-enabled", 1065 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 1066 }, 1067 { 1068 "description": "Denies the set_icon command without any pre-configured scope.", 1069 "type": "string", 1070 + "const": "core:menu:deny-set-icon", 1071 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1072 }, 1073 { 1074 "description": "Denies the set_text command without any pre-configured scope.", 1075 "type": "string", 1076 + "const": "core:menu:deny-set-text", 1077 + "markdownDescription": "Denies the set_text command without any pre-configured scope." 1078 }, 1079 { 1080 "description": "Denies the text command without any pre-configured scope.", 1081 "type": "string", 1082 + "const": "core:menu:deny-text", 1083 + "markdownDescription": "Denies the text command without any pre-configured scope." 1084 }, 1085 { 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`", 1087 "type": "string", 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`" 1090 }, 1091 { 1092 "description": "Enables the basename command without any pre-configured scope.", 1093 "type": "string", 1094 + "const": "core:path:allow-basename", 1095 + "markdownDescription": "Enables the basename command without any pre-configured scope." 1096 }, 1097 { 1098 "description": "Enables the dirname command without any pre-configured scope.", 1099 "type": "string", 1100 + "const": "core:path:allow-dirname", 1101 + "markdownDescription": "Enables the dirname command without any pre-configured scope." 1102 }, 1103 { 1104 "description": "Enables the extname command without any pre-configured scope.", 1105 "type": "string", 1106 + "const": "core:path:allow-extname", 1107 + "markdownDescription": "Enables the extname command without any pre-configured scope." 1108 }, 1109 { 1110 "description": "Enables the is_absolute command without any pre-configured scope.", 1111 "type": "string", 1112 + "const": "core:path:allow-is-absolute", 1113 + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." 1114 }, 1115 { 1116 "description": "Enables the join command without any pre-configured scope.", 1117 "type": "string", 1118 + "const": "core:path:allow-join", 1119 + "markdownDescription": "Enables the join command without any pre-configured scope." 1120 }, 1121 { 1122 "description": "Enables the normalize command without any pre-configured scope.", 1123 "type": "string", 1124 + "const": "core:path:allow-normalize", 1125 + "markdownDescription": "Enables the normalize command without any pre-configured scope." 1126 }, 1127 { 1128 "description": "Enables the resolve command without any pre-configured scope.", 1129 "type": "string", 1130 + "const": "core:path:allow-resolve", 1131 + "markdownDescription": "Enables the resolve command without any pre-configured scope." 1132 }, 1133 { 1134 "description": "Enables the resolve_directory command without any pre-configured scope.", 1135 "type": "string", 1136 + "const": "core:path:allow-resolve-directory", 1137 + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." 1138 }, 1139 { 1140 "description": "Denies the basename command without any pre-configured scope.", 1141 "type": "string", 1142 + "const": "core:path:deny-basename", 1143 + "markdownDescription": "Denies the basename command without any pre-configured scope." 1144 }, 1145 { 1146 "description": "Denies the dirname command without any pre-configured scope.", 1147 "type": "string", 1148 + "const": "core:path:deny-dirname", 1149 + "markdownDescription": "Denies the dirname command without any pre-configured scope." 1150 }, 1151 { 1152 "description": "Denies the extname command without any pre-configured scope.", 1153 "type": "string", 1154 + "const": "core:path:deny-extname", 1155 + "markdownDescription": "Denies the extname command without any pre-configured scope." 1156 }, 1157 { 1158 "description": "Denies the is_absolute command without any pre-configured scope.", 1159 "type": "string", 1160 + "const": "core:path:deny-is-absolute", 1161 + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." 1162 }, 1163 { 1164 "description": "Denies the join command without any pre-configured scope.", 1165 "type": "string", 1166 + "const": "core:path:deny-join", 1167 + "markdownDescription": "Denies the join command without any pre-configured scope." 1168 }, 1169 { 1170 "description": "Denies the normalize command without any pre-configured scope.", 1171 "type": "string", 1172 + "const": "core:path:deny-normalize", 1173 + "markdownDescription": "Denies the normalize command without any pre-configured scope." 1174 }, 1175 { 1176 "description": "Denies the resolve command without any pre-configured scope.", 1177 "type": "string", 1178 + "const": "core:path:deny-resolve", 1179 + "markdownDescription": "Denies the resolve command without any pre-configured scope." 1180 }, 1181 { 1182 "description": "Denies the resolve_directory command without any pre-configured scope.", 1183 "type": "string", 1184 + "const": "core:path:deny-resolve-directory", 1185 + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." 1186 }, 1187 { 1188 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", 1189 "type": "string", 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`" 1192 }, 1193 { 1194 "description": "Enables the close command without any pre-configured scope.", 1195 "type": "string", 1196 + "const": "core:resources:allow-close", 1197 + "markdownDescription": "Enables the close command without any pre-configured scope." 1198 }, 1199 { 1200 "description": "Denies the close command without any pre-configured scope.", 1201 "type": "string", 1202 + "const": "core:resources:deny-close", 1203 + "markdownDescription": "Denies the close command without any pre-configured scope." 1204 }, 1205 { 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`", 1207 "type": "string", 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`" 1210 }, 1211 { 1212 "description": "Enables the get_by_id command without any pre-configured scope.", 1213 "type": "string", 1214 + "const": "core:tray:allow-get-by-id", 1215 + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." 1216 }, 1217 { 1218 "description": "Enables the new command without any pre-configured scope.", 1219 "type": "string", 1220 + "const": "core:tray:allow-new", 1221 + "markdownDescription": "Enables the new command without any pre-configured scope." 1222 }, 1223 { 1224 "description": "Enables the remove_by_id command without any pre-configured scope.", 1225 "type": "string", 1226 + "const": "core:tray:allow-remove-by-id", 1227 + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." 1228 }, 1229 { 1230 "description": "Enables the set_icon command without any pre-configured scope.", 1231 "type": "string", 1232 + "const": "core:tray:allow-set-icon", 1233 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1234 }, 1235 { 1236 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1237 "type": "string", 1238 + "const": "core:tray:allow-set-icon-as-template", 1239 + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." 1240 }, 1241 { 1242 "description": "Enables the set_menu command without any pre-configured scope.", 1243 "type": "string", 1244 + "const": "core:tray:allow-set-menu", 1245 + "markdownDescription": "Enables the set_menu command without any pre-configured scope." 1246 }, 1247 { 1248 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1249 "type": "string", 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." 1252 }, 1253 { 1254 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1255 "type": "string", 1256 + "const": "core:tray:allow-set-temp-dir-path", 1257 + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." 1258 }, 1259 { 1260 "description": "Enables the set_title command without any pre-configured scope.", 1261 "type": "string", 1262 + "const": "core:tray:allow-set-title", 1263 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1264 }, 1265 { 1266 "description": "Enables the set_tooltip command without any pre-configured scope.", 1267 "type": "string", 1268 + "const": "core:tray:allow-set-tooltip", 1269 + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." 1270 }, 1271 { 1272 "description": "Enables the set_visible command without any pre-configured scope.", 1273 "type": "string", 1274 + "const": "core:tray:allow-set-visible", 1275 + "markdownDescription": "Enables the set_visible command without any pre-configured scope." 1276 }, 1277 { 1278 "description": "Denies the get_by_id command without any pre-configured scope.", 1279 "type": "string", 1280 + "const": "core:tray:deny-get-by-id", 1281 + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." 1282 }, 1283 { 1284 "description": "Denies the new command without any pre-configured scope.", 1285 "type": "string", 1286 + "const": "core:tray:deny-new", 1287 + "markdownDescription": "Denies the new command without any pre-configured scope." 1288 }, 1289 { 1290 "description": "Denies the remove_by_id command without any pre-configured scope.", 1291 "type": "string", 1292 + "const": "core:tray:deny-remove-by-id", 1293 + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." 1294 }, 1295 { 1296 "description": "Denies the set_icon command without any pre-configured scope.", 1297 "type": "string", 1298 + "const": "core:tray:deny-set-icon", 1299 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1300 }, 1301 { 1302 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1303 "type": "string", 1304 + "const": "core:tray:deny-set-icon-as-template", 1305 + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." 1306 }, 1307 { 1308 "description": "Denies the set_menu command without any pre-configured scope.", 1309 "type": "string", 1310 + "const": "core:tray:deny-set-menu", 1311 + "markdownDescription": "Denies the set_menu command without any pre-configured scope." 1312 }, 1313 { 1314 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1315 "type": "string", 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." 1318 }, 1319 { 1320 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1321 "type": "string", 1322 + "const": "core:tray:deny-set-temp-dir-path", 1323 + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." 1324 }, 1325 { 1326 "description": "Denies the set_title command without any pre-configured scope.", 1327 "type": "string", 1328 + "const": "core:tray:deny-set-title", 1329 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 1330 }, 1331 { 1332 "description": "Denies the set_tooltip command without any pre-configured scope.", 1333 "type": "string", 1334 + "const": "core:tray:deny-set-tooltip", 1335 + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." 1336 }, 1337 { 1338 "description": "Denies the set_visible command without any pre-configured scope.", 1339 "type": "string", 1340 + "const": "core:tray:deny-set-visible", 1341 + "markdownDescription": "Denies the set_visible command without any pre-configured scope." 1342 }, 1343 { 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`", 1345 "type": "string", 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`" 1348 }, 1349 { 1350 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1351 "type": "string", 1352 + "const": "core:webview:allow-clear-all-browsing-data", 1353 + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." 1354 }, 1355 { 1356 "description": "Enables the create_webview command without any pre-configured scope.", 1357 "type": "string", 1358 + "const": "core:webview:allow-create-webview", 1359 + "markdownDescription": "Enables the create_webview command without any pre-configured scope." 1360 }, 1361 { 1362 "description": "Enables the create_webview_window command without any pre-configured scope.", 1363 "type": "string", 1364 + "const": "core:webview:allow-create-webview-window", 1365 + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." 1366 }, 1367 { 1368 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1369 "type": "string", 1370 + "const": "core:webview:allow-get-all-webviews", 1371 + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." 1372 }, 1373 { 1374 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1375 "type": "string", 1376 + "const": "core:webview:allow-internal-toggle-devtools", 1377 + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." 1378 }, 1379 { 1380 "description": "Enables the print command without any pre-configured scope.", 1381 "type": "string", 1382 + "const": "core:webview:allow-print", 1383 + "markdownDescription": "Enables the print command without any pre-configured scope." 1384 }, 1385 { 1386 "description": "Enables the reparent command without any pre-configured scope.", 1387 "type": "string", 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." 1402 }, 1403 { 1404 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1405 "type": "string", 1406 + "const": "core:webview:allow-set-webview-focus", 1407 + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." 1408 }, 1409 { 1410 "description": "Enables the set_webview_position command without any pre-configured scope.", 1411 "type": "string", 1412 + "const": "core:webview:allow-set-webview-position", 1413 + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." 1414 }, 1415 { 1416 "description": "Enables the set_webview_size command without any pre-configured scope.", 1417 "type": "string", 1418 + "const": "core:webview:allow-set-webview-size", 1419 + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." 1420 }, 1421 { 1422 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1423 "type": "string", 1424 + "const": "core:webview:allow-set-webview-zoom", 1425 + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." 1426 }, 1427 { 1428 "description": "Enables the webview_close command without any pre-configured scope.", 1429 "type": "string", 1430 + "const": "core:webview:allow-webview-close", 1431 + "markdownDescription": "Enables the webview_close command without any pre-configured scope." 1432 }, 1433 { 1434 "description": "Enables the webview_hide command without any pre-configured scope.", 1435 "type": "string", 1436 + "const": "core:webview:allow-webview-hide", 1437 + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." 1438 }, 1439 { 1440 "description": "Enables the webview_position command without any pre-configured scope.", 1441 "type": "string", 1442 + "const": "core:webview:allow-webview-position", 1443 + "markdownDescription": "Enables the webview_position command without any pre-configured scope." 1444 }, 1445 { 1446 "description": "Enables the webview_show command without any pre-configured scope.", 1447 "type": "string", 1448 + "const": "core:webview:allow-webview-show", 1449 + "markdownDescription": "Enables the webview_show command without any pre-configured scope." 1450 }, 1451 { 1452 "description": "Enables the webview_size command without any pre-configured scope.", 1453 "type": "string", 1454 + "const": "core:webview:allow-webview-size", 1455 + "markdownDescription": "Enables the webview_size command without any pre-configured scope." 1456 }, 1457 { 1458 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1459 "type": "string", 1460 + "const": "core:webview:deny-clear-all-browsing-data", 1461 + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." 1462 }, 1463 { 1464 "description": "Denies the create_webview command without any pre-configured scope.", 1465 "type": "string", 1466 + "const": "core:webview:deny-create-webview", 1467 + "markdownDescription": "Denies the create_webview command without any pre-configured scope." 1468 }, 1469 { 1470 "description": "Denies the create_webview_window command without any pre-configured scope.", 1471 "type": "string", 1472 + "const": "core:webview:deny-create-webview-window", 1473 + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." 1474 }, 1475 { 1476 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1477 "type": "string", 1478 + "const": "core:webview:deny-get-all-webviews", 1479 + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." 1480 }, 1481 { 1482 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1483 "type": "string", 1484 + "const": "core:webview:deny-internal-toggle-devtools", 1485 + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." 1486 }, 1487 { 1488 "description": "Denies the print command without any pre-configured scope.", 1489 "type": "string", 1490 + "const": "core:webview:deny-print", 1491 + "markdownDescription": "Denies the print command without any pre-configured scope." 1492 }, 1493 { 1494 "description": "Denies the reparent command without any pre-configured scope.", 1495 "type": "string", 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." 1510 }, 1511 { 1512 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1513 "type": "string", 1514 + "const": "core:webview:deny-set-webview-focus", 1515 + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." 1516 }, 1517 { 1518 "description": "Denies the set_webview_position command without any pre-configured scope.", 1519 "type": "string", 1520 + "const": "core:webview:deny-set-webview-position", 1521 + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." 1522 }, 1523 { 1524 "description": "Denies the set_webview_size command without any pre-configured scope.", 1525 "type": "string", 1526 + "const": "core:webview:deny-set-webview-size", 1527 + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." 1528 }, 1529 { 1530 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1531 "type": "string", 1532 + "const": "core:webview:deny-set-webview-zoom", 1533 + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." 1534 }, 1535 { 1536 "description": "Denies the webview_close command without any pre-configured scope.", 1537 "type": "string", 1538 + "const": "core:webview:deny-webview-close", 1539 + "markdownDescription": "Denies the webview_close command without any pre-configured scope." 1540 }, 1541 { 1542 "description": "Denies the webview_hide command without any pre-configured scope.", 1543 "type": "string", 1544 + "const": "core:webview:deny-webview-hide", 1545 + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." 1546 }, 1547 { 1548 "description": "Denies the webview_position command without any pre-configured scope.", 1549 "type": "string", 1550 + "const": "core:webview:deny-webview-position", 1551 + "markdownDescription": "Denies the webview_position command without any pre-configured scope." 1552 }, 1553 { 1554 "description": "Denies the webview_show command without any pre-configured scope.", 1555 "type": "string", 1556 + "const": "core:webview:deny-webview-show", 1557 + "markdownDescription": "Denies the webview_show command without any pre-configured scope." 1558 }, 1559 { 1560 "description": "Denies the webview_size command without any pre-configured scope.", 1561 "type": "string", 1562 + "const": "core:webview:deny-webview-size", 1563 + "markdownDescription": "Denies the webview_size command without any pre-configured scope." 1564 }, 1565 { 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`", 1567 "type": "string", 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`" 1570 }, 1571 { 1572 "description": "Enables the available_monitors command without any pre-configured scope.", 1573 "type": "string", 1574 + "const": "core:window:allow-available-monitors", 1575 + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." 1576 }, 1577 { 1578 "description": "Enables the center command without any pre-configured scope.", 1579 "type": "string", 1580 + "const": "core:window:allow-center", 1581 + "markdownDescription": "Enables the center command without any pre-configured scope." 1582 }, 1583 { 1584 "description": "Enables the close command without any pre-configured scope.", 1585 "type": "string", 1586 + "const": "core:window:allow-close", 1587 + "markdownDescription": "Enables the close command without any pre-configured scope." 1588 }, 1589 { 1590 "description": "Enables the create command without any pre-configured scope.", 1591 "type": "string", 1592 + "const": "core:window:allow-create", 1593 + "markdownDescription": "Enables the create command without any pre-configured scope." 1594 }, 1595 { 1596 "description": "Enables the current_monitor command without any pre-configured scope.", 1597 "type": "string", 1598 + "const": "core:window:allow-current-monitor", 1599 + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." 1600 }, 1601 { 1602 "description": "Enables the cursor_position command without any pre-configured scope.", 1603 "type": "string", 1604 + "const": "core:window:allow-cursor-position", 1605 + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." 1606 }, 1607 { 1608 "description": "Enables the destroy command without any pre-configured scope.", 1609 "type": "string", 1610 + "const": "core:window:allow-destroy", 1611 + "markdownDescription": "Enables the destroy command without any pre-configured scope." 1612 }, 1613 { 1614 "description": "Enables the get_all_windows command without any pre-configured scope.", 1615 "type": "string", 1616 + "const": "core:window:allow-get-all-windows", 1617 + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." 1618 }, 1619 { 1620 "description": "Enables the hide command without any pre-configured scope.", 1621 "type": "string", 1622 + "const": "core:window:allow-hide", 1623 + "markdownDescription": "Enables the hide command without any pre-configured scope." 1624 }, 1625 { 1626 "description": "Enables the inner_position command without any pre-configured scope.", 1627 "type": "string", 1628 + "const": "core:window:allow-inner-position", 1629 + "markdownDescription": "Enables the inner_position command without any pre-configured scope." 1630 }, 1631 { 1632 "description": "Enables the inner_size command without any pre-configured scope.", 1633 "type": "string", 1634 + "const": "core:window:allow-inner-size", 1635 + "markdownDescription": "Enables the inner_size command without any pre-configured scope." 1636 }, 1637 { 1638 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1639 "type": "string", 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." 1648 }, 1649 { 1650 "description": "Enables the is_closable command without any pre-configured scope.", 1651 "type": "string", 1652 + "const": "core:window:allow-is-closable", 1653 + "markdownDescription": "Enables the is_closable command without any pre-configured scope." 1654 }, 1655 { 1656 "description": "Enables the is_decorated command without any pre-configured scope.", 1657 "type": "string", 1658 + "const": "core:window:allow-is-decorated", 1659 + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." 1660 }, 1661 { 1662 "description": "Enables the is_enabled command without any pre-configured scope.", 1663 "type": "string", 1664 + "const": "core:window:allow-is-enabled", 1665 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 1666 }, 1667 { 1668 "description": "Enables the is_focused command without any pre-configured scope.", 1669 "type": "string", 1670 + "const": "core:window:allow-is-focused", 1671 + "markdownDescription": "Enables the is_focused command without any pre-configured scope." 1672 }, 1673 { 1674 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1675 "type": "string", 1676 + "const": "core:window:allow-is-fullscreen", 1677 + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." 1678 }, 1679 { 1680 "description": "Enables the is_maximizable command without any pre-configured scope.", 1681 "type": "string", 1682 + "const": "core:window:allow-is-maximizable", 1683 + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." 1684 }, 1685 { 1686 "description": "Enables the is_maximized command without any pre-configured scope.", 1687 "type": "string", 1688 + "const": "core:window:allow-is-maximized", 1689 + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." 1690 }, 1691 { 1692 "description": "Enables the is_minimizable command without any pre-configured scope.", 1693 "type": "string", 1694 + "const": "core:window:allow-is-minimizable", 1695 + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." 1696 }, 1697 { 1698 "description": "Enables the is_minimized command without any pre-configured scope.", 1699 "type": "string", 1700 + "const": "core:window:allow-is-minimized", 1701 + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." 1702 }, 1703 { 1704 "description": "Enables the is_resizable command without any pre-configured scope.", 1705 "type": "string", 1706 + "const": "core:window:allow-is-resizable", 1707 + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." 1708 }, 1709 { 1710 "description": "Enables the is_visible command without any pre-configured scope.", 1711 "type": "string", 1712 + "const": "core:window:allow-is-visible", 1713 + "markdownDescription": "Enables the is_visible command without any pre-configured scope." 1714 }, 1715 { 1716 "description": "Enables the maximize command without any pre-configured scope.", 1717 "type": "string", 1718 + "const": "core:window:allow-maximize", 1719 + "markdownDescription": "Enables the maximize command without any pre-configured scope." 1720 }, 1721 { 1722 "description": "Enables the minimize command without any pre-configured scope.", 1723 "type": "string", 1724 + "const": "core:window:allow-minimize", 1725 + "markdownDescription": "Enables the minimize command without any pre-configured scope." 1726 }, 1727 { 1728 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1729 "type": "string", 1730 + "const": "core:window:allow-monitor-from-point", 1731 + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." 1732 }, 1733 { 1734 "description": "Enables the outer_position command without any pre-configured scope.", 1735 "type": "string", 1736 + "const": "core:window:allow-outer-position", 1737 + "markdownDescription": "Enables the outer_position command without any pre-configured scope." 1738 }, 1739 { 1740 "description": "Enables the outer_size command without any pre-configured scope.", 1741 "type": "string", 1742 + "const": "core:window:allow-outer-size", 1743 + "markdownDescription": "Enables the outer_size command without any pre-configured scope." 1744 }, 1745 { 1746 "description": "Enables the primary_monitor command without any pre-configured scope.", 1747 "type": "string", 1748 + "const": "core:window:allow-primary-monitor", 1749 + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." 1750 }, 1751 { 1752 "description": "Enables the request_user_attention command without any pre-configured scope.", 1753 "type": "string", 1754 + "const": "core:window:allow-request-user-attention", 1755 + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." 1756 }, 1757 { 1758 "description": "Enables the scale_factor command without any pre-configured scope.", 1759 "type": "string", 1760 + "const": "core:window:allow-scale-factor", 1761 + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." 1762 }, 1763 { 1764 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1765 "type": "string", 1766 + "const": "core:window:allow-set-always-on-bottom", 1767 + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." 1768 }, 1769 { 1770 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1771 "type": "string", 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." 1792 }, 1793 { 1794 "description": "Enables the set_closable command without any pre-configured scope.", 1795 "type": "string", 1796 + "const": "core:window:allow-set-closable", 1797 + "markdownDescription": "Enables the set_closable command without any pre-configured scope." 1798 }, 1799 { 1800 "description": "Enables the set_content_protected command without any pre-configured scope.", 1801 "type": "string", 1802 + "const": "core:window:allow-set-content-protected", 1803 + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." 1804 }, 1805 { 1806 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1807 "type": "string", 1808 + "const": "core:window:allow-set-cursor-grab", 1809 + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." 1810 }, 1811 { 1812 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1813 "type": "string", 1814 + "const": "core:window:allow-set-cursor-icon", 1815 + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." 1816 }, 1817 { 1818 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1819 "type": "string", 1820 + "const": "core:window:allow-set-cursor-position", 1821 + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." 1822 }, 1823 { 1824 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1825 "type": "string", 1826 + "const": "core:window:allow-set-cursor-visible", 1827 + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." 1828 }, 1829 { 1830 "description": "Enables the set_decorations command without any pre-configured scope.", 1831 "type": "string", 1832 + "const": "core:window:allow-set-decorations", 1833 + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." 1834 }, 1835 { 1836 "description": "Enables the set_effects command without any pre-configured scope.", 1837 "type": "string", 1838 + "const": "core:window:allow-set-effects", 1839 + "markdownDescription": "Enables the set_effects command without any pre-configured scope." 1840 }, 1841 { 1842 "description": "Enables the set_enabled command without any pre-configured scope.", 1843 "type": "string", 1844 + "const": "core:window:allow-set-enabled", 1845 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 1846 }, 1847 { 1848 "description": "Enables the set_focus command without any pre-configured scope.", 1849 "type": "string", 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." 1858 }, 1859 { 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1861 "type": "string", 1862 + "const": "core:window:allow-set-fullscreen", 1863 + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." 1864 }, 1865 { 1866 "description": "Enables the set_icon command without any pre-configured scope.", 1867 "type": "string", 1868 + "const": "core:window:allow-set-icon", 1869 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1870 }, 1871 { 1872 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1873 "type": "string", 1874 + "const": "core:window:allow-set-ignore-cursor-events", 1875 + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." 1876 }, 1877 { 1878 "description": "Enables the set_max_size command without any pre-configured scope.", 1879 "type": "string", 1880 + "const": "core:window:allow-set-max-size", 1881 + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." 1882 }, 1883 { 1884 "description": "Enables the set_maximizable command without any pre-configured scope.", 1885 "type": "string", 1886 + "const": "core:window:allow-set-maximizable", 1887 + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." 1888 }, 1889 { 1890 "description": "Enables the set_min_size command without any pre-configured scope.", 1891 "type": "string", 1892 + "const": "core:window:allow-set-min-size", 1893 + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." 1894 }, 1895 { 1896 "description": "Enables the set_minimizable command without any pre-configured scope.", 1897 "type": "string", 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." 1906 }, 1907 { 1908 "description": "Enables the set_position command without any pre-configured scope.", 1909 "type": "string", 1910 + "const": "core:window:allow-set-position", 1911 + "markdownDescription": "Enables the set_position command without any pre-configured scope." 1912 }, 1913 { 1914 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1915 "type": "string", 1916 + "const": "core:window:allow-set-progress-bar", 1917 + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." 1918 }, 1919 { 1920 "description": "Enables the set_resizable command without any pre-configured scope.", 1921 "type": "string", 1922 + "const": "core:window:allow-set-resizable", 1923 + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." 1924 }, 1925 { 1926 "description": "Enables the set_shadow command without any pre-configured scope.", 1927 "type": "string", 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." 1936 }, 1937 { 1938 "description": "Enables the set_size command without any pre-configured scope.", 1939 "type": "string", 1940 + "const": "core:window:allow-set-size", 1941 + "markdownDescription": "Enables the set_size command without any pre-configured scope." 1942 }, 1943 { 1944 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1945 "type": "string", 1946 + "const": "core:window:allow-set-size-constraints", 1947 + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." 1948 }, 1949 { 1950 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1951 "type": "string", 1952 + "const": "core:window:allow-set-skip-taskbar", 1953 + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." 1954 }, 1955 { 1956 "description": "Enables the set_theme command without any pre-configured scope.", 1957 "type": "string", 1958 + "const": "core:window:allow-set-theme", 1959 + "markdownDescription": "Enables the set_theme command without any pre-configured scope." 1960 }, 1961 { 1962 "description": "Enables the set_title command without any pre-configured scope.", 1963 "type": "string", 1964 + "const": "core:window:allow-set-title", 1965 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1966 }, 1967 { 1968 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1969 "type": "string", 1970 + "const": "core:window:allow-set-title-bar-style", 1971 + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." 1972 }, 1973 { 1974 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1975 "type": "string", 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." 1978 }, 1979 { 1980 "description": "Enables the show command without any pre-configured scope.", 1981 "type": "string", 1982 + "const": "core:window:allow-show", 1983 + "markdownDescription": "Enables the show command without any pre-configured scope." 1984 }, 1985 { 1986 "description": "Enables the start_dragging command without any pre-configured scope.", 1987 "type": "string", 1988 + "const": "core:window:allow-start-dragging", 1989 + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." 1990 }, 1991 { 1992 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1993 "type": "string", 1994 + "const": "core:window:allow-start-resize-dragging", 1995 + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." 1996 }, 1997 { 1998 "description": "Enables the theme command without any pre-configured scope.", 1999 "type": "string", 2000 + "const": "core:window:allow-theme", 2001 + "markdownDescription": "Enables the theme command without any pre-configured scope." 2002 }, 2003 { 2004 "description": "Enables the title command without any pre-configured scope.", 2005 "type": "string", 2006 + "const": "core:window:allow-title", 2007 + "markdownDescription": "Enables the title command without any pre-configured scope." 2008 }, 2009 { 2010 "description": "Enables the toggle_maximize command without any pre-configured scope.", 2011 "type": "string", 2012 + "const": "core:window:allow-toggle-maximize", 2013 + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." 2014 }, 2015 { 2016 "description": "Enables the unmaximize command without any pre-configured scope.", 2017 "type": "string", 2018 + "const": "core:window:allow-unmaximize", 2019 + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." 2020 }, 2021 { 2022 "description": "Enables the unminimize command without any pre-configured scope.", 2023 "type": "string", 2024 + "const": "core:window:allow-unminimize", 2025 + "markdownDescription": "Enables the unminimize command without any pre-configured scope." 2026 }, 2027 { 2028 "description": "Denies the available_monitors command without any pre-configured scope.", 2029 "type": "string", 2030 + "const": "core:window:deny-available-monitors", 2031 + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." 2032 }, 2033 { 2034 "description": "Denies the center command without any pre-configured scope.", 2035 "type": "string", 2036 + "const": "core:window:deny-center", 2037 + "markdownDescription": "Denies the center command without any pre-configured scope." 2038 }, 2039 { 2040 "description": "Denies the close command without any pre-configured scope.", 2041 "type": "string", 2042 + "const": "core:window:deny-close", 2043 + "markdownDescription": "Denies the close command without any pre-configured scope." 2044 }, 2045 { 2046 "description": "Denies the create command without any pre-configured scope.", 2047 "type": "string", 2048 + "const": "core:window:deny-create", 2049 + "markdownDescription": "Denies the create command without any pre-configured scope." 2050 }, 2051 { 2052 "description": "Denies the current_monitor command without any pre-configured scope.", 2053 "type": "string", 2054 + "const": "core:window:deny-current-monitor", 2055 + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." 2056 }, 2057 { 2058 "description": "Denies the cursor_position command without any pre-configured scope.", 2059 "type": "string", 2060 + "const": "core:window:deny-cursor-position", 2061 + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." 2062 }, 2063 { 2064 "description": "Denies the destroy command without any pre-configured scope.", 2065 "type": "string", 2066 + "const": "core:window:deny-destroy", 2067 + "markdownDescription": "Denies the destroy command without any pre-configured scope." 2068 }, 2069 { 2070 "description": "Denies the get_all_windows command without any pre-configured scope.", 2071 "type": "string", 2072 + "const": "core:window:deny-get-all-windows", 2073 + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." 2074 }, 2075 { 2076 "description": "Denies the hide command without any pre-configured scope.", 2077 "type": "string", 2078 + "const": "core:window:deny-hide", 2079 + "markdownDescription": "Denies the hide command without any pre-configured scope." 2080 }, 2081 { 2082 "description": "Denies the inner_position command without any pre-configured scope.", 2083 "type": "string", 2084 + "const": "core:window:deny-inner-position", 2085 + "markdownDescription": "Denies the inner_position command without any pre-configured scope." 2086 }, 2087 { 2088 "description": "Denies the inner_size command without any pre-configured scope.", 2089 "type": "string", 2090 + "const": "core:window:deny-inner-size", 2091 + "markdownDescription": "Denies the inner_size command without any pre-configured scope." 2092 }, 2093 { 2094 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 2095 "type": "string", 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." 2104 }, 2105 { 2106 "description": "Denies the is_closable command without any pre-configured scope.", 2107 "type": "string", 2108 + "const": "core:window:deny-is-closable", 2109 + "markdownDescription": "Denies the is_closable command without any pre-configured scope." 2110 }, 2111 { 2112 "description": "Denies the is_decorated command without any pre-configured scope.", 2113 "type": "string", 2114 + "const": "core:window:deny-is-decorated", 2115 + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." 2116 }, 2117 { 2118 "description": "Denies the is_enabled command without any pre-configured scope.", 2119 "type": "string", 2120 + "const": "core:window:deny-is-enabled", 2121 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 2122 }, 2123 { 2124 "description": "Denies the is_focused command without any pre-configured scope.", 2125 "type": "string", 2126 + "const": "core:window:deny-is-focused", 2127 + "markdownDescription": "Denies the is_focused command without any pre-configured scope." 2128 }, 2129 { 2130 "description": "Denies the is_fullscreen command without any pre-configured scope.", 2131 "type": "string", 2132 + "const": "core:window:deny-is-fullscreen", 2133 + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." 2134 }, 2135 { 2136 "description": "Denies the is_maximizable command without any pre-configured scope.", 2137 "type": "string", 2138 + "const": "core:window:deny-is-maximizable", 2139 + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." 2140 }, 2141 { 2142 "description": "Denies the is_maximized command without any pre-configured scope.", 2143 "type": "string", 2144 + "const": "core:window:deny-is-maximized", 2145 + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." 2146 }, 2147 { 2148 "description": "Denies the is_minimizable command without any pre-configured scope.", 2149 "type": "string", 2150 + "const": "core:window:deny-is-minimizable", 2151 + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." 2152 }, 2153 { 2154 "description": "Denies the is_minimized command without any pre-configured scope.", 2155 "type": "string", 2156 + "const": "core:window:deny-is-minimized", 2157 + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." 2158 }, 2159 { 2160 "description": "Denies the is_resizable command without any pre-configured scope.", 2161 "type": "string", 2162 + "const": "core:window:deny-is-resizable", 2163 + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." 2164 }, 2165 { 2166 "description": "Denies the is_visible command without any pre-configured scope.", 2167 "type": "string", 2168 + "const": "core:window:deny-is-visible", 2169 + "markdownDescription": "Denies the is_visible command without any pre-configured scope." 2170 }, 2171 { 2172 "description": "Denies the maximize command without any pre-configured scope.", 2173 "type": "string", 2174 + "const": "core:window:deny-maximize", 2175 + "markdownDescription": "Denies the maximize command without any pre-configured scope." 2176 }, 2177 { 2178 "description": "Denies the minimize command without any pre-configured scope.", 2179 "type": "string", 2180 + "const": "core:window:deny-minimize", 2181 + "markdownDescription": "Denies the minimize command without any pre-configured scope." 2182 }, 2183 { 2184 "description": "Denies the monitor_from_point command without any pre-configured scope.", 2185 "type": "string", 2186 + "const": "core:window:deny-monitor-from-point", 2187 + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." 2188 }, 2189 { 2190 "description": "Denies the outer_position command without any pre-configured scope.", 2191 "type": "string", 2192 + "const": "core:window:deny-outer-position", 2193 + "markdownDescription": "Denies the outer_position command without any pre-configured scope." 2194 }, 2195 { 2196 "description": "Denies the outer_size command without any pre-configured scope.", 2197 "type": "string", 2198 + "const": "core:window:deny-outer-size", 2199 + "markdownDescription": "Denies the outer_size command without any pre-configured scope." 2200 }, 2201 { 2202 "description": "Denies the primary_monitor command without any pre-configured scope.", 2203 "type": "string", 2204 + "const": "core:window:deny-primary-monitor", 2205 + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." 2206 }, 2207 { 2208 "description": "Denies the request_user_attention command without any pre-configured scope.", 2209 "type": "string", 2210 + "const": "core:window:deny-request-user-attention", 2211 + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." 2212 }, 2213 { 2214 "description": "Denies the scale_factor command without any pre-configured scope.", 2215 "type": "string", 2216 + "const": "core:window:deny-scale-factor", 2217 + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." 2218 }, 2219 { 2220 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 2221 "type": "string", 2222 + "const": "core:window:deny-set-always-on-bottom", 2223 + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." 2224 }, 2225 { 2226 "description": "Denies the set_always_on_top command without any pre-configured scope.", 2227 "type": "string", 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." 2248 }, 2249 { 2250 "description": "Denies the set_closable command without any pre-configured scope.", 2251 "type": "string", 2252 + "const": "core:window:deny-set-closable", 2253 + "markdownDescription": "Denies the set_closable command without any pre-configured scope." 2254 }, 2255 { 2256 "description": "Denies the set_content_protected command without any pre-configured scope.", 2257 "type": "string", 2258 + "const": "core:window:deny-set-content-protected", 2259 + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." 2260 }, 2261 { 2262 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 2263 "type": "string", 2264 + "const": "core:window:deny-set-cursor-grab", 2265 + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." 2266 }, 2267 { 2268 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 2269 "type": "string", 2270 + "const": "core:window:deny-set-cursor-icon", 2271 + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." 2272 }, 2273 { 2274 "description": "Denies the set_cursor_position command without any pre-configured scope.", 2275 "type": "string", 2276 + "const": "core:window:deny-set-cursor-position", 2277 + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." 2278 }, 2279 { 2280 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 2281 "type": "string", 2282 + "const": "core:window:deny-set-cursor-visible", 2283 + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." 2284 }, 2285 { 2286 "description": "Denies the set_decorations command without any pre-configured scope.", 2287 "type": "string", 2288 + "const": "core:window:deny-set-decorations", 2289 + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." 2290 }, 2291 { 2292 "description": "Denies the set_effects command without any pre-configured scope.", 2293 "type": "string", 2294 + "const": "core:window:deny-set-effects", 2295 + "markdownDescription": "Denies the set_effects command without any pre-configured scope." 2296 }, 2297 { 2298 "description": "Denies the set_enabled command without any pre-configured scope.", 2299 "type": "string", 2300 + "const": "core:window:deny-set-enabled", 2301 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 2302 }, 2303 { 2304 "description": "Denies the set_focus command without any pre-configured scope.", 2305 "type": "string", 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." 2314 }, 2315 { 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2317 "type": "string", 2318 + "const": "core:window:deny-set-fullscreen", 2319 + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." 2320 }, 2321 { 2322 "description": "Denies the set_icon command without any pre-configured scope.", 2323 "type": "string", 2324 + "const": "core:window:deny-set-icon", 2325 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 2326 }, 2327 { 2328 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 2329 "type": "string", 2330 + "const": "core:window:deny-set-ignore-cursor-events", 2331 + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." 2332 }, 2333 { 2334 "description": "Denies the set_max_size command without any pre-configured scope.", 2335 "type": "string", 2336 + "const": "core:window:deny-set-max-size", 2337 + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." 2338 }, 2339 { 2340 "description": "Denies the set_maximizable command without any pre-configured scope.", 2341 "type": "string", 2342 + "const": "core:window:deny-set-maximizable", 2343 + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." 2344 }, 2345 { 2346 "description": "Denies the set_min_size command without any pre-configured scope.", 2347 "type": "string", 2348 + "const": "core:window:deny-set-min-size", 2349 + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." 2350 }, 2351 { 2352 "description": "Denies the set_minimizable command without any pre-configured scope.", 2353 "type": "string", 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." 2362 }, 2363 { 2364 "description": "Denies the set_position command without any pre-configured scope.", 2365 "type": "string", 2366 + "const": "core:window:deny-set-position", 2367 + "markdownDescription": "Denies the set_position command without any pre-configured scope." 2368 }, 2369 { 2370 "description": "Denies the set_progress_bar command without any pre-configured scope.", 2371 "type": "string", 2372 + "const": "core:window:deny-set-progress-bar", 2373 + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." 2374 }, 2375 { 2376 "description": "Denies the set_resizable command without any pre-configured scope.", 2377 "type": "string", 2378 + "const": "core:window:deny-set-resizable", 2379 + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." 2380 }, 2381 { 2382 "description": "Denies the set_shadow command without any pre-configured scope.", 2383 "type": "string", 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." 2392 }, 2393 { 2394 "description": "Denies the set_size command without any pre-configured scope.", 2395 "type": "string", 2396 + "const": "core:window:deny-set-size", 2397 + "markdownDescription": "Denies the set_size command without any pre-configured scope." 2398 }, 2399 { 2400 "description": "Denies the set_size_constraints command without any pre-configured scope.", 2401 "type": "string", 2402 + "const": "core:window:deny-set-size-constraints", 2403 + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." 2404 }, 2405 { 2406 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 2407 "type": "string", 2408 + "const": "core:window:deny-set-skip-taskbar", 2409 + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." 2410 }, 2411 { 2412 "description": "Denies the set_theme command without any pre-configured scope.", 2413 "type": "string", 2414 + "const": "core:window:deny-set-theme", 2415 + "markdownDescription": "Denies the set_theme command without any pre-configured scope." 2416 }, 2417 { 2418 "description": "Denies the set_title command without any pre-configured scope.", 2419 "type": "string", 2420 + "const": "core:window:deny-set-title", 2421 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 2422 }, 2423 { 2424 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 2425 "type": "string", 2426 + "const": "core:window:deny-set-title-bar-style", 2427 + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." 2428 }, 2429 { 2430 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 2431 "type": "string", 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." 2434 }, 2435 { 2436 "description": "Denies the show command without any pre-configured scope.", 2437 "type": "string", 2438 + "const": "core:window:deny-show", 2439 + "markdownDescription": "Denies the show command without any pre-configured scope." 2440 }, 2441 { 2442 "description": "Denies the start_dragging command without any pre-configured scope.", 2443 "type": "string", 2444 + "const": "core:window:deny-start-dragging", 2445 + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." 2446 }, 2447 { 2448 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 2449 "type": "string", 2450 + "const": "core:window:deny-start-resize-dragging", 2451 + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." 2452 }, 2453 { 2454 "description": "Denies the theme command without any pre-configured scope.", 2455 "type": "string", 2456 + "const": "core:window:deny-theme", 2457 + "markdownDescription": "Denies the theme command without any pre-configured scope." 2458 }, 2459 { 2460 "description": "Denies the title command without any pre-configured scope.", 2461 "type": "string", 2462 + "const": "core:window:deny-title", 2463 + "markdownDescription": "Denies the title command without any pre-configured scope." 2464 }, 2465 { 2466 "description": "Denies the toggle_maximize command without any pre-configured scope.", 2467 "type": "string", 2468 + "const": "core:window:deny-toggle-maximize", 2469 + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." 2470 }, 2471 { 2472 "description": "Denies the unmaximize command without any pre-configured scope.", 2473 "type": "string", 2474 + "const": "core:window:deny-unmaximize", 2475 + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." 2476 }, 2477 { 2478 "description": "Denies the unminimize command without any pre-configured scope.", 2479 "type": "string", 2480 + "const": "core:window:deny-unminimize", 2481 + "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2482 }, 2483 { 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`", 2485 "type": "string", 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`" 2488 }, 2489 { 2490 "description": "Enables the fetch command without any pre-configured scope.", 2491 "type": "string", 2492 + "const": "http:allow-fetch", 2493 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 2494 }, 2495 { 2496 "description": "Enables the fetch_cancel command without any pre-configured scope.", 2497 "type": "string", 2498 + "const": "http:allow-fetch-cancel", 2499 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 2500 }, 2501 { 2502 "description": "Enables the fetch_read_body command without any pre-configured scope.", 2503 "type": "string", 2504 + "const": "http:allow-fetch-read-body", 2505 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 2506 }, 2507 { 2508 "description": "Enables the fetch_send command without any pre-configured scope.", 2509 "type": "string", 2510 + "const": "http:allow-fetch-send", 2511 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 2512 }, 2513 { 2514 "description": "Denies the fetch command without any pre-configured scope.", 2515 "type": "string", 2516 + "const": "http:deny-fetch", 2517 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 2518 }, 2519 { 2520 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2521 "type": "string", 2522 + "const": "http:deny-fetch-cancel", 2523 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 2524 }, 2525 { 2526 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2527 "type": "string", 2528 + "const": "http:deny-fetch-read-body", 2529 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 2530 }, 2531 { 2532 "description": "Denies the fetch_send command without any pre-configured scope.", 2533 "type": "string", 2534 + "const": "http:deny-fetch-send", 2535 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 2536 }, 2537 { 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`", 2539 "type": "string", 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`" 2542 }, 2543 { 2544 "description": "Enables the exit command without any pre-configured scope.", 2545 "type": "string", 2546 + "const": "process:allow-exit", 2547 + "markdownDescription": "Enables the exit command without any pre-configured scope." 2548 }, 2549 { 2550 "description": "Enables the restart command without any pre-configured scope.", 2551 "type": "string", 2552 + "const": "process:allow-restart", 2553 + "markdownDescription": "Enables the restart command without any pre-configured scope." 2554 }, 2555 { 2556 "description": "Denies the exit command without any pre-configured scope.", 2557 "type": "string", 2558 + "const": "process:deny-exit", 2559 + "markdownDescription": "Denies the exit command without any pre-configured scope." 2560 }, 2561 { 2562 "description": "Denies the restart command without any pre-configured scope.", 2563 "type": "string", 2564 + "const": "process:deny-restart", 2565 + "markdownDescription": "Denies the restart command without any pre-configured scope." 2566 }, 2567 { 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`", 2569 "type": "string", 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`" 2572 }, 2573 { 2574 "description": "Enables the execute command without any pre-configured scope.", 2575 "type": "string", 2576 + "const": "shell:allow-execute", 2577 + "markdownDescription": "Enables the execute command without any pre-configured scope." 2578 }, 2579 { 2580 "description": "Enables the kill command without any pre-configured scope.", 2581 "type": "string", 2582 + "const": "shell:allow-kill", 2583 + "markdownDescription": "Enables the kill command without any pre-configured scope." 2584 }, 2585 { 2586 "description": "Enables the open command without any pre-configured scope.", 2587 "type": "string", 2588 + "const": "shell:allow-open", 2589 + "markdownDescription": "Enables the open command without any pre-configured scope." 2590 }, 2591 { 2592 "description": "Enables the spawn command without any pre-configured scope.", 2593 "type": "string", 2594 + "const": "shell:allow-spawn", 2595 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 2596 }, 2597 { 2598 "description": "Enables the stdin_write command without any pre-configured scope.", 2599 "type": "string", 2600 + "const": "shell:allow-stdin-write", 2601 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 2602 }, 2603 { 2604 "description": "Denies the execute command without any pre-configured scope.", 2605 "type": "string", 2606 + "const": "shell:deny-execute", 2607 + "markdownDescription": "Denies the execute command without any pre-configured scope." 2608 }, 2609 { 2610 "description": "Denies the kill command without any pre-configured scope.", 2611 "type": "string", 2612 + "const": "shell:deny-kill", 2613 + "markdownDescription": "Denies the kill command without any pre-configured scope." 2614 }, 2615 { 2616 "description": "Denies the open command without any pre-configured scope.", 2617 "type": "string", 2618 + "const": "shell:deny-open", 2619 + "markdownDescription": "Denies the open command without any pre-configured scope." 2620 }, 2621 { 2622 "description": "Denies the spawn command without any pre-configured scope.", 2623 "type": "string", 2624 + "const": "shell:deny-spawn", 2625 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 2626 }, 2627 { 2628 "description": "Denies the stdin_write command without any pre-configured scope.", 2629 "type": "string", 2630 + "const": "shell:deny-stdin-write", 2631 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 2632 } 2633 ] 2634 },
+17 -9
src-tauri/src/frontend_calls/change_final_path.rs
··· 1 use std::fs; 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"); 8 9 - fs::write(&config_path, new_path.as_bytes()).unwrap(); 10 11 match fs::metadata(&new_path) { 12 - Ok(_) => {} 13 Err(_) => { 14 - fs::create_dir(&new_path).unwrap(); 15 } 16 - }; 17 }
··· 1 use std::fs; 2 3 + use tauri::{Emitter, State, Window}; 4 5 + use crate::util::cache::Cache; 6 7 + #[tauri::command] 8 + pub fn change_final_path(new_path: &str, window: Window, cache: State<Cache>) -> bool { 9 match fs::metadata(&new_path) { 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 + } 20 Err(_) => { 21 + window.emit("vrcpm-error", "Error Changing Path: Path does not exist.").unwrap(); 22 + false 23 } 24 + } 25 }
+9 -4
src-tauri/src/frontend_calls/close_splashscreen.rs
··· 1 use std::env; 2 - use tauri::Manager; 3 4 use super::config::get_config_value_string; 5 6 #[tauri::command] 7 - pub fn close_splashscreen(window: tauri::Window) { 8 let args: Vec<String> = env::args().collect(); 9 10 let mut show = true; ··· 14 } 15 } 16 17 - let value: String = match get_config_value_string("start-in-bg".to_owned()) { Some(val) => val, None => "false".to_owned() }; 18 if value == "true"{ 19 show = false; 20 } 21 22 if show { 23 - window.get_webview_window("main").unwrap().show().unwrap(); 24 } 25 }
··· 1 use std::env; 2 + use tauri::{ Emitter, Manager, State }; 3 + 4 + use crate::frontend_calls::config::Config; 5 6 use super::config::get_config_value_string; 7 8 #[tauri::command] 9 + pub fn close_splashscreen( window: tauri::Window, config: State<Config> ) { 10 let args: Vec<String> = env::args().collect(); 11 12 let mut show = true; ··· 16 } 17 } 18 19 + let value: String = match get_config_value_string("start-in-bg".to_owned(), config) { Some(val) => val, None => "false".to_owned() }; 20 if value == "true"{ 21 show = false; 22 } 23 24 if show { 25 + let webview = window.get_webview_window("main").unwrap(); 26 + 27 + webview.show().unwrap(); 28 + webview.emit("show-window", 0).unwrap(); 29 } 30 }
+43 -22
src-tauri/src/frontend_calls/config.rs
··· 1 - use std::{fs, path::PathBuf}; 2 3 use serde_json::Value; 4 5 pub fn get_config_path() -> PathBuf { 6 let path = dirs::config_dir() ··· 17 path 18 } 19 20 - #[tauri::command] 21 - pub fn set_config_value_string(key: String, value: String) { 22 - let path = get_config_path(); 23 24 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 25 - config[key] = Value::from(value); 26 27 - fs::write(path, config.to_string()).unwrap(); 28 } 29 30 #[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(); 35 36 if string.is_some() { 37 Some(string.unwrap().to_owned()) ··· 41 } 42 43 #[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(); 51 } 52 53 #[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() 58 }
··· 1 + use std::{fs, path::PathBuf, sync::Mutex}; 2 3 use serde_json::Value; 4 + use tauri::State; 5 6 pub fn get_config_path() -> PathBuf { 7 let path = dirs::config_dir() ··· 18 path 19 } 20 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(); 48 49 + fs::write(path, string).unwrap(); 50 + } 51 + } 52 53 + #[tauri::command] 54 + pub fn set_config_value_string( key: String, value: String, config: State<Config> ) { 55 + config.set(key, Value::from(value)); 56 } 57 58 #[tauri::command] 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(); 62 63 if string.is_some() { 64 Some(string.unwrap().to_owned()) ··· 68 } 69 70 #[tauri::command] 71 + pub fn set_config_value_int( key: String, value: i64, config: State<Config> ) { 72 + config.set(key, Value::from(value)); 73 } 74 75 #[tauri::command] 76 + pub fn get_config_value_int( key: String, config: State<Config> ) -> Option<i64> { 77 + let string = config.get(key); 78 + string.as_i64() 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 use tauri::State; 2 3 use crate::util::cache::Cache; 4 - use std::{ fs, thread, time::Duration }; 5 6 // Delete a photo when the users confirms the prompt in the ui 7 #[tauri::command] 8 - pub fn delete_photo(path: String, token: String, is_syncing: bool, cache: State<Cache>) { 9 let photo_path = cache.get("photo-path".into()); 10 11 thread::spawn(move || { 12 let p = photo_path.unwrap() + "/" + &path; 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 }); 29 }
··· 1 use tauri::State; 2 3 use crate::util::cache::Cache; 4 + use std::{ fs, thread }; 5 6 // Delete a photo when the users confirms the prompt in the ui 7 #[tauri::command] 8 + pub fn delete_photo(path: String, cache: State<Cache>) { 9 let photo_path = cache.get("photo-path".into()); 10 11 thread::spawn(move || { 12 let p = photo_path.unwrap() + "/" + &path; 13 fs::remove_file(p).unwrap(); 14 }); 15 }
+21 -3
src-tauri/src/frontend_calls/load_photo_meta.rs
··· 20 let mut buffer = Vec::new(); 21 22 let _out = file.read_to_end(&mut buffer); 23 - window 24 - .emit("photo_meta_loaded", PNGImage::new(buffer, photo)) 25 - .unwrap(); 26 } 27 Err(_) => { 28 println!("Cannot read image file: {:?}", base_dir);
··· 20 let mut buffer = Vec::new(); 21 22 let _out = file.read_to_end(&mut buffer); 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 + } 44 } 45 Err(_) => { 46 println!("Cannot read image file: {:?}", base_dir);
+14 -8
src-tauri/src/frontend_calls/load_photos.rs
··· 16 let base_dir = cache.get("photo-path".into()).unwrap(); 17 18 thread::spawn(move || { 19 - 20 let mut photos: Vec<path::PathBuf> = Vec::new(); 21 let mut size: usize = 0; 22 23 for folder in fs::read_dir(&base_dir).unwrap() { 24 let f = folder.unwrap(); 25 26 if f.metadata().unwrap().is_dir() { 27 for photo in fs::read_dir(f.path()).unwrap() { ··· 30 if p.metadata().unwrap().is_file() { 31 let fname = p.path(); 32 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 let name = p.file_name(); 39 let name = name.to_str().unwrap(); 40 41 - let re3_match = re3.is_match(name); 42 43 - if re1.is_match(name) || re2.is_match(name) || re3_match { 44 let path = fname.to_path_buf().clone(); 45 let metadata = fs::metadata(&path).unwrap(); 46
··· 16 let base_dir = cache.get("photo-path".into()).unwrap(); 17 18 thread::spawn(move || { 19 let mut photos: Vec<path::PathBuf> = Vec::new(); 20 let mut size: usize = 0; 21 22 + let re = Regex::new(r"^[0-9]{4}-[0-9]{2}$").unwrap(); 23 + 24 for folder in fs::read_dir(&base_dir).unwrap() { 25 let f = folder.unwrap(); 26 + if !re.is_match(f.file_name().to_str().unwrap()){ continue; } 27 28 if f.metadata().unwrap().is_dir() { 29 for photo in fs::read_dir(f.path()).unwrap() { ··· 32 if p.metadata().unwrap().is_file() { 33 let fname = p.path(); 34 35 let name = p.file_name(); 36 let name = name.to_str().unwrap(); 37 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); 45 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 { 50 let path = fname.to_path_buf().clone(); 51 let metadata = fs::metadata(&path).unwrap(); 52
+1 -3
src-tauri/src/frontend_calls/mod.rs
··· 9 pub mod load_photos; 10 pub mod open_folder; 11 pub mod open_url; 12 - pub mod relaunch; 13 - pub mod start_user_auth; 14 pub mod start_with_win; 15 - pub mod sync_photos;
··· 9 pub mod load_photos; 10 pub mod open_folder; 11 pub mod open_url; 12 pub mod start_with_win; 13 + pub mod copy_image;
+19 -4
src-tauri/src/frontend_calls/open_folder.rs
··· 7 8 #[cfg(target_os = "linux")] 9 { 10 - let url = url.replace("\\", "/"); 11 - let mut path: Vec<&str> = url.split("/").collect(); 12 13 - path.pop(); 14 - Command::new("xdg-open").arg(path.join("/")).spawn().unwrap(); 15 } 16 }
··· 7 8 #[cfg(target_os = "linux")] 9 { 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 + ]; 27 28 + for command in commands{ 29 + if Command::new(command.0).args(command.1).spawn().is_ok() { break; } } 30 } 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 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 3 mod frontend_calls; 4 - mod photosync; 5 mod pngmeta; 6 mod util; 7 mod worldscraper; 8 9 use core::time; 10 use frontend_calls::*; 11 12 use notify::{ EventKind, RecursiveMode, Watcher }; 13 use pngmeta::PNGImage; 14 use regex::Regex; 15 use util::{ cache::Cache, get_photo_path::get_photo_path }; 16 - use std::{ env, fs, thread }; 17 use tauri::{ Emitter, Manager, State, WindowEvent }; 18 - use tauri_plugin_deep_link::DeepLinkExt; 19 20 - // TODO: Linux support 21 22 fn main() { 23 #[cfg(target_os = "linux")] 24 - std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkit being shit 25 26 let cache = Cache::new(); 27 ··· 78 79 println!("Loading App..."); 80 let photos_path = util::get_photo_path::get_photo_path(); 81 82 cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned()); 83 ··· 88 } 89 }; 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 // Listen for file updates, store each update in an mpsc channel and send to the frontend 96 let (sender, receiver) = std::sync::mpsc::channel(); 97 let mut watcher = notify::recommended_watcher(move | res: Result<notify::Event, notify::Error> | { ··· 102 let path = event.paths.first().unwrap(); 103 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 104 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(); 107 108 - if 109 - re1.is_match(&name) || 110 - re2.is_match(&name) 111 - { 112 sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 113 } 114 }, ··· 116 let path = event.paths.first().unwrap(); 117 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 118 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(); 121 122 - if 123 - re1.is_match(&name) || 124 - re2.is_match(&name) 125 - { 126 thread::sleep(time::Duration::from_millis(1000)); 127 sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 128 } ··· 142 ) 143 .unwrap(); 144 145 tauri::Builder::default() 146 - .plugin(tauri_plugin_single_instance::init(| app, argv, _cwd | { 147 app.get_webview_window("main").unwrap().show().unwrap(); 148 - util::handle_deeplink::handle_deeplink(argv[1].clone(), app); 149 })) 150 - .plugin(tauri_plugin_deep_link::init()) 151 .plugin(tauri_plugin_process::init()) 152 .plugin(tauri_plugin_http::init()) 153 .plugin(tauri_plugin_shell::init()) ··· 156 util::handle_uri_proto::handle_uri_proto(req, res, cache); 157 }) 158 .on_window_event(|window, event| match event { 159 - WindowEvent::CloseRequested { api, .. } => { 160 window.hide().unwrap(); 161 api.prevent_close(); 162 } 163 _ => {} 164 }) 165 .manage(cache) 166 .setup(|app| { 167 let handle = app.handle(); 168 - 169 - app.deep_link().register("vrcpm").unwrap(); 170 util::setup_traymenu::setup_traymenu(handle); 171 172 // reads the file update mpsc channel and sends the events to the frontend ··· 190 Ok(()) 191 }) 192 .invoke_handler(tauri::generate_handler![ 193 - start_user_auth::start_user_auth, 194 load_photos::load_photos, 195 close_splashscreen::close_splashscreen, 196 load_photo_meta::load_photo_meta, ··· 202 start_with_win::start_with_win, 203 get_user_photos_path::get_user_photos_path, 204 change_final_path::change_final_path, 205 - sync_photos::sync_photos, 206 util::get_version::get_version, 207 - relaunch::relaunch, 208 config::set_config_value_string, 209 config::get_config_value_string, 210 config::set_config_value_int, 211 config::get_config_value_int, 212 - get_os::get_os 213 ]) 214 .run(tauri::generate_context!()) 215 .expect("error while running tauri application");
··· 1 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 3 mod frontend_calls; 4 mod pngmeta; 5 mod util; 6 mod worldscraper; 7 8 use core::time; 9 + use arboard::Clipboard; 10 use frontend_calls::*; 11 12 use notify::{ EventKind, RecursiveMode, Watcher }; 13 use pngmeta::PNGImage; 14 use regex::Regex; 15 use util::{ cache::Cache, get_photo_path::get_photo_path }; 16 + use std::{ env, fs, sync::Mutex, thread }; 17 use tauri::{ Emitter, Manager, State, WindowEvent }; 18 19 + use crate::frontend_calls::config::{get_config_value_string, Config}; 20 21 fn main() { 22 #[cfg(target_os = "linux")] 23 + std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkitgtk being shit 24 25 let cache = Cache::new(); 26 ··· 77 78 println!("Loading App..."); 79 let photos_path = util::get_photo_path::get_photo_path(); 80 + println!("Loading photos from: {:#?}", &photos_path); 81 82 cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned()); 83 ··· 88 } 89 }; 90 91 // Listen for file updates, store each update in an mpsc channel and send to the frontend 92 let (sender, receiver) = std::sync::mpsc::channel(); 93 let mut watcher = notify::recommended_watcher(move | res: Result<notify::Event, notify::Error> | { ··· 98 let path = event.paths.first().unwrap(); 99 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 100 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); 105 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{ 110 sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 111 } 112 }, ··· 114 let path = event.paths.first().unwrap(); 115 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 116 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 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 thread::sleep(time::Duration::from_millis(1000)); 127 sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 128 } ··· 142 ) 143 .unwrap(); 144 145 + let clipboard = Clipboard::new().unwrap(); 146 + 147 tauri::Builder::default() 148 + .plugin(tauri_plugin_single_instance::init(| app, _argv, _cwd | { 149 app.get_webview_window("main").unwrap().show().unwrap(); 150 })) 151 .plugin(tauri_plugin_process::init()) 152 .plugin(tauri_plugin_http::init()) 153 .plugin(tauri_plugin_shell::init()) ··· 156 util::handle_uri_proto::handle_uri_proto(req, res, cache); 157 }) 158 .on_window_event(|window, event| match event { 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 + 168 window.hide().unwrap(); 169 api.prevent_close(); 170 } 171 _ => {} 172 }) 173 + .manage(Config::new()) 174 .manage(cache) 175 + .manage(Mutex::new(clipboard)) 176 .setup(|app| { 177 let handle = app.handle(); 178 util::setup_traymenu::setup_traymenu(handle); 179 180 // reads the file update mpsc channel and sends the events to the frontend ··· 198 Ok(()) 199 }) 200 .invoke_handler(tauri::generate_handler![ 201 load_photos::load_photos, 202 close_splashscreen::close_splashscreen, 203 load_photo_meta::load_photo_meta, ··· 209 start_with_win::start_with_win, 210 get_user_photos_path::get_user_photos_path, 211 change_final_path::change_final_path, 212 util::get_version::get_version, 213 config::set_config_value_string, 214 config::get_config_value_string, 215 config::set_config_value_int, 216 config::get_config_value_int, 217 + get_os::get_os, 218 + copy_image::copy_image 219 ]) 220 .run(tauri::generate_context!()) 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 use std::str; 3 4 - #[derive(Clone)] 5 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, 15 } 16 17 impl PNGImage { 18 - pub fn new(buff: Vec<u8>, path: String) -> PNGImage { 19 if buff[0] != 0x89 20 || buff[1] != 0x50 21 || buff[2] != 0x4E ··· 26 || buff[7] != 0x0A 27 { 28 dbg!(path); 29 - panic!("Image is not a PNG file"); 30 } 31 32 let mut img = PNGImage { ··· 39 interlace_method: 0, 40 metadata: "".to_string(), 41 path: path, 42 }; 43 44 img.read_png_chunk(8, buff); 45 - img 46 } 47 48 fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) { ··· 82 } 83 } 84 } 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 use std::str; 2 3 + use serde::Serialize; 4 + 5 + #[derive(Clone, Debug, Serialize)] 6 pub struct PNGImage { 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 17 } 18 19 impl PNGImage { 20 + pub fn new(buff: Vec<u8>, path: String) -> Result<PNGImage, &'static str> { 21 if buff[0] != 0x89 22 || buff[1] != 0x50 23 || buff[2] != 0x4E ··· 28 || buff[7] != 0x0A 29 { 30 dbg!(path); 31 + return Err("Image is not a PNG file"); 32 } 33 34 let mut img = PNGImage { ··· 41 interlace_method: 0, 42 metadata: "".to_string(), 43 path: path, 44 + error: false 45 }; 46 47 img.read_png_chunk(8, buff); 48 + Ok(img) 49 } 50 51 fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) { ··· 85 } 86 } 87 }
+1 -1
src-tauri/src/util/cache.rs
··· 1 - use std::{collections::HashMap, sync::Mutex}; 2 3 pub struct Cache{ 4 store: Mutex<HashMap<String, String>>,
··· 1 + use std::{ collections::HashMap, sync::Mutex }; 2 3 pub struct Cache{ 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 8 match fs::read_to_string(config_path) { 9 Ok(path) => { 10 - path::PathBuf::from(path) 11 }, 12 Err(_) => { 13 let p = dirs::picture_dir().unwrap().join("VRChat");
··· 7 8 match fs::read_to_string(config_path) { 9 Ok(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 + } 17 }, 18 Err(_) => { 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 return; 34 } 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 #[cfg(windows)] 43 let path = uri.path().split_at(1).1; 44
··· 33 return; 34 } 35 36 #[cfg(windows)] 37 let path = uri.path().split_at(1).1; 38
-2
src-tauri/src/util/mod.rs
··· 1 - pub mod check_updates; 2 pub mod get_photo_path; 3 pub mod get_version; 4 pub mod handle_uri_proto; 5 - pub mod handle_deeplink; 6 pub mod setup_traymenu; 7 pub mod cache;
··· 1 pub mod get_photo_path; 2 pub mod get_version; 3 pub mod handle_uri_proto; 4 pub mod setup_traymenu; 5 pub mod cache;
+8 -1
src-tauri/src/util/setup_traymenu.rs
··· 1 use tauri::{ 2 menu::{MenuBuilder, MenuItemBuilder}, 3 tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, 4 - AppHandle, Emitter, Manager, 5 }; 6 7 #[derive(serde::Serialize, Clone)] 8 struct EmptyEvent {} ··· 27 TrayIconBuilder::with_id("main") 28 .icon(tauri::image::Image::from_bytes(include_bytes!("../../icons/32x32.png")).unwrap()) 29 .menu(&tray_menu) 30 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 31 "quit" => { 32 std::process::exit(0); 33 } 34 "hide" => {
··· 1 use tauri::{ 2 menu::{MenuBuilder, MenuItemBuilder}, 3 tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, 4 + AppHandle, Emitter, Manager, State, 5 }; 6 + 7 + use crate::frontend_calls::config::Config; 8 9 #[derive(serde::Serialize, Clone)] 10 struct EmptyEvent {} ··· 29 TrayIconBuilder::with_id("main") 30 .icon(tauri::image::Image::from_bytes(include_bytes!("../../icons/32x32.png")).unwrap()) 31 .menu(&tray_menu) 32 + .title("VRChat Photo Manager") 33 + .tooltip("VRChat Photo Manager") 34 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 35 "quit" => { 36 + let config: State<Config> = app.state(); 37 + config.save(); 38 + 39 std::process::exit(0); 40 } 41 "hide" => {
+7 -6
src-tauri/tauri.conf.json
··· 15 "icons/icon.ico" 16 ] 17 }, 18 - "productName": "vrchat-photo-manager", 19 "version": "0.0.1", 20 "identifier": "uk.phaz.vrcpm", 21 - "plugins": {}, 22 "app": { 23 "security": { 24 - "csp": "https://photos.phazed.xyz; connect-src ipc: http://ipc.localhost" 25 }, 26 "windows": [ 27 { ··· 33 "minWidth": 600, 34 "minHeight": 400, 35 "visible": false, 36 - "decorations": false, 37 - "transparent": true, 38 - "titleBarStyle": "Transparent" 39 } 40 ] 41 }
··· 15 "icons/icon.ico" 16 ] 17 }, 18 + "productName": "VRChat Photo Manager", 19 "version": "0.0.1", 20 "identifier": "uk.phaz.vrcpm", 21 + "plugins": { 22 + "shell": { "open": true } 23 + }, 24 "app": { 25 "security": { 26 + "csp": "connect-src https://api.github.com ipc: http://ipc.localhost" 27 }, 28 "windows": [ 29 { ··· 35 "minWidth": 600, 36 "minHeight": 400, 37 "visible": false, 38 + "decorations": true, 39 + "transparent": true 40 } 41 ] 42 }
+1 -1
vite.config.ts
··· 11 12 // https://vitejs.dev/config/ 13 export default defineConfig(async () => ({ 14 - plugins: [solid(),], //fullReloadAlways], 15 16 // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 17 //
··· 11 12 // https://vitejs.dev/config/ 13 export default defineConfig(async () => ({ 14 + plugins: [solid(), fullReloadAlways], 15 16 // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 17 //