A photo manager for VRChat.

Compare changes

Choose any two refs to compare.

+9 -9
README.md
··· 1 1 # VRChat Photo Manager (BETA) 2 2 3 - Download [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest) 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 4 8 5 9 ## Feedback / Bug Reports 6 10 ··· 12 16 13 17 You can find your app version under appllication settings. 14 18 15 - (Please note that there are not debug releases for versions: 0.1.0, 0.1.1, 0.1.2, 0.1.3) 16 - 17 19 ## A photo manager for VRChat. 18 20 19 - ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/c573e27f-52e6-4608-a8ea-a8a83336fbb9) 21 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/bc702ee6-8891-463d-a987-c2db1dc24678" /> 20 22 21 - Files with VRCX metadata: 23 + Files with VRCX metadata + Fetches world information from VRChat: 22 24 23 - ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/06f44b67-083f-487e-b8b4-84c87d07604f) 24 - 25 - Fetches world information from VRChat: 25 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/aae88c53-aab6-4520-bb89-d6f2bca1c51a" /> 26 26 27 27 Searching for photos taken in specific worlds / with specific users: 28 28 29 - ![image](https://github.com/user-attachments/assets/ea67c4ef-c7e8-4f93-a29a-74aff5f35903) 29 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/f9af1724-5bb2-4276-bc32-e818dab31750" />
+10 -8
build-release.sh
··· 1 1 #!/bin/bash 2 2 3 - VERSION=0.2.5 3 + VERSION=0.2.7-hot1 4 4 5 5 # Linux builds 6 6 NO_STRIP=true pnpm tauri build 7 7 8 8 # Windows builds 9 - pnpm tauri build --target x86_64-pc-windows-gnu 10 - pnpm tauri build --debug --target x86_64-pc-windows-gnu 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 11 12 12 # Move Files 13 13 14 14 mkdir builds 15 15 mkdir builds/$VERSION 16 16 17 - mv src-tauri/target/release/bundle/appimage/vrchat-photo-manager_0.0.1_amd64.AppImage builds/$VERSION/vrchat-photo-manager_linux_amd64.AppImage 18 - mv src-tauri/target/release/bundle/deb/vrchat-photo-manager_0.0.1_amd64.deb builds/$VERSION/vrchat-photo-manager_linux_amd64.deb 19 - mv src-tauri/target/release/bundle/rpm/vrchat-photo-manager-0.0.1-1.x86_64.rpm builds/$VERSION/vrchat-photo-manager_linux_x86_64.rpm 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 20 21 - mv src-tauri/target/x86_64-pc-windows-gnu/release/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION.exe 22 - mv src-tauri/target/x86_64-pc-windows-gnu/debug/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION-debug.exe 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
+36 -1
changelog
··· 95 95 - Fixed the "Start with windows" button appearing on linux 96 96 - Fixed linux tray icon title 97 97 - Fixed build-release.sh script outputting the wrong names for windows builds 98 - - Fixed clipboard on linux ( and speeded it up on windows ) 98 + - Fixed clipboard on linux ( and sped it up on windows ) 99 + - Fixed some icons not fading out when moving to the settings menu 100 + - Removed the auto updater 101 + - Removed account login stuff 102 + - Fixed app name on windows 103 + - Update styles 104 + - Fixed filters removing photos without metadata 105 + 106 + v0.2.6: 107 + - Fixed photos not being loaded if they're too low resolution 108 + - Fixed "Open in folder" not selecting files on linux 109 + - Fixed scroll to top button not animating out 110 + - Fixed scroll to top button being ontop of filters menu 111 + - Fixed photo ordering 112 + - Fixed broken legacy named photos 113 + - Fixed photos being loaded with the wrong resolution 114 + 115 + - Added support for multilayer photos 116 + - Added close to tray toggle 117 + - Added update available prompt 118 + 119 + - Remove all sync stuff 120 + - Removed automatic updates 121 + 122 + Hotfix 1: 123 + - Fixed loading when an image file is corrupted 124 + - Fixed update prompt when not connected to internet 125 + 126 + v0.2.7: 127 + - Fixed image resizing when window is thinner than image 128 + - Fixed closing settings with keybinds 129 + - Fixed the behaviour of changing the photo path 130 + - Fixed loading photos in folders that aren't VRChat folders 131 + 132 + Hotfix 1: 133 + - Fixed resizing images (again)
+12 -12
package.json
··· 12 12 }, 13 13 "license": "MIT", 14 14 "dependencies": { 15 - "@tauri-apps/api": "2.0.0-rc.0", 16 - "@tauri-apps/plugin-deep-link": "^2.4.1", 17 - "@tauri-apps/plugin-http": "2.0.0-rc.1", 18 - "@tauri-apps/plugin-process": "2.0.0-rc.0", 19 - "@tauri-apps/plugin-shell": "2.0.0-rc.0", 20 - "@types/animejs": "^3.1.13", 21 - "animejs": "^3.2.2", 22 - "solid-js": "^1.9.7" 15 + "@tauri-apps/api": "2.9.0", 16 + "@tauri-apps/plugin-deep-link": "^2.4.5", 17 + "@tauri-apps/plugin-http": "2.5.4", 18 + "@tauri-apps/plugin-process": "2.3.1", 19 + "@tauri-apps/plugin-shell": "2.3.3", 20 + "animejs": "^4.2.2", 21 + "solid-js": "^1.9.10" 23 22 }, 24 23 "devDependencies": { 25 - "@tauri-apps/cli": "2.0.0-rc.5", 26 - "typescript": "^5.8.3", 27 - "vite": "^5.4.19", 28 - "vite-plugin-solid": "^2.11.8" 24 + "@tauri-apps/cli": "2.9.3", 25 + "@types/animejs": "^3.1.13", 26 + "typescript": "^5.9.3", 27 + "vite": "^7.2.2", 28 + "vite-plugin-solid": "^2.11.10" 29 29 } 30 30 }
+562 -464
pnpm-lock.yaml
··· 9 9 .: 10 10 dependencies: 11 11 '@tauri-apps/api': 12 - specifier: 2.0.0-rc.0 13 - version: 2.0.0-rc.0 12 + specifier: 2.9.0 13 + version: 2.9.0 14 14 '@tauri-apps/plugin-deep-link': 15 - specifier: ^2.4.1 16 - version: 2.4.1 15 + specifier: ^2.4.5 16 + version: 2.4.5 17 17 '@tauri-apps/plugin-http': 18 - specifier: 2.0.0-rc.1 19 - version: 2.0.0-rc.1 18 + specifier: 2.5.4 19 + version: 2.5.4 20 20 '@tauri-apps/plugin-process': 21 - specifier: 2.0.0-rc.0 22 - version: 2.0.0-rc.0 21 + specifier: 2.3.1 22 + version: 2.3.1 23 23 '@tauri-apps/plugin-shell': 24 - specifier: 2.0.0-rc.0 25 - version: 2.0.0-rc.0 26 - '@types/animejs': 27 - specifier: ^3.1.13 28 - version: 3.1.13 24 + specifier: 2.3.3 25 + version: 2.3.3 29 26 animejs: 30 - specifier: ^3.2.2 31 - version: 3.2.2 27 + specifier: ^4.2.2 28 + version: 4.2.2 32 29 solid-js: 33 - specifier: ^1.9.7 34 - version: 1.9.7 30 + specifier: ^1.9.10 31 + version: 1.9.10 35 32 devDependencies: 36 33 '@tauri-apps/cli': 37 - specifier: 2.0.0-rc.5 38 - version: 2.0.0-rc.5 34 + specifier: 2.9.3 35 + version: 2.9.3 36 + '@types/animejs': 37 + specifier: ^3.1.13 38 + version: 3.1.13 39 39 typescript: 40 - specifier: ^5.8.3 41 - version: 5.8.3 40 + specifier: ^5.9.3 41 + version: 5.9.3 42 42 vite: 43 - specifier: ^5.4.19 44 - version: 5.4.19 43 + specifier: ^7.2.2 44 + version: 7.2.2 45 45 vite-plugin-solid: 46 - specifier: ^2.11.8 47 - version: 2.11.8(solid-js@1.9.7)(vite@5.4.19) 46 + specifier: ^2.11.10 47 + version: 2.11.10(solid-js@1.9.10)(vite@7.2.2) 48 48 49 49 packages: 50 50 51 - '@ampproject/remapping@2.3.0': 52 - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 53 - engines: {node: '>=6.0.0'} 54 - 55 51 '@babel/code-frame@7.27.1': 56 52 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 57 53 engines: {node: '>=6.9.0'} 58 54 59 - '@babel/compat-data@7.28.0': 60 - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} 55 + '@babel/compat-data@7.28.5': 56 + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} 61 57 engines: {node: '>=6.9.0'} 62 58 63 - '@babel/core@7.28.0': 64 - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} 59 + '@babel/core@7.28.5': 60 + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} 65 61 engines: {node: '>=6.9.0'} 66 62 67 - '@babel/generator@7.28.0': 68 - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} 63 + '@babel/generator@7.28.5': 64 + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 69 65 engines: {node: '>=6.9.0'} 70 66 71 67 '@babel/helper-compilation-targets@7.27.2': ··· 84 80 resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 85 81 engines: {node: '>=6.9.0'} 86 82 87 - '@babel/helper-module-transforms@7.27.3': 88 - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} 83 + '@babel/helper-module-transforms@7.28.3': 84 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 89 85 engines: {node: '>=6.9.0'} 90 86 peerDependencies: 91 87 '@babel/core': ^7.0.0 ··· 98 94 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 99 95 engines: {node: '>=6.9.0'} 100 96 101 - '@babel/helper-validator-identifier@7.27.1': 102 - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 97 + '@babel/helper-validator-identifier@7.28.5': 98 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 103 99 engines: {node: '>=6.9.0'} 104 100 105 101 '@babel/helper-validator-option@7.27.1': 106 102 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 107 103 engines: {node: '>=6.9.0'} 108 104 109 - '@babel/helpers@7.28.2': 110 - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} 105 + '@babel/helpers@7.28.4': 106 + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 111 107 engines: {node: '>=6.9.0'} 112 108 113 - '@babel/parser@7.28.0': 114 - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} 109 + '@babel/parser@7.28.5': 110 + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 115 111 engines: {node: '>=6.0.0'} 116 112 hasBin: true 117 113 ··· 125 121 resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 126 122 engines: {node: '>=6.9.0'} 127 123 128 - '@babel/traverse@7.28.0': 129 - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} 124 + '@babel/traverse@7.28.5': 125 + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} 130 126 engines: {node: '>=6.9.0'} 131 127 132 - '@babel/types@7.28.2': 133 - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 128 + '@babel/types@7.28.5': 129 + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 134 130 engines: {node: '>=6.9.0'} 135 131 136 - '@esbuild/aix-ppc64@0.21.5': 137 - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 138 - engines: {node: '>=12'} 132 + '@esbuild/aix-ppc64@0.25.12': 133 + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 134 + engines: {node: '>=18'} 139 135 cpu: [ppc64] 140 136 os: [aix] 141 137 142 - '@esbuild/android-arm64@0.21.5': 143 - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 144 - engines: {node: '>=12'} 138 + '@esbuild/android-arm64@0.25.12': 139 + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 140 + engines: {node: '>=18'} 145 141 cpu: [arm64] 146 142 os: [android] 147 143 148 - '@esbuild/android-arm@0.21.5': 149 - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 150 - engines: {node: '>=12'} 144 + '@esbuild/android-arm@0.25.12': 145 + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 146 + engines: {node: '>=18'} 151 147 cpu: [arm] 152 148 os: [android] 153 149 154 - '@esbuild/android-x64@0.21.5': 155 - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 156 - engines: {node: '>=12'} 150 + '@esbuild/android-x64@0.25.12': 151 + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 152 + engines: {node: '>=18'} 157 153 cpu: [x64] 158 154 os: [android] 159 155 160 - '@esbuild/darwin-arm64@0.21.5': 161 - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 162 - engines: {node: '>=12'} 156 + '@esbuild/darwin-arm64@0.25.12': 157 + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 158 + engines: {node: '>=18'} 163 159 cpu: [arm64] 164 160 os: [darwin] 165 161 166 - '@esbuild/darwin-x64@0.21.5': 167 - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 168 - engines: {node: '>=12'} 162 + '@esbuild/darwin-x64@0.25.12': 163 + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 164 + engines: {node: '>=18'} 169 165 cpu: [x64] 170 166 os: [darwin] 171 167 172 - '@esbuild/freebsd-arm64@0.21.5': 173 - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 174 - engines: {node: '>=12'} 168 + '@esbuild/freebsd-arm64@0.25.12': 169 + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 170 + engines: {node: '>=18'} 175 171 cpu: [arm64] 176 172 os: [freebsd] 177 173 178 - '@esbuild/freebsd-x64@0.21.5': 179 - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 180 - engines: {node: '>=12'} 174 + '@esbuild/freebsd-x64@0.25.12': 175 + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 176 + engines: {node: '>=18'} 181 177 cpu: [x64] 182 178 os: [freebsd] 183 179 184 - '@esbuild/linux-arm64@0.21.5': 185 - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 186 - engines: {node: '>=12'} 180 + '@esbuild/linux-arm64@0.25.12': 181 + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 182 + engines: {node: '>=18'} 187 183 cpu: [arm64] 188 184 os: [linux] 189 185 190 - '@esbuild/linux-arm@0.21.5': 191 - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 192 - engines: {node: '>=12'} 186 + '@esbuild/linux-arm@0.25.12': 187 + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 188 + engines: {node: '>=18'} 193 189 cpu: [arm] 194 190 os: [linux] 195 191 196 - '@esbuild/linux-ia32@0.21.5': 197 - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 198 - engines: {node: '>=12'} 192 + '@esbuild/linux-ia32@0.25.12': 193 + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 194 + engines: {node: '>=18'} 199 195 cpu: [ia32] 200 196 os: [linux] 201 197 202 - '@esbuild/linux-loong64@0.21.5': 203 - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 204 - engines: {node: '>=12'} 198 + '@esbuild/linux-loong64@0.25.12': 199 + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 200 + engines: {node: '>=18'} 205 201 cpu: [loong64] 206 202 os: [linux] 207 203 208 - '@esbuild/linux-mips64el@0.21.5': 209 - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 210 - engines: {node: '>=12'} 204 + '@esbuild/linux-mips64el@0.25.12': 205 + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 206 + engines: {node: '>=18'} 211 207 cpu: [mips64el] 212 208 os: [linux] 213 209 214 - '@esbuild/linux-ppc64@0.21.5': 215 - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 216 - engines: {node: '>=12'} 210 + '@esbuild/linux-ppc64@0.25.12': 211 + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 212 + engines: {node: '>=18'} 217 213 cpu: [ppc64] 218 214 os: [linux] 219 215 220 - '@esbuild/linux-riscv64@0.21.5': 221 - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 222 - engines: {node: '>=12'} 216 + '@esbuild/linux-riscv64@0.25.12': 217 + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 218 + engines: {node: '>=18'} 223 219 cpu: [riscv64] 224 220 os: [linux] 225 221 226 - '@esbuild/linux-s390x@0.21.5': 227 - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 228 - engines: {node: '>=12'} 222 + '@esbuild/linux-s390x@0.25.12': 223 + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 224 + engines: {node: '>=18'} 229 225 cpu: [s390x] 230 226 os: [linux] 231 227 232 - '@esbuild/linux-x64@0.21.5': 233 - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 234 - engines: {node: '>=12'} 228 + '@esbuild/linux-x64@0.25.12': 229 + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 230 + engines: {node: '>=18'} 235 231 cpu: [x64] 236 232 os: [linux] 237 233 238 - '@esbuild/netbsd-x64@0.21.5': 239 - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 240 - engines: {node: '>=12'} 234 + '@esbuild/netbsd-arm64@0.25.12': 235 + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 236 + engines: {node: '>=18'} 237 + cpu: [arm64] 238 + os: [netbsd] 239 + 240 + '@esbuild/netbsd-x64@0.25.12': 241 + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 242 + engines: {node: '>=18'} 241 243 cpu: [x64] 242 244 os: [netbsd] 243 245 244 - '@esbuild/openbsd-x64@0.21.5': 245 - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 246 - engines: {node: '>=12'} 246 + '@esbuild/openbsd-arm64@0.25.12': 247 + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 248 + engines: {node: '>=18'} 249 + cpu: [arm64] 250 + os: [openbsd] 251 + 252 + '@esbuild/openbsd-x64@0.25.12': 253 + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 254 + engines: {node: '>=18'} 247 255 cpu: [x64] 248 256 os: [openbsd] 249 257 250 - '@esbuild/sunos-x64@0.21.5': 251 - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 252 - engines: {node: '>=12'} 258 + '@esbuild/openharmony-arm64@0.25.12': 259 + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 260 + engines: {node: '>=18'} 261 + cpu: [arm64] 262 + os: [openharmony] 263 + 264 + '@esbuild/sunos-x64@0.25.12': 265 + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 266 + engines: {node: '>=18'} 253 267 cpu: [x64] 254 268 os: [sunos] 255 269 256 - '@esbuild/win32-arm64@0.21.5': 257 - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 258 - engines: {node: '>=12'} 270 + '@esbuild/win32-arm64@0.25.12': 271 + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 272 + engines: {node: '>=18'} 259 273 cpu: [arm64] 260 274 os: [win32] 261 275 262 - '@esbuild/win32-ia32@0.21.5': 263 - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 264 - engines: {node: '>=12'} 276 + '@esbuild/win32-ia32@0.25.12': 277 + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 278 + engines: {node: '>=18'} 265 279 cpu: [ia32] 266 280 os: [win32] 267 281 268 - '@esbuild/win32-x64@0.21.5': 269 - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 270 - engines: {node: '>=12'} 282 + '@esbuild/win32-x64@0.25.12': 283 + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 284 + engines: {node: '>=18'} 271 285 cpu: [x64] 272 286 os: [win32] 273 287 274 - '@jridgewell/gen-mapping@0.3.12': 275 - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} 288 + '@jridgewell/gen-mapping@0.3.13': 289 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 290 + 291 + '@jridgewell/remapping@2.3.5': 292 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 276 293 277 294 '@jridgewell/resolve-uri@3.1.2': 278 295 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 279 296 engines: {node: '>=6.0.0'} 280 297 281 - '@jridgewell/sourcemap-codec@1.5.4': 282 - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} 298 + '@jridgewell/sourcemap-codec@1.5.5': 299 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 283 300 284 - '@jridgewell/trace-mapping@0.3.29': 285 - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} 301 + '@jridgewell/trace-mapping@0.3.31': 302 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 286 303 287 - '@rollup/rollup-android-arm-eabi@4.46.2': 288 - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} 304 + '@rollup/rollup-android-arm-eabi@4.52.5': 305 + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 289 306 cpu: [arm] 290 307 os: [android] 291 308 292 - '@rollup/rollup-android-arm64@4.46.2': 293 - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} 309 + '@rollup/rollup-android-arm64@4.52.5': 310 + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 294 311 cpu: [arm64] 295 312 os: [android] 296 313 297 - '@rollup/rollup-darwin-arm64@4.46.2': 298 - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} 314 + '@rollup/rollup-darwin-arm64@4.52.5': 315 + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 299 316 cpu: [arm64] 300 317 os: [darwin] 301 318 302 - '@rollup/rollup-darwin-x64@4.46.2': 303 - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} 319 + '@rollup/rollup-darwin-x64@4.52.5': 320 + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 304 321 cpu: [x64] 305 322 os: [darwin] 306 323 307 - '@rollup/rollup-freebsd-arm64@4.46.2': 308 - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} 324 + '@rollup/rollup-freebsd-arm64@4.52.5': 325 + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 309 326 cpu: [arm64] 310 327 os: [freebsd] 311 328 312 - '@rollup/rollup-freebsd-x64@4.46.2': 313 - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} 329 + '@rollup/rollup-freebsd-x64@4.52.5': 330 + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 314 331 cpu: [x64] 315 332 os: [freebsd] 316 333 317 - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': 318 - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} 334 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 335 + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 319 336 cpu: [arm] 320 337 os: [linux] 321 338 322 - '@rollup/rollup-linux-arm-musleabihf@4.46.2': 323 - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} 339 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 340 + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 324 341 cpu: [arm] 325 342 os: [linux] 326 343 327 - '@rollup/rollup-linux-arm64-gnu@4.46.2': 328 - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} 344 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 345 + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 329 346 cpu: [arm64] 330 347 os: [linux] 331 348 332 - '@rollup/rollup-linux-arm64-musl@4.46.2': 333 - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} 349 + '@rollup/rollup-linux-arm64-musl@4.52.5': 350 + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 334 351 cpu: [arm64] 335 352 os: [linux] 336 353 337 - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': 338 - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} 354 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 355 + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 339 356 cpu: [loong64] 340 357 os: [linux] 341 358 342 - '@rollup/rollup-linux-ppc64-gnu@4.46.2': 343 - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} 359 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 360 + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 344 361 cpu: [ppc64] 345 362 os: [linux] 346 363 347 - '@rollup/rollup-linux-riscv64-gnu@4.46.2': 348 - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} 364 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 365 + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 349 366 cpu: [riscv64] 350 367 os: [linux] 351 368 352 - '@rollup/rollup-linux-riscv64-musl@4.46.2': 353 - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} 369 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 370 + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 354 371 cpu: [riscv64] 355 372 os: [linux] 356 373 357 - '@rollup/rollup-linux-s390x-gnu@4.46.2': 358 - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} 374 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 375 + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 359 376 cpu: [s390x] 360 377 os: [linux] 361 378 362 - '@rollup/rollup-linux-x64-gnu@4.46.2': 363 - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} 379 + '@rollup/rollup-linux-x64-gnu@4.52.5': 380 + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 364 381 cpu: [x64] 365 382 os: [linux] 366 383 367 - '@rollup/rollup-linux-x64-musl@4.46.2': 368 - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} 384 + '@rollup/rollup-linux-x64-musl@4.52.5': 385 + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 369 386 cpu: [x64] 370 387 os: [linux] 371 388 372 - '@rollup/rollup-win32-arm64-msvc@4.46.2': 373 - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} 389 + '@rollup/rollup-openharmony-arm64@4.52.5': 390 + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 391 + cpu: [arm64] 392 + os: [openharmony] 393 + 394 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 395 + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 374 396 cpu: [arm64] 375 397 os: [win32] 376 398 377 - '@rollup/rollup-win32-ia32-msvc@4.46.2': 378 - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} 399 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 400 + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 379 401 cpu: [ia32] 380 402 os: [win32] 381 403 382 - '@rollup/rollup-win32-x64-msvc@4.46.2': 383 - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} 404 + '@rollup/rollup-win32-x64-gnu@4.52.5': 405 + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 384 406 cpu: [x64] 385 407 os: [win32] 386 408 387 - '@tauri-apps/api@2.0.0-rc.0': 388 - resolution: {integrity: sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==} 389 - engines: {node: '>= 18.18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} 409 + '@rollup/rollup-win32-x64-msvc@4.52.5': 410 + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 411 + cpu: [x64] 412 + os: [win32] 390 413 391 - '@tauri-apps/api@2.7.0': 392 - resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==} 414 + '@tauri-apps/api@2.9.0': 415 + resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==} 393 416 394 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 395 - resolution: {integrity: sha512-EoduJ5SeMfBKCe7I291JBH+lkrf2E0+mQF1rP+Jq4CjWPer11OeEcUSFtHURB3Z3ItzObQ7ALPulMGhMe6E9rg==} 417 + '@tauri-apps/cli-darwin-arm64@2.9.3': 418 + resolution: {integrity: sha512-W8FQXZXQmQ0Fmj9UJXNrm2mLdIaLLriKVY7o/FzmizyIKTPIvHjfZALTNybbpTQRbJvKoGHLrW1DNzAWVDWJYg==} 396 419 engines: {node: '>= 10'} 397 420 cpu: [arm64] 398 421 os: [darwin] 399 422 400 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 401 - resolution: {integrity: sha512-GdphvNgQWAbVGoD6e2Z5auWFXBcmmbhiwf9UNoKpBQPLfFO6EEJHjXbACr/hAZsqT0nNpZLRoh/5v5HGTmU0XQ==} 423 + '@tauri-apps/cli-darwin-x64@2.9.3': 424 + resolution: {integrity: sha512-zDwu40rlshijt3TU6aRvzPUyVpapsx1sNfOlreDMTaMelQLHl6YoQzSRpLHYwrHrhimxyX2uDqnKIiuGel0Lhg==} 402 425 engines: {node: '>= 10'} 403 426 cpu: [x64] 404 427 os: [darwin] 405 428 406 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 407 - resolution: {integrity: sha512-S47KwAfyRsO2qTqSoadHP4a1cjO9kfQi4QWkoaDjb0BEETdrhPM94qp43cnKP7QWW+msOToMTdlks9HYlhRUww==} 429 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 430 + resolution: {integrity: sha512-+Oc2OfcTRwYtW93VJqd/HOk77buORwC9IToj/qsEvM7bTMq6Kda4alpZprzwrCHYANSw+zD8PgjJdljTpe4p+g==} 408 431 engines: {node: '>= 10'} 409 432 cpu: [arm] 410 433 os: [linux] 411 434 412 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 413 - resolution: {integrity: sha512-Ii9aP/24Rtlci5MaeSaqb6JOLt3cUBA4z4XmGz5VOLLZ+ntRxpfd3xNpLki04V2MOgbAu9BxLAp5UTzELc1/Rg==} 435 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 436 + resolution: {integrity: sha512-59GqU/J1n9wFyAtleoQOaU0oVIo+kwQynEw4meFDoKRXszKGor6lTsbsS3r0QKLSPbc0o/yYGJhqqCtkYjb/eg==} 414 437 engines: {node: '>= 10'} 415 438 cpu: [arm64] 416 439 os: [linux] 417 440 418 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 419 - resolution: {integrity: sha512-noV2sDusI+DsEHl0uMOZ04sQmj65Jo9yjfSg2iv1fnfjBYVbwi6Qj/MaCqyApXESQrpv1XZB3kYI+CkyPnjj2Q==} 441 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 442 + resolution: {integrity: sha512-fzvG+jEn5/iYGNH6Z2IRMheYFC4pJdXa19BR9fFm6Bdn2cuajRLDKdUcEME/DCtwqclphXtFZTrT4oezY5vI/A==} 420 443 engines: {node: '>= 10'} 421 444 cpu: [arm64] 422 445 os: [linux] 423 446 424 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 425 - resolution: {integrity: sha512-iTe9gKO+qgFRjU1sxBvbI8bIRbkOedWvFm/yh8RFi1iJcFwbVnsHWQ8z7BwoNMJLnL2dseZgrGntmS5n9/xSSQ==} 447 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 448 + resolution: {integrity: sha512-qV8DZXI/fZwawk6T3Th1g6smiNC2KeQTk7XFgKvqZ6btC01z3UTsQmNGvI602zwm3Ld1TBZb4+rEWu2QmQimmw==} 449 + engines: {node: '>= 10'} 450 + cpu: [riscv64] 451 + os: [linux] 452 + 453 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 454 + resolution: {integrity: sha512-tquyEONCNRfqEBWEe4eAHnxFN5yY5lFkCuD4w79XLIovUxVftQ684+xLp7zkhntkt4y20SMj2AgJa/+MOlx4Kg==} 426 455 engines: {node: '>= 10'} 427 456 cpu: [x64] 428 457 os: [linux] 429 458 430 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 431 - resolution: {integrity: sha512-R7EyfvfdMtRAKC3QxPn5jVGEH56R4g6hSnR5xXkFnEpioND7SNru5UMBGgseGJ22h/hdjFfqS2vc19291gkVsg==} 459 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 460 + resolution: {integrity: sha512-v2cBIB/6ji8DL+aiL5QUykU3ZO8OoJGyx50/qv2HQVzkf85KdaYSis3D/oVRemN/pcDz+vyCnnL3XnzFnDl4JQ==} 432 461 engines: {node: '>= 10'} 433 462 cpu: [x64] 434 463 os: [linux] 435 464 436 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 437 - resolution: {integrity: sha512-EE7CF//hMWsVZpu9IWXGLDDdMhAiNfHwfLnW4Na1INHKBBb/ynhOd4gKRC3Mi/kgcMfXJAq0nBJFw1mal1q7jg==} 465 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 466 + resolution: {integrity: sha512-ZGvBy7nvrHPbE0HeKp/ioaiw8bNgAHxWnb7JRZ4/G0A+oFj0SeSFxl9k5uU6FKnM7bHM23Gd1oeaDex9g5Fceg==} 438 467 engines: {node: '>= 10'} 439 468 cpu: [arm64] 440 469 os: [win32] 441 470 442 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 443 - resolution: {integrity: sha512-zJosPEw1X1H9nTNsrYVSypRLdMLOiLAY8hlBrgsmw7dmN61lOMLyItWsbiAezYeKIpaFeADurR+5qMHHwzbqeg==} 471 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 472 + resolution: {integrity: sha512-UsgIwOnpCoY9NK9/65QiwgmWVIE80LE7SwRYVblGtmlY9RYfsYvpbItwsovA/AcHMTiO+OCvS/q9yLeqS3m6Sg==} 444 473 engines: {node: '>= 10'} 445 474 cpu: [ia32] 446 475 os: [win32] 447 476 448 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 449 - resolution: {integrity: sha512-PqxbL/e6GraazdwEKN1oX33gYCRf0ns6yuaxHafHM5+Zsv0MZpyPTPLDot/JLKvNBefk6QXZn5fKAIETVtQaGg==} 477 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 478 + resolution: {integrity: sha512-fmw7NrrHE5m49idCvJAx9T9bsupjdJ0a3p3DPCNCZRGANU6R1tA1L+KTlVuUtdAldX2NqU/9UPo2SCslYKgJHQ==} 450 479 engines: {node: '>= 10'} 451 480 cpu: [x64] 452 481 os: [win32] 453 482 454 - '@tauri-apps/cli@2.0.0-rc.5': 455 - resolution: {integrity: sha512-JtFfJg8ZNOrj+S+8RKpcrNIcU5hw0X8JSNs2tUjQq0OZgqIGnRSILYjg7BaZDPEakQXUKsDEufbjbYVNJDIp8g==} 483 + '@tauri-apps/cli@2.9.3': 484 + resolution: {integrity: sha512-BQ7iLUXTQcyG1PpzLWeVSmBCedYDpnA/6Cm/kRFGtqjTf/eVUlyYO5S2ee07tLum3nWwDBWTGFZeruO8yEukfA==} 456 485 engines: {node: '>= 10'} 457 486 hasBin: true 458 487 459 - '@tauri-apps/plugin-deep-link@2.4.1': 460 - resolution: {integrity: sha512-I8Bo+spcAKGhIIJ1qN/gapp/Ot3mosQL98znxr975Zn2ODAkUZ++BQ9FnTpR7PDwfIl5ANSGdIW/YU01zVTcJw==} 488 + '@tauri-apps/plugin-deep-link@2.4.5': 489 + resolution: {integrity: sha512-Zf2RTj1D9IQQ45/jqW8XTKvql24HqlPjcpv0mV/O2jHQkNe11HOTZBVj6IK37qs+MWV7xZzcmazx/QVZnhAwaQ==} 461 490 462 - '@tauri-apps/plugin-http@2.0.0-rc.1': 463 - resolution: {integrity: sha512-j4WdTEKx0CFa6u8ubke0mo75pCrnu6XtrFtvjsh+zjuNYgMG/l0+A1woWXHm73f2Levskhs+KbKcLQA/nr8k2w==} 491 + '@tauri-apps/plugin-http@2.5.4': 492 + resolution: {integrity: sha512-/i4U/9za3mrytTgfRn5RHneKubZE/dwRmshYwyMvNRlkWjvu1m4Ma72kcbVJMZFGXpkbl+qLyWMGrihtWB76Zg==} 464 493 465 - '@tauri-apps/plugin-process@2.0.0-rc.0': 466 - resolution: {integrity: sha512-Z12D/kmQzG1vCVf+jLXPhPDUA0pEjFrsg4p0uwO2sotVLM9287IuTM+aIz9cuAYOxFLKcsnDG7amSCL9IfA1gw==} 494 + '@tauri-apps/plugin-process@2.3.1': 495 + resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} 467 496 468 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 469 - resolution: {integrity: sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==} 497 + '@tauri-apps/plugin-shell@2.3.3': 498 + resolution: {integrity: sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==} 470 499 471 500 '@types/animejs@3.1.13': 472 501 resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==} ··· 480 509 '@types/babel__template@7.4.4': 481 510 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 482 511 483 - '@types/babel__traverse@7.20.7': 484 - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} 512 + '@types/babel__traverse@7.28.0': 513 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 485 514 486 515 '@types/estree@1.0.8': 487 516 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 488 517 489 - animejs@3.2.2: 490 - resolution: {integrity: sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ==} 518 + animejs@4.2.2: 519 + resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==} 491 520 492 - babel-plugin-jsx-dom-expressions@0.39.8: 493 - resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} 521 + babel-plugin-jsx-dom-expressions@0.40.3: 522 + resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==} 494 523 peerDependencies: 495 524 '@babel/core': ^7.20.12 496 525 497 - babel-preset-solid@1.9.6: 498 - resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} 526 + babel-preset-solid@1.9.10: 527 + resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==} 499 528 peerDependencies: 500 529 '@babel/core': ^7.0.0 530 + solid-js: ^1.9.10 531 + peerDependenciesMeta: 532 + solid-js: 533 + optional: true 501 534 502 - browserslist@4.25.1: 503 - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} 535 + baseline-browser-mapping@2.8.25: 536 + resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==} 537 + hasBin: true 538 + 539 + browserslist@4.27.0: 540 + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} 504 541 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 505 542 hasBin: true 506 543 507 - caniuse-lite@1.0.30001731: 508 - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} 544 + caniuse-lite@1.0.30001754: 545 + resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} 509 546 510 547 convert-source-map@2.0.0: 511 548 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} ··· 513 550 csstype@3.1.3: 514 551 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 515 552 516 - debug@4.4.1: 517 - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 553 + debug@4.4.3: 554 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 518 555 engines: {node: '>=6.0'} 519 556 peerDependencies: 520 557 supports-color: '*' ··· 522 559 supports-color: 523 560 optional: true 524 561 525 - electron-to-chromium@1.5.193: 526 - resolution: {integrity: sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA==} 562 + electron-to-chromium@1.5.248: 563 + resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==} 527 564 528 565 entities@6.0.1: 529 566 resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 530 567 engines: {node: '>=0.12'} 531 568 532 - esbuild@0.21.5: 533 - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 534 - engines: {node: '>=12'} 569 + esbuild@0.25.12: 570 + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 571 + engines: {node: '>=18'} 535 572 hasBin: true 536 573 537 574 escalade@3.2.0: 538 575 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 539 576 engines: {node: '>=6'} 577 + 578 + fdir@6.5.0: 579 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 580 + engines: {node: '>=12.0.0'} 581 + peerDependencies: 582 + picomatch: ^3 || ^4 583 + peerDependenciesMeta: 584 + picomatch: 585 + optional: true 540 586 541 587 fsevents@2.3.3: 542 588 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} ··· 582 628 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 583 629 hasBin: true 584 630 585 - node-releases@2.0.19: 586 - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 631 + node-releases@2.0.27: 632 + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} 587 633 588 634 parse5@7.3.0: 589 635 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} ··· 591 637 picocolors@1.1.1: 592 638 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 593 639 640 + picomatch@4.0.3: 641 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 642 + engines: {node: '>=12'} 643 + 594 644 postcss@8.5.6: 595 645 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 596 646 engines: {node: ^10 || ^12 || >=14} 597 647 598 - rollup@4.46.2: 599 - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} 648 + rollup@4.52.5: 649 + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 600 650 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 601 651 hasBin: true 602 652 ··· 604 654 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 605 655 hasBin: true 606 656 607 - seroval-plugins@1.3.2: 608 - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} 657 + seroval-plugins@1.3.3: 658 + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} 609 659 engines: {node: '>=10'} 610 660 peerDependencies: 611 661 seroval: ^1.0 ··· 614 664 resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 615 665 engines: {node: '>=10'} 616 666 617 - solid-js@1.9.7: 618 - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} 667 + solid-js@1.9.10: 668 + resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} 619 669 620 670 solid-refresh@0.6.3: 621 671 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 626 676 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 627 677 engines: {node: '>=0.10.0'} 628 678 629 - typescript@5.8.3: 630 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 679 + tinyglobby@0.2.15: 680 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 681 + engines: {node: '>=12.0.0'} 682 + 683 + typescript@5.9.3: 684 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 631 685 engines: {node: '>=14.17'} 632 686 hasBin: true 633 687 634 - update-browserslist-db@1.1.3: 635 - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 688 + update-browserslist-db@1.1.4: 689 + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} 636 690 hasBin: true 637 691 peerDependencies: 638 692 browserslist: '>= 4.21.0' 639 693 640 - validate-html-nesting@1.2.3: 641 - resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} 642 - 643 - vite-plugin-solid@2.11.8: 644 - resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==} 694 + vite-plugin-solid@2.11.10: 695 + resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==} 645 696 peerDependencies: 646 697 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 647 698 solid-js: ^1.7.2 ··· 650 701 '@testing-library/jest-dom': 651 702 optional: true 652 703 653 - vite@5.4.19: 654 - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} 655 - engines: {node: ^18.0.0 || >=20.0.0} 704 + vite@7.2.2: 705 + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} 706 + engines: {node: ^20.19.0 || >=22.12.0} 656 707 hasBin: true 657 708 peerDependencies: 658 - '@types/node': ^18.0.0 || >=20.0.0 659 - less: '*' 709 + '@types/node': ^20.19.0 || >=22.12.0 710 + jiti: '>=1.21.0' 711 + less: ^4.0.0 660 712 lightningcss: ^1.21.0 661 - sass: '*' 662 - sass-embedded: '*' 663 - stylus: '*' 664 - sugarss: '*' 665 - terser: ^5.4.0 713 + sass: ^1.70.0 714 + sass-embedded: ^1.70.0 715 + stylus: '>=0.54.8' 716 + sugarss: ^5.0.0 717 + terser: ^5.16.0 718 + tsx: ^4.8.1 719 + yaml: ^2.4.2 666 720 peerDependenciesMeta: 667 721 '@types/node': 722 + optional: true 723 + jiti: 668 724 optional: true 669 725 less: 670 726 optional: true ··· 679 735 sugarss: 680 736 optional: true 681 737 terser: 738 + optional: true 739 + tsx: 740 + optional: true 741 + yaml: 682 742 optional: true 683 743 684 744 vitefu@1.1.1: ··· 694 754 695 755 snapshots: 696 756 697 - '@ampproject/remapping@2.3.0': 698 - dependencies: 699 - '@jridgewell/gen-mapping': 0.3.12 700 - '@jridgewell/trace-mapping': 0.3.29 701 - 702 757 '@babel/code-frame@7.27.1': 703 758 dependencies: 704 - '@babel/helper-validator-identifier': 7.27.1 759 + '@babel/helper-validator-identifier': 7.28.5 705 760 js-tokens: 4.0.0 706 761 picocolors: 1.1.1 707 762 708 - '@babel/compat-data@7.28.0': {} 763 + '@babel/compat-data@7.28.5': {} 709 764 710 - '@babel/core@7.28.0': 765 + '@babel/core@7.28.5': 711 766 dependencies: 712 - '@ampproject/remapping': 2.3.0 713 767 '@babel/code-frame': 7.27.1 714 - '@babel/generator': 7.28.0 768 + '@babel/generator': 7.28.5 715 769 '@babel/helper-compilation-targets': 7.27.2 716 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) 717 - '@babel/helpers': 7.28.2 718 - '@babel/parser': 7.28.0 770 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) 771 + '@babel/helpers': 7.28.4 772 + '@babel/parser': 7.28.5 719 773 '@babel/template': 7.27.2 720 - '@babel/traverse': 7.28.0 721 - '@babel/types': 7.28.2 774 + '@babel/traverse': 7.28.5 775 + '@babel/types': 7.28.5 776 + '@jridgewell/remapping': 2.3.5 722 777 convert-source-map: 2.0.0 723 - debug: 4.4.1 778 + debug: 4.4.3 724 779 gensync: 1.0.0-beta.2 725 780 json5: 2.2.3 726 781 semver: 6.3.1 727 782 transitivePeerDependencies: 728 783 - supports-color 729 784 730 - '@babel/generator@7.28.0': 785 + '@babel/generator@7.28.5': 731 786 dependencies: 732 - '@babel/parser': 7.28.0 733 - '@babel/types': 7.28.2 734 - '@jridgewell/gen-mapping': 0.3.12 735 - '@jridgewell/trace-mapping': 0.3.29 787 + '@babel/parser': 7.28.5 788 + '@babel/types': 7.28.5 789 + '@jridgewell/gen-mapping': 0.3.13 790 + '@jridgewell/trace-mapping': 0.3.31 736 791 jsesc: 3.1.0 737 792 738 793 '@babel/helper-compilation-targets@7.27.2': 739 794 dependencies: 740 - '@babel/compat-data': 7.28.0 795 + '@babel/compat-data': 7.28.5 741 796 '@babel/helper-validator-option': 7.27.1 742 - browserslist: 4.25.1 797 + browserslist: 4.27.0 743 798 lru-cache: 5.1.1 744 799 semver: 6.3.1 745 800 ··· 747 802 748 803 '@babel/helper-module-imports@7.18.6': 749 804 dependencies: 750 - '@babel/types': 7.28.2 805 + '@babel/types': 7.28.5 751 806 752 807 '@babel/helper-module-imports@7.27.1': 753 808 dependencies: 754 - '@babel/traverse': 7.28.0 755 - '@babel/types': 7.28.2 809 + '@babel/traverse': 7.28.5 810 + '@babel/types': 7.28.5 756 811 transitivePeerDependencies: 757 812 - supports-color 758 813 759 - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': 814 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': 760 815 dependencies: 761 - '@babel/core': 7.28.0 816 + '@babel/core': 7.28.5 762 817 '@babel/helper-module-imports': 7.27.1 763 - '@babel/helper-validator-identifier': 7.27.1 764 - '@babel/traverse': 7.28.0 818 + '@babel/helper-validator-identifier': 7.28.5 819 + '@babel/traverse': 7.28.5 765 820 transitivePeerDependencies: 766 821 - supports-color 767 822 ··· 769 824 770 825 '@babel/helper-string-parser@7.27.1': {} 771 826 772 - '@babel/helper-validator-identifier@7.27.1': {} 827 + '@babel/helper-validator-identifier@7.28.5': {} 773 828 774 829 '@babel/helper-validator-option@7.27.1': {} 775 830 776 - '@babel/helpers@7.28.2': 831 + '@babel/helpers@7.28.4': 777 832 dependencies: 778 833 '@babel/template': 7.27.2 779 - '@babel/types': 7.28.2 834 + '@babel/types': 7.28.5 780 835 781 - '@babel/parser@7.28.0': 836 + '@babel/parser@7.28.5': 782 837 dependencies: 783 - '@babel/types': 7.28.2 838 + '@babel/types': 7.28.5 784 839 785 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': 840 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': 786 841 dependencies: 787 - '@babel/core': 7.28.0 842 + '@babel/core': 7.28.5 788 843 '@babel/helper-plugin-utils': 7.27.1 789 844 790 845 '@babel/template@7.27.2': 791 846 dependencies: 792 847 '@babel/code-frame': 7.27.1 793 - '@babel/parser': 7.28.0 794 - '@babel/types': 7.28.2 848 + '@babel/parser': 7.28.5 849 + '@babel/types': 7.28.5 795 850 796 - '@babel/traverse@7.28.0': 851 + '@babel/traverse@7.28.5': 797 852 dependencies: 798 853 '@babel/code-frame': 7.27.1 799 - '@babel/generator': 7.28.0 854 + '@babel/generator': 7.28.5 800 855 '@babel/helper-globals': 7.28.0 801 - '@babel/parser': 7.28.0 856 + '@babel/parser': 7.28.5 802 857 '@babel/template': 7.27.2 803 - '@babel/types': 7.28.2 804 - debug: 4.4.1 858 + '@babel/types': 7.28.5 859 + debug: 4.4.3 805 860 transitivePeerDependencies: 806 861 - supports-color 807 862 808 - '@babel/types@7.28.2': 863 + '@babel/types@7.28.5': 809 864 dependencies: 810 865 '@babel/helper-string-parser': 7.27.1 811 - '@babel/helper-validator-identifier': 7.27.1 866 + '@babel/helper-validator-identifier': 7.28.5 867 + 868 + '@esbuild/aix-ppc64@0.25.12': 869 + optional: true 870 + 871 + '@esbuild/android-arm64@0.25.12': 872 + optional: true 873 + 874 + '@esbuild/android-arm@0.25.12': 875 + optional: true 812 876 813 - '@esbuild/aix-ppc64@0.21.5': 877 + '@esbuild/android-x64@0.25.12': 814 878 optional: true 815 879 816 - '@esbuild/android-arm64@0.21.5': 880 + '@esbuild/darwin-arm64@0.25.12': 817 881 optional: true 818 882 819 - '@esbuild/android-arm@0.21.5': 883 + '@esbuild/darwin-x64@0.25.12': 820 884 optional: true 821 885 822 - '@esbuild/android-x64@0.21.5': 886 + '@esbuild/freebsd-arm64@0.25.12': 823 887 optional: true 824 888 825 - '@esbuild/darwin-arm64@0.21.5': 889 + '@esbuild/freebsd-x64@0.25.12': 826 890 optional: true 827 891 828 - '@esbuild/darwin-x64@0.21.5': 892 + '@esbuild/linux-arm64@0.25.12': 829 893 optional: true 830 894 831 - '@esbuild/freebsd-arm64@0.21.5': 895 + '@esbuild/linux-arm@0.25.12': 832 896 optional: true 833 897 834 - '@esbuild/freebsd-x64@0.21.5': 898 + '@esbuild/linux-ia32@0.25.12': 835 899 optional: true 836 900 837 - '@esbuild/linux-arm64@0.21.5': 901 + '@esbuild/linux-loong64@0.25.12': 838 902 optional: true 839 903 840 - '@esbuild/linux-arm@0.21.5': 904 + '@esbuild/linux-mips64el@0.25.12': 841 905 optional: true 842 906 843 - '@esbuild/linux-ia32@0.21.5': 907 + '@esbuild/linux-ppc64@0.25.12': 844 908 optional: true 845 909 846 - '@esbuild/linux-loong64@0.21.5': 910 + '@esbuild/linux-riscv64@0.25.12': 847 911 optional: true 848 912 849 - '@esbuild/linux-mips64el@0.21.5': 913 + '@esbuild/linux-s390x@0.25.12': 850 914 optional: true 851 915 852 - '@esbuild/linux-ppc64@0.21.5': 916 + '@esbuild/linux-x64@0.25.12': 853 917 optional: true 854 918 855 - '@esbuild/linux-riscv64@0.21.5': 919 + '@esbuild/netbsd-arm64@0.25.12': 856 920 optional: true 857 921 858 - '@esbuild/linux-s390x@0.21.5': 922 + '@esbuild/netbsd-x64@0.25.12': 859 923 optional: true 860 924 861 - '@esbuild/linux-x64@0.21.5': 925 + '@esbuild/openbsd-arm64@0.25.12': 862 926 optional: true 863 927 864 - '@esbuild/netbsd-x64@0.21.5': 928 + '@esbuild/openbsd-x64@0.25.12': 865 929 optional: true 866 930 867 - '@esbuild/openbsd-x64@0.21.5': 931 + '@esbuild/openharmony-arm64@0.25.12': 868 932 optional: true 869 933 870 - '@esbuild/sunos-x64@0.21.5': 934 + '@esbuild/sunos-x64@0.25.12': 871 935 optional: true 872 936 873 - '@esbuild/win32-arm64@0.21.5': 937 + '@esbuild/win32-arm64@0.25.12': 874 938 optional: true 875 939 876 - '@esbuild/win32-ia32@0.21.5': 940 + '@esbuild/win32-ia32@0.25.12': 877 941 optional: true 878 942 879 - '@esbuild/win32-x64@0.21.5': 943 + '@esbuild/win32-x64@0.25.12': 880 944 optional: true 881 945 882 - '@jridgewell/gen-mapping@0.3.12': 946 + '@jridgewell/gen-mapping@0.3.13': 883 947 dependencies: 884 - '@jridgewell/sourcemap-codec': 1.5.4 885 - '@jridgewell/trace-mapping': 0.3.29 948 + '@jridgewell/sourcemap-codec': 1.5.5 949 + '@jridgewell/trace-mapping': 0.3.31 950 + 951 + '@jridgewell/remapping@2.3.5': 952 + dependencies: 953 + '@jridgewell/gen-mapping': 0.3.13 954 + '@jridgewell/trace-mapping': 0.3.31 886 955 887 956 '@jridgewell/resolve-uri@3.1.2': {} 888 957 889 - '@jridgewell/sourcemap-codec@1.5.4': {} 958 + '@jridgewell/sourcemap-codec@1.5.5': {} 890 959 891 - '@jridgewell/trace-mapping@0.3.29': 960 + '@jridgewell/trace-mapping@0.3.31': 892 961 dependencies: 893 962 '@jridgewell/resolve-uri': 3.1.2 894 - '@jridgewell/sourcemap-codec': 1.5.4 963 + '@jridgewell/sourcemap-codec': 1.5.5 895 964 896 - '@rollup/rollup-android-arm-eabi@4.46.2': 965 + '@rollup/rollup-android-arm-eabi@4.52.5': 897 966 optional: true 898 967 899 - '@rollup/rollup-android-arm64@4.46.2': 968 + '@rollup/rollup-android-arm64@4.52.5': 900 969 optional: true 901 970 902 - '@rollup/rollup-darwin-arm64@4.46.2': 971 + '@rollup/rollup-darwin-arm64@4.52.5': 903 972 optional: true 904 973 905 - '@rollup/rollup-darwin-x64@4.46.2': 974 + '@rollup/rollup-darwin-x64@4.52.5': 906 975 optional: true 907 976 908 - '@rollup/rollup-freebsd-arm64@4.46.2': 977 + '@rollup/rollup-freebsd-arm64@4.52.5': 909 978 optional: true 910 979 911 - '@rollup/rollup-freebsd-x64@4.46.2': 980 + '@rollup/rollup-freebsd-x64@4.52.5': 912 981 optional: true 913 982 914 - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': 983 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 915 984 optional: true 916 985 917 - '@rollup/rollup-linux-arm-musleabihf@4.46.2': 986 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 918 987 optional: true 919 988 920 - '@rollup/rollup-linux-arm64-gnu@4.46.2': 989 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 921 990 optional: true 922 991 923 - '@rollup/rollup-linux-arm64-musl@4.46.2': 992 + '@rollup/rollup-linux-arm64-musl@4.52.5': 924 993 optional: true 925 994 926 - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': 995 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 927 996 optional: true 928 997 929 - '@rollup/rollup-linux-ppc64-gnu@4.46.2': 998 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 930 999 optional: true 931 1000 932 - '@rollup/rollup-linux-riscv64-gnu@4.46.2': 1001 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 933 1002 optional: true 934 1003 935 - '@rollup/rollup-linux-riscv64-musl@4.46.2': 1004 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 936 1005 optional: true 937 1006 938 - '@rollup/rollup-linux-s390x-gnu@4.46.2': 1007 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 939 1008 optional: true 940 1009 941 - '@rollup/rollup-linux-x64-gnu@4.46.2': 1010 + '@rollup/rollup-linux-x64-gnu@4.52.5': 942 1011 optional: true 943 1012 944 - '@rollup/rollup-linux-x64-musl@4.46.2': 1013 + '@rollup/rollup-linux-x64-musl@4.52.5': 945 1014 optional: true 946 1015 947 - '@rollup/rollup-win32-arm64-msvc@4.46.2': 1016 + '@rollup/rollup-openharmony-arm64@4.52.5': 948 1017 optional: true 949 1018 950 - '@rollup/rollup-win32-ia32-msvc@4.46.2': 1019 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 951 1020 optional: true 952 1021 953 - '@rollup/rollup-win32-x64-msvc@4.46.2': 1022 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 954 1023 optional: true 955 1024 956 - '@tauri-apps/api@2.0.0-rc.0': {} 1025 + '@rollup/rollup-win32-x64-gnu@4.52.5': 1026 + optional: true 957 1027 958 - '@tauri-apps/api@2.7.0': {} 1028 + '@rollup/rollup-win32-x64-msvc@4.52.5': 1029 + optional: true 959 1030 960 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 1031 + '@tauri-apps/api@2.9.0': {} 1032 + 1033 + '@tauri-apps/cli-darwin-arm64@2.9.3': 961 1034 optional: true 962 1035 963 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 1036 + '@tauri-apps/cli-darwin-x64@2.9.3': 964 1037 optional: true 965 1038 966 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 1039 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 967 1040 optional: true 968 1041 969 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 1042 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 970 1043 optional: true 971 1044 972 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 1045 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 973 1046 optional: true 974 1047 975 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 1048 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 976 1049 optional: true 977 1050 978 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 1051 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 1052 + optional: true 1053 + 1054 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 979 1055 optional: true 980 1056 981 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 1057 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 982 1058 optional: true 983 1059 984 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 1060 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 985 1061 optional: true 986 1062 987 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 1063 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 988 1064 optional: true 989 1065 990 - '@tauri-apps/cli@2.0.0-rc.5': 1066 + '@tauri-apps/cli@2.9.3': 991 1067 optionalDependencies: 992 - '@tauri-apps/cli-darwin-arm64': 2.0.0-rc.5 993 - '@tauri-apps/cli-darwin-x64': 2.0.0-rc.5 994 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.5 995 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.5 996 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.5 997 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.5 998 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.5 999 - '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.5 1000 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.5 1001 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.5 1068 + '@tauri-apps/cli-darwin-arm64': 2.9.3 1069 + '@tauri-apps/cli-darwin-x64': 2.9.3 1070 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.9.3 1071 + '@tauri-apps/cli-linux-arm64-gnu': 2.9.3 1072 + '@tauri-apps/cli-linux-arm64-musl': 2.9.3 1073 + '@tauri-apps/cli-linux-riscv64-gnu': 2.9.3 1074 + '@tauri-apps/cli-linux-x64-gnu': 2.9.3 1075 + '@tauri-apps/cli-linux-x64-musl': 2.9.3 1076 + '@tauri-apps/cli-win32-arm64-msvc': 2.9.3 1077 + '@tauri-apps/cli-win32-ia32-msvc': 2.9.3 1078 + '@tauri-apps/cli-win32-x64-msvc': 2.9.3 1002 1079 1003 - '@tauri-apps/plugin-deep-link@2.4.1': 1080 + '@tauri-apps/plugin-deep-link@2.4.5': 1004 1081 dependencies: 1005 - '@tauri-apps/api': 2.7.0 1082 + '@tauri-apps/api': 2.9.0 1006 1083 1007 - '@tauri-apps/plugin-http@2.0.0-rc.1': 1084 + '@tauri-apps/plugin-http@2.5.4': 1008 1085 dependencies: 1009 - '@tauri-apps/api': 2.7.0 1086 + '@tauri-apps/api': 2.9.0 1010 1087 1011 - '@tauri-apps/plugin-process@2.0.0-rc.0': 1088 + '@tauri-apps/plugin-process@2.3.1': 1012 1089 dependencies: 1013 - '@tauri-apps/api': 2.0.0-rc.0 1090 + '@tauri-apps/api': 2.9.0 1014 1091 1015 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 1092 + '@tauri-apps/plugin-shell@2.3.3': 1016 1093 dependencies: 1017 - '@tauri-apps/api': 2.0.0-rc.0 1094 + '@tauri-apps/api': 2.9.0 1018 1095 1019 1096 '@types/animejs@3.1.13': {} 1020 1097 1021 1098 '@types/babel__core@7.20.5': 1022 1099 dependencies: 1023 - '@babel/parser': 7.28.0 1024 - '@babel/types': 7.28.2 1100 + '@babel/parser': 7.28.5 1101 + '@babel/types': 7.28.5 1025 1102 '@types/babel__generator': 7.27.0 1026 1103 '@types/babel__template': 7.4.4 1027 - '@types/babel__traverse': 7.20.7 1104 + '@types/babel__traverse': 7.28.0 1028 1105 1029 1106 '@types/babel__generator@7.27.0': 1030 1107 dependencies: 1031 - '@babel/types': 7.28.2 1108 + '@babel/types': 7.28.5 1032 1109 1033 1110 '@types/babel__template@7.4.4': 1034 1111 dependencies: 1035 - '@babel/parser': 7.28.0 1036 - '@babel/types': 7.28.2 1112 + '@babel/parser': 7.28.5 1113 + '@babel/types': 7.28.5 1037 1114 1038 - '@types/babel__traverse@7.20.7': 1115 + '@types/babel__traverse@7.28.0': 1039 1116 dependencies: 1040 - '@babel/types': 7.28.2 1117 + '@babel/types': 7.28.5 1041 1118 1042 1119 '@types/estree@1.0.8': {} 1043 1120 1044 - animejs@3.2.2: {} 1121 + animejs@4.2.2: {} 1045 1122 1046 - babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0): 1123 + babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.28.5): 1047 1124 dependencies: 1048 - '@babel/core': 7.28.0 1125 + '@babel/core': 7.28.5 1049 1126 '@babel/helper-module-imports': 7.18.6 1050 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) 1051 - '@babel/types': 7.28.2 1127 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) 1128 + '@babel/types': 7.28.5 1052 1129 html-entities: 2.3.3 1053 1130 parse5: 7.3.0 1054 - validate-html-nesting: 1.2.3 1055 1131 1056 - babel-preset-solid@1.9.6(@babel/core@7.28.0): 1132 + babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10): 1057 1133 dependencies: 1058 - '@babel/core': 7.28.0 1059 - babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0) 1134 + '@babel/core': 7.28.5 1135 + babel-plugin-jsx-dom-expressions: 0.40.3(@babel/core@7.28.5) 1136 + optionalDependencies: 1137 + solid-js: 1.9.10 1060 1138 1061 - browserslist@4.25.1: 1139 + baseline-browser-mapping@2.8.25: {} 1140 + 1141 + browserslist@4.27.0: 1062 1142 dependencies: 1063 - caniuse-lite: 1.0.30001731 1064 - electron-to-chromium: 1.5.193 1065 - node-releases: 2.0.19 1066 - update-browserslist-db: 1.1.3(browserslist@4.25.1) 1143 + baseline-browser-mapping: 2.8.25 1144 + caniuse-lite: 1.0.30001754 1145 + electron-to-chromium: 1.5.248 1146 + node-releases: 2.0.27 1147 + update-browserslist-db: 1.1.4(browserslist@4.27.0) 1067 1148 1068 - caniuse-lite@1.0.30001731: {} 1149 + caniuse-lite@1.0.30001754: {} 1069 1150 1070 1151 convert-source-map@2.0.0: {} 1071 1152 1072 1153 csstype@3.1.3: {} 1073 1154 1074 - debug@4.4.1: 1155 + debug@4.4.3: 1075 1156 dependencies: 1076 1157 ms: 2.1.3 1077 1158 1078 - electron-to-chromium@1.5.193: {} 1159 + electron-to-chromium@1.5.248: {} 1079 1160 1080 1161 entities@6.0.1: {} 1081 1162 1082 - esbuild@0.21.5: 1163 + esbuild@0.25.12: 1083 1164 optionalDependencies: 1084 - '@esbuild/aix-ppc64': 0.21.5 1085 - '@esbuild/android-arm': 0.21.5 1086 - '@esbuild/android-arm64': 0.21.5 1087 - '@esbuild/android-x64': 0.21.5 1088 - '@esbuild/darwin-arm64': 0.21.5 1089 - '@esbuild/darwin-x64': 0.21.5 1090 - '@esbuild/freebsd-arm64': 0.21.5 1091 - '@esbuild/freebsd-x64': 0.21.5 1092 - '@esbuild/linux-arm': 0.21.5 1093 - '@esbuild/linux-arm64': 0.21.5 1094 - '@esbuild/linux-ia32': 0.21.5 1095 - '@esbuild/linux-loong64': 0.21.5 1096 - '@esbuild/linux-mips64el': 0.21.5 1097 - '@esbuild/linux-ppc64': 0.21.5 1098 - '@esbuild/linux-riscv64': 0.21.5 1099 - '@esbuild/linux-s390x': 0.21.5 1100 - '@esbuild/linux-x64': 0.21.5 1101 - '@esbuild/netbsd-x64': 0.21.5 1102 - '@esbuild/openbsd-x64': 0.21.5 1103 - '@esbuild/sunos-x64': 0.21.5 1104 - '@esbuild/win32-arm64': 0.21.5 1105 - '@esbuild/win32-ia32': 0.21.5 1106 - '@esbuild/win32-x64': 0.21.5 1165 + '@esbuild/aix-ppc64': 0.25.12 1166 + '@esbuild/android-arm': 0.25.12 1167 + '@esbuild/android-arm64': 0.25.12 1168 + '@esbuild/android-x64': 0.25.12 1169 + '@esbuild/darwin-arm64': 0.25.12 1170 + '@esbuild/darwin-x64': 0.25.12 1171 + '@esbuild/freebsd-arm64': 0.25.12 1172 + '@esbuild/freebsd-x64': 0.25.12 1173 + '@esbuild/linux-arm': 0.25.12 1174 + '@esbuild/linux-arm64': 0.25.12 1175 + '@esbuild/linux-ia32': 0.25.12 1176 + '@esbuild/linux-loong64': 0.25.12 1177 + '@esbuild/linux-mips64el': 0.25.12 1178 + '@esbuild/linux-ppc64': 0.25.12 1179 + '@esbuild/linux-riscv64': 0.25.12 1180 + '@esbuild/linux-s390x': 0.25.12 1181 + '@esbuild/linux-x64': 0.25.12 1182 + '@esbuild/netbsd-arm64': 0.25.12 1183 + '@esbuild/netbsd-x64': 0.25.12 1184 + '@esbuild/openbsd-arm64': 0.25.12 1185 + '@esbuild/openbsd-x64': 0.25.12 1186 + '@esbuild/openharmony-arm64': 0.25.12 1187 + '@esbuild/sunos-x64': 0.25.12 1188 + '@esbuild/win32-arm64': 0.25.12 1189 + '@esbuild/win32-ia32': 0.25.12 1190 + '@esbuild/win32-x64': 0.25.12 1107 1191 1108 1192 escalade@3.2.0: {} 1109 1193 1194 + fdir@6.5.0(picomatch@4.0.3): 1195 + optionalDependencies: 1196 + picomatch: 4.0.3 1197 + 1110 1198 fsevents@2.3.3: 1111 1199 optional: true 1112 1200 ··· 1134 1222 1135 1223 nanoid@3.3.11: {} 1136 1224 1137 - node-releases@2.0.19: {} 1225 + node-releases@2.0.27: {} 1138 1226 1139 1227 parse5@7.3.0: 1140 1228 dependencies: ··· 1142 1230 1143 1231 picocolors@1.1.1: {} 1144 1232 1233 + picomatch@4.0.3: {} 1234 + 1145 1235 postcss@8.5.6: 1146 1236 dependencies: 1147 1237 nanoid: 3.3.11 1148 1238 picocolors: 1.1.1 1149 1239 source-map-js: 1.2.1 1150 1240 1151 - rollup@4.46.2: 1241 + rollup@4.52.5: 1152 1242 dependencies: 1153 1243 '@types/estree': 1.0.8 1154 1244 optionalDependencies: 1155 - '@rollup/rollup-android-arm-eabi': 4.46.2 1156 - '@rollup/rollup-android-arm64': 4.46.2 1157 - '@rollup/rollup-darwin-arm64': 4.46.2 1158 - '@rollup/rollup-darwin-x64': 4.46.2 1159 - '@rollup/rollup-freebsd-arm64': 4.46.2 1160 - '@rollup/rollup-freebsd-x64': 4.46.2 1161 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 1162 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 1163 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 1164 - '@rollup/rollup-linux-arm64-musl': 4.46.2 1165 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 1166 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 1167 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 1168 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 1169 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 1170 - '@rollup/rollup-linux-x64-gnu': 4.46.2 1171 - '@rollup/rollup-linux-x64-musl': 4.46.2 1172 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 1173 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 1174 - '@rollup/rollup-win32-x64-msvc': 4.46.2 1245 + '@rollup/rollup-android-arm-eabi': 4.52.5 1246 + '@rollup/rollup-android-arm64': 4.52.5 1247 + '@rollup/rollup-darwin-arm64': 4.52.5 1248 + '@rollup/rollup-darwin-x64': 4.52.5 1249 + '@rollup/rollup-freebsd-arm64': 4.52.5 1250 + '@rollup/rollup-freebsd-x64': 4.52.5 1251 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 1252 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 1253 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 1254 + '@rollup/rollup-linux-arm64-musl': 4.52.5 1255 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 1256 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 1257 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 1258 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 1259 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 1260 + '@rollup/rollup-linux-x64-gnu': 4.52.5 1261 + '@rollup/rollup-linux-x64-musl': 4.52.5 1262 + '@rollup/rollup-openharmony-arm64': 4.52.5 1263 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 1264 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 1265 + '@rollup/rollup-win32-x64-gnu': 4.52.5 1266 + '@rollup/rollup-win32-x64-msvc': 4.52.5 1175 1267 fsevents: 2.3.3 1176 1268 1177 1269 semver@6.3.1: {} 1178 1270 1179 - seroval-plugins@1.3.2(seroval@1.3.2): 1271 + seroval-plugins@1.3.3(seroval@1.3.2): 1180 1272 dependencies: 1181 1273 seroval: 1.3.2 1182 1274 1183 1275 seroval@1.3.2: {} 1184 1276 1185 - solid-js@1.9.7: 1277 + solid-js@1.9.10: 1186 1278 dependencies: 1187 1279 csstype: 3.1.3 1188 1280 seroval: 1.3.2 1189 - seroval-plugins: 1.3.2(seroval@1.3.2) 1281 + seroval-plugins: 1.3.3(seroval@1.3.2) 1190 1282 1191 - solid-refresh@0.6.3(solid-js@1.9.7): 1283 + solid-refresh@0.6.3(solid-js@1.9.10): 1192 1284 dependencies: 1193 - '@babel/generator': 7.28.0 1285 + '@babel/generator': 7.28.5 1194 1286 '@babel/helper-module-imports': 7.27.1 1195 - '@babel/types': 7.28.2 1196 - solid-js: 1.9.7 1287 + '@babel/types': 7.28.5 1288 + solid-js: 1.9.10 1197 1289 transitivePeerDependencies: 1198 1290 - supports-color 1199 1291 1200 1292 source-map-js@1.2.1: {} 1201 1293 1202 - typescript@5.8.3: {} 1294 + tinyglobby@0.2.15: 1295 + dependencies: 1296 + fdir: 6.5.0(picomatch@4.0.3) 1297 + picomatch: 4.0.3 1203 1298 1204 - update-browserslist-db@1.1.3(browserslist@4.25.1): 1299 + typescript@5.9.3: {} 1300 + 1301 + update-browserslist-db@1.1.4(browserslist@4.27.0): 1205 1302 dependencies: 1206 - browserslist: 4.25.1 1303 + browserslist: 4.27.0 1207 1304 escalade: 3.2.0 1208 1305 picocolors: 1.1.1 1209 1306 1210 - validate-html-nesting@1.2.3: {} 1211 - 1212 - vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@5.4.19): 1307 + vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.2): 1213 1308 dependencies: 1214 - '@babel/core': 7.28.0 1309 + '@babel/core': 7.28.5 1215 1310 '@types/babel__core': 7.20.5 1216 - babel-preset-solid: 1.9.6(@babel/core@7.28.0) 1311 + babel-preset-solid: 1.9.10(@babel/core@7.28.5)(solid-js@1.9.10) 1217 1312 merge-anything: 5.1.7 1218 - solid-js: 1.9.7 1219 - solid-refresh: 0.6.3(solid-js@1.9.7) 1220 - vite: 5.4.19 1221 - vitefu: 1.1.1(vite@5.4.19) 1313 + solid-js: 1.9.10 1314 + solid-refresh: 0.6.3(solid-js@1.9.10) 1315 + vite: 7.2.2 1316 + vitefu: 1.1.1(vite@7.2.2) 1222 1317 transitivePeerDependencies: 1223 1318 - supports-color 1224 1319 1225 - vite@5.4.19: 1320 + vite@7.2.2: 1226 1321 dependencies: 1227 - esbuild: 0.21.5 1322 + esbuild: 0.25.12 1323 + fdir: 6.5.0(picomatch@4.0.3) 1324 + picomatch: 4.0.3 1228 1325 postcss: 8.5.6 1229 - rollup: 4.46.2 1326 + rollup: 4.52.5 1327 + tinyglobby: 0.2.15 1230 1328 optionalDependencies: 1231 1329 fsevents: 2.3.3 1232 1330 1233 - vitefu@1.1.1(vite@5.4.19): 1331 + vitefu@1.1.1(vite@7.2.2): 1234 1332 optionalDependencies: 1235 - vite: 5.4.19 1333 + vite: 7.2.2 1236 1334 1237 1335 yallist@3.1.1: {}
+1 -1
public/icon/angle-down-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/></svg>
+1 -1
public/icon/angle-up-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"/></svg>
+1 -1
public/icon/arrow-left-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
+1 -1
public/icon/arrow-right-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/></svg>
+1 -1
public/icon/arrows-rotate-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg>
+1 -1
public/icon/caret-down-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg>
+1 -1
public/icon/check-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>
+1 -1
public/icon/clock-regular.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg>
+1 -1
public/icon/copy-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"/></svg>
+1
public/icon/download-solid-full.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M352 96C352 78.3 337.7 64 320 64C302.3 64 288 78.3 288 96L288 306.7L246.6 265.3C234.1 252.8 213.8 252.8 201.3 265.3C188.8 277.8 188.8 298.1 201.3 310.6L297.3 406.6C309.8 419.1 330.1 419.1 342.6 406.6L438.6 310.6C451.1 298.1 451.1 277.8 438.6 265.3C426.1 252.8 405.8 252.8 393.3 265.3L352 306.7L352 96zM160 384C124.7 384 96 412.7 96 448L96 480C96 515.3 124.7 544 160 544L480 544C515.3 544 544 515.3 544 480L544 448C544 412.7 515.3 384 480 384L433.1 384L376.5 440.6C345.3 471.8 294.6 471.8 263.4 440.6L206.9 384L160 384zM464 440C477.3 440 488 450.7 488 464C488 477.3 477.3 488 464 488C450.7 488 440 477.3 440 464C440 450.7 450.7 440 464 440z"/></svg>
+1
public/icon/gear-solid-full.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M259.1 73.5C262.1 58.7 275.2 48 290.4 48L350.2 48C365.4 48 378.5 58.7 381.5 73.5L396 143.5C410.1 149.5 423.3 157.2 435.3 166.3L503.1 143.8C517.5 139 533.3 145 540.9 158.2L570.8 210C578.4 223.2 575.7 239.8 564.3 249.9L511 297.3C511.9 304.7 512.3 312.3 512.3 320C512.3 327.7 511.8 335.3 511 342.7L564.4 390.2C575.8 400.3 578.4 417 570.9 430.1L541 481.9C533.4 495 517.6 501.1 503.2 496.3L435.4 473.8C423.3 482.9 410.1 490.5 396.1 496.6L381.7 566.5C378.6 581.4 365.5 592 350.4 592L290.6 592C275.4 592 262.3 581.3 259.3 566.5L244.9 496.6C230.8 490.6 217.7 482.9 205.6 473.8L137.5 496.3C123.1 501.1 107.3 495.1 99.7 481.9L69.8 430.1C62.2 416.9 64.9 400.3 76.3 390.2L129.7 342.7C128.8 335.3 128.4 327.7 128.4 320C128.4 312.3 128.9 304.7 129.7 297.3L76.3 249.8C64.9 239.7 62.3 223 69.8 209.9L99.7 158.1C107.3 144.9 123.1 138.9 137.5 143.7L205.3 166.2C217.4 157.1 230.6 149.5 244.6 143.4L259.1 73.5zM320.3 400C364.5 399.8 400.2 363.9 400 319.7C399.8 275.5 363.9 239.8 319.7 240C275.5 240.2 239.8 276.1 240 320.3C240.2 364.5 276.1 400.2 320.3 400z"/></svg>
+1
public/icon/layer-group-solid-full.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M296.5 69.2C311.4 62.3 328.6 62.3 343.5 69.2L562.1 170.2C570.6 174.1 576 182.6 576 192C576 201.4 570.6 209.9 562.1 213.8L343.5 314.8C328.6 321.7 311.4 321.7 296.5 314.8L77.9 213.8C69.4 209.8 64 201.3 64 192C64 182.7 69.4 174.1 77.9 170.2L296.5 69.2zM112.1 282.4L276.4 358.3C304.1 371.1 336 371.1 363.7 358.3L528 282.4L562.1 298.2C570.6 302.1 576 310.6 576 320C576 329.4 570.6 337.9 562.1 341.8L343.5 442.8C328.6 449.7 311.4 449.7 296.5 442.8L77.9 341.8C69.4 337.8 64 329.3 64 320C64 310.7 69.4 302.1 77.9 298.2L112 282.4zM77.9 426.2L112 410.4L276.3 486.3C304 499.1 335.9 499.1 363.6 486.3L527.9 410.4L562 426.2C570.5 430.1 575.9 438.6 575.9 448C575.9 457.4 570.5 465.9 562 469.8L343.4 570.8C328.5 577.7 311.3 577.7 296.4 570.8L77.9 469.8C69.4 465.8 64 457.3 64 448C64 438.7 69.4 430.1 77.9 426.2z"/></svg>
+1 -1
public/icon/minus-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg>
+1 -1
public/icon/sliders-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z"/></svg>
+1 -1
public/icon/square-regular.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg>
+1 -1
public/icon/trash-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>
+1 -1
public/icon/user-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg>
+1 -1
public/icon/x-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/></svg> 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/></svg>
+26 -6
src/Components/App.tsx
··· 1 - import { onMount } from "solid-js"; 2 - import anime from "animejs"; 1 + import { createSignal, onMount } from "solid-js"; 3 2 4 - import NavBar from "./NavBar"; 5 3 import PhotoList from "./PhotoList"; 6 4 import PhotoViewer from "./PhotoViewer"; 7 5 import SettingsMenu from "./SettingsMenu"; 6 + import { animate, utils } from "animejs"; 7 + import { listen } from "@tauri-apps/api/event"; 8 8 9 9 let App = () => { 10 + let [ errorText, setErrorText ] = createSignal(''); 11 + 10 12 onMount(() => { 11 - anime.set('.settings', 13 + utils.set('.settings', 12 14 { 13 15 display: 'none', 14 16 opacity: 0, 15 17 translateX: '500px' 16 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 + }); 17 38 }) 18 39 19 40 return ( 20 41 <div class="container"> 21 - <NavBar /> 22 - 23 42 <PhotoList /> 24 43 <PhotoViewer /> 25 44 26 45 <SettingsMenu /> 27 46 28 47 <div class="copy-notif">Image Copied!</div> 48 + <div class="error-notif">{ errorText() }</div> 29 49 </div> 30 50 ); 31 51 }
-133
src/Components/Managers/AccountManager.tsx
··· 1 - import { invoke } from "@tauri-apps/api/core"; 2 - 3 - import { ProfileData } from "../Structs/ProfileData"; 4 - import { StorageData } from "../Structs/StorageData"; 5 - import { Accessor, createSignal, Setter } from "solid-js"; 6 - 7 - import { listen } from "@tauri-apps/api/event"; 8 - import { fetch } from "@tauri-apps/plugin-http"; 9 - 10 - export class AccountManager{ 11 - public Profile: Accessor<ProfileData | null>; 12 - public Storage: Accessor<StorageData | null>; 13 - 14 - public hasAccount: Accessor<boolean>; 15 - public isLoading: Accessor<boolean>; 16 - 17 - private _setProfile: Setter<ProfileData | null>; 18 - private _setStorage: Setter<StorageData | null>; 19 - 20 - private _setHasAccount: Setter<boolean>; 21 - private _setIsLoading: Setter<boolean>; 22 - 23 - private _loginEventCallbacks: Array<() => void> = []; 24 - 25 - private _emitLoginCallbacks(){ 26 - this._loginEventCallbacks.forEach(e => e()); 27 - } 28 - 29 - constructor(){ 30 - let [ hasAccount, setHasAccount ] = createSignal(false); 31 - let [ isLoading, setIsLoading ] = createSignal(true); 32 - 33 - let [ profile, setProfile ] = createSignal<ProfileData | null>(null); 34 - let [ storage, setStorage ] = createSignal<StorageData | null>(null); 35 - 36 - this.Profile = profile; 37 - this.Storage = storage; 38 - 39 - this.hasAccount = hasAccount; 40 - this.isLoading = isLoading; 41 - 42 - this._setProfile = setProfile; 43 - this._setStorage = setStorage; 44 - 45 - this._setHasAccount = setHasAccount; 46 - this._setIsLoading = setIsLoading; 47 - 48 - invoke('get_config_value_string', { key: 'token' }) 49 - .then(( token: any ) => { 50 - this.verifyToken(token); 51 - }) 52 - 53 - listen('auth-callback', ( event: any ) => { 54 - window.LoadingManager.SetLoading(""); 55 - 56 - let token = event.payload; 57 - this.verifyToken(token); 58 - }) 59 - 60 - listen('auth-denied', () => { 61 - window.LoadingManager.SetLoading(""); 62 - console.warn('Authetication Denied'); 63 - }) 64 - } 65 - 66 - private async verifyToken( token: string ){ 67 - if(!token){ 68 - this._setHasAccount(false); 69 - this._setIsLoading(false); 70 - 71 - return this._emitLoginCallbacks(); 72 - } 73 - 74 - let dat = await fetch('https://photos.phazed.xyz/api/v1/account?token='+token); 75 - if(dat.status !== 200){ 76 - this._setHasAccount(false); 77 - this._setIsLoading(false); 78 - 79 - return this._emitLoginCallbacks(); 80 - } 81 - 82 - let json = await dat.json(); 83 - 84 - let profile = new ProfileData(); 85 - let storage = new StorageData(); 86 - 87 - profile.id = json.user._id; 88 - profile.username = json.user.username; 89 - profile.avatar = json.user.avatar; 90 - profile.serverVersion = json.user.serverVersion; 91 - 92 - storage.used = json.user.used; 93 - storage.total = json.user.storage; 94 - storage.isSyncing = json.user.settings.enableSync; 95 - 96 - this._setProfile(profile); 97 - this._setStorage(storage); 98 - 99 - this._setHasAccount(true); 100 - this._setIsLoading(false); 101 - 102 - this._emitLoginCallbacks(); 103 - } 104 - 105 - public login(){ 106 - window.LoadingManager.SetLoading("Waiting for Authentication"); 107 - invoke('start_user_auth'); 108 - } 109 - 110 - public async logout(){ 111 - let dat = await fetch('https://photos.phazed.xyz/api/v1/deauth?token='+(await invoke('get_config_value_string', { key: 'token' }))!) 112 - if(dat.status !== 200) 113 - throw new Error(dat.statusText); 114 - 115 - let json = await dat.json(); 116 - if(!json.ok) 117 - throw new Error(json.error); 118 - 119 - invoke('set_config_value_string', { key: 'token', value: '' }); 120 - window.location.reload(); 121 - 122 - return json; 123 - } 124 - 125 - public async Refresh(){ 126 - let token: string = await invoke('get_config_value_string', { key: 'token' }); 127 - await this.verifyToken(token); 128 - } 129 - 130 - public onLoginFinish( cb: () => void ){ 131 - this._loginEventCallbacks.push(cb); 132 - } 133 - }
+19 -3
src/Components/Managers/PhotoListRenderingManager.tsx
··· 5 5 6 6 const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 7 7 8 + let multilayerIcon = new Image(); 9 + multilayerIcon.src = '/icon/layer-group-solid-full.svg'; 10 + 8 11 export class PhotoListRenderingManager{ 9 12 private _layout: PhotoListRow[] = []; 10 13 private _canvas!: HTMLCanvasElement; ··· 22 25 23 26 let lastDateString = null; 24 27 let row = new PhotoListRow(); 25 - row.Height = 100; 28 + row.Height = 0; 26 29 27 30 for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) { 28 31 let photo = window.PhotoManager.FilteredPhotos[i]; ··· 60 63 61 64 public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){ 62 65 let currentY = 0; 63 - 66 + 64 67 // Loop through each row 65 68 for (let i = 0; i < this._layout.length; i++) { 66 69 let row = this._layout[i]; ··· 124 127 // ctx.strokeStyle = '#f00'; 125 128 // ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height); 126 129 127 - if(!photo.loaded) 130 + if(photo.error){ 131 + ctx.fillStyle = '#fff'; 132 + ctx.textAlign = 'center'; 133 + ctx.textBaseline = 'middle'; 134 + 135 + photo.x = (rowXPos - row.Width / 2) + canvas.width / 2; 136 + photo.y = currentY - scroll; 137 + 138 + ctx.font = '18px Rubik' 139 + ctx.fillText('Error loading image.', photo.x + photo.scaledWidth! / 2, photo.y + photo.scaledHeight! / 2); 140 + } else if(!photo.loaded) 128 141 // If the photo is not loaded, start a new task and load it in that task 129 142 setTimeout(() => photo.loadImage(), 1); 130 143 else{ ··· 136 149 // Photo is already loaded so we should draw it on the application 137 150 ctx.globalAlpha = photo.frames / 100; 138 151 ctx.drawImage(photo.image!, (rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, photo.scaledHeight!); 152 + 153 + if(photo.isMultiLayer) 154 + ctx.drawImage(multilayerIcon, ((rowXPos - row.Width / 2) + canvas.width / 2) + 5, (currentY - scroll) + 5, 20, 20); 139 155 140 156 if(photo.frames < 100) 141 157 photo.frames += 10;
+84 -16
src/Components/Managers/PhotoManager.tsx
··· 46 46 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 47 47 setHasBeenIndexed(true); 48 48 49 + let photoLayers: Photo[] = []; 50 + 49 51 photoPaths.forEach(( path: string, i: number ) => { 50 52 let photo 51 53 ··· 54 56 else 55 57 photo = new Photo(path, false, i); 56 58 57 - this.Photos.push(photo); 59 + if(!photo.legacy && photo.splitPath[4]){ 60 + photoLayers.push(photo); 61 + } else 62 + this.Photos.push(photo); 58 63 59 64 if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 60 65 photo.loadMeta(); 61 66 }) 62 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 + 63 91 this.Photos = MergeSort(this.Photos); 92 + console.log(this.Photos[0]); 64 93 65 94 console.log(this.Photos.length + ' Photos found.'); 95 + 66 96 if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){ 67 97 console.log('No photos found or over bulk load limit, Skipping loading stage.'); 68 98 ··· 75 105 76 106 listen('photo_meta_loaded', ( event: any ) => { 77 107 let data: PhotoMetadata = event.payload; 78 - 108 + 79 109 let photo = this.Photos.find(x => x.path === data.path); 80 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. 81 114 115 + photo.error = data.error; 82 116 this._lastLoaded = photo.index; 83 117 84 118 if(this._onLoadedMeta[photo.index]){ ··· 96 130 97 131 photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1]; 98 132 this._amountLoaded++; 99 - 133 + 134 + photo.loadingMeta = false; 100 135 photo.metaLoaded = true; 101 136 photo.onMetaLoaded(); 137 + 138 + window.PhotoListRenderingManager.ComputeLayout(); 102 139 103 140 if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){ 104 141 this.FilteredPhotos = this.Photos; ··· 110 147 111 148 listen('photo_create', async ( event: any ) => { 112 149 let photo = new Photo(event.payload, false, 0); 113 - 114 - this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 115 - this.Photos.splice(0, 0, photo); 150 + 151 + if(photo.splitPath[4]){ 152 + let type = photo.splitPath[4]; 153 + photo.splitPath.pop(); 154 + 155 + let mainPhotoPath = photo.splitPath.join('_') + '.png'; 156 + let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath); 157 + 158 + if(!mainPhoto){ 159 + this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 160 + this.Photos.splice(0, 0, photo); 161 + } else{ 162 + mainPhoto.isMultiLayer = true; 163 + 164 + switch(type){ 165 + case 'Player.png': 166 + mainPhoto.playerLayer = photo; 167 + break; 168 + case 'Environment.png': 169 + mainPhoto.environmentLayer = photo; 170 + break; 171 + } 172 + } 173 + } else{ 174 + this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 175 + this.Photos.splice(0, 0, photo); 176 + } 116 177 117 178 photo.onMetaLoaded = () => this.ReloadFilters(); 118 179 photo.loadMeta(); 119 - 120 - if(!window.SyncManager.IsSyncing() && window.AccountManager.Storage()?.isSyncing){ 121 - window.SyncManager.TriggerSync(); 122 - } 123 180 }) 124 - 181 + 125 182 listen('photo_remove', ( event: any ) => { 126 183 this.Photos = this.Photos.filter(x => x.path !== event.payload); 127 - this.FilteredPhotos = this.FilteredPhotos.filter(x => x.path !== event.payload); 128 - 184 + 129 185 if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path) 130 186 window.PhotoViewerManager.Close() 131 187 ··· 168 224 public ReloadFilters(){ 169 225 this.FilteredPhotos = []; 170 226 227 + if(this._filter === ''){ 228 + this.FilteredPhotos = this.Photos; 229 + window.PhotoListRenderingManager.ComputeLayout(); 230 + 231 + return; 232 + } 233 + 171 234 switch(this._filterType){ 172 235 case FilterType.USER: 173 236 this.Photos.map(p => { 174 237 if(p.metadata){ 175 238 try{ 176 239 let meta = JSON.parse(p.metadata); 177 - let photo = meta.players.find(( y: any ) => y.displayName.toLowerCase().includes(this._filter) || y.id === this._filter); 240 + let photo = meta.players.find(( y: any ) => 241 + y.displayName.toLowerCase().includes(this._filter) || 242 + y.id === this._filter 243 + ); 178 244 179 245 if(photo)this.FilteredPhotos.push(p); 180 246 } catch(e){} ··· 186 252 if(p.metadata){ 187 253 try{ 188 254 let meta = JSON.parse(p.metadata); 189 - let photo = meta.world.name.toLowerCase().includes(this._filter) || meta.world.id === this._filter; 190 - 255 + let photo = 256 + meta.world.name.toLowerCase().includes(this._filter) || 257 + meta.world.id === this._filter; 258 + 191 259 if(photo)this.FilteredPhotos.push(p); 192 260 } catch(e){} 193 261 }
-56
src/Components/Managers/SyncManager.tsx
··· 1 - import { invoke } from "@tauri-apps/api/core"; 2 - import { listen } from "@tauri-apps/api/event"; 3 - import { Accessor, createSignal, Setter } from "solid-js"; 4 - 5 - export class SyncManager{ 6 - private _setIsSyncing: Setter<boolean>; 7 - private _setSyncPhotoTotal: Setter<number>; 8 - private _setSyncPhotoTransfers: Setter<number>; 9 - private _setSyncType: Setter<string>; 10 - private _setSyncError: Setter<string>; 11 - 12 - public IsSyncing: Accessor<boolean>; 13 - public SyncPhotoTotal: Accessor<number>; 14 - public SyncPhotoTransfers: Accessor<number> 15 - public SyncType: Accessor<string>; 16 - public SyncError: Accessor<string>; 17 - 18 - constructor(){ 19 - [ this.IsSyncing, this._setIsSyncing ] = createSignal(false); 20 - [ this.SyncPhotoTotal, this._setSyncPhotoTotal ] = createSignal(-1); 21 - [ this.SyncPhotoTransfers, this._setSyncPhotoTransfers ] = createSignal(-1); 22 - [ this.SyncType, this._setSyncType ] = createSignal(""); 23 - [ this.SyncError, this._setSyncError ] = createSignal(""); 24 - 25 - listen('photos-upload-meta', ( e: any ) => { 26 - this._setIsSyncing(true); 27 - this._setSyncPhotoTotal(e.payload.photos_total); 28 - this._setSyncPhotoTransfers(e.payload.photos_total - e.payload.photos_uploading); 29 - this._setSyncType('Upload'); 30 - 31 - console.log(e.payload) 32 - }) 33 - 34 - listen('photos-download-meta', ( e: any ) => { 35 - this._setIsSyncing(true); 36 - this._setSyncPhotoTotal(e.payload.photos_total); 37 - this._setSyncPhotoTransfers(e.payload.photos_total - e.payload.photos_uploading); 38 - this._setSyncType('Download'); 39 - 40 - console.log(e.payload) 41 - }) 42 - 43 - listen('sync-finished', () => { 44 - this._setIsSyncing(false); 45 - }) 46 - 47 - listen('sync-failed', ( e: any ) => { 48 - this._setSyncError(e.payload); 49 - }) 50 - } 51 - 52 - public async TriggerSync(){ 53 - this._setIsSyncing(true); 54 - invoke('sync_photos', { token: (await invoke('get_config_value_string', { key: 'token' })) }); 55 - } 56 - }
+1
src/Components/Managers/ViewManager.tsx
··· 9 9 private _eventListeners: { from: ViewState, to: ViewState, cb: () => void }[] = []; 10 10 11 11 public ChangeState( state: ViewState ){ 12 + console.log('From: ' + this._state + ' To: ' + state); 12 13 this._eventListeners.filter(x => x.from === this._state && x.to === state).forEach(c => c.cb()); 13 14 this._state = state; 14 15 }
-153
src/Components/NavBar.tsx
··· 1 - import { invoke } from '@tauri-apps/api/core'; 2 - import { emit } from '@tauri-apps/api/event'; 3 - import { getCurrentWebviewWindow } from '@tauri-apps/api/webviewWindow'; 4 - import anime from 'animejs'; 5 - import { Show, onMount } from 'solid-js'; 6 - import { ViewState } from './Managers/ViewManager'; 7 - 8 - const appWindow = getCurrentWebviewWindow(); 9 - 10 - let NavBar = () => { 11 - let dropdownVisible = false; 12 - let inAnimation = false; 13 - let dropdown: HTMLElement; 14 - 15 - onMount(() => { 16 - anime.set(dropdown, { opacity: 0, translateX: -10 }); 17 - dropdown.style.display = 'none'; 18 - }) 19 - 20 - let setDropdownVisibility = ( visible: boolean ) => { 21 - if(inAnimation)return; 22 - 23 - if(dropdownVisible !== visible){ 24 - dropdownVisible = visible; 25 - inAnimation = true; 26 - 27 - if(visible){ 28 - dropdown.style.display = 'block'; 29 - 30 - anime({ 31 - targets: dropdown, 32 - opacity: 1, 33 - translateX: 0, 34 - easing: 'easeInOutQuad', 35 - duration: 250, 36 - complete: () => { 37 - inAnimation = false; 38 - } 39 - }) 40 - } else{ 41 - anime({ 42 - targets: dropdown, 43 - opacity: 0, 44 - translateX: -10, 45 - easing: 'easeInOutQuad', 46 - duration: 250, 47 - complete: () => { 48 - inAnimation = false; 49 - dropdown.style.display = 'none'; 50 - } 51 - }) 52 - } 53 - } 54 - } 55 - 56 - window.CloseAllPopups.push(() => setDropdownVisibility(false)); 57 - 58 - return ( 59 - <> 60 - <div class="navbar" data-tauri-drag-region> 61 - <div class="tabs" data-tauri-drag-region> 62 - <div class="nav-tab" onClick={() => { 63 - window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 64 - anime( 65 - { 66 - targets: '.settings', 67 - opacity: 0, 68 - translateX: '500px', 69 - easing: 'easeInOutQuad', 70 - duration: 250, 71 - complete: () => { 72 - anime.set('.settings', { display: 'none' }); 73 - } 74 - }) 75 - }}>Photos</div> 76 - </div> 77 - <div class="nav-tab" style={{ width: '200px', "text-align": 'center', background: 'transparent' }} data-tauri-drag-region> 78 - <Show when={window.SyncManager.IsSyncing()}> 79 - <Show when={ window.SyncManager.SyncError() == "" } fallback={ "Error: " + window.SyncManager.SyncError() }> 80 - <div style={{ width: '100%', "text-align": 'center', 'font-size': '14px' }}> 81 - { window.SyncManager.SyncType() }ing: { window.SyncManager.SyncPhotoTransfers () } / { window.SyncManager.SyncPhotoTotal() }<br /> 82 - <div style={{ width: '80%', height: '2px', margin: 'auto', "margin-top": '5px', background: '#111' }}> 83 - <div style={{ height: '2px', width: (window.SyncManager.SyncPhotoTransfers() / window.SyncManager.SyncPhotoTotal()) * 100 + '%', background: '#00ccff' }}></div> 84 - </div> 85 - </div> 86 - </Show> 87 - </Show> 88 - </div> 89 - <div class="account" onClick={() => setDropdownVisibility(!dropdownVisible)}> 90 - <Show when={window.AccountManager.hasAccount()}> 91 - <div class="user-pfp" style={{ background: 92 - `url('https://cdn.phazed.xyz/id/avatars/${window.AccountManager.Profile()?.id}/${window.AccountManager.Profile()?.avatar}.png')` }}></div> 93 - </Show> 94 - <div class="icon"> 95 - <img draggable="false" width="24" height="24" src="/icon/caret-down-solid.svg"></img> 96 - </div> 97 - </div> 98 - <div class="control-lights"> 99 - <div class="light" onClick={() => appWindow.minimize()}> 100 - <img draggable="false" width="24" height="24" src="/icon/minus-solid.svg"></img> 101 - </div> 102 - <div class="light" onClick={() => appWindow.toggleMaximize()}> 103 - <img draggable="false" width="24" height="24" src="/icon/square-regular.svg"></img> 104 - </div> 105 - <div class="light" onClick={() => { appWindow.hide(); emit('hide-window'); } }> 106 - <img draggable="false" width="24" height="24" src="/icon/x-solid.svg"></img> 107 - </div> 108 - </div> 109 - </div> 110 - 111 - <div class="dropdown" ref={( el ) => dropdown = el}> 112 - <div class="dropdown-button" onClick={async () => { 113 - anime.set('.settings', { display: 'block' }); 114 - anime({ 115 - targets: '.settings', 116 - opacity: 1, 117 - translateX: '0px', 118 - easing: 'easeInOutQuad', 119 - duration: 250 120 - }) 121 - 122 - window.ViewManager.ChangeState(ViewState.SETTINGS); 123 - setDropdownVisibility(false); 124 - }}>Settings</div> 125 - 126 - <Show when={!window.AccountManager.hasAccount()} fallback={ 127 - <div class="dropdown-button" onClick={async () => { 128 - window.AccountManager.logout() 129 - .then(data => { 130 - console.log(data); 131 - setDropdownVisibility(false); 132 - }) 133 - .catch(e => { 134 - console.error(e); 135 - 136 - invoke('set_config_value_string', { key: 'token', value: '' }); 137 - window.location.reload(); 138 - 139 - setDropdownVisibility(false); 140 - }) 141 - }}>Sign Out</div> 142 - }> 143 - <div class="dropdown-button" onClick={() => { 144 - window.AccountManager.login(); 145 - setDropdownVisibility(false); 146 - }}>Sign In</div> 147 - </Show> 148 - </div> 149 - </> 150 - ) 151 - } 152 - 153 - export default NavBar;
+84 -66
src/Components/PhotoList.tsx
··· 1 - import { onCleanup, onMount } from "solid-js"; 1 + import { createSignal, onCleanup, onMount, Show } from "solid-js"; 2 2 import { listen } from '@tauri-apps/api/event'; 3 3 import { Window } from "@tauri-apps/api/window"; 4 4 5 - import anime from "animejs"; 6 5 import FilterMenu from "./FilterMenu"; 7 6 import { ViewState } from "./Managers/ViewManager"; 8 7 import { invoke } from "@tauri-apps/api/core"; 8 + import { animate, utils } from "animejs"; 9 9 10 10 enum ListPopup{ 11 11 FILTERS, ··· 13 13 } 14 14 15 15 let PhotoList = () => { 16 - let photoTreeLoadingContainer: HTMLElement; 17 - 18 16 let scrollToTop: HTMLElement; 19 17 let scrollToTopActive = false; 20 18 21 19 let photoContainer: HTMLCanvasElement; 22 - let photoContainerBG: HTMLCanvasElement; 23 20 24 21 let filterContainer: HTMLDivElement; 25 22 26 23 let ctx: CanvasRenderingContext2D; 27 - let ctxBG: CanvasRenderingContext2D; 28 24 29 25 let scroll: number = 0; 30 26 let targetScroll: number = 0; ··· 32 28 let quitRender: boolean = true; 33 29 34 30 let currentPopup = ListPopup.NONE; 31 + 32 + let [ updateAvailable, setUpdateAvailable ] = createSignal(false); 35 33 36 34 Window.getCurrent().isVisible().then(visible => { 37 35 quitRender = !visible; ··· 39 37 40 38 41 39 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => { 42 - anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 40 + animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 }); 41 + animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 42 + animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 43 43 }); 44 44 45 45 window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => { 46 - anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 46 + animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' }); 47 + animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 48 + animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 47 49 }); 48 50 49 51 50 52 window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.PHOTO_VIEWER, () => { 51 - anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 52 - anime({ targets: '.filter-options', opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 53 - anime({ targets: '.reload-photos', opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 53 + animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 }); 54 + animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 55 + animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 54 56 }); 55 57 56 58 window.ViewManager.OnStateTransition(ViewState.PHOTO_VIEWER, ViewState.PHOTO_LIST, () => { 57 - anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 58 - anime({ targets: '.filter-options', opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 59 - anime({ targets: '.reload-photos', opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 59 + animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' }); 60 + animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 61 + animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 60 62 }); 61 63 62 64 ··· 70 72 photoContainer.width = window.innerWidth; 71 73 photoContainer.height = window.innerHeight; 72 74 73 - photoContainerBG.width = window.innerWidth; 74 - photoContainerBG.height = window.innerHeight; 75 - 76 75 window.PhotoListRenderingManager.ComputeLayout(); 77 76 } 78 77 79 78 let closeCurrentPopup = () => { 80 79 switch(currentPopup){ 81 80 case ListPopup.FILTERS: 82 - anime({ 83 - targets: filterContainer!, 81 + animate(filterContainer!, { 84 82 opacity: 0, 83 + translateY: '10px', 85 84 easing: 'easeInOutQuad', 86 85 duration: 100, 87 - complete: () => { 86 + onComplete: () => { 88 87 filterContainer!.style.display = 'none'; 89 88 currentPopup = ListPopup.NONE; 90 89 } ··· 102 101 103 102 if(!scrollToTopActive && scroll > photoContainer.height){ 104 103 scrollToTop.style.display = 'flex'; 105 - anime({ targets: scrollToTop, opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 104 + animate(scrollToTop, { opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 106 105 107 106 scrollToTopActive = true; 108 107 } else if(scrollToTopActive && scroll < photoContainer.height){ 109 - anime({ targets: scrollToTop, opacity: 0, translateY: '-10px', complete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 108 + animate(scrollToTop, { opacity: 0, translateY: '-10px', onComplete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 109 + 110 110 scrollToTopActive = false; 111 111 } 112 112 113 - if(!ctx || !ctxBG)return; 113 + if(!ctx)return; 114 114 ctx.clearRect(0, 0, photoContainer.width, photoContainer.height); 115 - ctxBG.clearRect(0, 0, photoContainerBG.width, photoContainerBG.height); 116 115 117 - scroll = scroll + (targetScroll - scroll) * 0.2; 116 + scroll = scroll + (targetScroll - scroll) * 0.1; 118 117 119 118 window.PhotoListRenderingManager.Render(ctx, photoContainer!, scroll); 120 119 ··· 127 126 128 127 ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2); 129 128 } 130 - 131 - ctxBG.drawImage(photoContainer, 0, 0); 132 129 } 133 130 134 131 listen('hide-window', () => { ··· 143 140 photoContainer.width = window.innerWidth; 144 141 photoContainer.height = window.innerHeight; 145 142 146 - photoContainerBG.width = window.innerWidth; 147 - photoContainerBG.height = window.innerHeight; 148 - 149 143 if(window.PhotoManager.HasFirstLoaded){ 150 144 requestAnimationFrame(render); 151 145 window.PhotoManager.HasFirstLoaded = false; ··· 155 149 window.PhotoManager.OnLoadingFinished(() => { 156 150 invoke('close_splashscreen'); 157 151 158 - anime({ 159 - targets: photoTreeLoadingContainer, 160 - height: 0, 161 - easing: 'easeInOutQuad', 162 - duration: 500, 163 - opacity: 0, 164 - complete: () => { 165 - photoTreeLoadingContainer.style.display = 'none'; 166 - } 167 - }) 168 - 169 - anime({ 170 - targets: '.reload-photos', 152 + animate('.reload-photos', { 171 153 opacity: 1, 172 154 duration: 150, 173 155 easing: 'easeInOutQuad' 174 156 }) 175 157 176 158 window.PhotoListRenderingManager.SetCanvas(photoContainer!); 177 - window.PhotoListRenderingManager.ComputeLayout(); 178 - 179 159 render(); 180 160 }); 181 161 182 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 183 179 ctx = photoContainer.getContext('2d')!; 184 - ctxBG = photoContainerBG.getContext('2d')!; 185 180 186 181 window.PhotoManager.Load(); 187 182 188 - anime.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 183 + utils.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 189 184 190 185 photoContainer.onwheel = ( e: WheelEvent ) => { 191 - targetScroll += e.deltaY; 186 + targetScroll += e.deltaY * 2; 192 187 193 188 if(targetScroll < 0) 194 189 targetScroll = 0; ··· 199 194 200 195 photoContainer.width = window.innerWidth; 201 196 photoContainer.height = window.innerHeight; 202 - 203 - photoContainerBG.width = window.innerWidth; 204 - photoContainerBG.height = window.innerHeight; 205 197 206 198 photoContainer.onclick = ( e: MouseEvent ) => { 207 199 let photo = window.PhotoManager.FilteredPhotos.find(x => ··· 229 221 230 222 return ( 231 223 <div class="photo-list"> 232 - <div ref={filterContainer!} class="filter-container" style={{ 233 - height: window.PhotoManager.HasBeenIndexed() ? '83px' : '110px', 234 - width: window.PhotoManager.HasBeenIndexed() ? '600px' : '650px' 235 - }}> 224 + <div ref={filterContainer!} class="filter-container"> 236 225 <FilterMenu /> 237 226 </div> 238 227 239 - <div class="photo-tree-loading" ref={( el ) => photoTreeLoadingContainer = el}>Scanning Photo Tree...</div> 240 - 241 228 <div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}> 242 229 <div class="icon"> 243 230 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 244 231 </div> 245 232 </div> 246 - <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())}> 247 - <div class="icon" style={{ width: '17px' }}> 248 - <img draggable="false" width="17" height="17" src="/icon/arrows-rotate-solid.svg"></img> 249 - </div> 250 - </div> 251 233 252 234 <div class="filter-options"> 253 235 <div> ··· 257 239 258 240 filterContainer!.style.display = 'block'; 259 241 260 - anime({ 261 - targets: filterContainer!, 242 + animate(filterContainer!, { 262 243 opacity: 1, 244 + translateY: 0, 263 245 easing: 'easeInOutQuad', 264 246 duration: 100 265 247 }); 266 - }} class="icon" style={{ width: '20px', height: '20px', padding: '20px' }}> 248 + }} class="icon"> 267 249 <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img> 268 250 </div> 269 251 <div class="icon-label">Filters</div> 270 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> 271 290 </div> 272 291 273 292 <canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas> 274 - <canvas class="photo-container-bg" ref={( el ) => photoContainerBG = el}></canvas> 275 293 </div> 276 294 ) 277 295 }
+210 -87
src/Components/PhotoViewer.tsx
··· 1 1 import { For, Show, createEffect, onCleanup, onMount } from "solid-js"; 2 2 import { invoke } from '@tauri-apps/api/core'; 3 - import anime from 'animejs'; 4 3 import { WorldCache } from "./Structs/WorldCache"; 4 + import { animate, JSAnimation, utils } from "animejs"; 5 5 6 6 let PhotoViewer = () => { 7 7 let viewer: HTMLElement; ··· 21 21 let viewerContextMenuButtons: HTMLElement[] = []; 22 22 23 23 let allowedToOpenTray = false; 24 - let trayInAnimation = false; 25 24 26 25 let authorProfileButton: HTMLDivElement; 26 + 27 + let photoLayerManager!: HTMLDivElement; 27 28 28 29 let switchPhotoWithKey = ( e: KeyboardEvent ) => { 29 30 switch(e.key){ ··· 52 53 } 53 54 } 54 55 56 + let trayAnimation: JSAnimation[] = []; 57 + 55 58 let openTray = () => { 56 - if(trayOpen || trayInAnimation)return; 59 + if(trayOpen)return; 60 + trayOpen = true; 57 61 58 - trayOpen = true; 59 - trayInAnimation = true; 62 + trayAnimation.forEach(anim => anim.cancel()); 60 63 61 64 window.CloseAllPopups.forEach(p => p()); 62 - anime({ targets: photoTray, bottom: '0px', duration: 500 }); 65 + trayAnimation[0] = animate(photoTray, { bottom: '-150px', duration: 500, ease: 'outElastic' }); 63 66 64 - anime({ 65 - targets: photoControls, 67 + trayAnimation[1] = animate(photoControls, { 66 68 bottom: '160px', 69 + ease: 'outElastic', 67 70 scale: '0.75', 68 71 opacity: 0, 69 72 duration: 500, 70 - complete: () => { 73 + onComplete: () => { 71 74 photoControls.style.display = 'none'; 72 - trayInAnimation = false; 73 75 } 74 76 }); 75 77 76 78 photoTrayCloseBtn.style.display = 'flex'; 77 - anime({ 78 - targets: photoTrayCloseBtn, 79 + trayAnimation[2] = animate(photoTrayCloseBtn, { 79 80 bottom: '160px', 81 + ease: 'outElastic', 80 82 opacity: 1, 81 83 scale: 1, 82 84 duration: 500 ··· 84 86 } 85 87 86 88 let copyImage = () => { 87 - invoke('copy_image', { path: window.PhotoViewerManager.CurrentPhoto()!.path }) 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 }) 88 105 .then(() => { 89 - anime.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 90 - anime({ 91 - targets: '.copy-notif', 106 + utils.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 107 + animate('.copy-notif', { 108 + ease: 'outElastic', 92 109 opacity: 1, 93 110 translateY: '0px' 94 111 }); 95 112 96 113 setTimeout(() => { 97 - anime({ 98 - targets: '.copy-notif', 114 + animate('.copy-notif', { 115 + ease: 'outElastic', 99 116 opacity: 0, 100 117 translateY: '-100px' 101 118 }); ··· 104 121 } 105 122 106 123 let closeTray = () => { 107 - if(!trayOpen || trayInAnimation)return; 108 - trayInAnimation = true; 124 + if(!trayOpen)return; 125 + trayOpen = false; 126 + 127 + trayAnimation.forEach(anim => anim.cancel()); 109 128 110 129 window.CloseAllPopups.forEach(p => p()); 111 - anime({ targets: photoTray, bottom: '-150px', duration: 500 }); 130 + trayAnimation[0] = animate(photoTray, { bottom: '-300px', duration: 500, ease: 'outElastic' }); 112 131 113 - anime({ 114 - targets: photoTrayCloseBtn, 132 + trayAnimation[2] = animate(photoTrayCloseBtn, { 115 133 bottom: '10px', 116 134 scale: '0.75', 135 + ease: 'outElastic', 117 136 opacity: 0, 118 137 duration: 500, 119 - complete: () => { 138 + onComplete: () => { 120 139 photoTrayCloseBtn.style.display = 'none'; 121 - trayOpen = false; 122 - trayInAnimation = false; 123 140 } 124 141 }); 125 142 126 143 photoControls.style.display = 'flex'; 127 - anime({ 128 - targets: photoControls, 144 + trayAnimation[1] = animate(photoControls, { 129 145 bottom: '10px', 146 + ease: 'outElastic', 130 147 opacity: 1, 131 148 scale: 1, 132 149 duration: 500, 133 150 }) 134 151 } 135 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 + 136 175 onMount(() => { 137 - anime.set(photoControls, { translateX: '-50%' }); 138 - anime.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 176 + utils.set(photoControls, { translateX: '-50%' }); 177 + utils.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 178 + utils.set(photoLayerManager, { translateY: '20px', opacity: 0, display: 'none' }); 139 179 140 180 window.addEventListener('keyup', switchPhotoWithKey); 181 + window.addEventListener('resize', () => resizeImage()); 141 182 142 183 let contextMenuOpen = false; 143 184 window.CloseAllPopups.push(() => { 144 185 contextMenuOpen = false; 145 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 186 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 146 187 147 - anime({ 148 - targets: viewerContextMenu, 188 + animate(viewerContextMenu, { 149 189 opacity: 0, 150 190 easing: 'easeInOutQuad', 151 191 rotate: '30deg', 152 192 duration: 100, 153 - complete: () => { 193 + onComplete: () => { 154 194 viewerContextMenu.style.display = 'none'; 155 195 } 156 196 }) 157 197 }); 158 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 + 159 206 viewerContextMenuButtons[0].onclick = async () => { 160 207 window.CloseAllPopups.forEach(p => p()); 161 208 // Context Menu -> Open file location ··· 174 221 if(contextMenuOpen){ 175 222 contextMenuOpen = false; 176 223 177 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 224 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 178 225 179 - anime({ 180 - targets: viewerContextMenu, 226 + animate(viewerContextMenu, { 181 227 opacity: 0, 182 228 rotate: '30deg', 183 229 easing: 'easeInOutQuad', 184 230 duration: 100, 185 - complete: () => { 231 + onComplete: () => { 186 232 viewerContextMenu.style.display = 'none'; 187 233 } 188 234 }) ··· 193 239 viewerContextMenu.style.left = e.clientX + 'px'; 194 240 viewerContextMenu.style.display = 'block'; 195 241 196 - anime.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 242 + utils.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 197 243 198 - anime({ 199 - targets: viewerContextMenu, 244 + animate(viewerContextMenu, { 200 245 opacity: 1, 201 246 rotate: '0deg', 202 247 easing: 'easeInOutQuad', ··· 215 260 imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full"; 216 261 imageViewer.crossOrigin = 'anonymous'; 217 262 218 - anime({ 219 - targets: imageViewer, 263 + imageViewer.onload = () => { resizeImage(); } 264 + 265 + animate(imageViewer, { 220 266 opacity: 1, 221 267 delay: 50, 222 268 duration: 150, ··· 276 322 let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML; 277 323 278 324 authorProfileButton!.style.display = 'flex'; 279 - authorProfileButton!.onclick = () => 325 + authorProfileButton!.onclick = () => { 326 + console.log(id); 280 327 invoke('open_url', { url: 'https://vrchat.com/home/user/' + id }); 328 + } 281 329 } catch(e){ 282 330 console.error(e); 283 331 console.log('Couldn\'t decode metadata') ··· 290 338 } 291 339 } else{ 292 340 trayButton.style.display = 'none'; 341 + authorProfileButton!.style.display = 'none'; 342 + 293 343 closeTray(); 294 344 } 295 345 } ··· 300 350 if(photo && !isOpen){ 301 351 viewer.style.display = 'flex'; 302 352 303 - anime({ 304 - targets: viewer, 353 + animate(viewer, { 305 354 opacity: 1, 306 355 easing: 'easeInOutQuad', 307 356 duration: 150 308 357 }); 309 - 310 - anime({ 311 - targets: '.navbar', 312 - top: '-50px' 313 - }) 314 358 315 - anime.set('.prev-button', { left: '-50px', top: '50%' }); 316 - anime.set('.next-button', { right: '-50px', top: '50%' }); 359 + utils.set('.prev-button', { left: '-50px', top: '50%' }); 360 + utils.set('.next-button', { right: '-50px', top: '50%' }); 317 361 318 - anime({ targets: '.prev-button', left: '0', easing: 'easeInOutQuad', duration: 100 }); 319 - anime({ targets: '.next-button', right: '0', easing: 'easeInOutQuad', duration: 100 }); 362 + animate('.prev-button', { left: '0', easing: 'easeInOutQuad', duration: 100 }); 363 + animate('.next-button', { right: '0', easing: 'easeInOutQuad', duration: 100 }); 320 364 321 365 window.CloseAllPopups.forEach(p => p()); 322 366 } else if(!photo && isOpen){ 323 - anime({ 324 - targets: viewer, 367 + animate(viewer, { 325 368 opacity: 0, 326 369 easing: 'easeInOutQuad', 327 370 duration: 150, 328 - complete: () => { 371 + onComplete: () => { 329 372 viewer.style.display = 'none'; 330 373 } 331 374 }); 332 - 333 - anime({ 334 - targets: '.navbar', 335 - top: '0px' 336 - }) 337 375 338 376 window.CloseAllPopups.forEach(p => p()); 339 377 340 - anime({ targets: '.prev-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 341 - anime({ targets: '.next-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 378 + animate('.prev-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 379 + animate('.next-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 342 380 } 343 381 344 382 isOpen = photo != null; ··· 379 417 ) 380 418 } 381 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 + 382 447 return ( 383 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 + 384 483 <div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}> 385 484 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div> 386 485 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div> 387 486 </div> 388 487 389 488 <div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}> 390 - <div class="icon" style={{ width: '10px', margin: '0' }}> 489 + <div class="icon-small" style={{ width: '10px', margin: '0' }}> 391 490 <img draggable="false" src="/icon/x-solid.svg"></img> 392 491 </div> 393 492 </div> 394 - <img class="image-container" ref={( el ) => imageViewer = el} /> 493 + 494 + <div style={{ 495 + width: '100%', 496 + height: '100%', 497 + display: 'flex', 498 + "justify-content": 'center', 499 + 'align-items': 'center' 500 + }}> 501 + <img class="image-container" ref={( el ) => imageViewer = el} /> 502 + </div> 395 503 396 504 <div class="prev-button" onClick={() => { 397 505 window.CloseAllPopups.forEach(p => p()); 398 506 window.PhotoViewerManager.PreviousPhoto(); 399 507 }}> 400 - <div class="icon" style={{ width: '15px', margin: '0' }}> 508 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 401 509 <img draggable="false" src="/icon/arrow-left-solid.svg"></img> 402 510 </div> 403 511 </div> ··· 406 514 window.CloseAllPopups.forEach(p => p()); 407 515 window.PhotoViewerManager.NextPhoto(); 408 516 }}> 409 - <div class="icon" style={{ width: '15px', margin: '0' }}> 517 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 410 518 <img draggable="false" src="/icon/arrow-right-solid.svg"></img> 411 519 </div> 412 520 </div> ··· 417 525 onClick={() => closeTray()} 418 526 ref={( el ) => photoTrayCloseBtn = el} 419 527 > 420 - <div class="icon" style={{ width: '12px', margin: '0' }}> 528 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 421 529 <img draggable="false" src="/icon/angle-down-solid.svg"></img> 422 530 </div> 423 531 </div> 424 532 425 533 <div class="control-buttons" ref={( el ) => photoControls = el}> 426 534 <div class="viewer-button" 427 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 428 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 535 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 536 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 429 537 onClick={() => { copyImage(); }}> 430 - <div class="icon" style={{ width: '12px', margin: '0' }}> 538 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 431 539 <img draggable="false" src="/icon/copy-solid.svg"></img> 432 540 </div> 433 541 </div> 434 542 <div class="viewer-button" style={{ width: '50px' }} 435 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })} 436 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })} 543 + onMouseOver={( el ) => animate(el.currentTarget, { width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })} 544 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })} 437 545 ref={( el ) => trayButton = el} 438 546 onClick={() => openTray()} 439 547 > 440 - <div class="icon" style={{ width: '12px', margin: '0' }}> 548 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 441 549 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 442 550 </div> 443 551 </div> 444 552 445 553 <div class="viewer-button" 446 554 ref={authorProfileButton!} 447 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 448 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 555 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 556 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 449 557 > 450 - <div class="icon" style={{ width: '12px', margin: '0' }}> 558 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 451 559 <img draggable="false" src="/icon/user-solid.svg"></img> 452 560 </div> 453 561 </div> 454 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 + 455 575 <div class="viewer-button" 456 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 457 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 458 - onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("Are you sure you want to delete this photo?", async () => { invoke("delete_photo", { 459 - path: window.PhotoViewerManager.CurrentPhoto()?.path, 460 - token: (await invoke('get_config_value_string', { key: 'token' })) || "none", 461 - isSyncing: window.AccountManager.hasAccount() ? window.AccountManager.Storage()?.isSyncing : false 462 - }); 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 }); 463 586 })}> 464 - <div class="icon" style={{ width: '12px', margin: '0' }}> 587 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 465 588 <img draggable="false" src="/icon/trash-solid.svg"></img> 466 589 </div> 467 590 </div>
+180 -143
src/Components/SettingsMenu.tsx
··· 1 1 import { onCleanup, onMount, Show } from "solid-js"; 2 2 import { bytesToFormatted } from "../utils"; 3 3 import { invoke } from '@tauri-apps/api/core'; 4 - import anime from "animejs"; 5 4 import { ViewState } from "./Managers/ViewManager"; 5 + import { animate, utils } from "animejs"; 6 6 7 7 let SettingsMenu = () => { 8 - let sliderBar: HTMLElement; 9 - let settingsContainer: HTMLElement; 10 - let currentButton = 0; 11 - let lastClickedButton = -1; 8 + // let sliderBar: HTMLElement; 9 + // let settingsContainer: HTMLElement; 10 + // let currentButton = 0; 11 + // let lastClickedButton = -1; 12 12 let finalPathConfirm: HTMLElement; 13 13 let finalPathInput: HTMLElement; 14 14 let finalPathData: string; ··· 17 17 let closeWithKey = ( e: KeyboardEvent ) => { 18 18 if(e.key === 'Escape'){ 19 19 window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 20 - anime({ 21 - targets: '.settings', 20 + console.log('h'); 21 + animate('.settings',{ 22 22 opacity: 0, 23 23 translateX: '500px', 24 24 easing: 'easeInOutQuad', 25 25 duration: 250, 26 - complete: () => { 27 - anime.set('.settings', { display: 'none' }); 26 + onComplete: () => { 27 + console.log('h'); 28 + utils.set('.settings', { display: 'none' }); 28 29 } 29 30 }) 30 31 } ··· 34 35 if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){ 35 36 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 36 37 37 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 38 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 38 + animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 39 + animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 39 40 } else{ 40 41 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 41 42 42 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 43 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 43 + animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 44 + animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 44 45 } 45 46 46 - let sliderMouseDown = false; 47 - let mouseStartX = 0; 47 + // let sliderMouseDown = false; 48 + // let mouseStartX = 0; 48 49 49 - let width = window.innerWidth; 50 - let buttons = [ 370, 680 ]; 50 + // let width = window.innerWidth; 51 + // let buttons = [ 370, 680 ]; 51 52 52 - let sliderPos = width / 2 - buttons[currentButton]; 53 - let sliderScale = width / (buttons[1] - buttons[0]); 53 + // let sliderPos = width / 2 - buttons[currentButton]; 54 + // let sliderScale = width / (buttons[1] - buttons[0]); 54 55 55 - let render = () => { 56 - requestAnimationFrame(render); 56 + // let render = () => { 57 + // requestAnimationFrame(render); 57 58 58 - if(!sliderMouseDown){ 59 - sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 60 - anime.set(sliderBar, { translateX: sliderPos }); 59 + // if(!sliderMouseDown){ 60 + // sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 61 + // utils.set(sliderBar, { translateX: sliderPos }); 61 62 62 - settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 63 - } 64 - } 63 + // settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 64 + // } 65 + // } 65 66 66 - render(); 67 - anime.set(sliderBar, { translateX: sliderPos }); 67 + // render(); 68 + // utils.set(sliderBar, { translateX: sliderPos }); 68 69 69 - sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 70 - sliderMouseDown = true; 71 - mouseStartX = e.touches[0].clientX; 72 - }) 70 + // sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 71 + // sliderMouseDown = true; 72 + // mouseStartX = e.touches[0].clientX; 73 + // }) 73 74 74 - window.addEventListener('touchmove', ( e: TouchEvent ) => { 75 - if(sliderMouseDown){ 76 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 77 - settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 78 - } 79 - }) 75 + // window.addEventListener('touchmove', ( e: TouchEvent ) => { 76 + // if(sliderMouseDown){ 77 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 78 + // settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 79 + // } 80 + // }) 80 81 81 82 window.addEventListener('keyup', closeWithKey); 82 83 83 - window.addEventListener('touchend', ( e: TouchEvent ) => { 84 - if(sliderMouseDown){ 85 - sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 84 + // window.addEventListener('touchend', ( e: TouchEvent ) => { 85 + // if(sliderMouseDown){ 86 + // sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 86 87 87 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 88 - sliderMouseDown = false; 88 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 89 + // sliderMouseDown = false; 89 90 90 - if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 91 - let shortestDistance = 0; 92 - let selectedButton = -1; 91 + // if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 92 + // let shortestDistance = 0; 93 + // let selectedButton = -1; 93 94 94 - buttons.forEach(( pos, indx ) => { 95 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 95 + // buttons.forEach(( pos, indx ) => { 96 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 96 97 97 - if(selectedButton === -1){ 98 - shortestDistance = dis; 99 - selectedButton = indx; 100 - } else if(shortestDistance > dis){ 101 - shortestDistance = dis; 102 - selectedButton = indx; 103 - } 104 - }) 98 + // if(selectedButton === -1){ 99 + // shortestDistance = dis; 100 + // selectedButton = indx; 101 + // } else if(shortestDistance > dis){ 102 + // shortestDistance = dis; 103 + // selectedButton = indx; 104 + // } 105 + // }) 105 106 106 - currentButton = selectedButton; 107 - } else if(lastClickedButton != -1){ 108 - currentButton = lastClickedButton; 109 - lastClickedButton = -1 110 - } 111 - } 112 - }) 107 + // currentButton = selectedButton; 108 + // } else if(lastClickedButton != -1){ 109 + // currentButton = lastClickedButton; 110 + // lastClickedButton = -1 111 + // } 112 + // } 113 + // }) 113 114 114 - sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 115 - sliderMouseDown = true; 116 - mouseStartX = e.clientX; 117 - }); 115 + // sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 116 + // sliderMouseDown = true; 117 + // mouseStartX = e.clientX; 118 + // }); 118 119 119 - window.addEventListener('mousemove', ( e: MouseEvent ) => { 120 - if(sliderMouseDown){ 121 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 122 - settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px'; 123 - settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 124 - } 125 - }) 120 + // window.addEventListener('mousemove', ( e: MouseEvent ) => { 121 + // if(sliderMouseDown){ 122 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 123 + // settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px'; 124 + // settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 125 + // } 126 + // }) 126 127 127 - window.addEventListener('mouseup', ( e: MouseEvent ) => { 128 - if(sliderMouseDown){ 129 - sliderPos = sliderPos - (mouseStartX - e.clientX); 128 + // window.addEventListener('mouseup', ( e: MouseEvent ) => { 129 + // if(sliderMouseDown){ 130 + // sliderPos = sliderPos - (mouseStartX - e.clientX); 130 131 131 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 132 - sliderMouseDown = false; 132 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 133 + // sliderMouseDown = false; 133 134 134 - if(Math.abs(mouseStartX - e.clientX) > 50){ 135 - let shortestDistance = 0; 136 - let selectedButton = -1; 135 + // if(Math.abs(mouseStartX - e.clientX) > 50){ 136 + // let shortestDistance = 0; 137 + // let selectedButton = -1; 137 138 138 - buttons.forEach(( pos, indx ) => { 139 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 139 + // buttons.forEach(( pos, indx ) => { 140 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 140 141 141 - if(selectedButton === -1){ 142 - shortestDistance = dis; 143 - selectedButton = indx; 144 - } else if(shortestDistance > dis){ 145 - shortestDistance = dis; 146 - selectedButton = indx; 147 - } 148 - }) 142 + // if(selectedButton === -1){ 143 + // shortestDistance = dis; 144 + // selectedButton = indx; 145 + // } else if(shortestDistance > dis){ 146 + // shortestDistance = dis; 147 + // selectedButton = indx; 148 + // } 149 + // }) 149 150 150 - currentButton = selectedButton; 151 - } else if(lastClickedButton != -1){ 152 - currentButton = lastClickedButton; 153 - lastClickedButton = -1 154 - } 155 - } 156 - }) 151 + // currentButton = selectedButton; 152 + // } else if(lastClickedButton != -1){ 153 + // currentButton = lastClickedButton; 154 + // lastClickedButton = -1 155 + // } 156 + // } 157 + // }) 157 158 158 - window.addEventListener('resize', () => { 159 - width = window.innerWidth; 160 - sliderPos = width / 2 - buttons[currentButton]; 161 - sliderScale = width / (buttons[1] - buttons[0]); 159 + // window.addEventListener('resize', () => { 160 + // width = window.innerWidth; 161 + // sliderPos = width / 2 - buttons[currentButton]; 162 + // sliderScale = width / (buttons[1] - buttons[0]); 162 163 163 - anime.set(sliderBar, { translateX: sliderPos }); 164 - }) 164 + // utils.set(sliderBar, { translateX: sliderPos }); 165 + // }) 165 166 166 - sliderBar.addEventListener('wheel', ( e: WheelEvent ) => { 167 - if(e.deltaY > 0){ 168 - if(buttons[currentButton + 1]) 169 - currentButton++; 170 - } else{ 171 - if(buttons[currentButton - 1]) 172 - currentButton--; 173 - } 174 - }) 167 + // sliderBar.addEventListener('wheel', ( e: WheelEvent ) => { 168 + // if(e.deltaY > 0){ 169 + // if(buttons[currentButton + 1]) 170 + // currentButton++; 171 + // } else{ 172 + // if(buttons[currentButton - 1]) 173 + // currentButton--; 174 + // } 175 + // }) 175 176 }) 176 177 177 178 onCleanup(() => { ··· 180 181 181 182 return ( 182 183 <div class="settings"> 183 - <div class="settings-container" ref={( el ) => settingsContainer = el}> 184 + <div class="settings-close" onClick={() => { 185 + window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 186 + animate('.settings', 187 + { 188 + opacity: 0, 189 + translateX: '500px', 190 + easing: 'easeInOutQuad', 191 + duration: 250, 192 + onComplete: () => { 193 + utils.set('.settings', { display: 'none' }); 194 + } 195 + }) 196 + }}> 197 + <div class="icon"><img draggable="false" src="/icon/x-solid.svg"></img></div> 198 + </div> 199 + {/* <div class="settings-container" ref={( el ) => settingsContainer = el}> */} 200 + <div class="settings-container"> 184 201 <div class="settings-block"> 185 202 <h1>Storage Settings</h1> 186 203 <p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p> ··· 199 216 200 217 <label for="start-in-bg-check"> 201 218 <div class="selection-box"> 202 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 219 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 220 + <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 221 + </div> 222 + </div> 223 + </label> 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' }}> 203 241 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 204 242 </div> 205 243 </div> ··· 223 261 224 262 <label for="start-with-win-check"> 225 263 <div class="selection-box"> 226 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 264 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 227 265 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 228 266 </div> 229 267 </div> ··· 238 276 if(el.target.checked){ 239 277 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 240 278 241 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 242 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 279 + animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 280 + animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 243 281 } else{ 244 282 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 245 283 246 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 247 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 284 + animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 285 + animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 248 286 } 249 287 }} /> 250 288 Window Transparency 251 289 252 290 <label for="transparent-check"> 253 291 <div class="selection-box"> 254 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 292 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 255 293 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 256 294 </div> 257 295 </div> ··· 276 314 </span> 277 315 <span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}> 278 316 <span class="path" style={{ color: 'green' }} onClick={async () => { 279 - finalPathPreviousData = finalPathData; 280 - finalPathConfirm.style.display = 'none'; 317 + let changed = await invoke('change_final_path', { newPath: finalPathData }); 281 318 282 - await invoke('change_final_path', { newPath: finalPathData }); 283 - await invoke('relaunch'); 319 + if(changed){ 320 + finalPathPreviousData = finalPathData; 321 + finalPathConfirm.style.display = 'none'; 284 322 285 - anime({ 286 - targets: '.settings', 287 - opacity: 0, 288 - translateX: '500px', 289 - easing: 'easeInOutQuad', 290 - duration: 250, 291 - complete: () => { 292 - anime.set('.settings', { display: 'none' }); 293 - } 294 - }) 323 + window.location.reload(); 295 324 296 - window.location.reload(); 325 + animate('.settings', { 326 + opacity: 0, 327 + translateX: '500px', 328 + easing: 'easeInOutQuad', 329 + duration: 250, 330 + onComplete: () => { 331 + utils.set('.settings', { display: 'none' }); 332 + } 333 + }) 334 + 335 + window.location.reload(); 336 + } 297 337 }}> 298 338 Save 299 339 </span> ··· 316 356 <br /> 317 357 <p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p> 318 358 </div> 319 - <div class="settings-block"> 320 - <p>WIP</p> 321 - </div> 322 359 </div> 323 360 324 - <div class="slide-bar-tri"></div> 361 + {/* <div class="slide-bar-tri"></div> 325 362 <div class="slide-bar"> 326 363 <div class="inner-slide-bar" ref={( el ) => sliderBar = el}> 327 364 <div class="slider-dot"></div> ··· 339 376 <div class="slider-dot"></div> 340 377 <div class="slider-dot"></div> 341 378 </div> 342 - </div> 379 + </div> */} 343 380 </div> 344 381 ) 345 382 }
+43 -16
src/Components/Structs/Photo.ts
··· 6 6 export class Photo{ 7 7 path: string; 8 8 loaded: boolean = false; 9 + loadingMeta: boolean = false; 9 10 loading: boolean = false; 10 11 metaLoaded: boolean = false; 11 12 image?: HTMLCanvasElement; ··· 14 15 height?: number; 15 16 loadingRotate: number = 0; 16 17 metadata: any; 18 + 19 + error: boolean = false; 17 20 18 21 frames: number = 0; 19 22 shown: boolean = false; ··· 29 32 legacy: boolean = false; 30 33 index: number = 0; 31 34 35 + splitPath: string[]; 36 + 37 + playerLayer: Photo | null = null; 38 + environmentLayer: Photo | null = null; 39 + isMultiLayer = false; 40 + 32 41 public onMetaLoaded: () => void = () => {}; 33 42 34 43 constructor( path: string, isLegacy: boolean = false, i: number ){ ··· 37 46 this.index = i; 38 47 39 48 let split = this.path.split('_'); 49 + this.splitPath = split; 40 50 41 51 if(this.legacy) 42 52 this.dateString = split[2]; 43 53 else 44 54 this.dateString = split[1]; 45 55 56 + let timeString; 57 + if(this.legacy) 58 + timeString = split[3]; 59 + else 60 + timeString = split[2]; 61 + 46 62 let splitDateString = this.dateString.split('-'); 63 + let splitTimeString = timeString.split('-'); 47 64 48 65 this.date = new Date(); 49 66 ··· 51 68 this.date.setMonth(parseInt(splitDateString[1])); 52 69 this.date.setDate(parseInt(splitDateString[2])); 53 70 54 - let resSplit = split[3].split('x'); 71 + this.date.setHours(parseInt(splitTimeString[0])); 72 + this.date.setMinutes(parseInt(splitTimeString[1])); 73 + this.date.setSeconds(parseInt(splitTimeString[2])); 74 + 75 + let resSplit; 76 + if(this.legacy) 77 + resSplit = split[0].split('x') 78 + else 79 + resSplit = split[3].split('x') 80 + 81 + // let width = parseInt(resSplit[0]); 82 + // let height = parseInt(resSplit[1]); 83 + 84 + // if(!isNaN(width) || !isNaN(height)){ 85 + // this.width = width; 86 + // this.height = height; 55 87 56 - let width = parseInt(resSplit[0]); 57 - let height = parseInt(resSplit[1]); 88 + // let scale = Vars.PHOTO_HEIGHT / this.height; 58 89 59 - if(!isNaN(width) || !isNaN(height)){ 60 - this.width = width; 61 - this.height = height; 62 - 63 - let scale = Vars.PHOTO_HEIGHT / this.height; 64 - 65 - this.scaledWidth = this.width * scale; 66 - this.scaledHeight = Vars.PHOTO_HEIGHT; 67 - } 90 + // this.scaledWidth = this.width * scale; 91 + // this.scaledHeight = Vars.PHOTO_HEIGHT; 92 + // } 68 93 } 69 94 70 95 loadMeta(){ 96 + this.loadingMeta = true; 71 97 invoke('load_photo_meta', { photo: this.path }); 72 98 } 73 99 74 100 loadImage(){ 75 - if(this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 76 - 77 - // this.loadMeta(); 101 + if(this.loadingMeta || this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 78 102 if(!this.metaLoaded)return this.loadMeta(); 79 103 80 104 this.loading = true; 81 - 82 105 imagesLoading++; 83 106 84 107 this.image = document.createElement('canvas'); ··· 98 121 this.loading = false; 99 122 100 123 imagesLoading--; 124 + } 125 + 126 + this.imageEl.onerror = () => { 127 + console.log('Cannot load image'); 101 128 } 102 129 } 103 130 }
+1
src/Components/Structs/PhotoMetadata.ts
··· 3 3 height!: number; 4 4 metadata!: string; 5 5 path!: string; 6 + error!: boolean; 6 7 }
+72
src/css/filters.css
··· 1 + 2 + .filter-options{ 3 + position: fixed; 4 + top: 10px; 5 + left: 10px; 6 + } 7 + 8 + .filter-container{ 9 + display: none; 10 + position: fixed; 11 + bottom: 0; 12 + left: 0; 13 + width: 100vw; 14 + padding: 10px 200px; 15 + background: rgba(85, 85, 85, 0.904); 16 + transform: translateY(10px); 17 + color: #fff; 18 + text-align: center; 19 + box-shadow: #0005 0 0 10px; 20 + opacity: 0; 21 + z-index: 150; 22 + } 23 + 24 + .filter-container > .filter-title{ 25 + font-size: 30px; 26 + } 27 + 28 + .filter-type-select{ 29 + display: flex; 30 + justify-content: center; 31 + align-items: center; 32 + width: 75%; 33 + margin: auto; 34 + } 35 + 36 + .filter-type-select > div{ 37 + width: 100%; 38 + border: #fff 4px solid; 39 + border-left: #fff 2px solid; 40 + border-right: #fff 2px solid; 41 + padding: 5px 0; 42 + cursor: pointer; 43 + user-select: none; 44 + -webkit-user-select: none; 45 + } 46 + 47 + .filter-type-select > div:first-child{ 48 + border-left: #fff 4px solid; 49 + border-radius: 10px 0 0 10px; 50 + } 51 + 52 + .filter-type-select > div:last-child{ 53 + border-right: #fff 4px solid; 54 + border-radius: 0 10px 10px 0; 55 + } 56 + 57 + .filter-type-select > .selected-filter{ 58 + background: #00ccff55; 59 + } 60 + 61 + .filter-search{ 62 + margin-top: 10px; 63 + padding: 5px; 64 + border: #fff 4px solid; 65 + border-radius: 10px; 66 + background: #0008; 67 + outline: none; 68 + color: white; 69 + font-size: 15px; 70 + font-family: 'Rubik'; 71 + width: calc(75% - 18px); 72 + }
+38
src/css/icons.css
··· 1 + .icon{ 2 + width: 40px; 3 + height: 40px; 4 + padding: 10px; 5 + display: flex; 6 + align-items: center; 7 + justify-content: center; 8 + height: 100%; 9 + cursor: pointer; 10 + user-select: none; 11 + -webkit-user-select: none; 12 + } 13 + 14 + .icon-small{ 15 + display: flex; 16 + align-items: center; 17 + justify-content: center; 18 + height: 100%; 19 + } 20 + 21 + .icon-label{ 22 + margin-top: -20px; 23 + margin-right: -200px; 24 + width: 200px; 25 + color: white; 26 + pointer-events: none; 27 + transform: translate(20px, -9px); 28 + opacity: 0; 29 + transition: 0.25s; 30 + user-select: none; 31 + -webkit-user-select: none; 32 + } 33 + 34 + .icon:hover ~ .icon-label{ 35 + opacity: 1; 36 + transform: translate(40px, -9px); 37 + } 38 +
+24
src/css/list.css
··· 1 + .photo-list{ 2 + width: 100%; 3 + height: 100%; 4 + position: fixed; 5 + top: 0; 6 + left: 0; 7 + overflow: hidden; 8 + } 9 + 10 + .scroll-to-top{ 11 + position: fixed; 12 + bottom: 10px; 13 + right: 10px; 14 + color: white; 15 + width: 40px; 16 + height: 40px; 17 + cursor: pointer; 18 + border-radius: 50%; 19 + border: 2px solid white; 20 + display: flex; 21 + justify-content: center; 22 + align-items: center; 23 + z-index: 100; 24 + }
+84
src/css/settings.css
··· 1 + .settings{ 2 + position: fixed; 3 + top: 0; 4 + left: 0; 5 + width: 100%; 6 + height: 100%; 7 + background: rgba(0, 0, 0, 0.4); 8 + } 9 + 10 + .settings-container{ 11 + position: fixed; 12 + top: 50px; 13 + left: 0px; 14 + width: 200%; 15 + height: calc(100% - 100px); 16 + display: flex; 17 + } 18 + 19 + .settings-close{ 20 + position: absolute; 21 + top: 10px; 22 + left: 10px; 23 + z-index: 100; 24 + cursor: pointer; 25 + user-select: none; 26 + width: 40px; 27 + height: 40px; 28 + } 29 + 30 + .settings-block{ 31 + width: 50%; 32 + height: 100%; 33 + color: white; 34 + text-align: center; 35 + } 36 + 37 + .selector{ 38 + padding: 10px 20px; 39 + border-radius: 10px; 40 + background: #000a; 41 + display: inline-block; 42 + margin: 10px; 43 + } 44 + 45 + .selector .selection-box{ 46 + height: 20px; 47 + background: #777a; 48 + margin: 5px -10px 0 -10px; 49 + border-radius: 8px; 50 + user-select: none; 51 + -webkit-user-select: none; 52 + cursor: pointer; 53 + transition: 0.25s; 54 + color: #fff1; 55 + } 56 + 57 + .selector .selection-box:hover{ 58 + height: 20px; 59 + background: #777a; 60 + margin: 5px -10px 0 -10px; 61 + border-radius: 8px; 62 + user-select: none; 63 + -webkit-user-select: none; 64 + cursor: pointer; 65 + transition: 0.25s; 66 + color: #fff5; 67 + } 68 + 69 + .selector input{ 70 + display: none; 71 + } 72 + 73 + .selector input:checked ~ label .selection-box{ 74 + background: rgba(0, 146, 204, 0.705); 75 + color: #fff; 76 + } 77 + 78 + .path{ 79 + padding: 5px 10px; 80 + background: #000a; 81 + border-radius: 5px; 82 + margin-left: 5px; 83 + cursor: pointer; 84 + }
+55
src/css/slide-bar.css
··· 1 + .slide-bar{ 2 + position: fixed; 3 + bottom: 0; 4 + left: 0; 5 + width: 100%; 6 + height: 50px; 7 + border-top: #aaa 1px solid; 8 + mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%); 9 + background: #aaa2; 10 + box-shadow: #000 0 0 10px; 11 + overflow: hidden; 12 + } 13 + 14 + .inner-slide-bar{ 15 + display: flex; 16 + height: 50px; 17 + width: 200%; 18 + color: white; 19 + align-items: center; 20 + cursor: pointer; 21 + user-select: none; 22 + -webkit-user-select: none; 23 + } 24 + 25 + .slider-dot{ 26 + width: 5px; 27 + height: 5px; 28 + border-radius: 5px; 29 + background: #aaa; 30 + margin: auto 25px; 31 + } 32 + 33 + .slider-text{ 34 + width: 200px; 35 + text-align: center; 36 + height: 50px; 37 + display: flex; 38 + justify-content: center; 39 + align-items: center; 40 + color: #aaa; 41 + transition: 0.25s; 42 + } 43 + 44 + .slider-text:hover{ 45 + color: #fff; 46 + } 47 + 48 + .slide-bar-tri{ 49 + position: fixed; 50 + bottom: 40px; 51 + left: 50%; 52 + transform: translateX(-50%); 53 + border: transparent solid 5px; 54 + border-top: #fff solid 5px; 55 + }
+82
src/css/tray.css
··· 1 + .photo-tray{ 2 + position: fixed; 3 + bottom: -300px; 4 + left: 0; 5 + width: 100%; 6 + height: 300px; 7 + background: rgba(43, 43, 43, 0.76); 8 + backdrop-filter: blur(10px); 9 + -webkit-backdrop-filter: blur(10px); 10 + box-shadow: #0008 0 0 10px; 11 + padding-bottom: 150px; 12 + } 13 + 14 + .photo-tray-close{ 15 + position: fixed; 16 + bottom: 160px; 17 + left: 50%; 18 + transform: translate(-50%); 19 + color: white; 20 + background: rgba(43, 43, 43, 0.76); 21 + backdrop-filter: blur(10px); 22 + -webkit-backdrop-filter: blur(10px); 23 + box-shadow: #0008 0 0 10px; 24 + display: flex; 25 + justify-content: center; 26 + align-items: center; 27 + height: 30px; 28 + width: 50px; 29 + border-radius: 50px; 30 + cursor: pointer; 31 + font-size: 12px; 32 + user-select: none; 33 + -webkit-user-select: none; 34 + transition: 0.25s width; 35 + } 36 + 37 + .photo-tray-close:hover{ 38 + width: 70px; 39 + } 40 + 41 + .photo-tray-columns{ 42 + width: 100%; 43 + height: 100%; 44 + display: flex; 45 + color: white; 46 + text-align: center; 47 + } 48 + 49 + .photo-tray-column{ 50 + height: 100%; 51 + width: 100%; 52 + scrollbar-width: thin; 53 + overflow-y: auto; 54 + overflow-x: hidden; 55 + mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%); 56 + } 57 + 58 + .tray-heading{ 59 + font-weight: bold; 60 + font-size: 20px; 61 + } 62 + 63 + .world-tags{ 64 + display: flex; 65 + width: 100%; 66 + justify-content: center; 67 + align-items: center; 68 + } 69 + 70 + .world-tags div{ 71 + padding: 0 10px; 72 + color: #bbb; 73 + transition: 0.25s; 74 + } 75 + 76 + .world-tags div:hover{ 77 + color: #ddd; 78 + } 79 + 80 + .world-name{ 81 + font-size: 17px; 82 + }
+193
src/css/viewer.css
··· 1 + 2 + .photo-container{ 3 + width: 100%; 4 + height: 100%; 5 + } 6 + 7 + .photo-container-bg{ 8 + width: 100%; 9 + height: 100%; 10 + position: fixed; 11 + top: 0; 12 + left: 0; 13 + z-index: -1; 14 + /* filter: blur(100px); */ 15 + } 16 + 17 + .single-photo-container{ 18 + margin: 10px; 19 + display: inline-block; 20 + } 21 + 22 + .photo-viewer{ 23 + justify-content: center; 24 + width: 100%; 25 + height: 100%; 26 + position: fixed; 27 + top: 0; 28 + left: 0; 29 + z-index: 5; 30 + background: #0009; 31 + opacity: 0; 32 + display: none; 33 + } 34 + 35 + .photo-context-menu{ 36 + position: fixed; 37 + top: 0; 38 + left: 0; 39 + padding: 10px; 40 + border-radius: 5px; 41 + background: rgba(43, 43, 43, 0.76); 42 + color: #aaa; 43 + box-shadow: #0005 0 0 10px; 44 + opacity: 0; 45 + } 46 + 47 + .photo-context-menu > div{ 48 + padding: 2px 10px; 49 + width: 100; 50 + text-align: center; 51 + transition: 0.1s; 52 + } 53 + 54 + .photo-context-menu > div:hover{ 55 + color: #fff; 56 + cursor: pointer; 57 + user-select: none; 58 + -webkit-user-select: none; 59 + } 60 + 61 + .image-container{ 62 + max-width: none; 63 + max-height: none; 64 + background-size: contain !important; 65 + background-repeat: no-repeat !important; 66 + background-position: center !important; 67 + opacity: 0; 68 + } 69 + 70 + .viewer-button{ 71 + color: white; 72 + width: 30px; 73 + height: 30px; 74 + display: flex; 75 + justify-content: center; 76 + align-items: center; 77 + border-radius: 50px; 78 + font-size: 12px; 79 + background: #8885; 80 + user-select: none; 81 + -webkit-user-select: none; 82 + cursor: pointer; 83 + z-index: 7; 84 + background: rgba(43, 43, 43, 0.76); 85 + } 86 + 87 + .viewer-close{ 88 + position: fixed; 89 + top: 10px; 90 + right: 10px; 91 + width: 35px; 92 + height: 35px; 93 + } 94 + 95 + .prev-button{ 96 + transition: 0.25s; 97 + position: fixed; 98 + top: 50%; 99 + left: 0; 100 + color: white; 101 + width: 50px; 102 + height: 150px; 103 + display: flex; 104 + justify-content: center; 105 + align-items: center; 106 + transform: translateY(-50%); 107 + background: rgba(255, 255, 255, 0.144); 108 + border-radius: 0 15px 15px 0; 109 + cursor: pointer; 110 + user-select: none; 111 + -webkit-user-select: none; 112 + box-shadow: #000 0 0 10px; 113 + } 114 + 115 + .prev-button:hover{ 116 + background: rgba(255, 255, 255, 0.349); 117 + } 118 + 119 + .next-button{ 120 + transition: 0.25s; 121 + position: fixed; 122 + top: 50%; 123 + right: 0; 124 + color: white; 125 + width: 50px; 126 + height: 150px; 127 + display: flex; 128 + justify-content: center; 129 + align-items: center; 130 + transform: translateY(-50%); 131 + background: rgba(255, 255, 255, 0.144); 132 + border-radius: 15px 0 0 15px; 133 + cursor: pointer; 134 + user-select: none; 135 + -webkit-user-select: none; 136 + box-shadow: #000 0 0 10px; 137 + } 138 + 139 + .next-button:hover{ 140 + background: rgba(255, 255, 255, 0.349); 141 + } 142 + 143 + .control-buttons{ 144 + position: fixed; 145 + bottom: 10px; 146 + left: 50%; 147 + transform: translateX(-50%); 148 + display: flex; 149 + } 150 + 151 + .control-buttons div{ 152 + margin: 0 20px; 153 + } 154 + 155 + .copy-notif{ 156 + position: fixed; 157 + top: 40px; 158 + left: 50%; 159 + color: white; 160 + transform: translateX(-50%) translateY(-100px); 161 + background: rgba(43, 43, 43, 0.76); 162 + padding: 10px 40px; 163 + backdrop-filter: blur(10px); 164 + -webkit-backdrop-filter: blur(10px); 165 + border-radius: 50px; 166 + box-shadow: #000 0 0 10px; 167 + z-index: 12; 168 + opacity: 0; 169 + pointer-events: none; 170 + } 171 + 172 + .photo-layer-manager{ 173 + background: rgba(43, 43, 43, 0.76); 174 + color: #fff; 175 + padding: 10px; 176 + backdrop-filter: blur(10px); 177 + position: fixed; 178 + bottom: 10px; 179 + left: 10px; 180 + border-radius: 10px; 181 + } 182 + 183 + .photo-layer-manager-layer{ 184 + cursor: pointer; 185 + -webkit-user-select: none; 186 + user-select: none; 187 + padding: 5px 20px; 188 + transition: 0.1s; 189 + } 190 + 191 + .photo-layer-manager-layer:hover{ 192 + color: #bbb; 193 + }
+9 -6
src/index.tsx
··· 3 3 4 4 declare global{ 5 5 interface Window { 6 - AccountManager: AccountManager; 7 6 LoadingManager: LoadingManager; 8 7 PhotoManager: PhotoManager; 9 8 ConfirmationBoxManager: ConfirmationBoxManager; 10 9 PhotoViewerManager: PhotoViewerManager; 11 10 WorldCacheManager: WorldCacheManager; 12 11 PhotoListRenderingManager: PhotoListRenderingManager; 13 - SyncManager: SyncManager; 14 12 ViewManager: ViewManager; 15 13 16 14 CloseAllPopups: (() => void)[]; ··· 23 21 24 22 window.oncontextmenu = ( e ) => e.preventDefault(); 25 23 24 + import './css/icons.css'; 25 + import './css/tray.css'; 26 + import './css/settings.css'; 27 + import './css/slide-bar.css'; 28 + import './css/viewer.css'; 29 + import './css/filters.css'; 30 + import './css/list.css'; 31 + 26 32 import "./styles.css"; 33 + 27 34 import App from "./Components/App"; 28 35 import { invoke } from "@tauri-apps/api/core"; 29 36 30 - import { AccountManager } from "./Components/Managers/AccountManager"; 31 37 import { LoadingManager } from "./Components/Managers/LoadingManager"; 32 38 import { PhotoManager } from "./Components/Managers/PhotoManager"; 33 39 import { ConfirmationBoxManager } from "./Components/Managers/ConfirmationBoxManager"; 34 40 import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager"; 35 41 import { WorldCacheManager } from "./Components/Managers/WorldCacheManager"; 36 42 import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager"; 37 - import { SyncManager } from "./Components/Managers/SyncManager"; 38 43 import { ViewManager } from "./Components/Managers/ViewManager"; 39 44 40 - window.AccountManager = new AccountManager(); 41 45 window.LoadingManager = new LoadingManager(); 42 46 window.PhotoManager = new PhotoManager(); 43 47 window.ConfirmationBoxManager = new ConfirmationBoxManager(); 44 48 window.PhotoViewerManager = new PhotoViewerManager(); 45 49 window.WorldCacheManager = new WorldCacheManager(); 46 50 window.PhotoListRenderingManager = new PhotoListRenderingManager(); 47 - window.SyncManager = new SyncManager(); 48 51 window.ViewManager = new ViewManager(); 49 52 50 53 (async () => {
+11 -768
src/styles.css
··· 7 7 background: #000; 8 8 margin: 0; 9 9 font-family: Rubik, 'Courier New'; 10 + overflow: hidden; 11 + } 12 + 13 + * { 14 + box-sizing: border-box; 10 15 } 11 16 12 17 .loading{ ··· 24 29 align-items: center; 25 30 } 26 31 27 - .navbar{ 28 - background: #555a; 29 - position: fixed; 30 - top: 0; 31 - left: 0; 32 - width: 100%; 33 - margin-top: -50px; 34 - padding-top: 50px; 35 - height: 50px; 36 - display: flex; 37 - backdrop-filter: blur(10px); 38 - -webkit-backdrop-filter: blur(10px); 39 - z-index: 10; 40 - box-shadow: #000 0 0 10px; 41 - } 42 - 43 - .navbar .tabs{ 44 - width: calc(100% - 450px); 45 - height: 100%; 46 - display: flex; 47 - } 48 - 49 - .navbar .account{ 50 - width: 100px; 51 - height: 100%; 52 - display: flex; 53 - justify-content: center; 54 - align-items: center; 55 - transition: 0.1s; 56 - cursor: pointer; 57 - user-select: none; 58 - -webkit-user-select: none; 59 - } 60 - 61 - .navbar .account:hover{ 62 - background: #0005; 63 - } 64 - 65 - .navbar .control-lights{ 66 - width: 150px; 67 - height: 50px; 68 - display: flex; 69 - justify-content: center; 70 - align-items: center; 71 - } 72 - 73 - .control-lights .light{ 74 - user-select: none; 75 - -webkit-user-select: none; 76 - font-size: 20px; 77 - text-align: center; 78 - color: white; 79 - width: 100%; 80 - cursor: pointer; 81 - display: flex; 82 - justify-content: center; 83 - align-items: center; 84 - height: 50px; 85 - filter: invert(100%); 86 - } 87 - 88 - .control-lights .light:hover{ 89 - background: #fff5; 90 - } 91 - 92 - .control-lights .light img{ 93 - width: 25%; 94 - } 95 - 96 - .icon{ 97 - width: 15px; 98 - filter: invert(100%); 99 - display: flex; 100 - align-items: center; 101 - justify-content: center; 102 - height: 100%; 103 - } 104 - 105 - .icon-label{ 106 - margin-top: -20px; 107 - margin-right: -200px; 108 - width: 200px; 109 - color: white; 110 - pointer-events: none; 111 - transform: translate(40px, -19px); 112 - opacity: 0; 113 - transition: 0.25s; 114 - user-select: none; 115 - -webkit-user-select: none; 116 - } 117 - 118 - .icon:hover ~ .icon-label{ 119 - opacity: 1; 120 - transform: translate(60px, -19px); 121 - } 122 - 123 - .user-pfp{ 124 - width: 35px; 125 - height: 35px; 126 - background-size: cover !important; 127 - background-position: center !important; 128 - border-radius: 50%; 129 - margin-right: 10px; 130 - } 131 - 132 - .account-dropdown{ 133 - font-size: 20px; 134 - color: white; 135 - } 136 - 137 - .nav-tab{ 138 - color: white; 139 - width: 150px; 140 - height: 100%; 141 - transition: 0.1s; 142 - cursor: pointer; 143 - user-select: none; 144 - -webkit-user-select: none; 145 - justify-content: center; 146 - align-items: center; 147 - display: flex; 148 - } 149 - 150 - .nav-tab:hover{ 151 - background: #0005; 152 - } 153 - 154 - .dropdown{ 155 - position: fixed; 156 - right: 125px; 157 - top: 60px; 158 - background: #555a; 159 - height: 60px; 160 - width: 150px; 161 - border-radius: 5px; 162 - backdrop-filter: blur(5px); 163 - z-index: 10; 164 - } 165 - 166 - .dropdown-button{ 167 - width: 100%; 168 - text-align: center; 169 - padding: 5.5px 0; 170 - color: #aaa; 171 - cursor: pointer; 172 - user-select: none; 173 - -webkit-user-select: none; 174 - transition: 0.1s; 175 - } 176 - 177 - .dropdown-button:hover{ 178 - color: #fff; 179 - } 180 - 181 - .photo-list{ 182 - width: 100%; 183 - height: 100%; 184 - position: fixed; 185 - top: 0; 186 - left: 0; 187 - overflow: hidden; 188 - } 189 - 190 - .filter-options{ 191 - position: fixed; 192 - top: 55px; 193 - left: 5px; 194 - width: 40px; 195 - height: 50px; 196 - } 197 - 198 - .filter-options img{ 199 - cursor: pointer; 200 - user-select: none; 201 - -webkit-user-select: none; 202 - } 203 - 204 - .filter-container{ 205 - display: none; 206 - position: fixed; 207 - bottom: 0; 208 - left: 50%; 209 - width: 600px; 210 - height: 83px; 211 - transform: translate(-50%); 212 - padding: 10px; 213 - border-radius: 5px 5px 0 0; 214 - backdrop-filter: blur(5px); 215 - -webkit-backdrop-filter: blur(5px); 216 - background: #555a; 217 - color: #fff; 218 - text-align: center; 219 - box-shadow: #0005 0 0 10px; 220 - opacity: 0; 221 - } 222 - 223 - .filter-container > .filter-title{ 224 - font-size: 30px; 225 - } 226 - 227 - .filter-type-select{ 228 - display: flex; 229 - justify-content: center; 230 - align-items: center; 231 - width: 75%; 232 - margin: auto; 233 - } 234 - 235 - .filter-type-select > div{ 236 - width: 100%; 237 - border: #fff 4px solid; 238 - border-left: #fff 2px solid; 239 - border-right: #fff 2px solid; 240 - padding: 5px 0; 241 - cursor: pointer; 242 - user-select: none; 243 - -webkit-user-select: none; 244 - } 245 - 246 - .filter-type-select > div:first-child{ 247 - border-left: #fff 4px solid; 248 - border-radius: 10px 0 0 10px; 249 - } 250 - 251 - .filter-type-select > div:last-child{ 252 - border-right: #fff 4px solid; 253 - border-radius: 0 10px 10px 0; 254 - } 255 - 256 - .filter-type-select > .selected-filter{ 257 - background: #00ccff55; 258 - } 259 - 260 - .filter-search{ 261 - margin-top: 10px; 262 - padding: 5px; 263 - border: #fff 4px solid; 264 - border-radius: 10px; 265 - background: #0008; 266 - outline: none; 267 - color: white; 268 - font-size: 15px; 269 - font-family: 'Rubik'; 270 - width: calc(75% - 18px); 271 - } 272 - 273 - .date-list{ 274 - mask-image: linear-gradient(to bottom, #0000, #000, #0000); 275 - overflow: auto; 276 - scrollbar-width: thin; 277 - height: calc(100% - 100px); 278 - padding: 50px 0; 279 - } 280 - 281 - .date-list-date{ 282 - padding: 10px; 283 - user-select: none; 284 - -webkit-user-select: none; 285 - cursor: pointer; 286 - transition: 0.1s; 287 - border-radius: 10px; 288 - } 289 - 290 - .date-list-date:hover{ 291 - background: #0005; 292 - box-shadow: inset #0005 0 0 10px; 293 - } 294 - 295 - .photo-tree-loading{ 296 - position: fixed; 297 - top: 0; 298 - left: 0; 299 - width: 100%; 300 - height: 100%; 301 - display: flex; 302 - justify-content: center; 303 - align-items: center; 304 - color: white; 305 - font-size: 20px; 306 - } 307 - 308 - .loading-bar{ 309 - width: 500px; 310 - height: 8px; 311 - border-radius: 12px; 312 - background: #333; 313 - margin-top: 10px; 314 - padding: 2px; 315 - } 316 - 317 - .loading-bar-inner{ 318 - width: 0%; 319 - height: 8px; 320 - border-radius: 18px; 321 - background: #00ccff; 322 - } 323 - 324 - .photo-container{ 325 - width: 100%; 326 - height: 100%; 327 - } 328 - 329 - .photo-container-bg{ 330 - width: 100%; 331 - height: 100%; 332 - position: fixed; 333 - top: 0; 334 - left: 0; 335 - z-index: -1; 336 - filter: blur(100px); 337 - -webkit-filter: blur(100px); 338 - } 339 - 340 - .single-photo-container{ 341 - margin: 10px; 342 - display: inline-block; 343 - } 344 - 345 - .photo-viewer{ 346 - justify-content: center; 347 - width: 100%; 348 - height: 100%; 349 - position: fixed; 350 - top: 0; 351 - left: 0; 352 - z-index: 5; 353 - background: #0009; 354 - backdrop-filter: blur(75px); 355 - -webkit-backdrop-filter: blur(75px); 356 - opacity: 0; 357 - display: none; 358 - } 359 - 360 - .photo-context-menu{ 361 - position: fixed; 362 - top: 0; 363 - left: 0; 364 - padding: 10px; 365 - border-radius: 5px; 366 - backdrop-filter: blur(5px); 367 - -webkit-backdrop-filter: blur(5px); 368 - background: #555a; 369 - color: #aaa; 370 - box-shadow: #0005 0 0 10px; 371 - opacity: 0; 372 - } 373 - 374 - .photo-context-menu > div{ 375 - padding: 2px 10px; 376 - width: calc(100% - 10px); 377 - text-align: center; 378 - transition: 0.1s; 379 - } 380 - 381 - .photo-context-menu > div:hover{ 382 - color: #fff; 383 - cursor: pointer; 384 - user-select: none; 385 - -webkit-user-select: none; 386 - } 387 - 388 - .image-container{ 389 - height: 100%; 390 - background-size: contain !important; 391 - background-repeat: no-repeat !important; 392 - background-position: center !important; 393 - opacity: 0; 394 - } 395 - 396 - .viewer-button{ 397 - color: white; 398 - width: 30px; 399 - height: 30px; 400 - display: flex; 401 - justify-content: center; 402 - align-items: center; 403 - border-radius: 50px; 404 - font-size: 12px; 405 - background: #8885; 406 - backdrop-filter: blur(10px); 407 - -webkit-backdrop-filter: blur(10px); 408 - user-select: none; 409 - -webkit-user-select: none; 410 - cursor: pointer; 411 - z-index: 7; 412 - box-shadow: #0008 0 0 10px; 413 - } 414 - 415 - .viewer-close{ 416 - position: fixed; 417 - top: 10px; 418 - right: 10px; 419 - width: 35px; 420 - height: 35px; 421 - } 422 - 423 - .prev-button{ 424 - transition: 0.25s; 425 - position: fixed; 426 - top: 50%; 427 - left: 0; 428 - color: white; 429 - width: 50px; 430 - height: 150px; 431 - display: flex; 432 - justify-content: center; 433 - align-items: center; 434 - transform: translateY(-50%); 435 - background: rgba(255, 255, 255, 0.144); 436 - backdrop-filter: blur(50px); 437 - -webkit-backdrop-filter: blur(50px); 438 - border-radius: 0 15px 15px 0; 439 - cursor: pointer; 440 - user-select: none; 441 - -webkit-user-select: none; 442 - box-shadow: #000 0 0 10px; 443 - } 444 - 445 - .prev-button:hover{ 446 - background: rgba(255, 255, 255, 0.349); 447 - } 448 - 449 - .next-button{ 450 - transition: 0.25s; 451 - position: fixed; 452 - top: 50%; 453 - right: 0; 454 - color: white; 455 - width: 50px; 456 - height: 150px; 457 - display: flex; 458 - justify-content: center; 459 - align-items: center; 460 - transform: translateY(-50%); 461 - background: rgba(255, 255, 255, 0.144); 462 - backdrop-filter: blur(50px); 463 - -webkit-backdrop-filter: blur(50px); 464 - border-radius: 15px 0 0 15px; 465 - cursor: pointer; 466 - user-select: none; 467 - -webkit-user-select: none; 468 - box-shadow: #000 0 0 10px; 469 - } 470 - 471 - .next-button:hover{ 472 - background: rgba(255, 255, 255, 0.349); 473 - } 474 - 475 - .reload-photos{ 476 - position: fixed; 477 - top: 70px; 478 - right: 20px; 479 - color: white; 480 - user-select: none; 481 - -webkit-user-select: none; 482 - cursor: pointer; 483 - opacity: 0; 484 - } 485 - 486 32 .confirmation-box{ 487 33 position: fixed; 488 34 top: 0; ··· 490 36 width: 100%; 491 37 height: 100%; 492 38 z-index: 15; 493 - background: #0005; 39 + background: rgba(0, 0, 0, 0.76); 494 40 transition: 0.25s; 495 - backdrop-filter: blur(10px); 496 - -webkit-backdrop-filter: blur(10px); 497 41 } 498 42 499 43 .confirmation-box-container{ ··· 553 97 box-shadow: #000a inset 0 0 10px; 554 98 } 555 99 556 - .control-buttons{ 557 - position: fixed; 558 - bottom: 10px; 559 - left: 50%; 560 - transform: translateX(-50%); 561 - display: flex; 562 - } 563 - 564 - .control-buttons div{ 565 - margin: 0 20px; 100 + img{ 101 + max-width: 100%; 102 + max-height: 100%; 566 103 } 567 104 568 - .copy-notif{ 105 + .error-notif{ 569 106 position: fixed; 570 107 top: 40px; 571 108 left: 50%; 572 109 color: white; 573 110 transform: translateX(-50%) translateY(-100px); 574 - background: #8885; 111 + background: rgba(43, 43, 43, 0.76); 575 112 padding: 10px 40px; 576 113 backdrop-filter: blur(10px); 577 114 -webkit-backdrop-filter: blur(10px); ··· 580 117 z-index: 12; 581 118 opacity: 0; 582 119 pointer-events: none; 583 - } 584 - 585 - .photo-tray{ 586 - position: fixed; 587 - bottom: -150px; 588 - left: 0; 589 - width: 100%; 590 - height: 150px; 591 - background: #7778; 592 - backdrop-filter: blur(10px); 593 - -webkit-backdrop-filter: blur(10px); 594 - box-shadow: #0008 0 0 10px; 595 - padding-bottom: 150px; 596 - margin-bottom: -150px; 597 - } 598 - 599 - .photo-tray-close{ 600 - position: fixed; 601 - bottom: 160px; 602 - left: 50%; 603 - transform: translate(-50%); 604 - color: white; 605 - background: #8885; 606 - backdrop-filter: blur(10px); 607 - -webkit-backdrop-filter: blur(10px); 608 - box-shadow: #0008 0 0 10px; 609 - display: flex; 610 - justify-content: center; 611 - align-items: center; 612 - height: 30px; 613 - width: 50px; 614 - border-radius: 50px; 615 - cursor: pointer; 616 - font-size: 12px; 617 - user-select: none; 618 - -webkit-user-select: none; 619 - transition: 0.25s width; 620 - } 621 - 622 - .photo-tray-close:hover{ 623 - width: 70px; 624 - } 625 - 626 - .photo-tray-columns{ 627 - width: 100%; 628 - height: 100%; 629 - display: flex; 630 - color: white; 631 - text-align: center; 632 - } 633 - 634 - .photo-tray-column{ 635 - height: 100%; 636 - width: 100%; 637 - scrollbar-width: thin; 638 - overflow-y: auto; 639 - overflow-x: hidden; 640 - mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%); 641 - } 642 - 643 - .tray-heading{ 644 - font-weight: bold; 645 - font-size: 20px; 646 - } 647 - 648 - .world-tags{ 649 - display: flex; 650 - width: 100%; 651 - justify-content: center; 652 - align-items: center; 653 - } 654 - 655 - .world-tags div{ 656 - padding: 0 10px; 657 - color: #bbb; 658 - transition: 0.25s; 659 - } 660 - 661 - .world-tags div:hover{ 662 - color: #ddd; 663 - } 664 - 665 - .world-name{ 666 - font-size: 17px; 667 - } 668 - 669 - .settings{ 670 - position: fixed; 671 - top: 0; 672 - left: 0; 673 - width: 100%; 674 - height: 100%; 675 - background: rgba(0, 0, 0, 0.4); 676 - backdrop-filter: blur(100px); 677 - -webkit-backdrop-filter: blur(100px); 678 - } 679 - 680 - .slide-bar{ 681 - position: fixed; 682 - bottom: 0; 683 - left: 0; 684 - width: 100%; 685 - height: 50px; 686 - border-top: #aaa 1px solid; 687 - overflow-x: hidden; 688 - mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%); 689 - background: #aaa2; 690 - box-shadow: #000 0 0 10px; 691 - } 692 - 693 - .inner-slide-bar{ 694 - display: flex; 695 - height: 50px; 696 - width: 200%; 697 - color: white; 698 - align-items: center; 699 - cursor: pointer; 700 - user-select: none; 701 - -webkit-user-select: none; 702 - } 703 - 704 - .slider-dot{ 705 - width: 5px; 706 - height: 5px; 707 - border-radius: 5px; 708 - background: #aaa; 709 - margin: auto 25px; 710 - } 711 - 712 - .slider-text{ 713 - width: 200px; 714 - text-align: center; 715 - height: 50px; 716 - display: flex; 717 - justify-content: center; 718 - align-items: center; 719 - color: #aaa; 720 - transition: 0.25s; 721 - } 722 - 723 - .slider-text:hover{ 724 - color: #fff; 725 - } 726 - 727 - .slide-bar-tri{ 728 - position: fixed; 729 - bottom: 40px; 730 - left: 50%; 731 - transform: translateX(-50%); 732 - border: transparent solid 5px; 733 - border-top: #fff solid 5px; 734 - } 735 - 736 - .settings-container{ 737 - position: fixed; 738 - top: 50px; 739 - left: 0px; 740 - width: 200%; 741 - height: calc(100% - 100px); 742 - display: flex; 743 - } 744 - 745 - .settings-block{ 746 - width: 50%; 747 - height: 100%; 748 - color: white; 749 - text-align: center; 750 - } 751 - 752 - .selector{ 753 - padding: 10px 20px; 754 - border-radius: 10px; 755 - background: #000a; 756 - display: inline-block; 757 - margin: 10px; 758 - } 759 - 760 - .selector .selection-box{ 761 - height: 20px; 762 - background: #777a; 763 - margin: 5px -10px 0 -10px; 764 - border-radius: 8px; 765 - user-select: none; 766 - -webkit-user-select: none; 767 - cursor: pointer; 768 - transition: 0.25s; 769 - color: #fff1; 770 - } 771 - 772 - .selector .selection-box:hover{ 773 - height: 20px; 774 - background: #777a; 775 - margin: 5px -10px 0 -10px; 776 - border-radius: 8px; 777 - user-select: none; 778 - -webkit-user-select: none; 779 - cursor: pointer; 780 - transition: 0.25s; 781 - color: #fff5; 782 - } 783 - 784 - .selector input{ 785 - display: none; 786 - } 787 - 788 - .selector input:checked ~ label .selection-box{ 789 - background: rgba(0, 146, 204, 0.705); 790 - color: #fff; 791 - } 792 - 793 - .path{ 794 - padding: 5px 10px; 795 - background: #000a; 796 - border-radius: 5px; 797 - margin-left: 5px; 798 - cursor: pointer; 799 - } 800 - 801 - .scroll-to-top{ 802 - position: fixed; 803 - bottom: 10px; 804 - right: 10px; 805 - color: white; 806 - width: 40px; 807 - height: 40px; 808 - cursor: pointer; 809 - border-radius: 50%; 810 - border: 2px solid white; 811 - display: flex; 812 - justify-content: center; 813 - align-items: center; 814 - } 815 - 816 - .account-profile{ 817 - margin: auto; 818 - width: 50%; 819 - height: 200px; 820 - display: flex; 821 - } 822 - 823 - .account-pfp{ 824 - width: 200px; 825 - height: 200px; 826 - background-position: center !important; 827 - background-size: cover !important; 828 - border-radius: 50%; 829 - box-shadow: #0005 0 0 10px; 830 - position: relative; 831 - z-index: 10; 832 - } 833 - 834 - .account-desc{ 835 - width: calc(100% - 200px); 836 - padding-left: 100px; 837 - height: 150px; 838 - margin: 25px 0; 839 - margin-left: -100px; 840 - background: #0009; 841 - border-radius: 10px; 842 - box-shadow: #0005 0 0 10px; 843 - } 844 - 845 - .storage-bar{ 846 - width: calc(100% - 20px); 847 - height: 10px; 848 - margin-left: 10px; 849 - background: #555; 850 - border-radius: 10px; 851 - display: flex; 852 - justify-content: left; 853 - align-items: center; 854 - margin-bottom: 2px; 855 - } 856 - 857 - .storage-bar-inner{ 858 - margin: 2px; 859 - height: 6px; 860 - background: #00ccff; 861 - border-radius: 10px; 862 - } 863 - 864 - .account-notice{ 865 - background: #0007; 866 - border-radius: 5px; 867 - box-shadow: #0005 0 0 10px; 868 - padding: 10px; 869 - margin: auto; 870 - width: calc(50% - 20px); 871 - margin-top: 25px; 872 - } 873 - 874 - img{ 875 - max-width: 100%; 876 - max-height: 100%; 877 120 }
+917 -1002
src-tauri/Cargo.lock
··· 4 4 5 5 [[package]] 6 6 name = "VRChatPhotoManager" 7 - version = "0.2.5" 7 + version = "0.2.7" 8 8 dependencies = [ 9 9 "arboard", 10 - "dirs 5.0.1", 10 + "dirs", 11 11 "fast_image_resize", 12 12 "image", 13 13 "mslnk", ··· 19 19 "serde_json", 20 20 "tauri", 21 21 "tauri-build", 22 - "tauri-plugin-deep-link", 23 22 "tauri-plugin-http", 24 23 "tauri-plugin-process", 25 24 "tauri-plugin-shell", ··· 27 26 ] 28 27 29 28 [[package]] 30 - name = "addr2line" 31 - version = "0.24.2" 32 - source = "registry+https://github.com/rust-lang/crates.io-index" 33 - checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 34 - dependencies = [ 35 - "gimli", 36 - ] 37 - 38 - [[package]] 39 29 name = "adler2" 40 30 version = "2.0.1" 41 31 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 43 33 44 34 [[package]] 45 35 name = "aho-corasick" 46 - version = "1.1.3" 36 + version = "1.1.4" 47 37 source = "registry+https://github.com/rust-lang/crates.io-index" 48 - checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 38 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 49 39 dependencies = [ 50 40 "memchr", 51 41 ] ··· 75 65 ] 76 66 77 67 [[package]] 78 - name = "android-tzdata" 79 - version = "0.1.1" 80 - source = "registry+https://github.com/rust-lang/crates.io-index" 81 - checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 82 - 83 - [[package]] 84 68 name = "android_system_properties" 85 69 version = "0.1.5" 86 70 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 91 75 92 76 [[package]] 93 77 name = "anyhow" 94 - version = "1.0.98" 78 + version = "1.0.100" 95 79 source = "registry+https://github.com/rust-lang/crates.io-index" 96 - checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 80 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 97 81 98 82 [[package]] 99 83 name = "arbitrary" 100 - version = "1.4.1" 84 + version = "1.4.2" 101 85 source = "registry+https://github.com/rust-lang/crates.io-index" 102 - checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 86 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 103 87 104 88 [[package]] 105 89 name = "arboard" 106 - version = "3.6.0" 90 + version = "3.6.1" 107 91 source = "registry+https://github.com/rust-lang/crates.io-index" 108 - checksum = "55f533f8e0af236ffe5eb979b99381df3258853f00ba2e44b6e1955292c75227" 92 + checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" 109 93 dependencies = [ 110 94 "clipboard-win", 111 95 "image", 112 96 "log", 113 - "objc2 0.6.1", 97 + "objc2 0.6.3", 114 98 "objc2-app-kit", 115 99 "objc2-core-foundation", 116 100 "objc2-core-graphics", 117 - "objc2-foundation 0.3.1", 101 + "objc2-foundation 0.3.2", 118 102 "parking_lot", 119 103 "percent-encoding", 120 - "windows-sys 0.59.0", 104 + "windows-sys 0.60.2", 121 105 "x11rb", 122 106 ] 123 107 ··· 129 113 dependencies = [ 130 114 "proc-macro2", 131 115 "quote", 132 - "syn 2.0.104", 116 + "syn 2.0.109", 133 117 ] 134 118 135 119 [[package]] ··· 164 148 165 149 [[package]] 166 150 name = "async-executor" 167 - version = "1.13.2" 151 + version = "1.13.3" 168 152 source = "registry+https://github.com/rust-lang/crates.io-index" 169 - checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 153 + checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" 170 154 dependencies = [ 171 155 "async-task", 172 156 "concurrent-queue", ··· 177 161 ] 178 162 179 163 [[package]] 180 - name = "async-fs" 181 - version = "2.1.3" 182 - source = "registry+https://github.com/rust-lang/crates.io-index" 183 - checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" 184 - dependencies = [ 185 - "async-lock", 186 - "blocking", 187 - "futures-lite", 188 - ] 189 - 190 - [[package]] 191 164 name = "async-io" 192 - version = "2.5.0" 165 + version = "2.6.0" 193 166 source = "registry+https://github.com/rust-lang/crates.io-index" 194 - checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" 167 + checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" 195 168 dependencies = [ 196 - "async-lock", 169 + "autocfg", 197 170 "cfg-if", 198 171 "concurrent-queue", 199 172 "futures-io", 200 173 "futures-lite", 201 174 "parking", 202 175 "polling", 203 - "rustix 1.0.8", 176 + "rustix", 204 177 "slab", 205 - "windows-sys 0.60.2", 178 + "windows-sys 0.61.2", 206 179 ] 207 180 208 181 [[package]] 209 182 name = "async-lock" 210 - version = "3.4.0" 183 + version = "3.4.1" 211 184 source = "registry+https://github.com/rust-lang/crates.io-index" 212 - checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 185 + checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 213 186 dependencies = [ 214 187 "event-listener", 215 188 "event-listener-strategy", ··· 218 191 219 192 [[package]] 220 193 name = "async-process" 221 - version = "2.4.0" 194 + version = "2.5.0" 222 195 source = "registry+https://github.com/rust-lang/crates.io-index" 223 - checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" 196 + checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" 224 197 dependencies = [ 225 198 "async-channel", 226 199 "async-io", ··· 231 204 "cfg-if", 232 205 "event-listener", 233 206 "futures-lite", 234 - "rustix 1.0.8", 207 + "rustix", 235 208 ] 236 209 237 210 [[package]] ··· 242 215 dependencies = [ 243 216 "proc-macro2", 244 217 "quote", 245 - "syn 2.0.104", 218 + "syn 2.0.109", 246 219 ] 247 220 248 221 [[package]] 249 222 name = "async-signal" 250 - version = "0.2.12" 223 + version = "0.2.13" 251 224 source = "registry+https://github.com/rust-lang/crates.io-index" 252 - checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" 225 + checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" 253 226 dependencies = [ 254 227 "async-io", 255 228 "async-lock", ··· 257 230 "cfg-if", 258 231 "futures-core", 259 232 "futures-io", 260 - "rustix 1.0.8", 233 + "rustix", 261 234 "signal-hook-registry", 262 235 "slab", 263 - "windows-sys 0.60.2", 236 + "windows-sys 0.61.2", 264 237 ] 265 238 266 239 [[package]] ··· 271 244 272 245 [[package]] 273 246 name = "async-trait" 274 - version = "0.1.88" 247 + version = "0.1.89" 275 248 source = "registry+https://github.com/rust-lang/crates.io-index" 276 - checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 249 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 277 250 dependencies = [ 278 251 "proc-macro2", 279 252 "quote", 280 - "syn 2.0.104", 253 + "syn 2.0.109", 281 254 ] 282 255 283 256 [[package]] ··· 317 290 318 291 [[package]] 319 292 name = "av1-grain" 320 - version = "0.2.4" 293 + version = "0.2.5" 321 294 source = "registry+https://github.com/rust-lang/crates.io-index" 322 - checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" 295 + checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" 323 296 dependencies = [ 324 297 "anyhow", 325 298 "arrayvec", ··· 331 304 332 305 [[package]] 333 306 name = "avif-serialize" 334 - version = "0.8.5" 307 + version = "0.8.6" 335 308 source = "registry+https://github.com/rust-lang/crates.io-index" 336 - checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" 309 + checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" 337 310 dependencies = [ 338 311 "arrayvec", 339 312 ] 340 313 341 314 [[package]] 342 - name = "backtrace" 343 - version = "0.3.75" 344 - source = "registry+https://github.com/rust-lang/crates.io-index" 345 - checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 346 - dependencies = [ 347 - "addr2line", 348 - "cfg-if", 349 - "libc", 350 - "miniz_oxide", 351 - "object", 352 - "rustc-demangle", 353 - "windows-targets 0.52.6", 354 - ] 355 - 356 - [[package]] 357 315 name = "base64" 358 316 version = "0.21.7" 359 317 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 367 325 368 326 [[package]] 369 327 name = "bit_field" 370 - version = "0.10.2" 328 + version = "0.10.3" 371 329 source = "registry+https://github.com/rust-lang/crates.io-index" 372 - checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 330 + checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" 373 331 374 332 [[package]] 375 333 name = "bitflags" ··· 379 337 380 338 [[package]] 381 339 name = "bitflags" 382 - version = "2.9.1" 340 + version = "2.10.0" 383 341 source = "registry+https://github.com/rust-lang/crates.io-index" 384 - checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 342 + checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 385 343 dependencies = [ 386 - "serde", 344 + "serde_core", 387 345 ] 388 346 389 347 [[package]] ··· 412 370 413 371 [[package]] 414 372 name = "block2" 415 - version = "0.6.1" 373 + version = "0.6.2" 416 374 source = "registry+https://github.com/rust-lang/crates.io-index" 417 - checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" 375 + checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" 418 376 dependencies = [ 419 - "objc2 0.6.1", 377 + "objc2 0.6.3", 420 378 ] 421 379 422 380 [[package]] ··· 434 392 435 393 [[package]] 436 394 name = "brotli" 437 - version = "8.0.1" 395 + version = "8.0.2" 438 396 source = "registry+https://github.com/rust-lang/crates.io-index" 439 - checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" 397 + checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 440 398 dependencies = [ 441 399 "alloc-no-stdlib", 442 400 "alloc-stdlib", ··· 467 425 468 426 [[package]] 469 427 name = "bytemuck" 470 - version = "1.23.1" 428 + version = "1.24.0" 471 429 source = "registry+https://github.com/rust-lang/crates.io-index" 472 - checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" 430 + checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 473 431 474 432 [[package]] 475 433 name = "byteorder" ··· 498 456 source = "registry+https://github.com/rust-lang/crates.io-index" 499 457 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 500 458 dependencies = [ 501 - "bitflags 2.9.1", 459 + "bitflags 2.10.0", 502 460 "cairo-sys-rs", 503 461 "glib", 504 462 "libc", ··· 519 477 520 478 [[package]] 521 479 name = "camino" 522 - version = "1.1.10" 480 + version = "1.2.1" 523 481 source = "registry+https://github.com/rust-lang/crates.io-index" 524 - checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" 482 + checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" 525 483 dependencies = [ 526 - "serde", 484 + "serde_core", 527 485 ] 528 486 529 487 [[package]] ··· 546 504 "semver", 547 505 "serde", 548 506 "serde_json", 549 - "thiserror 2.0.12", 507 + "thiserror 2.0.17", 550 508 ] 551 509 552 510 [[package]] ··· 556 514 checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" 557 515 dependencies = [ 558 516 "serde", 559 - "toml 0.9.4", 517 + "toml 0.9.8", 560 518 ] 561 519 562 520 [[package]] 563 521 name = "cc" 564 - version = "1.2.30" 522 + version = "1.2.45" 565 523 source = "registry+https://github.com/rust-lang/crates.io-index" 566 - checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 524 + checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" 567 525 dependencies = [ 526 + "find-msvc-tools", 568 527 "jobserver", 569 528 "libc", 570 529 "shlex", ··· 599 558 600 559 [[package]] 601 560 name = "cfg-if" 602 - version = "1.0.1" 561 + version = "1.0.4" 603 562 source = "registry+https://github.com/rust-lang/crates.io-index" 604 - checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 563 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 605 564 606 565 [[package]] 607 566 name = "cfg_aliases" ··· 611 570 612 571 [[package]] 613 572 name = "chrono" 614 - version = "0.4.41" 573 + version = "0.4.42" 615 574 source = "registry+https://github.com/rust-lang/crates.io-index" 616 - checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 575 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 617 576 dependencies = [ 618 - "android-tzdata", 619 577 "iana-time-zone", 620 578 "num-traits", 621 579 "serde", 622 - "windows-link", 580 + "windows-link 0.2.1", 623 581 ] 624 582 625 583 [[package]] ··· 743 701 source = "registry+https://github.com/rust-lang/crates.io-index" 744 702 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 745 703 dependencies = [ 746 - "bitflags 2.9.1", 704 + "bitflags 2.10.0", 747 705 "core-foundation 0.10.1", 748 706 "core-graphics-types", 749 707 "foreign-types 0.5.0", ··· 756 714 source = "registry+https://github.com/rust-lang/crates.io-index" 757 715 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 758 716 dependencies = [ 759 - "bitflags 2.9.1", 717 + "bitflags 2.10.0", 760 718 "core-foundation 0.10.1", 761 719 "libc", 762 720 ] ··· 853 811 checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 854 812 dependencies = [ 855 813 "quote", 856 - "syn 2.0.104", 814 + "syn 2.0.109", 857 815 ] 858 816 859 817 [[package]] ··· 863 821 checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" 864 822 dependencies = [ 865 823 "quote", 866 - "syn 2.0.104", 824 + "syn 2.0.109", 867 825 ] 868 826 869 827 [[package]] 870 828 name = "darling" 871 - version = "0.20.11" 829 + version = "0.21.3" 872 830 source = "registry+https://github.com/rust-lang/crates.io-index" 873 - checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 831 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 874 832 dependencies = [ 875 833 "darling_core", 876 834 "darling_macro", ··· 878 836 879 837 [[package]] 880 838 name = "darling_core" 881 - version = "0.20.11" 839 + version = "0.21.3" 882 840 source = "registry+https://github.com/rust-lang/crates.io-index" 883 - checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 841 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 884 842 dependencies = [ 885 843 "fnv", 886 844 "ident_case", 887 845 "proc-macro2", 888 846 "quote", 889 847 "strsim", 890 - "syn 2.0.104", 848 + "syn 2.0.109", 891 849 ] 892 850 893 851 [[package]] 894 852 name = "darling_macro" 895 - version = "0.20.11" 853 + version = "0.21.3" 896 854 source = "registry+https://github.com/rust-lang/crates.io-index" 897 - checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 855 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 898 856 dependencies = [ 899 857 "darling_core", 900 858 "quote", 901 - "syn 2.0.104", 859 + "syn 2.0.109", 902 860 ] 903 861 904 862 [[package]] 905 863 name = "data-url" 906 - version = "0.3.1" 864 + version = "0.3.2" 907 865 source = "registry+https://github.com/rust-lang/crates.io-index" 908 - checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" 866 + checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" 909 867 910 868 [[package]] 911 869 name = "deranged" 912 - version = "0.4.0" 870 + version = "0.5.5" 913 871 source = "registry+https://github.com/rust-lang/crates.io-index" 914 - checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 872 + checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 915 873 dependencies = [ 916 874 "powerfmt", 917 - "serde", 918 - ] 919 - 920 - [[package]] 921 - name = "derivative" 922 - version = "2.2.0" 923 - source = "registry+https://github.com/rust-lang/crates.io-index" 924 - checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 925 - dependencies = [ 926 - "proc-macro2", 927 - "quote", 928 - "syn 1.0.109", 875 + "serde_core", 929 876 ] 930 877 931 878 [[package]] ··· 938 885 "proc-macro2", 939 886 "quote", 940 887 "rustc_version", 941 - "syn 2.0.104", 888 + "syn 2.0.109", 942 889 ] 943 890 944 891 [[package]] ··· 953 900 954 901 [[package]] 955 902 name = "dirs" 956 - version = "5.0.1" 957 - source = "registry+https://github.com/rust-lang/crates.io-index" 958 - checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" 959 - dependencies = [ 960 - "dirs-sys 0.4.1", 961 - ] 962 - 963 - [[package]] 964 - name = "dirs" 965 903 version = "6.0.0" 966 904 source = "registry+https://github.com/rust-lang/crates.io-index" 967 905 checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 968 906 dependencies = [ 969 - "dirs-sys 0.5.0", 970 - ] 971 - 972 - [[package]] 973 - name = "dirs-sys" 974 - version = "0.4.1" 975 - source = "registry+https://github.com/rust-lang/crates.io-index" 976 - checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" 977 - dependencies = [ 978 - "libc", 979 - "option-ext", 980 - "redox_users 0.4.6", 981 - "windows-sys 0.48.0", 907 + "dirs-sys", 982 908 ] 983 909 984 910 [[package]] ··· 989 915 dependencies = [ 990 916 "libc", 991 917 "option-ext", 992 - "redox_users 0.5.2", 993 - "windows-sys 0.60.2", 918 + "redox_users", 919 + "windows-sys 0.61.2", 994 920 ] 995 921 996 922 [[package]] ··· 1005 931 source = "registry+https://github.com/rust-lang/crates.io-index" 1006 932 checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 1007 933 dependencies = [ 1008 - "bitflags 2.9.1", 1009 - "objc2 0.6.1", 934 + "bitflags 2.10.0", 935 + "objc2 0.6.3", 1010 936 ] 1011 937 1012 938 [[package]] ··· 1017 943 dependencies = [ 1018 944 "proc-macro2", 1019 945 "quote", 1020 - "syn 2.0.104", 946 + "syn 2.0.109", 1021 947 ] 1022 948 1023 949 [[package]] 1024 950 name = "dlopen2" 1025 - version = "0.7.0" 951 + version = "0.8.0" 1026 952 source = "registry+https://github.com/rust-lang/crates.io-index" 1027 - checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" 953 + checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" 1028 954 dependencies = [ 1029 955 "dlopen2_derive", 1030 956 "libc", ··· 1040 966 dependencies = [ 1041 967 "proc-macro2", 1042 968 "quote", 1043 - "syn 2.0.104", 969 + "syn 2.0.109", 1044 970 ] 1045 971 1046 972 [[package]] ··· 1054 980 1055 981 [[package]] 1056 982 name = "document-features" 1057 - version = "0.2.11" 983 + version = "0.2.12" 1058 984 source = "registry+https://github.com/rust-lang/crates.io-index" 1059 - checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 985 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 1060 986 dependencies = [ 1061 987 "litrs", 1062 988 ] ··· 1105 1031 1106 1032 [[package]] 1107 1033 name = "embed-resource" 1108 - version = "3.0.5" 1034 + version = "3.0.6" 1109 1035 source = "registry+https://github.com/rust-lang/crates.io-index" 1110 - checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38" 1036 + checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" 1111 1037 dependencies = [ 1112 1038 "cc", 1113 1039 "memchr", 1114 1040 "rustc_version", 1115 - "toml 0.9.4", 1041 + "toml 0.9.8", 1116 1042 "vswhom", 1117 1043 "winreg", 1118 1044 ] ··· 1156 1082 dependencies = [ 1157 1083 "proc-macro2", 1158 1084 "quote", 1159 - "syn 2.0.104", 1085 + "syn 2.0.109", 1160 1086 ] 1161 1087 1162 1088 [[package]] ··· 1176 1102 dependencies = [ 1177 1103 "proc-macro2", 1178 1104 "quote", 1179 - "syn 2.0.104", 1105 + "syn 2.0.109", 1180 1106 ] 1181 1107 1182 1108 [[package]] ··· 1187 1113 1188 1114 [[package]] 1189 1115 name = "erased-serde" 1190 - version = "0.4.6" 1116 + version = "0.4.9" 1191 1117 source = "registry+https://github.com/rust-lang/crates.io-index" 1192 - checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" 1118 + checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" 1193 1119 dependencies = [ 1194 1120 "serde", 1121 + "serde_core", 1195 1122 "typeid", 1196 1123 ] 1197 1124 1198 1125 [[package]] 1199 1126 name = "errno" 1200 - version = "0.3.13" 1127 + version = "0.3.14" 1201 1128 source = "registry+https://github.com/rust-lang/crates.io-index" 1202 - checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 1129 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1203 1130 dependencies = [ 1204 1131 "libc", 1205 - "windows-sys 0.60.2", 1132 + "windows-sys 0.61.2", 1206 1133 ] 1207 1134 1208 1135 [[package]] ··· 1213 1140 1214 1141 [[package]] 1215 1142 name = "event-listener" 1216 - version = "5.4.0" 1143 + version = "5.4.1" 1217 1144 source = "registry+https://github.com/rust-lang/crates.io-index" 1218 - checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 1145 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 1219 1146 dependencies = [ 1220 1147 "concurrent-queue", 1221 1148 "parking", ··· 1249 1176 1250 1177 [[package]] 1251 1178 name = "fast_image_resize" 1252 - version = "4.2.3" 1179 + version = "5.3.0" 1253 1180 source = "registry+https://github.com/rust-lang/crates.io-index" 1254 - checksum = "43e5ce628b529e9bd2e2f378c1193215104b526fd494a572aa23414adc4e5553" 1181 + checksum = "1bd1eda71e8af93f8b00e189404235d82f4de77ea4a0d182b44a7f03994d647c" 1255 1182 dependencies = [ 1256 1183 "bytemuck", 1257 1184 "cfg-if", 1258 1185 "document-features", 1259 1186 "image", 1260 1187 "num-traits", 1261 - "thiserror 1.0.69", 1188 + "thiserror 2.0.17", 1262 1189 ] 1263 1190 1264 1191 [[package]] ··· 1268 1195 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1269 1196 1270 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]] 1271 1218 name = "fdeflate" 1272 1219 version = "0.3.7" 1273 1220 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1287 1234 ] 1288 1235 1289 1236 [[package]] 1290 - name = "filetime" 1291 - version = "0.2.25" 1237 + name = "find-msvc-tools" 1238 + version = "0.1.4" 1292 1239 source = "registry+https://github.com/rust-lang/crates.io-index" 1293 - checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 1294 - dependencies = [ 1295 - "cfg-if", 1296 - "libc", 1297 - "libredox", 1298 - "windows-sys 0.59.0", 1299 - ] 1240 + checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 1300 1241 1301 1242 [[package]] 1302 1243 name = "flate2" 1303 - version = "1.1.2" 1244 + version = "1.1.5" 1304 1245 source = "registry+https://github.com/rust-lang/crates.io-index" 1305 - checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 1246 + checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 1306 1247 dependencies = [ 1307 1248 "crc32fast", 1308 1249 "miniz_oxide", ··· 1341 1282 dependencies = [ 1342 1283 "proc-macro2", 1343 1284 "quote", 1344 - "syn 2.0.104", 1285 + "syn 2.0.109", 1345 1286 ] 1346 1287 1347 1288 [[package]] ··· 1358 1299 1359 1300 [[package]] 1360 1301 name = "form_urlencoded" 1361 - version = "1.2.1" 1302 + version = "1.2.2" 1362 1303 source = "registry+https://github.com/rust-lang/crates.io-index" 1363 - checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1304 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1364 1305 dependencies = [ 1365 1306 "percent-encoding", 1366 1307 ] ··· 1419 1360 1420 1361 [[package]] 1421 1362 name = "futures-lite" 1422 - version = "2.6.0" 1363 + version = "2.6.1" 1423 1364 source = "registry+https://github.com/rust-lang/crates.io-index" 1424 - checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 1365 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1425 1366 dependencies = [ 1426 1367 "fastrand", 1427 1368 "futures-core", ··· 1438 1379 dependencies = [ 1439 1380 "proc-macro2", 1440 1381 "quote", 1441 - "syn 2.0.104", 1382 + "syn 2.0.109", 1442 1383 ] 1443 1384 1444 1385 [[package]] ··· 1580 1521 1581 1522 [[package]] 1582 1523 name = "generic-array" 1583 - version = "0.14.7" 1524 + version = "0.14.9" 1584 1525 source = "registry+https://github.com/rust-lang/crates.io-index" 1585 - checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1526 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1586 1527 dependencies = [ 1587 1528 "typenum", 1588 1529 "version_check", ··· 1590 1531 1591 1532 [[package]] 1592 1533 name = "gethostname" 1593 - version = "0.4.3" 1534 + version = "1.1.0" 1594 1535 source = "registry+https://github.com/rust-lang/crates.io-index" 1595 - checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 1536 + checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" 1596 1537 dependencies = [ 1597 - "libc", 1598 - "windows-targets 0.48.5", 1538 + "rustix", 1539 + "windows-link 0.2.1", 1599 1540 ] 1600 1541 1601 1542 [[package]] ··· 1624 1565 1625 1566 [[package]] 1626 1567 name = "getrandom" 1627 - version = "0.3.3" 1568 + version = "0.3.4" 1628 1569 source = "registry+https://github.com/rust-lang/crates.io-index" 1629 - checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1570 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1630 1571 dependencies = [ 1631 1572 "cfg-if", 1632 1573 "js-sys", 1633 1574 "libc", 1634 1575 "r-efi", 1635 - "wasi 0.14.2+wasi-0.2.4", 1576 + "wasip2", 1636 1577 "wasm-bindgen", 1637 1578 ] 1638 1579 ··· 1647 1588 ] 1648 1589 1649 1590 [[package]] 1650 - name = "gimli" 1651 - version = "0.31.1" 1652 - source = "registry+https://github.com/rust-lang/crates.io-index" 1653 - checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1654 - 1655 - [[package]] 1656 1591 name = "gio" 1657 1592 version = "0.18.4" 1658 1593 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1690 1625 source = "registry+https://github.com/rust-lang/crates.io-index" 1691 1626 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 1692 1627 dependencies = [ 1693 - "bitflags 2.9.1", 1628 + "bitflags 2.10.0", 1694 1629 "futures-channel", 1695 1630 "futures-core", 1696 1631 "futures-executor", ··· 1718 1653 "proc-macro-error", 1719 1654 "proc-macro2", 1720 1655 "quote", 1721 - "syn 2.0.104", 1656 + "syn 2.0.109", 1722 1657 ] 1723 1658 1724 1659 [[package]] ··· 1733 1668 1734 1669 [[package]] 1735 1670 name = "glob" 1736 - version = "0.3.2" 1671 + version = "0.3.3" 1737 1672 source = "registry+https://github.com/rust-lang/crates.io-index" 1738 - checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1673 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1739 1674 1740 1675 [[package]] 1741 1676 name = "gobject-sys" ··· 1797 1732 "proc-macro-error", 1798 1733 "proc-macro2", 1799 1734 "quote", 1800 - "syn 2.0.104", 1735 + "syn 2.0.109", 1801 1736 ] 1802 1737 1803 1738 [[package]] 1804 1739 name = "h2" 1805 - version = "0.4.11" 1740 + version = "0.4.12" 1806 1741 source = "registry+https://github.com/rust-lang/crates.io-index" 1807 - checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" 1742 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 1808 1743 dependencies = [ 1809 1744 "atomic-waker", 1810 1745 "bytes", ··· 1812 1747 "futures-core", 1813 1748 "futures-sink", 1814 1749 "http", 1815 - "indexmap 2.10.0", 1750 + "indexmap 2.12.0", 1816 1751 "slab", 1817 1752 "tokio", 1818 1753 "tokio-util", ··· 1821 1756 1822 1757 [[package]] 1823 1758 name = "half" 1824 - version = "2.6.0" 1759 + version = "2.7.1" 1825 1760 source = "registry+https://github.com/rust-lang/crates.io-index" 1826 - checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 1761 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1827 1762 dependencies = [ 1828 1763 "cfg-if", 1829 1764 "crunchy", 1765 + "zerocopy", 1830 1766 ] 1831 1767 1832 1768 [[package]] ··· 1843 1779 1844 1780 [[package]] 1845 1781 name = "hashbrown" 1846 - version = "0.15.4" 1782 + version = "0.16.0" 1847 1783 source = "registry+https://github.com/rust-lang/crates.io-index" 1848 - checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 1784 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1849 1785 1850 1786 [[package]] 1851 1787 name = "heck" ··· 1925 1861 1926 1862 [[package]] 1927 1863 name = "hyper" 1928 - version = "1.6.0" 1864 + version = "1.7.0" 1929 1865 source = "registry+https://github.com/rust-lang/crates.io-index" 1930 - checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1866 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1931 1867 dependencies = [ 1868 + "atomic-waker", 1932 1869 "bytes", 1933 1870 "futures-channel", 1934 - "futures-util", 1871 + "futures-core", 1935 1872 "h2", 1936 1873 "http", 1937 1874 "http-body", 1938 1875 "httparse", 1939 1876 "itoa", 1940 1877 "pin-project-lite", 1878 + "pin-utils", 1941 1879 "smallvec", 1942 1880 "tokio", 1943 1881 "want", ··· 1978 1916 1979 1917 [[package]] 1980 1918 name = "hyper-util" 1981 - version = "0.1.16" 1919 + version = "0.1.17" 1982 1920 source = "registry+https://github.com/rust-lang/crates.io-index" 1983 - checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 1921 + checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" 1984 1922 dependencies = [ 1985 1923 "base64 0.22.1", 1986 1924 "bytes", ··· 1994 1932 "libc", 1995 1933 "percent-encoding", 1996 1934 "pin-project-lite", 1997 - "socket2 0.6.0", 1935 + "socket2", 1998 1936 "system-configuration", 1999 1937 "tokio", 2000 1938 "tower-service", ··· 2004 1942 2005 1943 [[package]] 2006 1944 name = "iana-time-zone" 2007 - version = "0.1.63" 1945 + version = "0.1.64" 2008 1946 source = "registry+https://github.com/rust-lang/crates.io-index" 2009 - checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1947 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 2010 1948 dependencies = [ 2011 1949 "android_system_properties", 2012 1950 "core-foundation-sys", ··· 2014 1952 "js-sys", 2015 1953 "log", 2016 1954 "wasm-bindgen", 2017 - "windows-core", 1955 + "windows-core 0.62.2", 2018 1956 ] 2019 1957 2020 1958 [[package]] ··· 2033 1971 checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" 2034 1972 dependencies = [ 2035 1973 "byteorder", 2036 - "png", 1974 + "png 0.17.16", 2037 1975 ] 2038 1976 2039 1977 [[package]] 2040 1978 name = "icu_collections" 2041 - version = "2.0.0" 1979 + version = "2.1.1" 2042 1980 source = "registry+https://github.com/rust-lang/crates.io-index" 2043 - checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1981 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 2044 1982 dependencies = [ 2045 1983 "displaydoc", 2046 1984 "potential_utf", ··· 2051 1989 2052 1990 [[package]] 2053 1991 name = "icu_locale_core" 2054 - version = "2.0.0" 1992 + version = "2.1.1" 2055 1993 source = "registry+https://github.com/rust-lang/crates.io-index" 2056 - checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1994 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 2057 1995 dependencies = [ 2058 1996 "displaydoc", 2059 1997 "litemap", ··· 2064 2002 2065 2003 [[package]] 2066 2004 name = "icu_normalizer" 2067 - version = "2.0.0" 2005 + version = "2.1.1" 2068 2006 source = "registry+https://github.com/rust-lang/crates.io-index" 2069 - checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 2007 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 2070 2008 dependencies = [ 2071 - "displaydoc", 2072 2009 "icu_collections", 2073 2010 "icu_normalizer_data", 2074 2011 "icu_properties", ··· 2079 2016 2080 2017 [[package]] 2081 2018 name = "icu_normalizer_data" 2082 - version = "2.0.0" 2019 + version = "2.1.1" 2083 2020 source = "registry+https://github.com/rust-lang/crates.io-index" 2084 - checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 2021 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 2085 2022 2086 2023 [[package]] 2087 2024 name = "icu_properties" 2088 - version = "2.0.1" 2025 + version = "2.1.1" 2089 2026 source = "registry+https://github.com/rust-lang/crates.io-index" 2090 - checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 2027 + checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" 2091 2028 dependencies = [ 2092 - "displaydoc", 2093 2029 "icu_collections", 2094 2030 "icu_locale_core", 2095 2031 "icu_properties_data", 2096 2032 "icu_provider", 2097 - "potential_utf", 2098 2033 "zerotrie", 2099 2034 "zerovec", 2100 2035 ] 2101 2036 2102 2037 [[package]] 2103 2038 name = "icu_properties_data" 2104 - version = "2.0.1" 2039 + version = "2.1.1" 2105 2040 source = "registry+https://github.com/rust-lang/crates.io-index" 2106 - checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 2041 + checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" 2107 2042 2108 2043 [[package]] 2109 2044 name = "icu_provider" 2110 - version = "2.0.0" 2045 + version = "2.1.1" 2111 2046 source = "registry+https://github.com/rust-lang/crates.io-index" 2112 - checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 2047 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 2113 2048 dependencies = [ 2114 2049 "displaydoc", 2115 2050 "icu_locale_core", 2116 - "stable_deref_trait", 2117 - "tinystr", 2118 2051 "writeable", 2119 2052 "yoke", 2120 2053 "zerofrom", ··· 2130 2063 2131 2064 [[package]] 2132 2065 name = "idna" 2133 - version = "1.0.3" 2066 + version = "1.1.0" 2134 2067 source = "registry+https://github.com/rust-lang/crates.io-index" 2135 - checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 2068 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 2136 2069 dependencies = [ 2137 2070 "idna_adapter", 2138 2071 "smallvec", ··· 2151 2084 2152 2085 [[package]] 2153 2086 name = "image" 2154 - version = "0.25.6" 2087 + version = "0.25.8" 2155 2088 source = "registry+https://github.com/rust-lang/crates.io-index" 2156 - checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 2089 + checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 2157 2090 dependencies = [ 2158 2091 "bytemuck", 2159 2092 "byteorder-lite", ··· 2161 2094 "exr", 2162 2095 "gif", 2163 2096 "image-webp", 2097 + "moxcms", 2164 2098 "num-traits", 2165 - "png", 2099 + "png 0.18.0", 2166 2100 "qoi", 2167 2101 "ravif", 2168 2102 "rayon", ··· 2174 2108 2175 2109 [[package]] 2176 2110 name = "image-webp" 2177 - version = "0.2.3" 2111 + version = "0.2.4" 2178 2112 source = "registry+https://github.com/rust-lang/crates.io-index" 2179 - checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" 2113 + checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" 2180 2114 dependencies = [ 2181 2115 "byteorder-lite", 2182 2116 "quick-error", ··· 2184 2118 2185 2119 [[package]] 2186 2120 name = "imgref" 2187 - version = "1.11.0" 2121 + version = "1.12.0" 2188 2122 source = "registry+https://github.com/rust-lang/crates.io-index" 2189 - checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" 2123 + checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" 2190 2124 2191 2125 [[package]] 2192 2126 name = "indexmap" ··· 2201 2135 2202 2136 [[package]] 2203 2137 name = "indexmap" 2204 - version = "2.10.0" 2138 + version = "2.12.0" 2205 2139 source = "registry+https://github.com/rust-lang/crates.io-index" 2206 - checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 2140 + checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" 2207 2141 dependencies = [ 2208 2142 "equivalent", 2209 - "hashbrown 0.15.4", 2143 + "hashbrown 0.16.0", 2210 2144 "serde", 2145 + "serde_core", 2211 2146 ] 2212 2147 2213 2148 [[package]] ··· 2221 2156 2222 2157 [[package]] 2223 2158 name = "inotify" 2224 - version = "0.9.6" 2159 + version = "0.11.0" 2225 2160 source = "registry+https://github.com/rust-lang/crates.io-index" 2226 - checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" 2161 + checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" 2227 2162 dependencies = [ 2228 - "bitflags 1.3.2", 2163 + "bitflags 2.10.0", 2229 2164 "inotify-sys", 2230 2165 "libc", 2231 2166 ] ··· 2247 2182 dependencies = [ 2248 2183 "proc-macro2", 2249 2184 "quote", 2250 - "syn 2.0.104", 2251 - ] 2252 - 2253 - [[package]] 2254 - name = "io-uring" 2255 - version = "0.7.9" 2256 - source = "registry+https://github.com/rust-lang/crates.io-index" 2257 - checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" 2258 - dependencies = [ 2259 - "bitflags 2.9.1", 2260 - "cfg-if", 2261 - "libc", 2185 + "syn 2.0.109", 2262 2186 ] 2263 2187 2264 2188 [[package]] ··· 2269 2193 2270 2194 [[package]] 2271 2195 name = "iri-string" 2272 - version = "0.7.8" 2196 + version = "0.7.9" 2273 2197 source = "registry+https://github.com/rust-lang/crates.io-index" 2274 - checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 2198 + checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" 2275 2199 dependencies = [ 2276 2200 "memchr", 2277 2201 "serde", ··· 2358 2282 2359 2283 [[package]] 2360 2284 name = "jobserver" 2361 - version = "0.1.33" 2285 + version = "0.1.34" 2362 2286 source = "registry+https://github.com/rust-lang/crates.io-index" 2363 - checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 2287 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 2364 2288 dependencies = [ 2365 - "getrandom 0.3.3", 2289 + "getrandom 0.3.4", 2366 2290 "libc", 2367 2291 ] 2368 2292 2369 2293 [[package]] 2370 - name = "jpeg-decoder" 2371 - version = "0.3.2" 2372 - source = "registry+https://github.com/rust-lang/crates.io-index" 2373 - checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" 2374 - 2375 - [[package]] 2376 2294 name = "js-sys" 2377 - version = "0.3.77" 2295 + version = "0.3.82" 2378 2296 source = "registry+https://github.com/rust-lang/crates.io-index" 2379 - checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 2297 + checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" 2380 2298 dependencies = [ 2381 2299 "once_cell", 2382 2300 "wasm-bindgen", ··· 2410 2328 source = "registry+https://github.com/rust-lang/crates.io-index" 2411 2329 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" 2412 2330 dependencies = [ 2413 - "bitflags 2.9.1", 2331 + "bitflags 2.10.0", 2414 2332 "serde", 2415 2333 "unicode-segmentation", 2416 2334 ] ··· 2443 2361 dependencies = [ 2444 2362 "cssparser", 2445 2363 "html5ever", 2446 - "indexmap 2.10.0", 2364 + "indexmap 2.12.0", 2447 2365 "selectors", 2448 2366 ] 2449 2367 ··· 2455 2373 2456 2374 [[package]] 2457 2375 name = "lebe" 2458 - version = "0.5.2" 2376 + version = "0.5.3" 2459 2377 source = "registry+https://github.com/rust-lang/crates.io-index" 2460 - checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 2378 + checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" 2461 2379 2462 2380 [[package]] 2463 2381 name = "libappindicator" ··· 2485 2403 2486 2404 [[package]] 2487 2405 name = "libc" 2488 - version = "0.2.174" 2406 + version = "0.2.177" 2489 2407 source = "registry+https://github.com/rust-lang/crates.io-index" 2490 - checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 2408 + checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 2491 2409 2492 2410 [[package]] 2493 2411 name = "libfuzzer-sys" ··· 2511 2429 2512 2430 [[package]] 2513 2431 name = "libredox" 2514 - version = "0.1.9" 2432 + version = "0.1.10" 2515 2433 source = "registry+https://github.com/rust-lang/crates.io-index" 2516 - checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" 2434 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 2517 2435 dependencies = [ 2518 - "bitflags 2.9.1", 2436 + "bitflags 2.10.0", 2519 2437 "libc", 2520 - "redox_syscall", 2521 2438 ] 2522 2439 2523 2440 [[package]] 2524 2441 name = "linux-raw-sys" 2525 - version = "0.4.15" 2442 + version = "0.11.0" 2526 2443 source = "registry+https://github.com/rust-lang/crates.io-index" 2527 - checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 2528 - 2529 - [[package]] 2530 - name = "linux-raw-sys" 2531 - version = "0.9.4" 2532 - source = "registry+https://github.com/rust-lang/crates.io-index" 2533 - checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 2444 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 2534 2445 2535 2446 [[package]] 2536 2447 name = "litemap" 2537 - version = "0.8.0" 2448 + version = "0.8.1" 2538 2449 source = "registry+https://github.com/rust-lang/crates.io-index" 2539 - checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 2450 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 2540 2451 2541 2452 [[package]] 2542 2453 name = "litrs" 2543 - version = "0.4.2" 2454 + version = "1.0.0" 2544 2455 source = "registry+https://github.com/rust-lang/crates.io-index" 2545 - checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 2456 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 2546 2457 2547 2458 [[package]] 2548 2459 name = "lock_api" 2549 - version = "0.4.13" 2460 + version = "0.4.14" 2550 2461 source = "registry+https://github.com/rust-lang/crates.io-index" 2551 - checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 2462 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 2552 2463 dependencies = [ 2553 - "autocfg", 2554 2464 "scopeguard", 2555 2465 ] 2556 2466 2557 2467 [[package]] 2558 2468 name = "log" 2559 - version = "0.4.27" 2469 + version = "0.4.28" 2560 2470 source = "registry+https://github.com/rust-lang/crates.io-index" 2561 - checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 2471 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2562 2472 2563 2473 [[package]] 2564 2474 name = "loop9" ··· 2603 2513 dependencies = [ 2604 2514 "proc-macro2", 2605 2515 "quote", 2606 - "syn 2.0.104", 2516 + "syn 2.0.109", 2607 2517 ] 2608 2518 2609 2519 [[package]] ··· 2624 2534 2625 2535 [[package]] 2626 2536 name = "memchr" 2627 - version = "2.7.5" 2537 + version = "2.7.6" 2628 2538 source = "registry+https://github.com/rust-lang/crates.io-index" 2629 - checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 2539 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2630 2540 2631 2541 [[package]] 2632 2542 name = "memoffset" ··· 2644 2554 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2645 2555 2646 2556 [[package]] 2647 - name = "minimal-lexical" 2648 - version = "0.2.1" 2649 - source = "registry+https://github.com/rust-lang/crates.io-index" 2650 - checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2651 - 2652 - [[package]] 2653 2557 name = "miniz_oxide" 2654 2558 version = "0.8.9" 2655 2559 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2661 2565 2662 2566 [[package]] 2663 2567 name = "mio" 2664 - version = "0.8.11" 2568 + version = "1.1.0" 2665 2569 source = "registry+https://github.com/rust-lang/crates.io-index" 2666 - checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 2570 + checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" 2667 2571 dependencies = [ 2668 2572 "libc", 2669 2573 "log", 2670 2574 "wasi 0.11.1+wasi-snapshot-preview1", 2671 - "windows-sys 0.48.0", 2575 + "windows-sys 0.61.2", 2672 2576 ] 2673 2577 2674 2578 [[package]] 2675 - name = "mio" 2676 - version = "1.0.4" 2579 + name = "moxcms" 2580 + version = "0.7.9" 2677 2581 source = "registry+https://github.com/rust-lang/crates.io-index" 2678 - checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 2582 + checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" 2679 2583 dependencies = [ 2680 - "libc", 2681 - "wasi 0.11.1+wasi-snapshot-preview1", 2682 - "windows-sys 0.59.0", 2584 + "num-traits", 2585 + "pxfm", 2683 2586 ] 2684 2587 2685 2588 [[package]] ··· 2703 2606 "dpi", 2704 2607 "gtk", 2705 2608 "keyboard-types", 2706 - "objc2 0.6.1", 2609 + "objc2 0.6.3", 2707 2610 "objc2-app-kit", 2708 2611 "objc2-core-foundation", 2709 - "objc2-foundation 0.3.1", 2612 + "objc2-foundation 0.3.2", 2710 2613 "once_cell", 2711 - "png", 2614 + "png 0.17.16", 2712 2615 "serde", 2713 - "thiserror 2.0.12", 2616 + "thiserror 2.0.17", 2714 2617 "windows-sys 0.60.2", 2715 2618 ] 2716 2619 ··· 2737 2640 source = "registry+https://github.com/rust-lang/crates.io-index" 2738 2641 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2739 2642 dependencies = [ 2740 - "bitflags 2.9.1", 2643 + "bitflags 2.10.0", 2741 2644 "jni-sys", 2742 2645 "log", 2743 2646 "ndk-sys", ··· 2769 2672 2770 2673 [[package]] 2771 2674 name = "nix" 2772 - version = "0.27.1" 2675 + version = "0.30.1" 2773 2676 source = "registry+https://github.com/rust-lang/crates.io-index" 2774 - checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" 2677 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 2775 2678 dependencies = [ 2776 - "bitflags 2.9.1", 2679 + "bitflags 2.10.0", 2777 2680 "cfg-if", 2681 + "cfg_aliases", 2778 2682 "libc", 2779 2683 "memoffset", 2780 2684 ] ··· 2787 2691 2788 2692 [[package]] 2789 2693 name = "nom" 2790 - version = "7.1.3" 2694 + version = "8.0.0" 2791 2695 source = "registry+https://github.com/rust-lang/crates.io-index" 2792 - checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2696 + checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" 2793 2697 dependencies = [ 2794 2698 "memchr", 2795 - "minimal-lexical", 2796 2699 ] 2797 2700 2798 2701 [[package]] ··· 2803 2706 2804 2707 [[package]] 2805 2708 name = "notify" 2806 - version = "6.1.1" 2709 + version = "8.2.0" 2807 2710 source = "registry+https://github.com/rust-lang/crates.io-index" 2808 - checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" 2711 + checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" 2809 2712 dependencies = [ 2810 - "bitflags 2.9.1", 2811 - "crossbeam-channel", 2812 - "filetime", 2713 + "bitflags 2.10.0", 2813 2714 "fsevent-sys", 2814 2715 "inotify", 2815 2716 "kqueue", 2816 2717 "libc", 2817 2718 "log", 2818 - "mio 0.8.11", 2719 + "mio", 2720 + "notify-types", 2819 2721 "walkdir", 2820 - "windows-sys 0.48.0", 2722 + "windows-sys 0.60.2", 2821 2723 ] 2822 2724 2823 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]] 2824 2732 name = "num-bigint" 2825 2733 version = "0.4.6" 2826 2734 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2844 2752 dependencies = [ 2845 2753 "proc-macro2", 2846 2754 "quote", 2847 - "syn 2.0.104", 2755 + "syn 2.0.109", 2848 2756 ] 2849 2757 2850 2758 [[package]] ··· 2878 2786 2879 2787 [[package]] 2880 2788 name = "num_enum" 2881 - version = "0.7.4" 2789 + version = "0.7.5" 2882 2790 source = "registry+https://github.com/rust-lang/crates.io-index" 2883 - checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 2791 + checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" 2884 2792 dependencies = [ 2885 2793 "num_enum_derive", 2886 2794 "rustversion", ··· 2888 2796 2889 2797 [[package]] 2890 2798 name = "num_enum_derive" 2891 - version = "0.7.4" 2799 + version = "0.7.5" 2892 2800 source = "registry+https://github.com/rust-lang/crates.io-index" 2893 - checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 2801 + checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" 2894 2802 dependencies = [ 2895 - "proc-macro-crate 2.0.2", 2803 + "proc-macro-crate 3.4.0", 2896 2804 "proc-macro2", 2897 2805 "quote", 2898 - "syn 2.0.104", 2806 + "syn 2.0.109", 2899 2807 ] 2900 2808 2901 2809 [[package]] ··· 2916 2824 2917 2825 [[package]] 2918 2826 name = "objc2" 2919 - version = "0.6.1" 2827 + version = "0.6.3" 2920 2828 source = "registry+https://github.com/rust-lang/crates.io-index" 2921 - checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" 2829 + checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 2922 2830 dependencies = [ 2923 2831 "objc2-encode", 2924 2832 "objc2-exception-helper", ··· 2926 2834 2927 2835 [[package]] 2928 2836 name = "objc2-app-kit" 2929 - version = "0.3.1" 2837 + version = "0.3.2" 2930 2838 source = "registry+https://github.com/rust-lang/crates.io-index" 2931 - checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 2839 + checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" 2932 2840 dependencies = [ 2933 - "bitflags 2.9.1", 2934 - "block2 0.6.1", 2841 + "bitflags 2.10.0", 2842 + "block2 0.6.2", 2935 2843 "libc", 2936 - "objc2 0.6.1", 2844 + "objc2 0.6.3", 2937 2845 "objc2-cloud-kit", 2938 2846 "objc2-core-data", 2939 2847 "objc2-core-foundation", 2940 2848 "objc2-core-graphics", 2941 2849 "objc2-core-image", 2942 - "objc2-foundation 0.3.1", 2943 - "objc2-quartz-core 0.3.1", 2850 + "objc2-core-text", 2851 + "objc2-core-video", 2852 + "objc2-foundation 0.3.2", 2853 + "objc2-quartz-core 0.3.2", 2944 2854 ] 2945 2855 2946 2856 [[package]] 2947 2857 name = "objc2-cloud-kit" 2948 - version = "0.3.1" 2858 + version = "0.3.2" 2949 2859 source = "registry+https://github.com/rust-lang/crates.io-index" 2950 - checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" 2860 + checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" 2951 2861 dependencies = [ 2952 - "bitflags 2.9.1", 2953 - "objc2 0.6.1", 2954 - "objc2-foundation 0.3.1", 2862 + "bitflags 2.10.0", 2863 + "objc2 0.6.3", 2864 + "objc2-foundation 0.3.2", 2955 2865 ] 2956 2866 2957 2867 [[package]] 2958 2868 name = "objc2-core-data" 2959 - version = "0.3.1" 2869 + version = "0.3.2" 2960 2870 source = "registry+https://github.com/rust-lang/crates.io-index" 2961 - checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" 2871 + checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" 2962 2872 dependencies = [ 2963 - "bitflags 2.9.1", 2964 - "objc2 0.6.1", 2965 - "objc2-foundation 0.3.1", 2873 + "bitflags 2.10.0", 2874 + "objc2 0.6.3", 2875 + "objc2-foundation 0.3.2", 2966 2876 ] 2967 2877 2968 2878 [[package]] 2969 2879 name = "objc2-core-foundation" 2970 - version = "0.3.1" 2880 + version = "0.3.2" 2971 2881 source = "registry+https://github.com/rust-lang/crates.io-index" 2972 - checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 2882 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2973 2883 dependencies = [ 2974 - "bitflags 2.9.1", 2884 + "bitflags 2.10.0", 2975 2885 "dispatch2", 2976 - "objc2 0.6.1", 2886 + "objc2 0.6.3", 2977 2887 ] 2978 2888 2979 2889 [[package]] 2980 2890 name = "objc2-core-graphics" 2981 - version = "0.3.1" 2891 + version = "0.3.2" 2982 2892 source = "registry+https://github.com/rust-lang/crates.io-index" 2983 - checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 2893 + checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" 2984 2894 dependencies = [ 2985 - "bitflags 2.9.1", 2895 + "bitflags 2.10.0", 2986 2896 "dispatch2", 2987 - "objc2 0.6.1", 2897 + "objc2 0.6.3", 2988 2898 "objc2-core-foundation", 2989 2899 "objc2-io-surface", 2990 2900 ] 2991 2901 2992 2902 [[package]] 2993 2903 name = "objc2-core-image" 2994 - version = "0.3.1" 2904 + version = "0.3.2" 2995 2905 source = "registry+https://github.com/rust-lang/crates.io-index" 2996 - checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" 2906 + checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" 2997 2907 dependencies = [ 2998 - "objc2 0.6.1", 2999 - "objc2-foundation 0.3.1", 2908 + "objc2 0.6.3", 2909 + "objc2-foundation 0.3.2", 2910 + ] 2911 + 2912 + [[package]] 2913 + name = "objc2-core-text" 2914 + version = "0.3.2" 2915 + source = "registry+https://github.com/rust-lang/crates.io-index" 2916 + checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" 2917 + dependencies = [ 2918 + "bitflags 2.10.0", 2919 + "objc2 0.6.3", 2920 + "objc2-core-foundation", 2921 + "objc2-core-graphics", 2922 + ] 2923 + 2924 + [[package]] 2925 + name = "objc2-core-video" 2926 + version = "0.3.2" 2927 + source = "registry+https://github.com/rust-lang/crates.io-index" 2928 + checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" 2929 + dependencies = [ 2930 + "bitflags 2.10.0", 2931 + "objc2 0.6.3", 2932 + "objc2-core-foundation", 2933 + "objc2-core-graphics", 2934 + "objc2-io-surface", 3000 2935 ] 3001 2936 3002 2937 [[package]] ··· 3020 2955 source = "registry+https://github.com/rust-lang/crates.io-index" 3021 2956 checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 3022 2957 dependencies = [ 3023 - "bitflags 2.9.1", 2958 + "bitflags 2.10.0", 3024 2959 "block2 0.5.1", 3025 2960 "libc", 3026 2961 "objc2 0.5.2", ··· 3028 2963 3029 2964 [[package]] 3030 2965 name = "objc2-foundation" 3031 - version = "0.3.1" 2966 + version = "0.3.2" 3032 2967 source = "registry+https://github.com/rust-lang/crates.io-index" 3033 - checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 2968 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 3034 2969 dependencies = [ 3035 - "bitflags 2.9.1", 3036 - "block2 0.6.1", 2970 + "bitflags 2.10.0", 2971 + "block2 0.6.2", 3037 2972 "libc", 3038 - "objc2 0.6.1", 2973 + "objc2 0.6.3", 3039 2974 "objc2-core-foundation", 3040 2975 ] 3041 2976 3042 2977 [[package]] 3043 2978 name = "objc2-io-surface" 3044 - version = "0.3.1" 2979 + version = "0.3.2" 3045 2980 source = "registry+https://github.com/rust-lang/crates.io-index" 3046 - checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 2981 + checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" 3047 2982 dependencies = [ 3048 - "bitflags 2.9.1", 3049 - "objc2 0.6.1", 2983 + "bitflags 2.10.0", 2984 + "objc2 0.6.3", 2985 + "objc2-core-foundation", 2986 + ] 2987 + 2988 + [[package]] 2989 + name = "objc2-javascript-core" 2990 + version = "0.3.2" 2991 + source = "registry+https://github.com/rust-lang/crates.io-index" 2992 + checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" 2993 + dependencies = [ 2994 + "objc2 0.6.3", 3050 2995 "objc2-core-foundation", 3051 2996 ] 3052 2997 ··· 3056 3001 source = "registry+https://github.com/rust-lang/crates.io-index" 3057 3002 checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 3058 3003 dependencies = [ 3059 - "bitflags 2.9.1", 3004 + "bitflags 2.10.0", 3060 3005 "block2 0.5.1", 3061 3006 "objc2 0.5.2", 3062 3007 "objc2-foundation 0.2.2", ··· 3068 3013 source = "registry+https://github.com/rust-lang/crates.io-index" 3069 3014 checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 3070 3015 dependencies = [ 3071 - "bitflags 2.9.1", 3016 + "bitflags 2.10.0", 3072 3017 "block2 0.5.1", 3073 3018 "objc2 0.5.2", 3074 3019 "objc2-foundation 0.2.2", ··· 3077 3022 3078 3023 [[package]] 3079 3024 name = "objc2-quartz-core" 3080 - version = "0.3.1" 3025 + version = "0.3.2" 3081 3026 source = "registry+https://github.com/rust-lang/crates.io-index" 3082 - checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" 3027 + checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" 3083 3028 dependencies = [ 3084 - "bitflags 2.9.1", 3085 - "objc2 0.6.1", 3086 - "objc2-foundation 0.3.1", 3029 + "bitflags 2.10.0", 3030 + "objc2 0.6.3", 3031 + "objc2-foundation 0.3.2", 3087 3032 ] 3088 3033 3089 3034 [[package]] 3090 - name = "objc2-ui-kit" 3091 - version = "0.3.1" 3035 + name = "objc2-security" 3036 + version = "0.3.2" 3092 3037 source = "registry+https://github.com/rust-lang/crates.io-index" 3093 - checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" 3038 + checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" 3094 3039 dependencies = [ 3095 - "bitflags 2.9.1", 3096 - "objc2 0.6.1", 3040 + "bitflags 2.10.0", 3041 + "objc2 0.6.3", 3097 3042 "objc2-core-foundation", 3098 - "objc2-foundation 0.3.1", 3099 3043 ] 3100 3044 3101 3045 [[package]] 3102 - name = "objc2-web-kit" 3103 - version = "0.3.1" 3046 + name = "objc2-ui-kit" 3047 + version = "0.3.2" 3104 3048 source = "registry+https://github.com/rust-lang/crates.io-index" 3105 - checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" 3049 + checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" 3106 3050 dependencies = [ 3107 - "bitflags 2.9.1", 3108 - "block2 0.6.1", 3109 - "objc2 0.6.1", 3110 - "objc2-app-kit", 3051 + "bitflags 2.10.0", 3052 + "objc2 0.6.3", 3111 3053 "objc2-core-foundation", 3112 - "objc2-foundation 0.3.1", 3054 + "objc2-foundation 0.3.2", 3113 3055 ] 3114 3056 3115 3057 [[package]] 3116 - name = "object" 3117 - version = "0.36.7" 3058 + name = "objc2-web-kit" 3059 + version = "0.3.2" 3118 3060 source = "registry+https://github.com/rust-lang/crates.io-index" 3119 - checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 3061 + checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" 3120 3062 dependencies = [ 3121 - "memchr", 3063 + "bitflags 2.10.0", 3064 + "block2 0.6.2", 3065 + "objc2 0.6.3", 3066 + "objc2-app-kit", 3067 + "objc2-core-foundation", 3068 + "objc2-foundation 0.3.2", 3069 + "objc2-javascript-core", 3070 + "objc2-security", 3122 3071 ] 3123 3072 3124 3073 [[package]] ··· 3141 3090 3142 3091 [[package]] 3143 3092 name = "openssl" 3144 - version = "0.10.73" 3093 + version = "0.10.74" 3145 3094 source = "registry+https://github.com/rust-lang/crates.io-index" 3146 - checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 3095 + checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" 3147 3096 dependencies = [ 3148 - "bitflags 2.9.1", 3097 + "bitflags 2.10.0", 3149 3098 "cfg-if", 3150 3099 "foreign-types 0.3.2", 3151 3100 "libc", ··· 3162 3111 dependencies = [ 3163 3112 "proc-macro2", 3164 3113 "quote", 3165 - "syn 2.0.104", 3114 + "syn 2.0.109", 3166 3115 ] 3167 3116 3168 3117 [[package]] ··· 3173 3122 3174 3123 [[package]] 3175 3124 name = "openssl-sys" 3176 - version = "0.9.109" 3125 + version = "0.9.110" 3177 3126 source = "registry+https://github.com/rust-lang/crates.io-index" 3178 - checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 3127 + checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" 3179 3128 dependencies = [ 3180 3129 "cc", 3181 3130 "libc", ··· 3211 3160 3212 3161 [[package]] 3213 3162 name = "os_pipe" 3214 - version = "1.2.2" 3163 + version = "1.2.3" 3215 3164 source = "registry+https://github.com/rust-lang/crates.io-index" 3216 - checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" 3165 + checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" 3217 3166 dependencies = [ 3218 3167 "libc", 3219 - "windows-sys 0.59.0", 3168 + "windows-sys 0.61.2", 3220 3169 ] 3221 3170 3222 3171 [[package]] ··· 3252 3201 3253 3202 [[package]] 3254 3203 name = "parking_lot" 3255 - version = "0.12.4" 3204 + version = "0.12.5" 3256 3205 source = "registry+https://github.com/rust-lang/crates.io-index" 3257 - checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 3206 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 3258 3207 dependencies = [ 3259 3208 "lock_api", 3260 3209 "parking_lot_core", ··· 3262 3211 3263 3212 [[package]] 3264 3213 name = "parking_lot_core" 3265 - version = "0.9.11" 3214 + version = "0.9.12" 3266 3215 source = "registry+https://github.com/rust-lang/crates.io-index" 3267 - checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 3216 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 3268 3217 dependencies = [ 3269 3218 "cfg-if", 3270 3219 "libc", 3271 3220 "redox_syscall", 3272 3221 "smallvec", 3273 - "windows-targets 0.52.6", 3222 + "windows-link 0.2.1", 3274 3223 ] 3275 3224 3276 3225 [[package]] ··· 3287 3236 3288 3237 [[package]] 3289 3238 name = "percent-encoding" 3290 - version = "2.3.1" 3239 + version = "2.3.2" 3291 3240 source = "registry+https://github.com/rust-lang/crates.io-index" 3292 - checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 3241 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3293 3242 3294 3243 [[package]] 3295 3244 name = "phf" ··· 3395 3344 "phf_shared 0.11.3", 3396 3345 "proc-macro2", 3397 3346 "quote", 3398 - "syn 2.0.104", 3347 + "syn 2.0.109", 3399 3348 ] 3400 3349 3401 3350 [[package]] ··· 3456 3405 3457 3406 [[package]] 3458 3407 name = "plist" 3459 - version = "1.7.4" 3408 + version = "1.8.0" 3460 3409 source = "registry+https://github.com/rust-lang/crates.io-index" 3461 - checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" 3410 + checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" 3462 3411 dependencies = [ 3463 3412 "base64 0.22.1", 3464 - "indexmap 2.10.0", 3413 + "indexmap 2.12.0", 3465 3414 "quick-xml", 3466 3415 "serde", 3467 3416 "time", ··· 3481 3430 ] 3482 3431 3483 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]] 3484 3446 name = "polling" 3485 - version = "3.9.0" 3447 + version = "3.11.0" 3486 3448 source = "registry+https://github.com/rust-lang/crates.io-index" 3487 - checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" 3449 + checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 3488 3450 dependencies = [ 3489 3451 "cfg-if", 3490 3452 "concurrent-queue", 3491 3453 "hermit-abi", 3492 3454 "pin-project-lite", 3493 - "rustix 1.0.8", 3494 - "windows-sys 0.60.2", 3455 + "rustix", 3456 + "windows-sys 0.61.2", 3495 3457 ] 3496 3458 3497 3459 [[package]] 3498 3460 name = "potential_utf" 3499 - version = "0.1.2" 3461 + version = "0.1.4" 3500 3462 source = "registry+https://github.com/rust-lang/crates.io-index" 3501 - checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 3463 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 3502 3464 dependencies = [ 3503 3465 "zerovec", 3504 3466 ] ··· 3542 3504 dependencies = [ 3543 3505 "toml_datetime 0.6.3", 3544 3506 "toml_edit 0.20.2", 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", 3545 3516 ] 3546 3517 3547 3518 [[package]] ··· 3576 3547 3577 3548 [[package]] 3578 3549 name = "proc-macro2" 3579 - version = "1.0.95" 3550 + version = "1.0.103" 3580 3551 source = "registry+https://github.com/rust-lang/crates.io-index" 3581 - checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 3552 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 3582 3553 dependencies = [ 3583 3554 "unicode-ident", 3584 3555 ] ··· 3599 3570 checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 3600 3571 dependencies = [ 3601 3572 "quote", 3602 - "syn 2.0.104", 3573 + "syn 2.0.109", 3603 3574 ] 3604 3575 3605 3576 [[package]] ··· 3616 3587 dependencies = [ 3617 3588 "idna", 3618 3589 "psl-types", 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", 3619 3599 ] 3620 3600 3621 3601 [[package]] ··· 3635 3615 3636 3616 [[package]] 3637 3617 name = "quick-xml" 3638 - version = "0.38.0" 3618 + version = "0.38.3" 3639 3619 source = "registry+https://github.com/rust-lang/crates.io-index" 3640 - checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" 3620 + checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" 3641 3621 dependencies = [ 3642 3622 "memchr", 3643 3623 ] 3644 3624 3645 3625 [[package]] 3646 3626 name = "quinn" 3647 - version = "0.11.8" 3627 + version = "0.11.9" 3648 3628 source = "registry+https://github.com/rust-lang/crates.io-index" 3649 - checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" 3629 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 3650 3630 dependencies = [ 3651 3631 "bytes", 3652 3632 "cfg_aliases", ··· 3655 3635 "quinn-udp", 3656 3636 "rustc-hash", 3657 3637 "rustls", 3658 - "socket2 0.5.10", 3659 - "thiserror 2.0.12", 3638 + "socket2", 3639 + "thiserror 2.0.17", 3660 3640 "tokio", 3661 3641 "tracing", 3662 3642 "web-time", ··· 3664 3644 3665 3645 [[package]] 3666 3646 name = "quinn-proto" 3667 - version = "0.11.12" 3647 + version = "0.11.13" 3668 3648 source = "registry+https://github.com/rust-lang/crates.io-index" 3669 - checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" 3649 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 3670 3650 dependencies = [ 3671 3651 "bytes", 3672 - "getrandom 0.3.3", 3652 + "getrandom 0.3.4", 3673 3653 "lru-slab", 3674 3654 "rand 0.9.2", 3675 3655 "ring", ··· 3677 3657 "rustls", 3678 3658 "rustls-pki-types", 3679 3659 "slab", 3680 - "thiserror 2.0.12", 3660 + "thiserror 2.0.17", 3681 3661 "tinyvec", 3682 3662 "tracing", 3683 3663 "web-time", ··· 3685 3665 3686 3666 [[package]] 3687 3667 name = "quinn-udp" 3688 - version = "0.5.13" 3668 + version = "0.5.14" 3689 3669 source = "registry+https://github.com/rust-lang/crates.io-index" 3690 - checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" 3670 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 3691 3671 dependencies = [ 3692 3672 "cfg_aliases", 3693 3673 "libc", 3694 3674 "once_cell", 3695 - "socket2 0.5.10", 3675 + "socket2", 3696 3676 "tracing", 3697 - "windows-sys 0.59.0", 3677 + "windows-sys 0.60.2", 3698 3678 ] 3699 3679 3700 3680 [[package]] 3701 3681 name = "quote" 3702 - version = "1.0.40" 3682 + version = "1.0.42" 3703 3683 source = "registry+https://github.com/rust-lang/crates.io-index" 3704 - checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 3684 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 3705 3685 dependencies = [ 3706 3686 "proc-macro2", 3707 3687 ] ··· 3801 3781 source = "registry+https://github.com/rust-lang/crates.io-index" 3802 3782 checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 3803 3783 dependencies = [ 3804 - "getrandom 0.3.3", 3784 + "getrandom 0.3.4", 3805 3785 ] 3806 3786 3807 3787 [[package]] ··· 3880 3860 3881 3861 [[package]] 3882 3862 name = "rayon" 3883 - version = "1.10.0" 3863 + version = "1.11.0" 3884 3864 source = "registry+https://github.com/rust-lang/crates.io-index" 3885 - checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 3865 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 3886 3866 dependencies = [ 3887 3867 "either", 3888 3868 "rayon-core", ··· 3890 3870 3891 3871 [[package]] 3892 3872 name = "rayon-core" 3893 - version = "1.12.1" 3873 + version = "1.13.0" 3894 3874 source = "registry+https://github.com/rust-lang/crates.io-index" 3895 - checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 3875 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 3896 3876 dependencies = [ 3897 3877 "crossbeam-deque", 3898 3878 "crossbeam-utils", ··· 3900 3880 3901 3881 [[package]] 3902 3882 name = "redox_syscall" 3903 - version = "0.5.17" 3904 - source = "registry+https://github.com/rust-lang/crates.io-index" 3905 - checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 3906 - dependencies = [ 3907 - "bitflags 2.9.1", 3908 - ] 3909 - 3910 - [[package]] 3911 - name = "redox_users" 3912 - version = "0.4.6" 3883 + version = "0.5.18" 3913 3884 source = "registry+https://github.com/rust-lang/crates.io-index" 3914 - checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" 3885 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 3915 3886 dependencies = [ 3916 - "getrandom 0.2.16", 3917 - "libredox", 3918 - "thiserror 1.0.69", 3887 + "bitflags 2.10.0", 3919 3888 ] 3920 3889 3921 3890 [[package]] ··· 3926 3895 dependencies = [ 3927 3896 "getrandom 0.2.16", 3928 3897 "libredox", 3929 - "thiserror 2.0.12", 3898 + "thiserror 2.0.17", 3930 3899 ] 3931 3900 3932 3901 [[package]] 3933 3902 name = "ref-cast" 3934 - version = "1.0.24" 3903 + version = "1.0.25" 3935 3904 source = "registry+https://github.com/rust-lang/crates.io-index" 3936 - checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" 3905 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 3937 3906 dependencies = [ 3938 3907 "ref-cast-impl", 3939 3908 ] 3940 3909 3941 3910 [[package]] 3942 3911 name = "ref-cast-impl" 3943 - version = "1.0.24" 3912 + version = "1.0.25" 3944 3913 source = "registry+https://github.com/rust-lang/crates.io-index" 3945 - checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" 3914 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 3946 3915 dependencies = [ 3947 3916 "proc-macro2", 3948 3917 "quote", 3949 - "syn 2.0.104", 3918 + "syn 2.0.109", 3950 3919 ] 3951 3920 3952 3921 [[package]] 3953 3922 name = "regex" 3954 - version = "1.11.1" 3923 + version = "1.12.2" 3955 3924 source = "registry+https://github.com/rust-lang/crates.io-index" 3956 - checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 3925 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 3957 3926 dependencies = [ 3958 3927 "aho-corasick", 3959 3928 "memchr", ··· 3963 3932 3964 3933 [[package]] 3965 3934 name = "regex-automata" 3966 - version = "0.4.9" 3935 + version = "0.4.13" 3967 3936 source = "registry+https://github.com/rust-lang/crates.io-index" 3968 - checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 3937 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 3969 3938 dependencies = [ 3970 3939 "aho-corasick", 3971 3940 "memchr", ··· 3974 3943 3975 3944 [[package]] 3976 3945 name = "regex-syntax" 3977 - version = "0.8.5" 3946 + version = "0.8.8" 3978 3947 source = "registry+https://github.com/rust-lang/crates.io-index" 3979 - checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 3948 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 3980 3949 3981 3950 [[package]] 3982 3951 name = "reqwest" 3983 - version = "0.12.22" 3952 + version = "0.12.24" 3984 3953 source = "registry+https://github.com/rust-lang/crates.io-index" 3985 - checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" 3954 + checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" 3986 3955 dependencies = [ 3987 3956 "base64 0.22.1", 3988 3957 "bytes", ··· 4050 4019 4051 4020 [[package]] 4052 4021 name = "rust-ini" 4053 - version = "0.21.2" 4022 + version = "0.21.3" 4054 4023 source = "registry+https://github.com/rust-lang/crates.io-index" 4055 - checksum = "e7295b7ce3bf4806b419dc3420745998b447178b7005e2011947b38fc5aa6791" 4024 + checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" 4056 4025 dependencies = [ 4057 4026 "cfg-if", 4058 4027 "ordered-multimap", 4059 4028 ] 4060 - 4061 - [[package]] 4062 - name = "rustc-demangle" 4063 - version = "0.1.26" 4064 - source = "registry+https://github.com/rust-lang/crates.io-index" 4065 - checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 4066 4029 4067 4030 [[package]] 4068 4031 name = "rustc-hash" ··· 4081 4044 4082 4045 [[package]] 4083 4046 name = "rustix" 4084 - version = "0.38.44" 4085 - source = "registry+https://github.com/rust-lang/crates.io-index" 4086 - checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 4087 - dependencies = [ 4088 - "bitflags 2.9.1", 4089 - "errno", 4090 - "libc", 4091 - "linux-raw-sys 0.4.15", 4092 - "windows-sys 0.59.0", 4093 - ] 4094 - 4095 - [[package]] 4096 - name = "rustix" 4097 - version = "1.0.8" 4047 + version = "1.1.2" 4098 4048 source = "registry+https://github.com/rust-lang/crates.io-index" 4099 - checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 4049 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 4100 4050 dependencies = [ 4101 - "bitflags 2.9.1", 4051 + "bitflags 2.10.0", 4102 4052 "errno", 4103 4053 "libc", 4104 - "linux-raw-sys 0.9.4", 4105 - "windows-sys 0.60.2", 4054 + "linux-raw-sys", 4055 + "windows-sys 0.61.2", 4106 4056 ] 4107 4057 4108 4058 [[package]] 4109 4059 name = "rustls" 4110 - version = "0.23.31" 4060 + version = "0.23.35" 4111 4061 source = "registry+https://github.com/rust-lang/crates.io-index" 4112 - checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" 4062 + checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" 4113 4063 dependencies = [ 4114 4064 "once_cell", 4115 4065 "ring", ··· 4121 4071 4122 4072 [[package]] 4123 4073 name = "rustls-pki-types" 4124 - version = "1.12.0" 4074 + version = "1.13.0" 4125 4075 source = "registry+https://github.com/rust-lang/crates.io-index" 4126 - checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 4076 + checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" 4127 4077 dependencies = [ 4128 4078 "web-time", 4129 4079 "zeroize", ··· 4131 4081 4132 4082 [[package]] 4133 4083 name = "rustls-webpki" 4134 - version = "0.103.4" 4084 + version = "0.103.8" 4135 4085 source = "registry+https://github.com/rust-lang/crates.io-index" 4136 - checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 4086 + checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" 4137 4087 dependencies = [ 4138 4088 "ring", 4139 4089 "rustls-pki-types", ··· 4142 4092 4143 4093 [[package]] 4144 4094 name = "rustversion" 4145 - version = "1.0.21" 4095 + version = "1.0.22" 4146 4096 source = "registry+https://github.com/rust-lang/crates.io-index" 4147 - checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 4097 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 4148 4098 4149 4099 [[package]] 4150 4100 name = "ryu" ··· 4163 4113 4164 4114 [[package]] 4165 4115 name = "schannel" 4166 - version = "0.1.27" 4116 + version = "0.1.28" 4167 4117 source = "registry+https://github.com/rust-lang/crates.io-index" 4168 - checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 4118 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 4169 4119 dependencies = [ 4170 - "windows-sys 0.59.0", 4120 + "windows-sys 0.61.2", 4171 4121 ] 4172 4122 4173 4123 [[package]] ··· 4199 4149 4200 4150 [[package]] 4201 4151 name = "schemars" 4202 - version = "1.0.4" 4152 + version = "1.1.0" 4203 4153 source = "registry+https://github.com/rust-lang/crates.io-index" 4204 - checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" 4154 + checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" 4205 4155 dependencies = [ 4206 4156 "dyn-clone", 4207 4157 "ref-cast", ··· 4218 4168 "proc-macro2", 4219 4169 "quote", 4220 4170 "serde_derive_internals", 4221 - "syn 2.0.104", 4171 + "syn 2.0.109", 4222 4172 ] 4223 4173 4224 4174 [[package]] ··· 4233 4183 source = "registry+https://github.com/rust-lang/crates.io-index" 4234 4184 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4235 4185 dependencies = [ 4236 - "bitflags 2.9.1", 4186 + "bitflags 2.10.0", 4237 4187 "core-foundation 0.9.4", 4238 4188 "core-foundation-sys", 4239 4189 "libc", ··· 4242 4192 4243 4193 [[package]] 4244 4194 name = "security-framework-sys" 4245 - version = "2.14.0" 4195 + version = "2.15.0" 4246 4196 source = "registry+https://github.com/rust-lang/crates.io-index" 4247 - checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 4197 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 4248 4198 dependencies = [ 4249 4199 "core-foundation-sys", 4250 4200 "libc", ··· 4270 4220 4271 4221 [[package]] 4272 4222 name = "semver" 4273 - version = "1.0.26" 4223 + version = "1.0.27" 4274 4224 source = "registry+https://github.com/rust-lang/crates.io-index" 4275 - checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 4225 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4276 4226 dependencies = [ 4277 4227 "serde", 4228 + "serde_core", 4278 4229 ] 4279 4230 4280 4231 [[package]] 4281 4232 name = "serde" 4282 - version = "1.0.219" 4233 + version = "1.0.228" 4283 4234 source = "registry+https://github.com/rust-lang/crates.io-index" 4284 - checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 4235 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 4285 4236 dependencies = [ 4237 + "serde_core", 4286 4238 "serde_derive", 4287 4239 ] 4288 4240 4289 4241 [[package]] 4290 4242 name = "serde-untagged" 4291 - version = "0.1.7" 4243 + version = "0.1.9" 4292 4244 source = "registry+https://github.com/rust-lang/crates.io-index" 4293 - checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" 4245 + checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" 4294 4246 dependencies = [ 4295 4247 "erased-serde", 4296 4248 "serde", 4249 + "serde_core", 4297 4250 "typeid", 4298 4251 ] 4299 4252 4300 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]] 4301 4263 name = "serde_derive" 4302 - version = "1.0.219" 4264 + version = "1.0.228" 4303 4265 source = "registry+https://github.com/rust-lang/crates.io-index" 4304 - checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 4266 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 4305 4267 dependencies = [ 4306 4268 "proc-macro2", 4307 4269 "quote", 4308 - "syn 2.0.104", 4270 + "syn 2.0.109", 4309 4271 ] 4310 4272 4311 4273 [[package]] ··· 4316 4278 dependencies = [ 4317 4279 "proc-macro2", 4318 4280 "quote", 4319 - "syn 2.0.104", 4281 + "syn 2.0.109", 4320 4282 ] 4321 4283 4322 4284 [[package]] 4323 4285 name = "serde_json" 4324 - version = "1.0.141" 4286 + version = "1.0.145" 4325 4287 source = "registry+https://github.com/rust-lang/crates.io-index" 4326 - checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" 4288 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 4327 4289 dependencies = [ 4328 4290 "itoa", 4329 4291 "memchr", 4330 4292 "ryu", 4331 4293 "serde", 4294 + "serde_core", 4332 4295 ] 4333 4296 4334 4297 [[package]] ··· 4339 4302 dependencies = [ 4340 4303 "proc-macro2", 4341 4304 "quote", 4342 - "syn 2.0.104", 4305 + "syn 2.0.109", 4343 4306 ] 4344 4307 4345 4308 [[package]] ··· 4353 4316 4354 4317 [[package]] 4355 4318 name = "serde_spanned" 4356 - version = "1.0.0" 4319 + version = "1.0.3" 4357 4320 source = "registry+https://github.com/rust-lang/crates.io-index" 4358 - checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" 4321 + checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" 4359 4322 dependencies = [ 4360 - "serde", 4323 + "serde_core", 4361 4324 ] 4362 4325 4363 4326 [[package]] ··· 4374 4337 4375 4338 [[package]] 4376 4339 name = "serde_with" 4377 - version = "3.14.0" 4340 + version = "3.15.1" 4378 4341 source = "registry+https://github.com/rust-lang/crates.io-index" 4379 - checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" 4342 + checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" 4380 4343 dependencies = [ 4381 4344 "base64 0.22.1", 4382 4345 "chrono", 4383 4346 "hex", 4384 4347 "indexmap 1.9.3", 4385 - "indexmap 2.10.0", 4348 + "indexmap 2.12.0", 4386 4349 "schemars 0.9.0", 4387 - "schemars 1.0.4", 4388 - "serde", 4389 - "serde_derive", 4350 + "schemars 1.1.0", 4351 + "serde_core", 4390 4352 "serde_json", 4391 4353 "serde_with_macros", 4392 4354 "time", ··· 4394 4356 4395 4357 [[package]] 4396 4358 name = "serde_with_macros" 4397 - version = "3.14.0" 4359 + version = "3.15.1" 4398 4360 source = "registry+https://github.com/rust-lang/crates.io-index" 4399 - checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" 4361 + checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" 4400 4362 dependencies = [ 4401 4363 "darling", 4402 4364 "proc-macro2", 4403 4365 "quote", 4404 - "syn 2.0.104", 4366 + "syn 2.0.109", 4405 4367 ] 4406 4368 4407 4369 [[package]] 4408 4370 name = "serialize-to-javascript" 4409 - version = "0.1.1" 4371 + version = "0.1.2" 4410 4372 source = "registry+https://github.com/rust-lang/crates.io-index" 4411 - checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" 4373 + checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" 4412 4374 dependencies = [ 4413 4375 "serde", 4414 4376 "serde_json", ··· 4417 4379 4418 4380 [[package]] 4419 4381 name = "serialize-to-javascript-impl" 4420 - version = "0.1.1" 4382 + version = "0.1.2" 4421 4383 source = "registry+https://github.com/rust-lang/crates.io-index" 4422 - checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" 4384 + checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" 4423 4385 dependencies = [ 4424 4386 "proc-macro2", 4425 4387 "quote", 4426 - "syn 1.0.109", 4388 + "syn 2.0.109", 4427 4389 ] 4428 4390 4429 4391 [[package]] ··· 4434 4396 dependencies = [ 4435 4397 "nodrop", 4436 4398 "stable_deref_trait", 4437 - ] 4438 - 4439 - [[package]] 4440 - name = "sha1" 4441 - version = "0.10.6" 4442 - source = "registry+https://github.com/rust-lang/crates.io-index" 4443 - checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 4444 - dependencies = [ 4445 - "cfg-if", 4446 - "cpufeatures", 4447 - "digest", 4448 4399 ] 4449 4400 4450 4401 [[package]] ··· 4498 4449 4499 4450 [[package]] 4500 4451 name = "signal-hook-registry" 4501 - version = "1.4.5" 4452 + version = "1.4.6" 4502 4453 source = "registry+https://github.com/rust-lang/crates.io-index" 4503 - checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 4454 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 4504 4455 dependencies = [ 4505 4456 "libc", 4506 4457 ] ··· 4534 4485 4535 4486 [[package]] 4536 4487 name = "slab" 4537 - version = "0.4.10" 4488 + version = "0.4.11" 4538 4489 source = "registry+https://github.com/rust-lang/crates.io-index" 4539 - checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 4490 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 4540 4491 4541 4492 [[package]] 4542 4493 name = "smallvec" ··· 4546 4497 4547 4498 [[package]] 4548 4499 name = "socket2" 4549 - version = "0.5.10" 4550 - source = "registry+https://github.com/rust-lang/crates.io-index" 4551 - checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 4552 - dependencies = [ 4553 - "libc", 4554 - "windows-sys 0.52.0", 4555 - ] 4556 - 4557 - [[package]] 4558 - name = "socket2" 4559 - version = "0.6.0" 4500 + version = "0.6.1" 4560 4501 source = "registry+https://github.com/rust-lang/crates.io-index" 4561 - checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 4502 + checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" 4562 4503 dependencies = [ 4563 4504 "libc", 4564 - "windows-sys 0.59.0", 4505 + "windows-sys 0.60.2", 4565 4506 ] 4566 4507 4567 4508 [[package]] ··· 4614 4555 4615 4556 [[package]] 4616 4557 name = "stable_deref_trait" 4617 - version = "1.2.0" 4558 + version = "1.2.1" 4618 4559 source = "registry+https://github.com/rust-lang/crates.io-index" 4619 - checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 4560 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 4620 4561 4621 4562 [[package]] 4622 4563 name = "static_assertions" ··· 4685 4626 4686 4627 [[package]] 4687 4628 name = "syn" 4688 - version = "2.0.104" 4629 + version = "2.0.109" 4689 4630 source = "registry+https://github.com/rust-lang/crates.io-index" 4690 - checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 4631 + checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" 4691 4632 dependencies = [ 4692 4633 "proc-macro2", 4693 4634 "quote", ··· 4711 4652 dependencies = [ 4712 4653 "proc-macro2", 4713 4654 "quote", 4714 - "syn 2.0.104", 4655 + "syn 2.0.109", 4715 4656 ] 4716 4657 4717 4658 [[package]] ··· 4720 4661 source = "registry+https://github.com/rust-lang/crates.io-index" 4721 4662 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4722 4663 dependencies = [ 4723 - "bitflags 2.9.1", 4664 + "bitflags 2.10.0", 4724 4665 "core-foundation 0.9.4", 4725 4666 "system-configuration-sys", 4726 4667 ] ··· 4750 4691 4751 4692 [[package]] 4752 4693 name = "tao" 4753 - version = "0.34.0" 4694 + version = "0.34.5" 4754 4695 source = "registry+https://github.com/rust-lang/crates.io-index" 4755 - checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a" 4696 + checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" 4756 4697 dependencies = [ 4757 - "bitflags 2.9.1", 4698 + "bitflags 2.10.0", 4699 + "block2 0.6.2", 4758 4700 "core-foundation 0.10.1", 4759 4701 "core-graphics", 4760 4702 "crossbeam-channel", ··· 4771 4713 "ndk", 4772 4714 "ndk-context", 4773 4715 "ndk-sys", 4774 - "objc2 0.6.1", 4716 + "objc2 0.6.3", 4775 4717 "objc2-app-kit", 4776 - "objc2-foundation 0.3.1", 4718 + "objc2-foundation 0.3.2", 4777 4719 "once_cell", 4778 4720 "parking_lot", 4779 4721 "raw-window-handle", ··· 4782 4724 "unicode-segmentation", 4783 4725 "url", 4784 4726 "windows", 4785 - "windows-core", 4727 + "windows-core 0.61.2", 4786 4728 "windows-version", 4787 4729 "x11-dl", 4788 4730 ] ··· 4795 4737 dependencies = [ 4796 4738 "proc-macro2", 4797 4739 "quote", 4798 - "syn 2.0.104", 4740 + "syn 2.0.109", 4799 4741 ] 4800 4742 4801 4743 [[package]] ··· 4806 4748 4807 4749 [[package]] 4808 4750 name = "tauri" 4809 - version = "2.7.0" 4751 + version = "2.9.2" 4810 4752 source = "registry+https://github.com/rust-lang/crates.io-index" 4811 - checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7" 4753 + checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5" 4812 4754 dependencies = [ 4813 4755 "anyhow", 4814 4756 "bytes", 4815 - "dirs 6.0.0", 4757 + "cookie", 4758 + "dirs", 4816 4759 "dunce", 4817 4760 "embed_plist", 4818 - "getrandom 0.3.3", 4761 + "getrandom 0.3.4", 4819 4762 "glob", 4820 4763 "gtk", 4821 4764 "heck 0.5.0", ··· 4826 4769 "log", 4827 4770 "mime", 4828 4771 "muda", 4829 - "objc2 0.6.1", 4772 + "objc2 0.6.3", 4830 4773 "objc2-app-kit", 4831 - "objc2-foundation 0.3.1", 4774 + "objc2-foundation 0.3.2", 4832 4775 "objc2-ui-kit", 4776 + "objc2-web-kit", 4833 4777 "percent-encoding", 4834 4778 "plist", 4835 4779 "raw-window-handle", ··· 4844 4788 "tauri-runtime", 4845 4789 "tauri-runtime-wry", 4846 4790 "tauri-utils", 4847 - "thiserror 2.0.12", 4791 + "thiserror 2.0.17", 4848 4792 "tokio", 4849 4793 "tray-icon", 4850 4794 "url", 4851 - "urlpattern", 4852 4795 "webkit2gtk", 4853 4796 "webview2-com", 4854 4797 "window-vibrancy", ··· 4857 4800 4858 4801 [[package]] 4859 4802 name = "tauri-build" 4860 - version = "2.3.1" 4803 + version = "2.5.1" 4861 4804 source = "registry+https://github.com/rust-lang/crates.io-index" 4862 - checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064" 4805 + checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38" 4863 4806 dependencies = [ 4864 4807 "anyhow", 4865 4808 "cargo_toml", 4866 - "dirs 6.0.0", 4809 + "dirs", 4867 4810 "glob", 4868 4811 "heck 0.5.0", 4869 4812 "json-patch", ··· 4873 4816 "serde_json", 4874 4817 "tauri-utils", 4875 4818 "tauri-winres", 4876 - "toml 0.8.2", 4819 + "toml 0.9.8", 4877 4820 "walkdir", 4878 4821 ] 4879 4822 4880 4823 [[package]] 4881 4824 name = "tauri-codegen" 4882 - version = "2.3.1" 4825 + version = "2.5.0" 4883 4826 source = "registry+https://github.com/rust-lang/crates.io-index" 4884 - checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a" 4827 + checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190" 4885 4828 dependencies = [ 4886 4829 "base64 0.22.1", 4887 4830 "brotli", 4888 4831 "ico", 4889 4832 "json-patch", 4890 4833 "plist", 4891 - "png", 4834 + "png 0.17.16", 4892 4835 "proc-macro2", 4893 4836 "quote", 4894 4837 "semver", 4895 4838 "serde", 4896 4839 "serde_json", 4897 4840 "sha2", 4898 - "syn 2.0.104", 4841 + "syn 2.0.109", 4899 4842 "tauri-utils", 4900 - "thiserror 2.0.12", 4843 + "thiserror 2.0.17", 4901 4844 "time", 4902 4845 "url", 4903 4846 "uuid", ··· 4906 4849 4907 4850 [[package]] 4908 4851 name = "tauri-macros" 4909 - version = "2.3.2" 4852 + version = "2.5.0" 4910 4853 source = "registry+https://github.com/rust-lang/crates.io-index" 4911 - checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e" 4854 + checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f" 4912 4855 dependencies = [ 4913 4856 "heck 0.5.0", 4914 4857 "proc-macro2", 4915 4858 "quote", 4916 - "syn 2.0.104", 4859 + "syn 2.0.109", 4917 4860 "tauri-codegen", 4918 4861 "tauri-utils", 4919 4862 ] 4920 4863 4921 4864 [[package]] 4922 4865 name = "tauri-plugin" 4923 - version = "2.3.1" 4866 + version = "2.5.1" 4924 4867 source = "registry+https://github.com/rust-lang/crates.io-index" 4925 - checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02" 4868 + checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d" 4926 4869 dependencies = [ 4927 4870 "anyhow", 4928 4871 "glob", ··· 4931 4874 "serde", 4932 4875 "serde_json", 4933 4876 "tauri-utils", 4934 - "toml 0.8.2", 4877 + "toml 0.9.8", 4935 4878 "walkdir", 4936 4879 ] 4937 4880 4938 4881 [[package]] 4939 4882 name = "tauri-plugin-deep-link" 4940 - version = "2.4.1" 4883 + version = "2.4.5" 4941 4884 source = "registry+https://github.com/rust-lang/crates.io-index" 4942 - checksum = "1fec67f32d7a06d80bd3dc009fdb678c35a66116d9cb8cd2bb32e406c2b5bbd2" 4885 + checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73" 4943 4886 dependencies = [ 4944 4887 "dunce", 4888 + "plist", 4945 4889 "rust-ini", 4946 4890 "serde", 4947 4891 "serde_json", 4948 4892 "tauri", 4949 4893 "tauri-plugin", 4950 4894 "tauri-utils", 4951 - "thiserror 2.0.12", 4895 + "thiserror 2.0.17", 4952 4896 "tracing", 4953 4897 "url", 4954 4898 "windows-registry", 4955 - "windows-result", 4899 + "windows-result 0.3.4", 4956 4900 ] 4957 4901 4958 4902 [[package]] 4959 4903 name = "tauri-plugin-fs" 4960 - version = "2.4.1" 4904 + version = "2.4.4" 4961 4905 source = "registry+https://github.com/rust-lang/crates.io-index" 4962 - checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99" 4906 + checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9" 4963 4907 dependencies = [ 4964 4908 "anyhow", 4965 4909 "dunce", ··· 4972 4916 "tauri", 4973 4917 "tauri-plugin", 4974 4918 "tauri-utils", 4975 - "thiserror 2.0.12", 4976 - "toml 0.8.2", 4919 + "thiserror 2.0.17", 4920 + "toml 0.9.8", 4977 4921 "url", 4978 4922 ] 4979 4923 4980 4924 [[package]] 4981 4925 name = "tauri-plugin-http" 4982 - version = "2.5.1" 4926 + version = "2.5.4" 4983 4927 source = "registry+https://github.com/rust-lang/crates.io-index" 4984 - checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2" 4928 + checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70" 4985 4929 dependencies = [ 4986 4930 "bytes", 4987 4931 "cookie_store", ··· 4995 4939 "tauri", 4996 4940 "tauri-plugin", 4997 4941 "tauri-plugin-fs", 4998 - "thiserror 2.0.12", 4942 + "thiserror 2.0.17", 4999 4943 "tokio", 5000 4944 "url", 5001 4945 "urlpattern", ··· 5003 4947 5004 4948 [[package]] 5005 4949 name = "tauri-plugin-process" 5006 - version = "2.3.0" 4950 + version = "2.3.1" 5007 4951 source = "registry+https://github.com/rust-lang/crates.io-index" 5008 - checksum = "7461c622a5ea00eb9cd9f7a08dbd3bf79484499fd5c21aa2964677f64ca651ab" 4952 + checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" 5009 4953 dependencies = [ 5010 4954 "tauri", 5011 4955 "tauri-plugin", ··· 5013 4957 5014 4958 [[package]] 5015 4959 name = "tauri-plugin-shell" 5016 - version = "2.3.0" 4960 + version = "2.3.3" 5017 4961 source = "registry+https://github.com/rust-lang/crates.io-index" 5018 - checksum = "2b9ffadec5c3523f11e8273465cacb3d86ea7652a28e6e2a2e9b5c182f791d25" 4962 + checksum = "c374b6db45f2a8a304f0273a15080d98c70cde86178855fc24653ba657a1144c" 5019 4963 dependencies = [ 5020 4964 "encoding_rs", 5021 4965 "log", ··· 5028 4972 "shared_child", 5029 4973 "tauri", 5030 4974 "tauri-plugin", 5031 - "thiserror 2.0.12", 4975 + "thiserror 2.0.17", 5032 4976 "tokio", 5033 4977 ] 5034 4978 5035 4979 [[package]] 5036 4980 name = "tauri-plugin-single-instance" 5037 - version = "2.2.0" 4981 + version = "2.3.6" 5038 4982 source = "registry+https://github.com/rust-lang/crates.io-index" 5039 - checksum = "0f36019ee9832dc99e4450bb55a21cfad8633b19c2c18bd17c7741939b070ede" 4983 + checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710" 5040 4984 dependencies = [ 5041 4985 "serde", 5042 4986 "serde_json", 5043 4987 "tauri", 5044 4988 "tauri-plugin-deep-link", 5045 - "thiserror 2.0.12", 4989 + "thiserror 2.0.17", 5046 4990 "tracing", 5047 - "windows-sys 0.59.0", 4991 + "windows-sys 0.60.2", 5048 4992 "zbus", 5049 4993 ] 5050 4994 5051 4995 [[package]] 5052 4996 name = "tauri-runtime" 5053 - version = "2.7.1" 4997 + version = "2.9.1" 5054 4998 source = "registry+https://github.com/rust-lang/crates.io-index" 5055 - checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676" 4999 + checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926" 5056 5000 dependencies = [ 5057 5001 "cookie", 5058 5002 "dpi", 5059 5003 "gtk", 5060 5004 "http", 5061 5005 "jni", 5062 - "objc2 0.6.1", 5006 + "objc2 0.6.3", 5063 5007 "objc2-ui-kit", 5008 + "objc2-web-kit", 5064 5009 "raw-window-handle", 5065 5010 "serde", 5066 5011 "serde_json", 5067 5012 "tauri-utils", 5068 - "thiserror 2.0.12", 5013 + "thiserror 2.0.17", 5069 5014 "url", 5015 + "webkit2gtk", 5016 + "webview2-com", 5070 5017 "windows", 5071 5018 ] 5072 5019 5073 5020 [[package]] 5074 5021 name = "tauri-runtime-wry" 5075 - version = "2.7.2" 5022 + version = "2.9.1" 5076 5023 source = "registry+https://github.com/rust-lang/crates.io-index" 5077 - checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439" 5024 + checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93" 5078 5025 dependencies = [ 5079 5026 "gtk", 5080 5027 "http", 5081 5028 "jni", 5082 5029 "log", 5083 - "objc2 0.6.1", 5030 + "objc2 0.6.3", 5084 5031 "objc2-app-kit", 5085 - "objc2-foundation 0.3.1", 5032 + "objc2-foundation 0.3.2", 5086 5033 "once_cell", 5087 5034 "percent-encoding", 5088 5035 "raw-window-handle", ··· 5099 5046 5100 5047 [[package]] 5101 5048 name = "tauri-utils" 5102 - version = "2.6.0" 5049 + version = "2.8.0" 5103 5050 source = "registry+https://github.com/rust-lang/crates.io-index" 5104 - checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e" 5051 + checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" 5105 5052 dependencies = [ 5106 5053 "anyhow", 5107 5054 "brotli", ··· 5127 5074 "serde_json", 5128 5075 "serde_with", 5129 5076 "swift-rs", 5130 - "thiserror 2.0.12", 5131 - "toml 0.8.2", 5077 + "thiserror 2.0.17", 5078 + "toml 0.9.8", 5132 5079 "url", 5133 5080 "urlpattern", 5134 5081 "uuid", ··· 5137 5084 5138 5085 [[package]] 5139 5086 name = "tauri-winres" 5140 - version = "0.3.2" 5087 + version = "0.3.3" 5141 5088 source = "registry+https://github.com/rust-lang/crates.io-index" 5142 - checksum = "7c6d9028d41d4de835e3c482c677a8cb88137ac435d6ff9a71f392d4421576c9" 5089 + checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074" 5143 5090 dependencies = [ 5144 5091 "embed-resource", 5145 - "indexmap 2.10.0", 5146 - "toml 0.9.4", 5092 + "toml 0.9.8", 5147 5093 ] 5148 5094 5149 5095 [[package]] 5150 5096 name = "tempfile" 5151 - version = "3.20.0" 5097 + version = "3.23.0" 5152 5098 source = "registry+https://github.com/rust-lang/crates.io-index" 5153 - checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 5099 + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 5154 5100 dependencies = [ 5155 5101 "fastrand", 5156 - "getrandom 0.3.3", 5102 + "getrandom 0.3.4", 5157 5103 "once_cell", 5158 - "rustix 1.0.8", 5159 - "windows-sys 0.59.0", 5104 + "rustix", 5105 + "windows-sys 0.61.2", 5160 5106 ] 5161 5107 5162 5108 [[package]] ··· 5181 5127 5182 5128 [[package]] 5183 5129 name = "thiserror" 5184 - version = "2.0.12" 5130 + version = "2.0.17" 5185 5131 source = "registry+https://github.com/rust-lang/crates.io-index" 5186 - checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 5132 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 5187 5133 dependencies = [ 5188 - "thiserror-impl 2.0.12", 5134 + "thiserror-impl 2.0.17", 5189 5135 ] 5190 5136 5191 5137 [[package]] ··· 5196 5142 dependencies = [ 5197 5143 "proc-macro2", 5198 5144 "quote", 5199 - "syn 2.0.104", 5145 + "syn 2.0.109", 5200 5146 ] 5201 5147 5202 5148 [[package]] 5203 5149 name = "thiserror-impl" 5204 - version = "2.0.12" 5150 + version = "2.0.17" 5205 5151 source = "registry+https://github.com/rust-lang/crates.io-index" 5206 - checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 5152 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 5207 5153 dependencies = [ 5208 5154 "proc-macro2", 5209 5155 "quote", 5210 - "syn 2.0.104", 5156 + "syn 2.0.109", 5211 5157 ] 5212 5158 5213 5159 [[package]] 5214 5160 name = "tiff" 5215 - version = "0.9.1" 5161 + version = "0.10.3" 5216 5162 source = "registry+https://github.com/rust-lang/crates.io-index" 5217 - checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 5163 + checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 5218 5164 dependencies = [ 5165 + "fax", 5219 5166 "flate2", 5220 - "jpeg-decoder", 5167 + "half", 5168 + "quick-error", 5221 5169 "weezl", 5170 + "zune-jpeg", 5222 5171 ] 5223 5172 5224 5173 [[package]] 5225 5174 name = "time" 5226 - version = "0.3.41" 5175 + version = "0.3.44" 5227 5176 source = "registry+https://github.com/rust-lang/crates.io-index" 5228 - checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 5177 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 5229 5178 dependencies = [ 5230 5179 "deranged", 5231 5180 "itoa", ··· 5238 5187 5239 5188 [[package]] 5240 5189 name = "time-core" 5241 - version = "0.1.4" 5190 + version = "0.1.6" 5242 5191 source = "registry+https://github.com/rust-lang/crates.io-index" 5243 - checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 5192 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 5244 5193 5245 5194 [[package]] 5246 5195 name = "time-macros" 5247 - version = "0.2.22" 5196 + version = "0.2.24" 5248 5197 source = "registry+https://github.com/rust-lang/crates.io-index" 5249 - checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 5198 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 5250 5199 dependencies = [ 5251 5200 "num-conv", 5252 5201 "time-core", ··· 5263 5212 5264 5213 [[package]] 5265 5214 name = "tinystr" 5266 - version = "0.8.1" 5215 + version = "0.8.2" 5267 5216 source = "registry+https://github.com/rust-lang/crates.io-index" 5268 - checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 5217 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 5269 5218 dependencies = [ 5270 5219 "displaydoc", 5271 5220 "zerovec", ··· 5273 5222 5274 5223 [[package]] 5275 5224 name = "tinyvec" 5276 - version = "1.9.0" 5225 + version = "1.10.0" 5277 5226 source = "registry+https://github.com/rust-lang/crates.io-index" 5278 - checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 5227 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 5279 5228 dependencies = [ 5280 5229 "tinyvec_macros", 5281 5230 ] ··· 5288 5237 5289 5238 [[package]] 5290 5239 name = "tokio" 5291 - version = "1.47.0" 5240 + version = "1.48.0" 5292 5241 source = "registry+https://github.com/rust-lang/crates.io-index" 5293 - checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" 5242 + checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 5294 5243 dependencies = [ 5295 - "backtrace", 5296 5244 "bytes", 5297 - "io-uring", 5298 5245 "libc", 5299 - "mio 1.0.4", 5246 + "mio", 5300 5247 "pin-project-lite", 5301 - "slab", 5302 - "socket2 0.6.0", 5248 + "socket2", 5303 5249 "tokio-macros", 5304 - "windows-sys 0.59.0", 5250 + "windows-sys 0.61.2", 5305 5251 ] 5306 5252 5307 5253 [[package]] 5308 5254 name = "tokio-macros" 5309 - version = "2.5.0" 5255 + version = "2.6.0" 5310 5256 source = "registry+https://github.com/rust-lang/crates.io-index" 5311 - checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 5257 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 5312 5258 dependencies = [ 5313 5259 "proc-macro2", 5314 5260 "quote", 5315 - "syn 2.0.104", 5261 + "syn 2.0.109", 5316 5262 ] 5317 5263 5318 5264 [[package]] ··· 5327 5273 5328 5274 [[package]] 5329 5275 name = "tokio-rustls" 5330 - version = "0.26.2" 5276 + version = "0.26.4" 5331 5277 source = "registry+https://github.com/rust-lang/crates.io-index" 5332 - checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 5278 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 5333 5279 dependencies = [ 5334 5280 "rustls", 5335 5281 "tokio", ··· 5337 5283 5338 5284 [[package]] 5339 5285 name = "tokio-util" 5340 - version = "0.7.15" 5286 + version = "0.7.17" 5341 5287 source = "registry+https://github.com/rust-lang/crates.io-index" 5342 - checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 5288 + checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" 5343 5289 dependencies = [ 5344 5290 "bytes", 5345 5291 "futures-core", ··· 5362 5308 5363 5309 [[package]] 5364 5310 name = "toml" 5365 - version = "0.9.4" 5311 + version = "0.9.8" 5366 5312 source = "registry+https://github.com/rust-lang/crates.io-index" 5367 - checksum = "41ae868b5a0f67631c14589f7e250c1ea2c574ee5ba21c6c8dd4b1485705a5a1" 5313 + checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" 5368 5314 dependencies = [ 5369 - "indexmap 2.10.0", 5370 - "serde", 5371 - "serde_spanned 1.0.0", 5372 - "toml_datetime 0.7.0", 5315 + "indexmap 2.12.0", 5316 + "serde_core", 5317 + "serde_spanned 1.0.3", 5318 + "toml_datetime 0.7.3", 5373 5319 "toml_parser", 5374 5320 "toml_writer", 5375 - "winnow 0.7.12", 5321 + "winnow 0.7.13", 5376 5322 ] 5377 5323 5378 5324 [[package]] ··· 5386 5332 5387 5333 [[package]] 5388 5334 name = "toml_datetime" 5389 - version = "0.7.0" 5335 + version = "0.7.3" 5390 5336 source = "registry+https://github.com/rust-lang/crates.io-index" 5391 - checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" 5337 + checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" 5392 5338 dependencies = [ 5393 - "serde", 5339 + "serde_core", 5394 5340 ] 5395 5341 5396 5342 [[package]] ··· 5399 5345 source = "registry+https://github.com/rust-lang/crates.io-index" 5400 5346 checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 5401 5347 dependencies = [ 5402 - "indexmap 2.10.0", 5348 + "indexmap 2.12.0", 5403 5349 "toml_datetime 0.6.3", 5404 5350 "winnow 0.5.40", 5405 5351 ] ··· 5410 5356 source = "registry+https://github.com/rust-lang/crates.io-index" 5411 5357 checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 5412 5358 dependencies = [ 5413 - "indexmap 2.10.0", 5359 + "indexmap 2.12.0", 5414 5360 "serde", 5415 5361 "serde_spanned 0.6.9", 5416 5362 "toml_datetime 0.6.3", ··· 5418 5364 ] 5419 5365 5420 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]] 5421 5379 name = "toml_parser" 5422 - version = "1.0.1" 5380 + version = "1.0.4" 5423 5381 source = "registry+https://github.com/rust-lang/crates.io-index" 5424 - checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" 5382 + checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" 5425 5383 dependencies = [ 5426 - "winnow 0.7.12", 5384 + "winnow 0.7.13", 5427 5385 ] 5428 5386 5429 5387 [[package]] 5430 5388 name = "toml_writer" 5431 - version = "1.0.2" 5389 + version = "1.0.4" 5432 5390 source = "registry+https://github.com/rust-lang/crates.io-index" 5433 - checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" 5391 + checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" 5434 5392 5435 5393 [[package]] 5436 5394 name = "tower" ··· 5453 5411 source = "registry+https://github.com/rust-lang/crates.io-index" 5454 5412 checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 5455 5413 dependencies = [ 5456 - "bitflags 2.9.1", 5414 + "bitflags 2.10.0", 5457 5415 "bytes", 5458 5416 "futures-util", 5459 5417 "http", ··· 5496 5454 dependencies = [ 5497 5455 "proc-macro2", 5498 5456 "quote", 5499 - "syn 2.0.104", 5457 + "syn 2.0.109", 5500 5458 ] 5501 5459 5502 5460 [[package]] ··· 5510 5468 5511 5469 [[package]] 5512 5470 name = "tray-icon" 5513 - version = "0.21.1" 5471 + version = "0.21.2" 5514 5472 source = "registry+https://github.com/rust-lang/crates.io-index" 5515 - checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" 5473 + checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" 5516 5474 dependencies = [ 5517 5475 "crossbeam-channel", 5518 - "dirs 6.0.0", 5476 + "dirs", 5519 5477 "libappindicator", 5520 5478 "muda", 5521 - "objc2 0.6.1", 5479 + "objc2 0.6.3", 5522 5480 "objc2-app-kit", 5523 5481 "objc2-core-foundation", 5524 5482 "objc2-core-graphics", 5525 - "objc2-foundation 0.3.1", 5483 + "objc2-foundation 0.3.2", 5526 5484 "once_cell", 5527 - "png", 5485 + "png 0.17.16", 5528 5486 "serde", 5529 - "thiserror 2.0.12", 5530 - "windows-sys 0.59.0", 5487 + "thiserror 2.0.17", 5488 + "windows-sys 0.60.2", 5531 5489 ] 5532 5490 5533 5491 [[package]] ··· 5544 5502 5545 5503 [[package]] 5546 5504 name = "typenum" 5547 - version = "1.18.0" 5505 + version = "1.19.0" 5548 5506 source = "registry+https://github.com/rust-lang/crates.io-index" 5549 - checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 5507 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 5550 5508 5551 5509 [[package]] 5552 5510 name = "uds_windows" ··· 5602 5560 5603 5561 [[package]] 5604 5562 name = "unicode-ident" 5605 - version = "1.0.18" 5563 + version = "1.0.22" 5606 5564 source = "registry+https://github.com/rust-lang/crates.io-index" 5607 - checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 5565 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 5608 5566 5609 5567 [[package]] 5610 5568 name = "unicode-segmentation" ··· 5620 5578 5621 5579 [[package]] 5622 5580 name = "url" 5623 - version = "2.5.4" 5581 + version = "2.5.7" 5624 5582 source = "registry+https://github.com/rust-lang/crates.io-index" 5625 - checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 5583 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 5626 5584 dependencies = [ 5627 5585 "form_urlencoded", 5628 5586 "idna", ··· 5656 5614 5657 5615 [[package]] 5658 5616 name = "uuid" 5659 - version = "1.17.0" 5617 + version = "1.18.1" 5660 5618 source = "registry+https://github.com/rust-lang/crates.io-index" 5661 - checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" 5619 + checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" 5662 5620 dependencies = [ 5663 - "getrandom 0.3.3", 5621 + "getrandom 0.3.4", 5664 5622 "js-sys", 5665 5623 "serde", 5666 5624 "wasm-bindgen", ··· 5685 5643 5686 5644 [[package]] 5687 5645 name = "version-compare" 5688 - version = "0.2.0" 5646 + version = "0.2.1" 5689 5647 source = "registry+https://github.com/rust-lang/crates.io-index" 5690 - checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 5648 + checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" 5691 5649 5692 5650 [[package]] 5693 5651 name = "version_check" ··· 5747 5705 checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 5748 5706 5749 5707 [[package]] 5750 - name = "wasi" 5751 - version = "0.14.2+wasi-0.2.4" 5708 + name = "wasip2" 5709 + version = "1.0.1+wasi-0.2.4" 5752 5710 source = "registry+https://github.com/rust-lang/crates.io-index" 5753 - checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 5711 + checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 5754 5712 dependencies = [ 5755 - "wit-bindgen-rt", 5713 + "wit-bindgen", 5756 5714 ] 5757 5715 5758 5716 [[package]] 5759 5717 name = "wasm-bindgen" 5760 - version = "0.2.100" 5718 + version = "0.2.105" 5761 5719 source = "registry+https://github.com/rust-lang/crates.io-index" 5762 - checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 5720 + checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 5763 5721 dependencies = [ 5764 5722 "cfg-if", 5765 5723 "once_cell", 5766 5724 "rustversion", 5767 5725 "wasm-bindgen-macro", 5768 - ] 5769 - 5770 - [[package]] 5771 - name = "wasm-bindgen-backend" 5772 - version = "0.2.100" 5773 - source = "registry+https://github.com/rust-lang/crates.io-index" 5774 - checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 5775 - dependencies = [ 5776 - "bumpalo", 5777 - "log", 5778 - "proc-macro2", 5779 - "quote", 5780 - "syn 2.0.104", 5781 5726 "wasm-bindgen-shared", 5782 5727 ] 5783 5728 5784 5729 [[package]] 5785 5730 name = "wasm-bindgen-futures" 5786 - version = "0.4.50" 5731 + version = "0.4.55" 5787 5732 source = "registry+https://github.com/rust-lang/crates.io-index" 5788 - checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 5733 + checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" 5789 5734 dependencies = [ 5790 5735 "cfg-if", 5791 5736 "js-sys", ··· 5796 5741 5797 5742 [[package]] 5798 5743 name = "wasm-bindgen-macro" 5799 - version = "0.2.100" 5744 + version = "0.2.105" 5800 5745 source = "registry+https://github.com/rust-lang/crates.io-index" 5801 - checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 5746 + checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" 5802 5747 dependencies = [ 5803 5748 "quote", 5804 5749 "wasm-bindgen-macro-support", ··· 5806 5751 5807 5752 [[package]] 5808 5753 name = "wasm-bindgen-macro-support" 5809 - version = "0.2.100" 5754 + version = "0.2.105" 5810 5755 source = "registry+https://github.com/rust-lang/crates.io-index" 5811 - checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 5756 + checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" 5812 5757 dependencies = [ 5758 + "bumpalo", 5813 5759 "proc-macro2", 5814 5760 "quote", 5815 - "syn 2.0.104", 5816 - "wasm-bindgen-backend", 5761 + "syn 2.0.109", 5817 5762 "wasm-bindgen-shared", 5818 5763 ] 5819 5764 5820 5765 [[package]] 5821 5766 name = "wasm-bindgen-shared" 5822 - version = "0.2.100" 5767 + version = "0.2.105" 5823 5768 source = "registry+https://github.com/rust-lang/crates.io-index" 5824 - checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 5769 + checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" 5825 5770 dependencies = [ 5826 5771 "unicode-ident", 5827 5772 ] ··· 5841 5786 5842 5787 [[package]] 5843 5788 name = "web-sys" 5844 - version = "0.3.77" 5789 + version = "0.3.82" 5845 5790 source = "registry+https://github.com/rust-lang/crates.io-index" 5846 - checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 5791 + checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" 5847 5792 dependencies = [ 5848 5793 "js-sys", 5849 5794 "wasm-bindgen", ··· 5905 5850 5906 5851 [[package]] 5907 5852 name = "webpki-roots" 5908 - version = "1.0.2" 5853 + version = "1.0.4" 5909 5854 source = "registry+https://github.com/rust-lang/crates.io-index" 5910 - checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" 5855 + checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" 5911 5856 dependencies = [ 5912 5857 "rustls-pki-types", 5913 5858 ] ··· 5921 5866 "webview2-com-macros", 5922 5867 "webview2-com-sys", 5923 5868 "windows", 5924 - "windows-core", 5869 + "windows-core 0.61.2", 5925 5870 "windows-implement", 5926 5871 "windows-interface", 5927 5872 ] ··· 5934 5879 dependencies = [ 5935 5880 "proc-macro2", 5936 5881 "quote", 5937 - "syn 2.0.104", 5882 + "syn 2.0.109", 5938 5883 ] 5939 5884 5940 5885 [[package]] ··· 5943 5888 source = "registry+https://github.com/rust-lang/crates.io-index" 5944 5889 checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" 5945 5890 dependencies = [ 5946 - "thiserror 2.0.12", 5891 + "thiserror 2.0.17", 5947 5892 "windows", 5948 - "windows-core", 5893 + "windows-core 0.61.2", 5949 5894 ] 5950 5895 5951 5896 [[package]] ··· 5972 5917 5973 5918 [[package]] 5974 5919 name = "winapi-util" 5975 - version = "0.1.9" 5920 + version = "0.1.11" 5976 5921 source = "registry+https://github.com/rust-lang/crates.io-index" 5977 - checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 5922 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 5978 5923 dependencies = [ 5979 - "windows-sys 0.59.0", 5924 + "windows-sys 0.61.2", 5980 5925 ] 5981 5926 5982 5927 [[package]] ··· 5991 5936 source = "registry+https://github.com/rust-lang/crates.io-index" 5992 5937 checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" 5993 5938 dependencies = [ 5994 - "objc2 0.6.1", 5939 + "objc2 0.6.3", 5995 5940 "objc2-app-kit", 5996 5941 "objc2-core-foundation", 5997 - "objc2-foundation 0.3.1", 5942 + "objc2-foundation 0.3.2", 5998 5943 "raw-window-handle", 5999 5944 "windows-sys 0.59.0", 6000 5945 "windows-version", ··· 6007 5952 checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 6008 5953 dependencies = [ 6009 5954 "windows-collections", 6010 - "windows-core", 5955 + "windows-core 0.61.2", 6011 5956 "windows-future", 6012 - "windows-link", 5957 + "windows-link 0.1.3", 6013 5958 "windows-numerics", 6014 5959 ] 6015 5960 ··· 6019 5964 source = "registry+https://github.com/rust-lang/crates.io-index" 6020 5965 checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 6021 5966 dependencies = [ 6022 - "windows-core", 5967 + "windows-core 0.61.2", 6023 5968 ] 6024 5969 6025 5970 [[package]] ··· 6030 5975 dependencies = [ 6031 5976 "windows-implement", 6032 5977 "windows-interface", 6033 - "windows-link", 6034 - "windows-result", 6035 - "windows-strings", 5978 + "windows-link 0.1.3", 5979 + "windows-result 0.3.4", 5980 + "windows-strings 0.4.2", 5981 + ] 5982 + 5983 + [[package]] 5984 + name = "windows-core" 5985 + version = "0.62.2" 5986 + source = "registry+https://github.com/rust-lang/crates.io-index" 5987 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 5988 + dependencies = [ 5989 + "windows-implement", 5990 + "windows-interface", 5991 + "windows-link 0.2.1", 5992 + "windows-result 0.4.1", 5993 + "windows-strings 0.5.1", 6036 5994 ] 6037 5995 6038 5996 [[package]] ··· 6041 5999 source = "registry+https://github.com/rust-lang/crates.io-index" 6042 6000 checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 6043 6001 dependencies = [ 6044 - "windows-core", 6045 - "windows-link", 6002 + "windows-core 0.61.2", 6003 + "windows-link 0.1.3", 6046 6004 "windows-threading", 6047 6005 ] 6048 6006 6049 6007 [[package]] 6050 6008 name = "windows-implement" 6051 - version = "0.60.0" 6009 + version = "0.60.2" 6052 6010 source = "registry+https://github.com/rust-lang/crates.io-index" 6053 - checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 6011 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 6054 6012 dependencies = [ 6055 6013 "proc-macro2", 6056 6014 "quote", 6057 - "syn 2.0.104", 6015 + "syn 2.0.109", 6058 6016 ] 6059 6017 6060 6018 [[package]] 6061 6019 name = "windows-interface" 6062 - version = "0.59.1" 6020 + version = "0.59.3" 6063 6021 source = "registry+https://github.com/rust-lang/crates.io-index" 6064 - checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 6022 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 6065 6023 dependencies = [ 6066 6024 "proc-macro2", 6067 6025 "quote", 6068 - "syn 2.0.104", 6026 + "syn 2.0.109", 6069 6027 ] 6070 6028 6071 6029 [[package]] ··· 6075 6033 checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 6076 6034 6077 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]] 6078 6042 name = "windows-numerics" 6079 6043 version = "0.2.0" 6080 6044 source = "registry+https://github.com/rust-lang/crates.io-index" 6081 6045 checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 6082 6046 dependencies = [ 6083 - "windows-core", 6084 - "windows-link", 6047 + "windows-core 0.61.2", 6048 + "windows-link 0.1.3", 6085 6049 ] 6086 6050 6087 6051 [[package]] ··· 6090 6054 source = "registry+https://github.com/rust-lang/crates.io-index" 6091 6055 checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 6092 6056 dependencies = [ 6093 - "windows-link", 6094 - "windows-result", 6095 - "windows-strings", 6057 + "windows-link 0.1.3", 6058 + "windows-result 0.3.4", 6059 + "windows-strings 0.4.2", 6096 6060 ] 6097 6061 6098 6062 [[package]] ··· 6101 6065 source = "registry+https://github.com/rust-lang/crates.io-index" 6102 6066 checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 6103 6067 dependencies = [ 6104 - "windows-link", 6068 + "windows-link 0.1.3", 6069 + ] 6070 + 6071 + [[package]] 6072 + name = "windows-result" 6073 + version = "0.4.1" 6074 + source = "registry+https://github.com/rust-lang/crates.io-index" 6075 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 6076 + dependencies = [ 6077 + "windows-link 0.2.1", 6105 6078 ] 6106 6079 6107 6080 [[package]] ··· 6110 6083 source = "registry+https://github.com/rust-lang/crates.io-index" 6111 6084 checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 6112 6085 dependencies = [ 6113 - "windows-link", 6086 + "windows-link 0.1.3", 6114 6087 ] 6115 6088 6116 6089 [[package]] 6117 - name = "windows-sys" 6118 - version = "0.45.0" 6090 + name = "windows-strings" 6091 + version = "0.5.1" 6119 6092 source = "registry+https://github.com/rust-lang/crates.io-index" 6120 - checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6093 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 6121 6094 dependencies = [ 6122 - "windows-targets 0.42.2", 6095 + "windows-link 0.2.1", 6123 6096 ] 6124 6097 6125 6098 [[package]] 6126 6099 name = "windows-sys" 6127 - version = "0.48.0" 6100 + version = "0.45.0" 6128 6101 source = "registry+https://github.com/rust-lang/crates.io-index" 6129 - checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 6102 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6130 6103 dependencies = [ 6131 - "windows-targets 0.48.5", 6104 + "windows-targets 0.42.2", 6132 6105 ] 6133 6106 6134 6107 [[package]] ··· 6155 6128 source = "registry+https://github.com/rust-lang/crates.io-index" 6156 6129 checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 6157 6130 dependencies = [ 6158 - "windows-targets 0.53.3", 6131 + "windows-targets 0.53.5", 6132 + ] 6133 + 6134 + [[package]] 6135 + name = "windows-sys" 6136 + version = "0.61.2" 6137 + source = "registry+https://github.com/rust-lang/crates.io-index" 6138 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 6139 + dependencies = [ 6140 + "windows-link 0.2.1", 6159 6141 ] 6160 6142 6161 6143 [[package]] ··· 6175 6157 6176 6158 [[package]] 6177 6159 name = "windows-targets" 6178 - version = "0.48.5" 6179 - source = "registry+https://github.com/rust-lang/crates.io-index" 6180 - checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 6181 - dependencies = [ 6182 - "windows_aarch64_gnullvm 0.48.5", 6183 - "windows_aarch64_msvc 0.48.5", 6184 - "windows_i686_gnu 0.48.5", 6185 - "windows_i686_msvc 0.48.5", 6186 - "windows_x86_64_gnu 0.48.5", 6187 - "windows_x86_64_gnullvm 0.48.5", 6188 - "windows_x86_64_msvc 0.48.5", 6189 - ] 6190 - 6191 - [[package]] 6192 - name = "windows-targets" 6193 6160 version = "0.52.6" 6194 6161 source = "registry+https://github.com/rust-lang/crates.io-index" 6195 6162 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" ··· 6206 6173 6207 6174 [[package]] 6208 6175 name = "windows-targets" 6209 - version = "0.53.3" 6176 + version = "0.53.5" 6210 6177 source = "registry+https://github.com/rust-lang/crates.io-index" 6211 - checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 6178 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 6212 6179 dependencies = [ 6213 - "windows-link", 6214 - "windows_aarch64_gnullvm 0.53.0", 6215 - "windows_aarch64_msvc 0.53.0", 6216 - "windows_i686_gnu 0.53.0", 6217 - "windows_i686_gnullvm 0.53.0", 6218 - "windows_i686_msvc 0.53.0", 6219 - "windows_x86_64_gnu 0.53.0", 6220 - "windows_x86_64_gnullvm 0.53.0", 6221 - "windows_x86_64_msvc 0.53.0", 6180 + "windows-link 0.2.1", 6181 + "windows_aarch64_gnullvm 0.53.1", 6182 + "windows_aarch64_msvc 0.53.1", 6183 + "windows_i686_gnu 0.53.1", 6184 + "windows_i686_gnullvm 0.53.1", 6185 + "windows_i686_msvc 0.53.1", 6186 + "windows_x86_64_gnu 0.53.1", 6187 + "windows_x86_64_gnullvm 0.53.1", 6188 + "windows_x86_64_msvc 0.53.1", 6222 6189 ] 6223 6190 6224 6191 [[package]] ··· 6227 6194 source = "registry+https://github.com/rust-lang/crates.io-index" 6228 6195 checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6229 6196 dependencies = [ 6230 - "windows-link", 6197 + "windows-link 0.1.3", 6231 6198 ] 6232 6199 6233 6200 [[package]] 6234 6201 name = "windows-version" 6235 - version = "0.1.4" 6202 + version = "0.1.7" 6236 6203 source = "registry+https://github.com/rust-lang/crates.io-index" 6237 - checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" 6204 + checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" 6238 6205 dependencies = [ 6239 - "windows-link", 6206 + "windows-link 0.2.1", 6240 6207 ] 6241 6208 6242 6209 [[package]] ··· 6244 6211 version = "0.42.2" 6245 6212 source = "registry+https://github.com/rust-lang/crates.io-index" 6246 6213 checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 6247 - 6248 - [[package]] 6249 - name = "windows_aarch64_gnullvm" 6250 - version = "0.48.5" 6251 - source = "registry+https://github.com/rust-lang/crates.io-index" 6252 - checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 6253 6214 6254 6215 [[package]] 6255 6216 name = "windows_aarch64_gnullvm" ··· 6259 6220 6260 6221 [[package]] 6261 6222 name = "windows_aarch64_gnullvm" 6262 - version = "0.53.0" 6223 + version = "0.53.1" 6263 6224 source = "registry+https://github.com/rust-lang/crates.io-index" 6264 - checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 6225 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 6265 6226 6266 6227 [[package]] 6267 6228 name = "windows_aarch64_msvc" ··· 6271 6232 6272 6233 [[package]] 6273 6234 name = "windows_aarch64_msvc" 6274 - version = "0.48.5" 6275 - source = "registry+https://github.com/rust-lang/crates.io-index" 6276 - checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 6277 - 6278 - [[package]] 6279 - name = "windows_aarch64_msvc" 6280 6235 version = "0.52.6" 6281 6236 source = "registry+https://github.com/rust-lang/crates.io-index" 6282 6237 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6283 6238 6284 6239 [[package]] 6285 6240 name = "windows_aarch64_msvc" 6286 - version = "0.53.0" 6241 + version = "0.53.1" 6287 6242 source = "registry+https://github.com/rust-lang/crates.io-index" 6288 - checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 6243 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 6289 6244 6290 6245 [[package]] 6291 6246 name = "windows_i686_gnu" ··· 6295 6250 6296 6251 [[package]] 6297 6252 name = "windows_i686_gnu" 6298 - version = "0.48.5" 6299 - source = "registry+https://github.com/rust-lang/crates.io-index" 6300 - checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 6301 - 6302 - [[package]] 6303 - name = "windows_i686_gnu" 6304 6253 version = "0.52.6" 6305 6254 source = "registry+https://github.com/rust-lang/crates.io-index" 6306 6255 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6307 6256 6308 6257 [[package]] 6309 6258 name = "windows_i686_gnu" 6310 - version = "0.53.0" 6259 + version = "0.53.1" 6311 6260 source = "registry+https://github.com/rust-lang/crates.io-index" 6312 - checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 6261 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 6313 6262 6314 6263 [[package]] 6315 6264 name = "windows_i686_gnullvm" ··· 6319 6268 6320 6269 [[package]] 6321 6270 name = "windows_i686_gnullvm" 6322 - version = "0.53.0" 6271 + version = "0.53.1" 6323 6272 source = "registry+https://github.com/rust-lang/crates.io-index" 6324 - checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 6273 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 6325 6274 6326 6275 [[package]] 6327 6276 name = "windows_i686_msvc" ··· 6331 6280 6332 6281 [[package]] 6333 6282 name = "windows_i686_msvc" 6334 - version = "0.48.5" 6335 - source = "registry+https://github.com/rust-lang/crates.io-index" 6336 - checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 6337 - 6338 - [[package]] 6339 - name = "windows_i686_msvc" 6340 6283 version = "0.52.6" 6341 6284 source = "registry+https://github.com/rust-lang/crates.io-index" 6342 6285 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6343 6286 6344 6287 [[package]] 6345 6288 name = "windows_i686_msvc" 6346 - version = "0.53.0" 6289 + version = "0.53.1" 6347 6290 source = "registry+https://github.com/rust-lang/crates.io-index" 6348 - checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 6291 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 6349 6292 6350 6293 [[package]] 6351 6294 name = "windows_x86_64_gnu" ··· 6355 6298 6356 6299 [[package]] 6357 6300 name = "windows_x86_64_gnu" 6358 - version = "0.48.5" 6359 - source = "registry+https://github.com/rust-lang/crates.io-index" 6360 - checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 6361 - 6362 - [[package]] 6363 - name = "windows_x86_64_gnu" 6364 6301 version = "0.52.6" 6365 6302 source = "registry+https://github.com/rust-lang/crates.io-index" 6366 6303 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6367 6304 6368 6305 [[package]] 6369 6306 name = "windows_x86_64_gnu" 6370 - version = "0.53.0" 6307 + version = "0.53.1" 6371 6308 source = "registry+https://github.com/rust-lang/crates.io-index" 6372 - checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 6309 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 6373 6310 6374 6311 [[package]] 6375 6312 name = "windows_x86_64_gnullvm" ··· 6379 6316 6380 6317 [[package]] 6381 6318 name = "windows_x86_64_gnullvm" 6382 - version = "0.48.5" 6383 - source = "registry+https://github.com/rust-lang/crates.io-index" 6384 - checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 6385 - 6386 - [[package]] 6387 - name = "windows_x86_64_gnullvm" 6388 6319 version = "0.52.6" 6389 6320 source = "registry+https://github.com/rust-lang/crates.io-index" 6390 6321 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6391 6322 6392 6323 [[package]] 6393 6324 name = "windows_x86_64_gnullvm" 6394 - version = "0.53.0" 6325 + version = "0.53.1" 6395 6326 source = "registry+https://github.com/rust-lang/crates.io-index" 6396 - checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 6327 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 6397 6328 6398 6329 [[package]] 6399 6330 name = "windows_x86_64_msvc" ··· 6403 6334 6404 6335 [[package]] 6405 6336 name = "windows_x86_64_msvc" 6406 - version = "0.48.5" 6407 - source = "registry+https://github.com/rust-lang/crates.io-index" 6408 - checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 6409 - 6410 - [[package]] 6411 - name = "windows_x86_64_msvc" 6412 6337 version = "0.52.6" 6413 6338 source = "registry+https://github.com/rust-lang/crates.io-index" 6414 6339 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6415 6340 6416 6341 [[package]] 6417 6342 name = "windows_x86_64_msvc" 6418 - version = "0.53.0" 6343 + version = "0.53.1" 6419 6344 source = "registry+https://github.com/rust-lang/crates.io-index" 6420 - checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 6345 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 6421 6346 6422 6347 [[package]] 6423 6348 name = "winnow" ··· 6430 6355 6431 6356 [[package]] 6432 6357 name = "winnow" 6433 - version = "0.7.12" 6358 + version = "0.7.13" 6434 6359 source = "registry+https://github.com/rust-lang/crates.io-index" 6435 - checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" 6360 + checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 6361 + dependencies = [ 6362 + "memchr", 6363 + ] 6436 6364 6437 6365 [[package]] 6438 6366 name = "winreg" ··· 6445 6373 ] 6446 6374 6447 6375 [[package]] 6448 - name = "wit-bindgen-rt" 6449 - version = "0.39.0" 6376 + name = "wit-bindgen" 6377 + version = "0.46.0" 6450 6378 source = "registry+https://github.com/rust-lang/crates.io-index" 6451 - checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 6452 - dependencies = [ 6453 - "bitflags 2.9.1", 6454 - ] 6379 + checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 6455 6380 6456 6381 [[package]] 6457 6382 name = "writeable" 6458 - version = "0.6.1" 6383 + version = "0.6.2" 6459 6384 source = "registry+https://github.com/rust-lang/crates.io-index" 6460 - checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 6385 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 6461 6386 6462 6387 [[package]] 6463 6388 name = "wry" 6464 - version = "0.52.1" 6389 + version = "0.53.5" 6465 6390 source = "registry+https://github.com/rust-lang/crates.io-index" 6466 - checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9" 6391 + checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" 6467 6392 dependencies = [ 6468 6393 "base64 0.22.1", 6469 - "block2 0.6.1", 6394 + "block2 0.6.2", 6470 6395 "cookie", 6471 6396 "crossbeam-channel", 6397 + "dirs", 6472 6398 "dpi", 6473 6399 "dunce", 6474 6400 "gdkx11", ··· 6480 6406 "kuchikiki", 6481 6407 "libc", 6482 6408 "ndk", 6483 - "objc2 0.6.1", 6409 + "objc2 0.6.3", 6484 6410 "objc2-app-kit", 6485 6411 "objc2-core-foundation", 6486 - "objc2-foundation 0.3.1", 6412 + "objc2-foundation 0.3.2", 6487 6413 "objc2-ui-kit", 6488 6414 "objc2-web-kit", 6489 6415 "once_cell", ··· 6492 6418 "sha2", 6493 6419 "soup3", 6494 6420 "tao-macros", 6495 - "thiserror 2.0.12", 6421 + "thiserror 2.0.17", 6496 6422 "url", 6497 6423 "webkit2gtk", 6498 6424 "webkit2gtk-sys", 6499 6425 "webview2-com", 6500 6426 "windows", 6501 - "windows-core", 6427 + "windows-core 0.61.2", 6502 6428 "windows-version", 6503 6429 "x11-dl", 6504 6430 ] ··· 6526 6452 6527 6453 [[package]] 6528 6454 name = "x11rb" 6529 - version = "0.13.1" 6455 + version = "0.13.2" 6530 6456 source = "registry+https://github.com/rust-lang/crates.io-index" 6531 - checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 6457 + checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 6532 6458 dependencies = [ 6533 6459 "gethostname", 6534 - "rustix 0.38.44", 6460 + "rustix", 6535 6461 "x11rb-protocol", 6536 6462 ] 6537 6463 6538 6464 [[package]] 6539 6465 name = "x11rb-protocol" 6540 - version = "0.13.1" 6466 + version = "0.13.2" 6541 6467 source = "registry+https://github.com/rust-lang/crates.io-index" 6542 - checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 6543 - 6544 - [[package]] 6545 - name = "xdg-home" 6546 - version = "1.3.0" 6547 - source = "registry+https://github.com/rust-lang/crates.io-index" 6548 - checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" 6549 - dependencies = [ 6550 - "libc", 6551 - "windows-sys 0.59.0", 6552 - ] 6468 + checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" 6553 6469 6554 6470 [[package]] 6555 6471 name = "yoke" 6556 - version = "0.8.0" 6472 + version = "0.8.1" 6557 6473 source = "registry+https://github.com/rust-lang/crates.io-index" 6558 - checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 6474 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 6559 6475 dependencies = [ 6560 - "serde", 6561 6476 "stable_deref_trait", 6562 6477 "yoke-derive", 6563 6478 "zerofrom", ··· 6565 6480 6566 6481 [[package]] 6567 6482 name = "yoke-derive" 6568 - version = "0.8.0" 6483 + version = "0.8.1" 6569 6484 source = "registry+https://github.com/rust-lang/crates.io-index" 6570 - checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 6485 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 6571 6486 dependencies = [ 6572 6487 "proc-macro2", 6573 6488 "quote", 6574 - "syn 2.0.104", 6489 + "syn 2.0.109", 6575 6490 "synstructure", 6576 6491 ] 6577 6492 6578 6493 [[package]] 6579 6494 name = "zbus" 6580 - version = "4.0.1" 6495 + version = "5.12.0" 6581 6496 source = "registry+https://github.com/rust-lang/crates.io-index" 6582 - checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" 6497 + checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" 6583 6498 dependencies = [ 6584 6499 "async-broadcast", 6585 6500 "async-executor", 6586 - "async-fs", 6587 6501 "async-io", 6588 6502 "async-lock", 6589 6503 "async-process", ··· 6591 6505 "async-task", 6592 6506 "async-trait", 6593 6507 "blocking", 6594 - "derivative", 6595 6508 "enumflags2", 6596 6509 "event-listener", 6597 6510 "futures-core", 6598 - "futures-sink", 6599 - "futures-util", 6511 + "futures-lite", 6600 6512 "hex", 6601 6513 "nix", 6602 6514 "ordered-stream", 6603 - "rand 0.8.5", 6604 6515 "serde", 6605 6516 "serde_repr", 6606 - "sha1", 6607 - "static_assertions", 6608 6517 "tracing", 6609 6518 "uds_windows", 6610 - "windows-sys 0.52.0", 6611 - "xdg-home", 6519 + "uuid", 6520 + "windows-sys 0.61.2", 6521 + "winnow 0.7.13", 6612 6522 "zbus_macros", 6613 6523 "zbus_names", 6614 6524 "zvariant", ··· 6616 6526 6617 6527 [[package]] 6618 6528 name = "zbus_macros" 6619 - version = "4.0.1" 6529 + version = "5.12.0" 6620 6530 source = "registry+https://github.com/rust-lang/crates.io-index" 6621 - checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" 6531 + checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" 6622 6532 dependencies = [ 6623 - "proc-macro-crate 1.3.1", 6533 + "proc-macro-crate 3.4.0", 6624 6534 "proc-macro2", 6625 6535 "quote", 6626 - "regex", 6627 - "syn 1.0.109", 6536 + "syn 2.0.109", 6537 + "zbus_names", 6538 + "zvariant", 6628 6539 "zvariant_utils", 6629 6540 ] 6630 6541 6631 6542 [[package]] 6632 6543 name = "zbus_names" 6633 - version = "3.0.0" 6544 + version = "4.2.0" 6634 6545 source = "registry+https://github.com/rust-lang/crates.io-index" 6635 - checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" 6546 + checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 6636 6547 dependencies = [ 6637 6548 "serde", 6638 6549 "static_assertions", 6550 + "winnow 0.7.13", 6639 6551 "zvariant", 6640 6552 ] 6641 6553 6642 6554 [[package]] 6643 6555 name = "zerocopy" 6644 - version = "0.8.26" 6556 + version = "0.8.27" 6645 6557 source = "registry+https://github.com/rust-lang/crates.io-index" 6646 - checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 6558 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 6647 6559 dependencies = [ 6648 6560 "zerocopy-derive", 6649 6561 ] 6650 6562 6651 6563 [[package]] 6652 6564 name = "zerocopy-derive" 6653 - version = "0.8.26" 6565 + version = "0.8.27" 6654 6566 source = "registry+https://github.com/rust-lang/crates.io-index" 6655 - checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 6567 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 6656 6568 dependencies = [ 6657 6569 "proc-macro2", 6658 6570 "quote", 6659 - "syn 2.0.104", 6571 + "syn 2.0.109", 6660 6572 ] 6661 6573 6662 6574 [[package]] ··· 6676 6588 dependencies = [ 6677 6589 "proc-macro2", 6678 6590 "quote", 6679 - "syn 2.0.104", 6591 + "syn 2.0.109", 6680 6592 "synstructure", 6681 6593 ] 6682 6594 6683 6595 [[package]] 6684 6596 name = "zeroize" 6685 - version = "1.8.1" 6597 + version = "1.8.2" 6686 6598 source = "registry+https://github.com/rust-lang/crates.io-index" 6687 - checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 6599 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 6688 6600 6689 6601 [[package]] 6690 6602 name = "zerotrie" 6691 - version = "0.2.2" 6603 + version = "0.2.3" 6692 6604 source = "registry+https://github.com/rust-lang/crates.io-index" 6693 - checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 6605 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 6694 6606 dependencies = [ 6695 6607 "displaydoc", 6696 6608 "yoke", ··· 6699 6611 6700 6612 [[package]] 6701 6613 name = "zerovec" 6702 - version = "0.11.2" 6614 + version = "0.11.5" 6703 6615 source = "registry+https://github.com/rust-lang/crates.io-index" 6704 - checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 6616 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 6705 6617 dependencies = [ 6706 6618 "yoke", 6707 6619 "zerofrom", ··· 6710 6622 6711 6623 [[package]] 6712 6624 name = "zerovec-derive" 6713 - version = "0.11.1" 6625 + version = "0.11.2" 6714 6626 source = "registry+https://github.com/rust-lang/crates.io-index" 6715 - checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 6627 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 6716 6628 dependencies = [ 6717 6629 "proc-macro2", 6718 6630 "quote", 6719 - "syn 2.0.104", 6631 + "syn 2.0.109", 6720 6632 ] 6721 6633 6722 6634 [[package]] ··· 6736 6648 6737 6649 [[package]] 6738 6650 name = "zune-jpeg" 6739 - version = "0.4.20" 6651 + version = "0.4.21" 6740 6652 source = "registry+https://github.com/rust-lang/crates.io-index" 6741 - checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" 6653 + checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 6742 6654 dependencies = [ 6743 6655 "zune-core", 6744 6656 ] 6745 6657 6746 6658 [[package]] 6747 6659 name = "zvariant" 6748 - version = "4.0.0" 6660 + version = "5.8.0" 6749 6661 source = "registry+https://github.com/rust-lang/crates.io-index" 6750 - checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" 6662 + checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" 6751 6663 dependencies = [ 6752 6664 "endi", 6753 6665 "enumflags2", 6754 6666 "serde", 6755 - "static_assertions", 6667 + "winnow 0.7.13", 6756 6668 "zvariant_derive", 6669 + "zvariant_utils", 6757 6670 ] 6758 6671 6759 6672 [[package]] 6760 6673 name = "zvariant_derive" 6761 - version = "4.0.0" 6674 + version = "5.8.0" 6762 6675 source = "registry+https://github.com/rust-lang/crates.io-index" 6763 - checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" 6676 + checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" 6764 6677 dependencies = [ 6765 - "proc-macro-crate 1.3.1", 6678 + "proc-macro-crate 3.4.0", 6766 6679 "proc-macro2", 6767 6680 "quote", 6768 - "syn 1.0.109", 6681 + "syn 2.0.109", 6769 6682 "zvariant_utils", 6770 6683 ] 6771 6684 6772 6685 [[package]] 6773 6686 name = "zvariant_utils" 6774 - version = "1.1.0" 6687 + version = "3.2.1" 6775 6688 source = "registry+https://github.com/rust-lang/crates.io-index" 6776 - checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" 6689 + checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 6777 6690 dependencies = [ 6778 6691 "proc-macro2", 6779 6692 "quote", 6780 - "syn 1.0.109", 6693 + "serde", 6694 + "syn 2.0.109", 6695 + "winnow 0.7.13", 6781 6696 ]
+14 -16
src-tauri/Cargo.toml
··· 1 1 [package] 2 2 name = "VRChatPhotoManager" 3 - version = "0.2.5" 3 + version = "0.2.7-hot1" 4 4 description = "VRChat Photo Manager" 5 5 authors = ["_phaz"] 6 6 edition = "2021" ··· 11 11 tauri-build = { version = "2.0.0-rc", features = [] } 12 12 13 13 [dependencies] 14 - tauri = { version = "2.0.0-rc", features = ["tray-icon", "image-png", "devtools"] } 14 + tauri = { version = "2.9", features = [ "tray-icon", "image-png", "devtools" ] } 15 15 serde = { version = "1.0", features = ["derive"] } 16 16 serde_json = "1.0" 17 - open = "5.1.2" 18 - tauri-plugin-deep-link = "2.0.1" 19 - dirs = "5.0.1" 20 - notify = "6.1.1" 21 - regex = "1.10.4" 17 + open = "5.3" 18 + dirs = "6.0" 19 + notify = "8.2" 20 + regex = "1.12" 22 21 reqwest = { version = "0.12", features = ["blocking"] } 23 - tauri-plugin-single-instance = { version = "2.0.0", features = ["deep-link"] } 24 - tauri-plugin-shell = "2.0.0-rc.2" 25 - tauri-plugin-http = "2.0.0-rc.0" 26 - tauri-plugin-process = "2.0.0-rc.0" 27 - image = "0.25.2" 28 - fast_image_resize = { version = "4.2.1", features = [ "image" ] } 29 - arboard = "3.6.0" 30 - 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" 31 29 [target.'cfg(windows)'.dependencies] 32 - mslnk = { version = "0.1.8" } 30 + mslnk = { version = "0.1" } 33 31 34 32 [features] 35 33 # this feature is used for production builds or when `devPath` points to the filesystem
+1 -1
src-tauri/gen/schemas/acl-manifests.json
··· 1 - {"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"deep-link":{"default_permission":{"identifier":"default","description":"Allows reading the opened deep link via the get_current command","permissions":["allow-get-current"]},"permissions":{"allow-get-current":{"identifier":"allow-get-current","description":"Enables the get_current command without any pre-configured scope.","commands":{"allow":["get_current"],"deny":[]}},"allow-is-registered":{"identifier":"allow-is-registered","description":"Enables the is_registered command without any pre-configured scope.","commands":{"allow":["is_registered"],"deny":[]}},"allow-register":{"identifier":"allow-register","description":"Enables the register command without any pre-configured scope.","commands":{"allow":["register"],"deny":[]}},"allow-unregister":{"identifier":"allow-unregister","description":"Enables the unregister command without any pre-configured scope.","commands":{"allow":["unregister"],"deny":[]}},"deny-get-current":{"identifier":"deny-get-current","description":"Denies the get_current command without any pre-configured scope.","commands":{"allow":[],"deny":["get_current"]}},"deny-is-registered":{"identifier":"deny-is-registered","description":"Denies the is_registered command without any pre-configured scope.","commands":{"allow":[],"deny":["is_registered"]}},"deny-register":{"identifier":"deny-register","description":"Denies the register command without any pre-configured scope.","commands":{"allow":[],"deny":["register"]}},"deny-unregister":{"identifier":"deny-unregister","description":"Denies the unregister command without any pre-configured scope.","commands":{"allow":[],"deny":["unregister"]}}},"permission_sets":{},"global_scope_schema":null},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-read-body","allow-fetch-send"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}} 1 + {"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type","allow-register-listener","allow-remove-listener"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-register-listener":{"identifier":"allow-register-listener","description":"Enables the register_listener command without any pre-configured scope.","commands":{"allow":["register_listener"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-remove-listener":{"identifier":"allow-remove-listener","description":"Enables the remove_listener command without any pre-configured scope.","commands":{"allow":["remove_listener"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-register-listener":{"identifier":"deny-register-listener","description":"Denies the register_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["register_listener"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-remove-listener":{"identifier":"deny-remove-listener","description":"Denies the remove_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_listener"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-focusable":{"identifier":"allow-set-focusable","description":"Enables the set_focusable command without any pre-configured scope.","commands":{"allow":["set_focusable"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-simple-fullscreen":{"identifier":"allow-set-simple-fullscreen","description":"Enables the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":["set_simple_fullscreen"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-focusable":{"identifier":"deny-set-focusable","description":"Denies the set_focusable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focusable"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-simple-fullscreen":{"identifier":"deny-set-simple-fullscreen","description":"Denies the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_simple_fullscreen"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-read-body","allow-fetch-send"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}}
+50 -56
src-tauri/gen/schemas/desktop-schema.json
··· 519 519 "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" 520 520 }, 521 521 { 522 - "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", 522 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 523 "type": "string", 524 524 "const": "core:app:default", 525 - "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" 525 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`" 526 526 }, 527 527 { 528 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 568 }, 569 569 { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 570 576 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 577 "type": "string", 572 578 "const": "core:app:allow-remove-data-store", 573 579 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 580 }, 575 581 { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 + }, 587 + { 576 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 589 "type": "string", 578 590 "const": "core:app:allow-set-app-theme", ··· 639 651 "markdownDescription": "Denies the name command without any pre-configured scope." 640 652 }, 641 653 { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 642 660 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 661 "type": "string", 644 662 "const": "core:app:deny-remove-data-store", 645 663 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 646 670 }, 647 671 { 648 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 1851 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 1852 }, 1829 1853 { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 + }, 1859 + { 1830 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 1861 "type": "string", 1832 1862 "const": "core:window:allow-set-fullscreen", ··· 1897 1927 "type": "string", 1898 1928 "const": "core:window:allow-set-shadow", 1899 1929 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1900 1936 }, 1901 1937 { 1902 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 2307 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 2308 }, 2273 2309 { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 + }, 2315 + { 2274 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 2317 "type": "string", 2276 2318 "const": "core:window:deny-set-fullscreen", ··· 2341 2383 "type": "string", 2342 2384 "const": "core:window:deny-set-shadow", 2343 2385 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2344 2392 }, 2345 2393 { 2346 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 2479 "type": "string", 2432 2480 "const": "core:window:deny-unminimize", 2433 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2434 - }, 2435 - { 2436 - "description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`", 2437 - "type": "string", 2438 - "const": "deep-link:default", 2439 - "markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`" 2440 - }, 2441 - { 2442 - "description": "Enables the get_current command without any pre-configured scope.", 2443 - "type": "string", 2444 - "const": "deep-link:allow-get-current", 2445 - "markdownDescription": "Enables the get_current command without any pre-configured scope." 2446 - }, 2447 - { 2448 - "description": "Enables the is_registered command without any pre-configured scope.", 2449 - "type": "string", 2450 - "const": "deep-link:allow-is-registered", 2451 - "markdownDescription": "Enables the is_registered command without any pre-configured scope." 2452 - }, 2453 - { 2454 - "description": "Enables the register command without any pre-configured scope.", 2455 - "type": "string", 2456 - "const": "deep-link:allow-register", 2457 - "markdownDescription": "Enables the register command without any pre-configured scope." 2458 - }, 2459 - { 2460 - "description": "Enables the unregister command without any pre-configured scope.", 2461 - "type": "string", 2462 - "const": "deep-link:allow-unregister", 2463 - "markdownDescription": "Enables the unregister command without any pre-configured scope." 2464 - }, 2465 - { 2466 - "description": "Denies the get_current command without any pre-configured scope.", 2467 - "type": "string", 2468 - "const": "deep-link:deny-get-current", 2469 - "markdownDescription": "Denies the get_current command without any pre-configured scope." 2470 - }, 2471 - { 2472 - "description": "Denies the is_registered command without any pre-configured scope.", 2473 - "type": "string", 2474 - "const": "deep-link:deny-is-registered", 2475 - "markdownDescription": "Denies the is_registered command without any pre-configured scope." 2476 - }, 2477 - { 2478 - "description": "Denies the register command without any pre-configured scope.", 2479 - "type": "string", 2480 - "const": "deep-link:deny-register", 2481 - "markdownDescription": "Denies the register command without any pre-configured scope." 2482 - }, 2483 - { 2484 - "description": "Denies the unregister command without any pre-configured scope.", 2485 - "type": "string", 2486 - "const": "deep-link:deny-unregister", 2487 - "markdownDescription": "Denies the unregister command without any pre-configured scope." 2488 2482 }, 2489 2483 { 2490 2484 "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
+50 -56
src-tauri/gen/schemas/linux-schema.json
··· 519 519 "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" 520 520 }, 521 521 { 522 - "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", 522 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 523 "type": "string", 524 524 "const": "core:app:default", 525 - "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" 525 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`" 526 526 }, 527 527 { 528 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 568 }, 569 569 { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 570 576 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 577 "type": "string", 572 578 "const": "core:app:allow-remove-data-store", 573 579 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 580 }, 575 581 { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 + }, 587 + { 576 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 589 "type": "string", 578 590 "const": "core:app:allow-set-app-theme", ··· 639 651 "markdownDescription": "Denies the name command without any pre-configured scope." 640 652 }, 641 653 { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 642 660 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 661 "type": "string", 644 662 "const": "core:app:deny-remove-data-store", 645 663 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 646 670 }, 647 671 { 648 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 1851 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 1852 }, 1829 1853 { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 + }, 1859 + { 1830 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 1861 "type": "string", 1832 1862 "const": "core:window:allow-set-fullscreen", ··· 1897 1927 "type": "string", 1898 1928 "const": "core:window:allow-set-shadow", 1899 1929 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1900 1936 }, 1901 1937 { 1902 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 2307 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 2308 }, 2273 2309 { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 + }, 2315 + { 2274 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 2317 "type": "string", 2276 2318 "const": "core:window:deny-set-fullscreen", ··· 2341 2383 "type": "string", 2342 2384 "const": "core:window:deny-set-shadow", 2343 2385 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2344 2392 }, 2345 2393 { 2346 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 2479 "type": "string", 2432 2480 "const": "core:window:deny-unminimize", 2433 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2434 - }, 2435 - { 2436 - "description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`", 2437 - "type": "string", 2438 - "const": "deep-link:default", 2439 - "markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`" 2440 - }, 2441 - { 2442 - "description": "Enables the get_current command without any pre-configured scope.", 2443 - "type": "string", 2444 - "const": "deep-link:allow-get-current", 2445 - "markdownDescription": "Enables the get_current command without any pre-configured scope." 2446 - }, 2447 - { 2448 - "description": "Enables the is_registered command without any pre-configured scope.", 2449 - "type": "string", 2450 - "const": "deep-link:allow-is-registered", 2451 - "markdownDescription": "Enables the is_registered command without any pre-configured scope." 2452 - }, 2453 - { 2454 - "description": "Enables the register command without any pre-configured scope.", 2455 - "type": "string", 2456 - "const": "deep-link:allow-register", 2457 - "markdownDescription": "Enables the register command without any pre-configured scope." 2458 - }, 2459 - { 2460 - "description": "Enables the unregister command without any pre-configured scope.", 2461 - "type": "string", 2462 - "const": "deep-link:allow-unregister", 2463 - "markdownDescription": "Enables the unregister command without any pre-configured scope." 2464 - }, 2465 - { 2466 - "description": "Denies the get_current command without any pre-configured scope.", 2467 - "type": "string", 2468 - "const": "deep-link:deny-get-current", 2469 - "markdownDescription": "Denies the get_current command without any pre-configured scope." 2470 - }, 2471 - { 2472 - "description": "Denies the is_registered command without any pre-configured scope.", 2473 - "type": "string", 2474 - "const": "deep-link:deny-is-registered", 2475 - "markdownDescription": "Denies the is_registered command without any pre-configured scope." 2476 - }, 2477 - { 2478 - "description": "Denies the register command without any pre-configured scope.", 2479 - "type": "string", 2480 - "const": "deep-link:deny-register", 2481 - "markdownDescription": "Denies the register command without any pre-configured scope." 2482 - }, 2483 - { 2484 - "description": "Denies the unregister command without any pre-configured scope.", 2485 - "type": "string", 2486 - "const": "deep-link:deny-unregister", 2487 - "markdownDescription": "Denies the unregister command without any pre-configured scope." 2488 2482 }, 2489 2483 { 2490 2484 "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
+50 -56
src-tauri/gen/schemas/windows-schema.json
··· 519 519 "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" 520 520 }, 521 521 { 522 - "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", 522 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 523 "type": "string", 524 524 "const": "core:app:default", 525 - "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" 525 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`" 526 526 }, 527 527 { 528 528 "description": "Enables the app_hide command without any pre-configured scope.", ··· 567 567 "markdownDescription": "Enables the name command without any pre-configured scope." 568 568 }, 569 569 { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 570 576 "description": "Enables the remove_data_store command without any pre-configured scope.", 571 577 "type": "string", 572 578 "const": "core:app:allow-remove-data-store", 573 579 "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 574 580 }, 575 581 { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 + }, 587 + { 576 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 577 589 "type": "string", 578 590 "const": "core:app:allow-set-app-theme", ··· 639 651 "markdownDescription": "Denies the name command without any pre-configured scope." 640 652 }, 641 653 { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 642 660 "description": "Denies the remove_data_store command without any pre-configured scope.", 643 661 "type": "string", 644 662 "const": "core:app:deny-remove-data-store", 645 663 "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 646 670 }, 647 671 { 648 672 "description": "Denies the set_app_theme command without any pre-configured scope.", ··· 1827 1851 "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1828 1852 }, 1829 1853 { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 + }, 1859 + { 1830 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1831 1861 "type": "string", 1832 1862 "const": "core:window:allow-set-fullscreen", ··· 1897 1927 "type": "string", 1898 1928 "const": "core:window:allow-set-shadow", 1899 1929 "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1900 1936 }, 1901 1937 { 1902 1938 "description": "Enables the set_size command without any pre-configured scope.", ··· 2271 2307 "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2272 2308 }, 2273 2309 { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 + }, 2315 + { 2274 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2275 2317 "type": "string", 2276 2318 "const": "core:window:deny-set-fullscreen", ··· 2341 2383 "type": "string", 2342 2384 "const": "core:window:deny-set-shadow", 2343 2385 "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2344 2392 }, 2345 2393 { 2346 2394 "description": "Denies the set_size command without any pre-configured scope.", ··· 2431 2479 "type": "string", 2432 2480 "const": "core:window:deny-unminimize", 2433 2481 "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2434 - }, 2435 - { 2436 - "description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`", 2437 - "type": "string", 2438 - "const": "deep-link:default", 2439 - "markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`" 2440 - }, 2441 - { 2442 - "description": "Enables the get_current command without any pre-configured scope.", 2443 - "type": "string", 2444 - "const": "deep-link:allow-get-current", 2445 - "markdownDescription": "Enables the get_current command without any pre-configured scope." 2446 - }, 2447 - { 2448 - "description": "Enables the is_registered command without any pre-configured scope.", 2449 - "type": "string", 2450 - "const": "deep-link:allow-is-registered", 2451 - "markdownDescription": "Enables the is_registered command without any pre-configured scope." 2452 - }, 2453 - { 2454 - "description": "Enables the register command without any pre-configured scope.", 2455 - "type": "string", 2456 - "const": "deep-link:allow-register", 2457 - "markdownDescription": "Enables the register command without any pre-configured scope." 2458 - }, 2459 - { 2460 - "description": "Enables the unregister command without any pre-configured scope.", 2461 - "type": "string", 2462 - "const": "deep-link:allow-unregister", 2463 - "markdownDescription": "Enables the unregister command without any pre-configured scope." 2464 - }, 2465 - { 2466 - "description": "Denies the get_current command without any pre-configured scope.", 2467 - "type": "string", 2468 - "const": "deep-link:deny-get-current", 2469 - "markdownDescription": "Denies the get_current command without any pre-configured scope." 2470 - }, 2471 - { 2472 - "description": "Denies the is_registered command without any pre-configured scope.", 2473 - "type": "string", 2474 - "const": "deep-link:deny-is-registered", 2475 - "markdownDescription": "Denies the is_registered command without any pre-configured scope." 2476 - }, 2477 - { 2478 - "description": "Denies the register command without any pre-configured scope.", 2479 - "type": "string", 2480 - "const": "deep-link:deny-register", 2481 - "markdownDescription": "Denies the register command without any pre-configured scope." 2482 - }, 2483 - { 2484 - "description": "Denies the unregister command without any pre-configured scope.", 2485 - "type": "string", 2486 - "const": "deep-link:deny-unregister", 2487 - "markdownDescription": "Denies the unregister command without any pre-configured scope." 2488 2482 }, 2489 2483 { 2490 2484 "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
+17 -9
src-tauri/src/frontend_calls/change_final_path.rs
··· 1 1 use std::fs; 2 2 3 - #[tauri::command] 4 - pub fn change_final_path(new_path: &str) { 5 - let config_path = dirs::config_dir() 6 - .unwrap() 7 - .join("PhazeDev/VRChatPhotoManager/.photos_path"); 3 + use tauri::{Emitter, State, Window}; 8 4 9 - fs::write(&config_path, new_path.as_bytes()).unwrap(); 5 + use crate::util::cache::Cache; 10 6 7 + #[tauri::command] 8 + pub fn change_final_path(new_path: &str, window: Window, cache: State<Cache>) -> bool { 11 9 match fs::metadata(&new_path) { 12 - Ok(_) => {} 10 + Ok(_) => { 11 + let config_path = dirs::config_dir() 12 + .unwrap() 13 + .join("PhazeDev/VRChatPhotoManager/.photos_path"); 14 + 15 + fs::write(&config_path, new_path.as_bytes()).unwrap(); 16 + cache.insert("photo-path".into(), new_path.to_owned()); 17 + 18 + true 19 + } 13 20 Err(_) => { 14 - fs::create_dir(&new_path).unwrap(); 21 + window.emit("vrcpm-error", "Error Changing Path: Path does not exist.").unwrap(); 22 + false 15 23 } 16 - }; 24 + } 17 25 }
+5 -3
src-tauri/src/frontend_calls/close_splashscreen.rs
··· 1 1 use std::env; 2 - use tauri::{ Emitter, Manager }; 2 + use tauri::{ Emitter, Manager, State }; 3 + 4 + use crate::frontend_calls::config::Config; 3 5 4 6 use super::config::get_config_value_string; 5 7 6 8 #[tauri::command] 7 - pub fn close_splashscreen( window: tauri::Window ) { 9 + pub fn close_splashscreen( window: tauri::Window, config: State<Config> ) { 8 10 let args: Vec<String> = env::args().collect(); 9 11 10 12 let mut show = true; ··· 14 16 } 15 17 } 16 18 17 - let value: String = match get_config_value_string("start-in-bg".to_owned()) { Some(val) => val, None => "false".to_owned() }; 19 + let value: String = match get_config_value_string("start-in-bg".to_owned(), config) { Some(val) => val, None => "false".to_owned() }; 18 20 if value == "true"{ 19 21 show = false; 20 22 }
+43 -22
src-tauri/src/frontend_calls/config.rs
··· 1 - use std::{fs, path::PathBuf}; 1 + use std::{fs, path::PathBuf, sync::Mutex}; 2 2 3 3 use serde_json::Value; 4 + use tauri::State; 4 5 5 6 pub fn get_config_path() -> PathBuf { 6 7 let path = dirs::config_dir() ··· 17 18 path 18 19 } 19 20 20 - #[tauri::command] 21 - pub fn set_config_value_string(key: String, value: String) { 22 - let path = get_config_path(); 21 + pub struct Config{ 22 + config: Mutex<Value> 23 + } 24 + 25 + impl Config{ 26 + pub fn new() -> Config{ 27 + let path = get_config_path(); 28 + let config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 29 + 30 + Config { 31 + config: Mutex::new(config) 32 + } 33 + } 34 + 35 + pub fn set( &self, key: String, value: Value ){ 36 + let mut lock = self.config.lock().unwrap(); 37 + lock[key] = value; 38 + } 39 + 40 + pub fn get( &self, key: String ) -> Value{ 41 + let lock = self.config.lock().unwrap(); 42 + lock[key].clone() 43 + } 44 + 45 + pub fn save( &self ){ 46 + let path = get_config_path(); 47 + let string = serde_json::to_string(&self.config).unwrap(); 23 48 24 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 25 - config[key] = Value::from(value); 49 + fs::write(path, string).unwrap(); 50 + } 51 + } 26 52 27 - fs::write(path, config.to_string()).unwrap(); 53 + #[tauri::command] 54 + pub fn set_config_value_string( key: String, value: String, config: State<Config> ) { 55 + config.set(key, Value::from(value)); 28 56 } 29 57 30 58 #[tauri::command] 31 - pub fn get_config_value_string(key: String) -> Option<String> { 32 - let config: Value = 33 - serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap(); 34 - let string = config[key].as_str(); 59 + pub fn get_config_value_string( key: String, config: State<Config> ) -> Option<String> { 60 + let string = config.get(key); 61 + let string = string.as_str(); 35 62 36 63 if string.is_some() { 37 64 Some(string.unwrap().to_owned()) ··· 41 68 } 42 69 43 70 #[tauri::command] 44 - pub fn set_config_value_int(key: String, value: i64) { 45 - let path = get_config_path(); 46 - 47 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 48 - config[key] = Value::from(value); 49 - 50 - fs::write(path, config.to_string()).unwrap(); 71 + pub fn set_config_value_int( key: String, value: i64, config: State<Config> ) { 72 + config.set(key, Value::from(value)); 51 73 } 52 74 53 75 #[tauri::command] 54 - pub fn get_config_value_int(key: String) -> Option<i64> { 55 - let config: Value = 56 - serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap(); 57 - config[key].as_i64() 76 + pub fn get_config_value_int( key: String, config: State<Config> ) -> Option<i64> { 77 + let string = config.get(key); 78 + string.as_i64() 58 79 }
+4 -4
src-tauri/src/frontend_calls/copy_image.rs
··· 1 - use std::{borrow::Cow, fs::{self, File}, io::BufReader, sync::Mutex}; 1 + use std::{ borrow::Cow, sync::Mutex }; 2 2 3 - use arboard::{Clipboard, ImageData}; 4 - use image::{codecs::png::PngDecoder, EncodableLayout, GenericImageView, ImageDecoder}; 3 + use arboard::{ Clipboard, ImageData }; 4 + use image::GenericImageView; 5 5 use tauri::State; 6 6 7 - use crate::{ frontend_calls::get_user_photos_path::get_user_photos_path, pngmeta::PNGImage, util::cache::Cache }; 7 + use crate::{ frontend_calls::get_user_photos_path::get_user_photos_path, util::cache::Cache }; 8 8 9 9 #[tauri::command] 10 10 pub fn copy_image( path: String, clipboard: State<Mutex<Clipboard>>, cache: State<Cache> ) {
+2 -16
src-tauri/src/frontend_calls/delete_photo.rs
··· 1 1 use tauri::State; 2 2 3 3 use crate::util::cache::Cache; 4 - use std::{ fs, thread, time::Duration }; 4 + use std::{ fs, thread }; 5 5 6 6 // Delete a photo when the users confirms the prompt in the ui 7 7 #[tauri::command] 8 - pub fn delete_photo(path: String, token: String, is_syncing: bool, cache: State<Cache>) { 8 + pub fn delete_photo(path: String, cache: State<Cache>) { 9 9 let photo_path = cache.get("photo-path".into()); 10 10 11 11 thread::spawn(move || { 12 12 let p = photo_path.unwrap() + "/" + &path; 13 13 fs::remove_file(p).unwrap(); 14 - 15 - let photo = path.split("/").last().unwrap(); 16 - 17 - if is_syncing { 18 - let client = reqwest::blocking::Client::new(); 19 - client 20 - .delete(format!( 21 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}&photo={}", 22 - token, photo 23 - )) 24 - .timeout(Duration::from_secs(120)) 25 - .send() 26 - .unwrap(); 27 - } 28 14 }); 29 15 }
+21 -3
src-tauri/src/frontend_calls/load_photo_meta.rs
··· 20 20 let mut buffer = Vec::new(); 21 21 22 22 let _out = file.read_to_end(&mut buffer); 23 - window 24 - .emit("photo_meta_loaded", PNGImage::new(buffer, photo)) 25 - .unwrap(); 23 + let png = PNGImage::new(buffer, photo.clone()); 24 + 25 + if png.is_err(){ 26 + println!("Failed to load: {} => {}", base_dir, png.unwrap_err()); 27 + 28 + window.emit("photo_meta_loaded", PNGImage { 29 + width: 1920, 30 + height: 1080, 31 + bit_depth: 0, 32 + colour_type: 0, 33 + compression_method: 0, 34 + filter_method: 0, 35 + interlace_method: 0, 36 + metadata: "".into(), 37 + error: true, 38 + path: photo 39 + }).unwrap(); 40 + } else{ 41 + println!("Loaded: {}", base_dir); 42 + window.emit("photo_meta_loaded", png.unwrap()).unwrap(); 43 + } 26 44 } 27 45 Err(_) => { 28 46 println!("Cannot read image file: {:?}", base_dir);
+14 -8
src-tauri/src/frontend_calls/load_photos.rs
··· 16 16 let base_dir = cache.get("photo-path".into()).unwrap(); 17 17 18 18 thread::spawn(move || { 19 - 20 19 let mut photos: Vec<path::PathBuf> = Vec::new(); 21 20 let mut size: usize = 0; 22 21 22 + let re = Regex::new(r"^[0-9]{4}-[0-9]{2}$").unwrap(); 23 + 23 24 for folder in fs::read_dir(&base_dir).unwrap() { 24 25 let f = folder.unwrap(); 26 + if !re.is_match(f.file_name().to_str().unwrap()){ continue; } 25 27 26 28 if f.metadata().unwrap().is_dir() { 27 29 for photo in fs::read_dir(f.path()).unwrap() { ··· 30 32 if p.metadata().unwrap().is_file() { 31 33 let fname = p.path(); 32 34 33 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 34 - let re2 = Regex::new( 35 - r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap(); 36 - let re3 = Regex::new("VRChat_[0-9]{4}x[0-9]{4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap(); 37 - 38 35 let name = p.file_name(); 39 36 let name = name.to_str().unwrap(); 40 37 41 - let re3_match = re3.is_match(name); 38 + let re1_match = // This is the current format used by VRChat 39 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(name) || 40 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(name) || 41 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(name); 42 + 43 + let re2_match = // This is the format VRCX uses if you enable renaming photos 44 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(name); 42 45 43 - if re1.is_match(name) || re2.is_match(name) || re3_match { 46 + let re3_match = // This is an old format VRChat used for naming photos 47 + Regex::new(r"(?m)VRChat_[0-9]{3,4}x[0-9]{3,4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap().is_match(name); 48 + 49 + if re1_match || re2_match || re3_match { 44 50 let path = fname.to_path_buf().clone(); 45 51 let metadata = fs::metadata(&path).unwrap(); 46 52
-3
src-tauri/src/frontend_calls/mod.rs
··· 9 9 pub mod load_photos; 10 10 pub mod open_folder; 11 11 pub mod open_url; 12 - pub mod relaunch; 13 - pub mod start_user_auth; 14 12 pub mod start_with_win; 15 - pub mod sync_photos; 16 13 pub mod copy_image;
+19 -4
src-tauri/src/frontend_calls/open_folder.rs
··· 7 7 8 8 #[cfg(target_os = "linux")] 9 9 { 10 - let url = url.replace("\\", "/"); 11 - let mut path: Vec<&str> = url.split("/").collect(); 10 + let path = url.replace("\\", "/"); 11 + 12 + let mut dir_path: Vec<_> = path.split("/").collect(); 13 + dir_path.pop(); 14 + let dir_path = dir_path.join("/"); 15 + 16 + let commands = vec![ 17 + ( "nautilus", vec![ path.clone() ] ), 18 + ( "nemo", vec![ path.clone() ] ), 19 + ( "thunar", vec![ path.clone() ] ), 20 + ( "caja", vec![ "--select".into(), path.clone() ] ), 21 + ( "pcmanfm-qt", vec![ dir_path.clone() ] ), 22 + ( "pcmanfm", vec![ dir_path.clone() ] ), 23 + ( "dolphin", vec![ "--select".into(), path.clone() ] ), 24 + ( "konqueror", vec![ "--select".into(), path.clone() ] ), 25 + ( "xdg-open", vec![ dir_path.clone() ] ) 26 + ]; 12 27 13 - path.pop(); 14 - Command::new("xdg-open").arg(path.join("/")).spawn().unwrap(); 28 + for command in commands{ 29 + if Command::new(command.0).args(command.1).spawn().is_ok() { break; } } 15 30 } 16 31 }
-17
src-tauri/src/frontend_calls/relaunch.rs
··· 1 - use std::process::{ self, Command }; 2 - 3 - #[tauri::command] 4 - pub fn relaunch() { 5 - #[cfg(windows)] 6 - { 7 - let container_folder = dirs::config_dir() 8 - .unwrap() 9 - .join("PhazeDev/VRChatPhotoManager"); 10 - 11 - let mut cmd = Command::new(&container_folder.join("./vrchat-photo-manager.exe")); 12 - cmd.current_dir(container_folder); 13 - cmd.spawn().expect("Cannot run updater"); 14 - 15 - process::exit(0); 16 - } 17 - }
-4
src-tauri/src/frontend_calls/start_user_auth.rs
··· 1 - #[tauri::command] 2 - pub fn start_user_auth() { 3 - open::that("https://photos.phazed.xyz/api/v1/auth").unwrap(); 4 - }
-11
src-tauri/src/frontend_calls/sync_photos.rs
··· 1 - use crate::photosync; 2 - use crate::util::get_photo_path::get_photo_path; 3 - use std::thread; 4 - 5 - // On requested sync the photos to the cloud 6 - #[tauri::command] 7 - pub fn sync_photos(token: String, window: tauri::Window) { 8 - thread::spawn(move || { 9 - photosync::sync_photos(token, get_photo_path(), window); 10 - }); 11 - }
+30 -29
src-tauri/src/main.rs
··· 1 1 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 2 3 3 mod frontend_calls; 4 - mod photosync; 5 4 mod pngmeta; 6 5 mod util; 7 6 mod worldscraper; ··· 16 15 use util::{ cache::Cache, get_photo_path::get_photo_path }; 17 16 use std::{ env, fs, sync::Mutex, thread }; 18 17 use tauri::{ Emitter, Manager, State, WindowEvent }; 19 - use tauri_plugin_deep_link::DeepLinkExt; 20 18 21 - // TODO: Linux support 19 + use crate::frontend_calls::config::{get_config_value_string, Config}; 22 20 23 21 fn main() { 24 22 #[cfg(target_os = "linux")] 25 - std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkit being shit 23 + std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkitgtk being shit 26 24 27 25 let cache = Cache::new(); 28 26 ··· 79 77 80 78 println!("Loading App..."); 81 79 let photos_path = util::get_photo_path::get_photo_path(); 80 + println!("Loading photos from: {:#?}", &photos_path); 82 81 83 82 cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned()); 84 83 ··· 88 87 fs::create_dir(&photos_path).unwrap(); 89 88 } 90 89 }; 91 - 92 - // Updater only supports windows, so don't update if on linux 93 - #[cfg(windows)] 94 - util::check_updates::check_updates(container_folder); 95 90 96 91 // Listen for file updates, store each update in an mpsc channel and send to the frontend 97 92 let (sender, receiver) = std::sync::mpsc::channel(); ··· 103 98 let path = event.paths.first().unwrap(); 104 99 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 105 100 106 - 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(); 107 - let re2 = Regex::new(r"(?m)/VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png/gm").unwrap(); 101 + let re1_match = // This is the current format used by VRChat 102 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) || 103 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) || 104 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name); 108 105 109 - if 110 - re1.is_match(&name) || 111 - re2.is_match(&name) 112 - { 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{ 113 110 sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 114 111 } 115 112 }, ··· 117 114 let path = event.paths.first().unwrap(); 118 115 let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 119 116 120 - 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(); 121 - let re2 = Regex::new(r"(?m)/VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png/gm").unwrap(); 117 + let re1_match = // This is the current format used by VRChat 118 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) || 119 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) || 120 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name); 121 + 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); 122 124 123 - if 124 - re1.is_match(&name) || 125 - re2.is_match(&name) 126 - { 125 + if re1_match || re2_match{ 127 126 thread::sleep(time::Duration::from_millis(1000)); 128 127 sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 129 128 } ··· 146 145 let clipboard = Clipboard::new().unwrap(); 147 146 148 147 tauri::Builder::default() 149 - .plugin(tauri_plugin_single_instance::init(| app, argv, _cwd | { 148 + .plugin(tauri_plugin_single_instance::init(| app, _argv, _cwd | { 150 149 app.get_webview_window("main").unwrap().show().unwrap(); 151 - util::handle_deeplink::handle_deeplink(argv[1].clone(), app); 152 150 })) 153 - .plugin(tauri_plugin_deep_link::init()) 154 151 .plugin(tauri_plugin_process::init()) 155 152 .plugin(tauri_plugin_http::init()) 156 153 .plugin(tauri_plugin_shell::init()) ··· 159 156 util::handle_uri_proto::handle_uri_proto(req, res, cache); 160 157 }) 161 158 .on_window_event(|window, event| match event { 162 - WindowEvent::CloseRequested { api, .. } => { 159 + WindowEvent::CloseRequested { api, .. } => { 160 + let config: State<Config> = window.state(); 161 + 162 + let val = get_config_value_string("close-to-tray".into(), config.clone()); 163 + if val.is_none() || val.unwrap() != "true"{ 164 + config.save(); 165 + return; 166 + } 167 + 163 168 window.hide().unwrap(); 164 169 api.prevent_close(); 165 170 } 166 171 _ => {} 167 172 }) 173 + .manage(Config::new()) 168 174 .manage(cache) 169 175 .manage(Mutex::new(clipboard)) 170 176 .setup(|app| { 171 177 let handle = app.handle(); 172 - 173 - app.deep_link().register("vrcpm").unwrap(); 174 178 util::setup_traymenu::setup_traymenu(handle); 175 179 176 180 // reads the file update mpsc channel and sends the events to the frontend ··· 194 198 Ok(()) 195 199 }) 196 200 .invoke_handler(tauri::generate_handler![ 197 - start_user_auth::start_user_auth, 198 201 load_photos::load_photos, 199 202 close_splashscreen::close_splashscreen, 200 203 load_photo_meta::load_photo_meta, ··· 206 209 start_with_win::start_with_win, 207 210 get_user_photos_path::get_user_photos_path, 208 211 change_final_path::change_final_path, 209 - sync_photos::sync_photos, 210 212 util::get_version::get_version, 211 - relaunch::relaunch, 212 213 config::set_config_value_string, 213 214 config::get_config_value_string, 214 215 config::set_config_value_int,
-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 - }
+8 -24
src-tauri/src/pngmeta.rs
··· 1 - use serde::ser::{Serialize, SerializeStruct, Serializer}; 2 1 use std::str; 3 2 4 - #[derive(Clone)] 3 + use serde::Serialize; 4 + 5 + #[derive(Clone, Debug, Serialize)] 5 6 pub struct PNGImage { 6 7 pub width: u32, 7 8 pub height: u32, ··· 12 13 pub interlace_method: u8, 13 14 pub metadata: String, 14 15 pub path: String, 16 + pub error: bool 15 17 } 16 18 17 19 impl PNGImage { 18 - pub fn new(buff: Vec<u8>, path: String) -> PNGImage { 20 + pub fn new(buff: Vec<u8>, path: String) -> Result<PNGImage, &'static str> { 19 21 if buff[0] != 0x89 20 22 || buff[1] != 0x50 21 23 || buff[2] != 0x4E ··· 26 28 || buff[7] != 0x0A 27 29 { 28 30 dbg!(path); 29 - panic!("Image is not a PNG file"); 31 + return Err("Image is not a PNG file"); 30 32 } 31 33 32 34 let mut img = PNGImage { ··· 39 41 interlace_method: 0, 40 42 metadata: "".to_string(), 41 43 path: path, 44 + error: false 42 45 }; 43 46 44 47 img.read_png_chunk(8, buff); 45 - img 48 + Ok(img) 46 49 } 47 50 48 51 fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) { ··· 82 85 } 83 86 } 84 87 } 85 - 86 - impl Serialize for PNGImage { 87 - fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 88 - where 89 - S: Serializer, 90 - { 91 - let mut s = serializer.serialize_struct("PNGImage", 7)?; 92 - s.serialize_field("width", &self.width)?; 93 - s.serialize_field("height", &self.height)?; 94 - s.serialize_field("bit_depth", &self.bit_depth)?; 95 - s.serialize_field("colour_type", &self.colour_type)?; 96 - s.serialize_field("compression_method", &self.compression_method)?; 97 - s.serialize_field("filter_method", &self.filter_method)?; 98 - s.serialize_field("interlace_method", &self.interlace_method)?; 99 - s.serialize_field("metadata", &self.metadata)?; 100 - s.serialize_field("path", &self.path)?; 101 - s.end() 102 - } 103 - }
+1 -1
src-tauri/src/util/cache.rs
··· 1 - use std::{collections::HashMap, sync::Mutex}; 1 + use std::{ collections::HashMap, sync::Mutex }; 2 2 3 3 pub struct Cache{ 4 4 store: Mutex<HashMap<String, String>>,
-55
src-tauri/src/util/check_updates.rs
··· 1 - use crate::util; 2 - use std::{ 3 - env, fs, path, 4 - process::{ self, Command }, 5 - thread, 6 - time::Duration, 7 - }; 8 - 9 - pub fn check_updates(container_folder: path::PathBuf) { 10 - let args: Vec<String> = env::args().collect(); 11 - 12 - let mut update = true; 13 - for arg in args { 14 - if arg == "--no-update" { 15 - update = false; 16 - } 17 - } 18 - 19 - if update { 20 - // Auto update 21 - thread::spawn(move || { 22 - let client = reqwest::blocking::Client::new(); 23 - 24 - let latest_version = client 25 - .get("https://cdn.phaz.uk/vrcpm/latest") 26 - .send() 27 - .unwrap() 28 - .text() 29 - .unwrap(); 30 - 31 - if latest_version != util::get_version::get_version() { 32 - match fs::metadata(&container_folder.join("./updater.exe")) { 33 - Ok(_) => {} 34 - Err(_) => { 35 - let latest_installer = client 36 - .get("https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe") 37 - .timeout(Duration::from_secs(120)) 38 - .send() 39 - .unwrap() 40 - .bytes() 41 - .unwrap(); 42 - 43 - fs::write(&container_folder.join("./updater.exe"), latest_installer).unwrap(); 44 - } 45 - } 46 - 47 - let mut cmd = Command::new(&container_folder.join("./updater.exe")); 48 - cmd.current_dir(container_folder); 49 - cmd.spawn().expect("Cannot run updater"); 50 - 51 - process::exit(0); 52 - } 53 - }); 54 - } 55 - }
+7 -1
src-tauri/src/util/get_photo_path.rs
··· 7 7 8 8 match fs::read_to_string(config_path) { 9 9 Ok(path) => { 10 - path::PathBuf::from(path) 10 + let p = path::PathBuf::from(path); 11 + 12 + if fs::exists(&p).unwrap(){ 13 + p 14 + } else{ 15 + dirs::picture_dir().unwrap().join("VRChat") 16 + } 11 17 }, 12 18 Err(_) => { 13 19 let p = dirs::picture_dir().unwrap().join("VRChat");
-22
src-tauri/src/util/handle_deeplink.rs
··· 1 - use tauri::{ AppHandle, Emitter }; 2 - 3 - pub fn handle_deeplink( url: String, handle: &AppHandle ) { 4 - let mut command: u8 = 0; 5 - let mut index: u8 = 0; 6 - 7 - for part in url.split('/').into_iter() { 8 - index += 1; 9 - 10 - if index == 3 && part == "auth-callback" { 11 - command = 1; 12 - } 13 - 14 - if index == 3 && part == "auth-denied" { 15 - handle.emit("auth-denied", "null").unwrap(); 16 - } 17 - 18 - if index == 4 && command == 1 { 19 - handle.emit("auth-callback", part).unwrap(); 20 - } 21 - } 22 - }
-6
src-tauri/src/util/handle_uri_proto.rs
··· 33 33 return; 34 34 } 35 35 36 - // TODO: Only accept files that are in the vrchat photos folder 37 - // Slightly more complex than originally thought, need to find a way to cache the VRC photos path 38 - // since i need to be able to load lots of photos very quickly. This shouldn't be a security issue 39 - // because tauri should only let the frontend of VRCPhotoManager read files throught this. Only 40 - // becomes a potential issue if the frontend gets modified or there's an issue with tauri. 41 - 42 36 #[cfg(windows)] 43 37 let path = uri.path().split_at(1).1; 44 38
-2
src-tauri/src/util/mod.rs
··· 1 - pub mod check_updates; 2 1 pub mod get_photo_path; 3 2 pub mod get_version; 4 3 pub mod handle_uri_proto; 5 - pub mod handle_deeplink; 6 4 pub mod setup_traymenu; 7 5 pub mod cache;
+6 -1
src-tauri/src/util/setup_traymenu.rs
··· 1 1 use tauri::{ 2 2 menu::{MenuBuilder, MenuItemBuilder}, 3 3 tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, 4 - AppHandle, Emitter, Manager, 4 + AppHandle, Emitter, Manager, State, 5 5 }; 6 + 7 + use crate::frontend_calls::config::Config; 6 8 7 9 #[derive(serde::Serialize, Clone)] 8 10 struct EmptyEvent {} ··· 31 33 .tooltip("VRChat Photo Manager") 32 34 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 33 35 "quit" => { 36 + let config: State<Config> = app.state(); 37 + config.save(); 38 + 34 39 std::process::exit(0); 35 40 } 36 41 "hide" => {
+3 -3
src-tauri/tauri.conf.json
··· 15 15 "icons/icon.ico" 16 16 ] 17 17 }, 18 - "productName": "vrchat-photo-manager", 18 + "productName": "VRChat Photo Manager", 19 19 "version": "0.0.1", 20 20 "identifier": "uk.phaz.vrcpm", 21 21 "plugins": { ··· 23 23 }, 24 24 "app": { 25 25 "security": { 26 - "csp": "https://photos.phazed.xyz; connect-src ipc: http://ipc.localhost" 26 + "csp": "connect-src https://api.github.com ipc: http://ipc.localhost" 27 27 }, 28 28 "windows": [ 29 29 { ··· 35 35 "minWidth": 600, 36 36 "minHeight": 400, 37 37 "visible": false, 38 - "decorations": false, 38 + "decorations": true, 39 39 "transparent": true 40 40 } 41 41 ]
+1 -1
vite.config.ts
··· 11 11 12 12 // https://vitejs.dev/config/ 13 13 export default defineConfig(async () => ({ 14 - plugins: [solid(),], //fullReloadAlways], 14 + plugins: [solid(), fullReloadAlways], 15 15 16 16 // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 17 17 //