+9
-7
README.md
+9
-7
README.md
···
1
# VRChat Photo Manager (BETA)
2
3
-
Download [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest)
4
5
## Feedback / Bug Reports
6
···
14
15
## A photo manager for VRChat.
16
17
-

18
-
19
-
Files with VRCX metadata:
20
21
-

22
23
-
Fetches world information from VRChat:
24
25
Searching for photos taken in specific worlds / with specific users:
26
27
-

···
1
# VRChat Photo Manager (BETA)
2
3
+
Windows users: Download the setup.exe file [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest)
4
+
5
+
Linux Users:
6
+
- I publish .deb, .rpm and .AppImage files [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest)
7
+
- I also publish an [AUR](https://aur.archlinux.org/packages/vrchat-photo-manager) package
8
9
## Feedback / Bug Reports
10
···
18
19
## A photo manager for VRChat.
20
21
+
<img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/bc702ee6-8891-463d-a987-c2db1dc24678" />
22
23
+
Files with VRCX metadata + Fetches world information from VRChat:
24
25
+
<img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/aae88c53-aab6-4520-bb89-d6f2bca1c51a" />
26
27
Searching for photos taken in specific worlds / with specific users:
28
29
+
<img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/f9af1724-5bb2-4276-bc32-e818dab31750" />
+5
-5
build-release.sh
+5
-5
build-release.sh
···
1
#!/bin/bash
2
3
-
VERSION=0.2.5
4
5
# Linux builds
6
NO_STRIP=true pnpm tauri build
···
14
mkdir builds
15
mkdir builds/$VERSION
16
17
-
mv src-tauri/target/release/bundle/appimage/vrchat-photo-manager_0.0.1_amd64.AppImage builds/$VERSION/vrcpm-$VERSION.AppImage
18
-
mv src-tauri/target/release/bundle/deb/vrchat-photo-manager_0.0.1_amd64.deb builds/$VERSION/vrcpm-$VERSION.deb
19
-
mv src-tauri/target/release/bundle/rpm/vrchat-photo-manager-0.0.1-1.x86_64.rpm builds/$VERSION/vrcpm-$VERSION.rpm
20
21
mv src-tauri/target/x86_64-pc-windows-msvc/release/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION.exe
22
mv src-tauri/target/x86_64-pc-windows-msvc/debug/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION-debug.exe
23
24
-
mv src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/vrchat-photo-manager_0.0.1_x64-setup.exe builds/$VERSION/vrcpm-$VERSION-setup.exe
···
1
#!/bin/bash
2
3
+
VERSION=0.2.7-hot1
4
5
# Linux builds
6
NO_STRIP=true pnpm tauri build
···
14
mkdir builds
15
mkdir builds/$VERSION
16
17
+
mv "src-tauri/target/release/bundle/appimage/VRChat Photo Manager_0.0.1_amd64.AppImage" builds/$VERSION/vrcpm-$VERSION.AppImage
18
+
mv "src-tauri/target/release/bundle/deb/VRChat Photo Manager_0.0.1_amd64.deb" builds/$VERSION/vrcpm-$VERSION.deb
19
+
mv "src-tauri/target/release/bundle/rpm/VRChat Photo Manager-0.0.1-1.x86_64.rpm" builds/$VERSION/vrcpm-$VERSION.rpm
20
21
mv src-tauri/target/x86_64-pc-windows-msvc/release/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION.exe
22
mv src-tauri/target/x86_64-pc-windows-msvc/debug/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION-debug.exe
23
24
+
mv "src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/VRChat Photo Manager_0.0.1_x64-setup.exe" builds/$VERSION/vrcpm-$VERSION-setup.exe
+32
-1
changelog
+32
-1
changelog
···
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
package.json
···
12
},
13
"license": "MIT",
14
"dependencies": {
15
-
"@tauri-apps/api": "2.0.0-rc.0",
16
-
"@tauri-apps/plugin-deep-link": "^2.4.1",
17
-
"@tauri-apps/plugin-http": "2.0.0-rc.1",
18
-
"@tauri-apps/plugin-process": "2.0.0-rc.0",
19
-
"@tauri-apps/plugin-shell": "2.0.0-rc.0",
20
-
"@types/animejs": "^3.1.13",
21
-
"animejs": "^3.2.2",
22
-
"solid-js": "^1.9.9"
23
},
24
"devDependencies": {
25
-
"@tauri-apps/cli": "2.0.0-rc.5",
26
-
"typescript": "^5.9.2",
27
-
"vite": "^5.4.19",
28
-
"vite-plugin-solid": "^2.11.8"
29
}
30
}
···
12
},
13
"license": "MIT",
14
"dependencies": {
15
+
"@tauri-apps/api": "2.9.0",
16
+
"@tauri-apps/plugin-deep-link": "^2.4.5",
17
+
"@tauri-apps/plugin-http": "2.5.4",
18
+
"@tauri-apps/plugin-process": "2.3.1",
19
+
"@tauri-apps/plugin-shell": "2.3.3",
20
+
"animejs": "^4.2.2",
21
+
"solid-js": "^1.9.10"
22
},
23
"devDependencies": {
24
+
"@tauri-apps/cli": "2.9.3",
25
+
"@types/animejs": "^3.1.13",
26
+
"typescript": "^5.9.3",
27
+
"vite": "^7.2.2",
28
+
"vite-plugin-solid": "^2.11.10"
29
}
30
}
+543
-451
pnpm-lock.yaml
+543
-451
pnpm-lock.yaml
···
9
.:
10
dependencies:
11
'@tauri-apps/api':
12
-
specifier: 2.0.0-rc.0
13
-
version: 2.0.0-rc.0
14
'@tauri-apps/plugin-deep-link':
15
-
specifier: ^2.4.1
16
-
version: 2.4.1
17
'@tauri-apps/plugin-http':
18
-
specifier: 2.0.0-rc.1
19
-
version: 2.0.0-rc.1
20
'@tauri-apps/plugin-process':
21
-
specifier: 2.0.0-rc.0
22
-
version: 2.0.0-rc.0
23
'@tauri-apps/plugin-shell':
24
-
specifier: 2.0.0-rc.0
25
-
version: 2.0.0-rc.0
26
-
'@types/animejs':
27
-
specifier: ^3.1.13
28
-
version: 3.1.13
29
animejs:
30
-
specifier: ^3.2.2
31
-
version: 3.2.2
32
solid-js:
33
-
specifier: ^1.9.9
34
-
version: 1.9.9
35
devDependencies:
36
'@tauri-apps/cli':
37
-
specifier: 2.0.0-rc.5
38
-
version: 2.0.0-rc.5
39
typescript:
40
-
specifier: ^5.9.2
41
-
version: 5.9.2
42
vite:
43
-
specifier: ^5.4.19
44
-
version: 5.4.19
45
vite-plugin-solid:
46
-
specifier: ^2.11.8
47
-
version: 2.11.8(solid-js@1.9.9)(vite@5.4.19)
48
49
packages:
50
51
-
'@ampproject/remapping@2.3.0':
52
-
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
53
-
engines: {node: '>=6.0.0'}
54
-
55
'@babel/code-frame@7.27.1':
56
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
57
engines: {node: '>=6.9.0'}
58
59
-
'@babel/compat-data@7.28.0':
60
-
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
61
engines: {node: '>=6.9.0'}
62
63
-
'@babel/core@7.28.3':
64
-
resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==}
65
engines: {node: '>=6.9.0'}
66
67
-
'@babel/generator@7.28.3':
68
-
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
69
engines: {node: '>=6.9.0'}
70
71
'@babel/helper-compilation-targets@7.27.2':
···
98
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
99
engines: {node: '>=6.9.0'}
100
101
-
'@babel/helper-validator-identifier@7.27.1':
102
-
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
103
engines: {node: '>=6.9.0'}
104
105
'@babel/helper-validator-option@7.27.1':
106
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
107
engines: {node: '>=6.9.0'}
108
109
-
'@babel/helpers@7.28.3':
110
-
resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==}
111
engines: {node: '>=6.9.0'}
112
113
-
'@babel/parser@7.28.3':
114
-
resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==}
115
engines: {node: '>=6.0.0'}
116
hasBin: true
117
···
125
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
126
engines: {node: '>=6.9.0'}
127
128
-
'@babel/traverse@7.28.3':
129
-
resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==}
130
engines: {node: '>=6.9.0'}
131
132
-
'@babel/types@7.28.2':
133
-
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
134
engines: {node: '>=6.9.0'}
135
136
-
'@esbuild/aix-ppc64@0.21.5':
137
-
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
138
-
engines: {node: '>=12'}
139
cpu: [ppc64]
140
os: [aix]
141
142
-
'@esbuild/android-arm64@0.21.5':
143
-
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
144
-
engines: {node: '>=12'}
145
cpu: [arm64]
146
os: [android]
147
148
-
'@esbuild/android-arm@0.21.5':
149
-
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
150
-
engines: {node: '>=12'}
151
cpu: [arm]
152
os: [android]
153
154
-
'@esbuild/android-x64@0.21.5':
155
-
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
156
-
engines: {node: '>=12'}
157
cpu: [x64]
158
os: [android]
159
160
-
'@esbuild/darwin-arm64@0.21.5':
161
-
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
162
-
engines: {node: '>=12'}
163
cpu: [arm64]
164
os: [darwin]
165
166
-
'@esbuild/darwin-x64@0.21.5':
167
-
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
168
-
engines: {node: '>=12'}
169
cpu: [x64]
170
os: [darwin]
171
172
-
'@esbuild/freebsd-arm64@0.21.5':
173
-
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
174
-
engines: {node: '>=12'}
175
cpu: [arm64]
176
os: [freebsd]
177
178
-
'@esbuild/freebsd-x64@0.21.5':
179
-
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
180
-
engines: {node: '>=12'}
181
cpu: [x64]
182
os: [freebsd]
183
184
-
'@esbuild/linux-arm64@0.21.5':
185
-
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
186
-
engines: {node: '>=12'}
187
cpu: [arm64]
188
os: [linux]
189
190
-
'@esbuild/linux-arm@0.21.5':
191
-
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
192
-
engines: {node: '>=12'}
193
cpu: [arm]
194
os: [linux]
195
196
-
'@esbuild/linux-ia32@0.21.5':
197
-
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
198
-
engines: {node: '>=12'}
199
cpu: [ia32]
200
os: [linux]
201
202
-
'@esbuild/linux-loong64@0.21.5':
203
-
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
204
-
engines: {node: '>=12'}
205
cpu: [loong64]
206
os: [linux]
207
208
-
'@esbuild/linux-mips64el@0.21.5':
209
-
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
210
-
engines: {node: '>=12'}
211
cpu: [mips64el]
212
os: [linux]
213
214
-
'@esbuild/linux-ppc64@0.21.5':
215
-
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
216
-
engines: {node: '>=12'}
217
cpu: [ppc64]
218
os: [linux]
219
220
-
'@esbuild/linux-riscv64@0.21.5':
221
-
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
222
-
engines: {node: '>=12'}
223
cpu: [riscv64]
224
os: [linux]
225
226
-
'@esbuild/linux-s390x@0.21.5':
227
-
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
228
-
engines: {node: '>=12'}
229
cpu: [s390x]
230
os: [linux]
231
232
-
'@esbuild/linux-x64@0.21.5':
233
-
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
234
-
engines: {node: '>=12'}
235
cpu: [x64]
236
os: [linux]
237
238
-
'@esbuild/netbsd-x64@0.21.5':
239
-
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
240
-
engines: {node: '>=12'}
241
cpu: [x64]
242
os: [netbsd]
243
244
-
'@esbuild/openbsd-x64@0.21.5':
245
-
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
246
-
engines: {node: '>=12'}
247
cpu: [x64]
248
os: [openbsd]
249
250
-
'@esbuild/sunos-x64@0.21.5':
251
-
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
252
-
engines: {node: '>=12'}
253
cpu: [x64]
254
os: [sunos]
255
256
-
'@esbuild/win32-arm64@0.21.5':
257
-
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
258
-
engines: {node: '>=12'}
259
cpu: [arm64]
260
os: [win32]
261
262
-
'@esbuild/win32-ia32@0.21.5':
263
-
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
264
-
engines: {node: '>=12'}
265
cpu: [ia32]
266
os: [win32]
267
268
-
'@esbuild/win32-x64@0.21.5':
269
-
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
270
-
engines: {node: '>=12'}
271
cpu: [x64]
272
os: [win32]
273
274
'@jridgewell/gen-mapping@0.3.13':
275
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
276
277
'@jridgewell/resolve-uri@3.1.2':
278
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
279
engines: {node: '>=6.0.0'}
···
281
'@jridgewell/sourcemap-codec@1.5.5':
282
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
283
284
-
'@jridgewell/trace-mapping@0.3.30':
285
-
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
286
287
-
'@rollup/rollup-android-arm-eabi@4.46.2':
288
-
resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
289
cpu: [arm]
290
os: [android]
291
292
-
'@rollup/rollup-android-arm64@4.46.2':
293
-
resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==}
294
cpu: [arm64]
295
os: [android]
296
297
-
'@rollup/rollup-darwin-arm64@4.46.2':
298
-
resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==}
299
cpu: [arm64]
300
os: [darwin]
301
302
-
'@rollup/rollup-darwin-x64@4.46.2':
303
-
resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
304
cpu: [x64]
305
os: [darwin]
306
307
-
'@rollup/rollup-freebsd-arm64@4.46.2':
308
-
resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==}
309
cpu: [arm64]
310
os: [freebsd]
311
312
-
'@rollup/rollup-freebsd-x64@4.46.2':
313
-
resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==}
314
cpu: [x64]
315
os: [freebsd]
316
317
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
318
-
resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==}
319
cpu: [arm]
320
os: [linux]
321
322
-
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
323
-
resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==}
324
cpu: [arm]
325
os: [linux]
326
327
-
'@rollup/rollup-linux-arm64-gnu@4.46.2':
328
-
resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==}
329
cpu: [arm64]
330
os: [linux]
331
332
-
'@rollup/rollup-linux-arm64-musl@4.46.2':
333
-
resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==}
334
cpu: [arm64]
335
os: [linux]
336
337
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
338
-
resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==}
339
cpu: [loong64]
340
os: [linux]
341
342
-
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
343
-
resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==}
344
cpu: [ppc64]
345
os: [linux]
346
347
-
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
348
-
resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==}
349
cpu: [riscv64]
350
os: [linux]
351
352
-
'@rollup/rollup-linux-riscv64-musl@4.46.2':
353
-
resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==}
354
cpu: [riscv64]
355
os: [linux]
356
357
-
'@rollup/rollup-linux-s390x-gnu@4.46.2':
358
-
resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==}
359
cpu: [s390x]
360
os: [linux]
361
362
-
'@rollup/rollup-linux-x64-gnu@4.46.2':
363
-
resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==}
364
cpu: [x64]
365
os: [linux]
366
367
-
'@rollup/rollup-linux-x64-musl@4.46.2':
368
-
resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==}
369
cpu: [x64]
370
os: [linux]
371
372
-
'@rollup/rollup-win32-arm64-msvc@4.46.2':
373
-
resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==}
374
cpu: [arm64]
375
os: [win32]
376
377
-
'@rollup/rollup-win32-ia32-msvc@4.46.2':
378
-
resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==}
379
cpu: [ia32]
380
os: [win32]
381
382
-
'@rollup/rollup-win32-x64-msvc@4.46.2':
383
-
resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==}
384
cpu: [x64]
385
os: [win32]
386
387
-
'@tauri-apps/api@2.0.0-rc.0':
388
-
resolution: {integrity: sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==}
389
-
engines: {node: '>= 18.18', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
390
391
-
'@tauri-apps/api@2.7.0':
392
-
resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==}
393
394
-
'@tauri-apps/cli-darwin-arm64@2.0.0-rc.5':
395
-
resolution: {integrity: sha512-EoduJ5SeMfBKCe7I291JBH+lkrf2E0+mQF1rP+Jq4CjWPer11OeEcUSFtHURB3Z3ItzObQ7ALPulMGhMe6E9rg==}
396
engines: {node: '>= 10'}
397
cpu: [arm64]
398
os: [darwin]
399
400
-
'@tauri-apps/cli-darwin-x64@2.0.0-rc.5':
401
-
resolution: {integrity: sha512-GdphvNgQWAbVGoD6e2Z5auWFXBcmmbhiwf9UNoKpBQPLfFO6EEJHjXbACr/hAZsqT0nNpZLRoh/5v5HGTmU0XQ==}
402
engines: {node: '>= 10'}
403
cpu: [x64]
404
os: [darwin]
405
406
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5':
407
-
resolution: {integrity: sha512-S47KwAfyRsO2qTqSoadHP4a1cjO9kfQi4QWkoaDjb0BEETdrhPM94qp43cnKP7QWW+msOToMTdlks9HYlhRUww==}
408
engines: {node: '>= 10'}
409
cpu: [arm]
410
os: [linux]
411
412
-
'@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5':
413
-
resolution: {integrity: sha512-Ii9aP/24Rtlci5MaeSaqb6JOLt3cUBA4z4XmGz5VOLLZ+ntRxpfd3xNpLki04V2MOgbAu9BxLAp5UTzELc1/Rg==}
414
engines: {node: '>= 10'}
415
cpu: [arm64]
416
os: [linux]
417
418
-
'@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5':
419
-
resolution: {integrity: sha512-noV2sDusI+DsEHl0uMOZ04sQmj65Jo9yjfSg2iv1fnfjBYVbwi6Qj/MaCqyApXESQrpv1XZB3kYI+CkyPnjj2Q==}
420
engines: {node: '>= 10'}
421
cpu: [arm64]
422
os: [linux]
423
424
-
'@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5':
425
-
resolution: {integrity: sha512-iTe9gKO+qgFRjU1sxBvbI8bIRbkOedWvFm/yh8RFi1iJcFwbVnsHWQ8z7BwoNMJLnL2dseZgrGntmS5n9/xSSQ==}
426
engines: {node: '>= 10'}
427
cpu: [x64]
428
os: [linux]
429
430
-
'@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5':
431
-
resolution: {integrity: sha512-R7EyfvfdMtRAKC3QxPn5jVGEH56R4g6hSnR5xXkFnEpioND7SNru5UMBGgseGJ22h/hdjFfqS2vc19291gkVsg==}
432
engines: {node: '>= 10'}
433
cpu: [x64]
434
os: [linux]
435
436
-
'@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5':
437
-
resolution: {integrity: sha512-EE7CF//hMWsVZpu9IWXGLDDdMhAiNfHwfLnW4Na1INHKBBb/ynhOd4gKRC3Mi/kgcMfXJAq0nBJFw1mal1q7jg==}
438
engines: {node: '>= 10'}
439
cpu: [arm64]
440
os: [win32]
441
442
-
'@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5':
443
-
resolution: {integrity: sha512-zJosPEw1X1H9nTNsrYVSypRLdMLOiLAY8hlBrgsmw7dmN61lOMLyItWsbiAezYeKIpaFeADurR+5qMHHwzbqeg==}
444
engines: {node: '>= 10'}
445
cpu: [ia32]
446
os: [win32]
447
448
-
'@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5':
449
-
resolution: {integrity: sha512-PqxbL/e6GraazdwEKN1oX33gYCRf0ns6yuaxHafHM5+Zsv0MZpyPTPLDot/JLKvNBefk6QXZn5fKAIETVtQaGg==}
450
engines: {node: '>= 10'}
451
cpu: [x64]
452
os: [win32]
453
454
-
'@tauri-apps/cli@2.0.0-rc.5':
455
-
resolution: {integrity: sha512-JtFfJg8ZNOrj+S+8RKpcrNIcU5hw0X8JSNs2tUjQq0OZgqIGnRSILYjg7BaZDPEakQXUKsDEufbjbYVNJDIp8g==}
456
engines: {node: '>= 10'}
457
hasBin: true
458
459
-
'@tauri-apps/plugin-deep-link@2.4.1':
460
-
resolution: {integrity: sha512-I8Bo+spcAKGhIIJ1qN/gapp/Ot3mosQL98znxr975Zn2ODAkUZ++BQ9FnTpR7PDwfIl5ANSGdIW/YU01zVTcJw==}
461
462
-
'@tauri-apps/plugin-http@2.0.0-rc.1':
463
-
resolution: {integrity: sha512-j4WdTEKx0CFa6u8ubke0mo75pCrnu6XtrFtvjsh+zjuNYgMG/l0+A1woWXHm73f2Levskhs+KbKcLQA/nr8k2w==}
464
465
-
'@tauri-apps/plugin-process@2.0.0-rc.0':
466
-
resolution: {integrity: sha512-Z12D/kmQzG1vCVf+jLXPhPDUA0pEjFrsg4p0uwO2sotVLM9287IuTM+aIz9cuAYOxFLKcsnDG7amSCL9IfA1gw==}
467
468
-
'@tauri-apps/plugin-shell@2.0.0-rc.0':
469
-
resolution: {integrity: sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==}
470
471
'@types/animejs@3.1.13':
472
resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==}
···
486
'@types/estree@1.0.8':
487
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
488
489
-
animejs@3.2.2:
490
-
resolution: {integrity: sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ==}
491
492
-
babel-plugin-jsx-dom-expressions@0.40.1:
493
-
resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==}
494
peerDependencies:
495
'@babel/core': ^7.20.12
496
497
-
babel-preset-solid@1.9.9:
498
-
resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==}
499
peerDependencies:
500
'@babel/core': ^7.0.0
501
-
solid-js: ^1.9.8
502
peerDependenciesMeta:
503
solid-js:
504
optional: true
505
506
-
browserslist@4.25.2:
507
-
resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==}
508
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
509
hasBin: true
510
511
-
caniuse-lite@1.0.30001735:
512
-
resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==}
513
514
convert-source-map@2.0.0:
515
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
···
517
csstype@3.1.3:
518
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
519
520
-
debug@4.4.1:
521
-
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
522
engines: {node: '>=6.0'}
523
peerDependencies:
524
supports-color: '*'
···
526
supports-color:
527
optional: true
528
529
-
electron-to-chromium@1.5.202:
530
-
resolution: {integrity: sha512-NxbYjRmiHcHXV1Ws3fWUW+SLb62isauajk45LUJ/HgIOkUA7jLZu/X2Iif+X9FBNK8QkF9Zb4Q2mcwXCcY30mg==}
531
532
entities@6.0.1:
533
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
534
engines: {node: '>=0.12'}
535
536
-
esbuild@0.21.5:
537
-
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
538
-
engines: {node: '>=12'}
539
hasBin: true
540
541
escalade@3.2.0:
542
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
543
engines: {node: '>=6'}
544
545
fsevents@2.3.3:
546
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
547
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
···
586
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
587
hasBin: true
588
589
-
node-releases@2.0.19:
590
-
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
591
592
parse5@7.3.0:
593
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
595
picocolors@1.1.1:
596
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
597
598
postcss@8.5.6:
599
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
600
engines: {node: ^10 || ^12 || >=14}
601
602
-
rollup@4.46.2:
603
-
resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==}
604
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
605
hasBin: true
606
···
608
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
609
hasBin: true
610
611
-
seroval-plugins@1.3.2:
612
-
resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==}
613
engines: {node: '>=10'}
614
peerDependencies:
615
seroval: ^1.0
···
618
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
619
engines: {node: '>=10'}
620
621
-
solid-js@1.9.9:
622
-
resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==}
623
624
solid-refresh@0.6.3:
625
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
630
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
631
engines: {node: '>=0.10.0'}
632
633
-
typescript@5.9.2:
634
-
resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
635
engines: {node: '>=14.17'}
636
hasBin: true
637
638
-
update-browserslist-db@1.1.3:
639
-
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
640
hasBin: true
641
peerDependencies:
642
browserslist: '>= 4.21.0'
643
644
-
validate-html-nesting@1.2.3:
645
-
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
646
-
647
-
vite-plugin-solid@2.11.8:
648
-
resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==}
649
peerDependencies:
650
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
651
solid-js: ^1.7.2
···
654
'@testing-library/jest-dom':
655
optional: true
656
657
-
vite@5.4.19:
658
-
resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
659
-
engines: {node: ^18.0.0 || >=20.0.0}
660
hasBin: true
661
peerDependencies:
662
-
'@types/node': ^18.0.0 || >=20.0.0
663
-
less: '*'
664
lightningcss: ^1.21.0
665
-
sass: '*'
666
-
sass-embedded: '*'
667
-
stylus: '*'
668
-
sugarss: '*'
669
-
terser: ^5.4.0
670
peerDependenciesMeta:
671
'@types/node':
672
optional: true
673
less:
674
optional: true
···
684
optional: true
685
terser:
686
optional: true
687
688
vitefu@1.1.1:
689
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
···
698
699
snapshots:
700
701
-
'@ampproject/remapping@2.3.0':
702
-
dependencies:
703
-
'@jridgewell/gen-mapping': 0.3.13
704
-
'@jridgewell/trace-mapping': 0.3.30
705
-
706
'@babel/code-frame@7.27.1':
707
dependencies:
708
-
'@babel/helper-validator-identifier': 7.27.1
709
js-tokens: 4.0.0
710
picocolors: 1.1.1
711
712
-
'@babel/compat-data@7.28.0': {}
713
714
-
'@babel/core@7.28.3':
715
dependencies:
716
-
'@ampproject/remapping': 2.3.0
717
'@babel/code-frame': 7.27.1
718
-
'@babel/generator': 7.28.3
719
'@babel/helper-compilation-targets': 7.27.2
720
-
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3)
721
-
'@babel/helpers': 7.28.3
722
-
'@babel/parser': 7.28.3
723
'@babel/template': 7.27.2
724
-
'@babel/traverse': 7.28.3
725
-
'@babel/types': 7.28.2
726
convert-source-map: 2.0.0
727
-
debug: 4.4.1
728
gensync: 1.0.0-beta.2
729
json5: 2.2.3
730
semver: 6.3.1
731
transitivePeerDependencies:
732
- supports-color
733
734
-
'@babel/generator@7.28.3':
735
dependencies:
736
-
'@babel/parser': 7.28.3
737
-
'@babel/types': 7.28.2
738
'@jridgewell/gen-mapping': 0.3.13
739
-
'@jridgewell/trace-mapping': 0.3.30
740
jsesc: 3.1.0
741
742
'@babel/helper-compilation-targets@7.27.2':
743
dependencies:
744
-
'@babel/compat-data': 7.28.0
745
'@babel/helper-validator-option': 7.27.1
746
-
browserslist: 4.25.2
747
lru-cache: 5.1.1
748
semver: 6.3.1
749
···
751
752
'@babel/helper-module-imports@7.18.6':
753
dependencies:
754
-
'@babel/types': 7.28.2
755
756
'@babel/helper-module-imports@7.27.1':
757
dependencies:
758
-
'@babel/traverse': 7.28.3
759
-
'@babel/types': 7.28.2
760
transitivePeerDependencies:
761
- supports-color
762
763
-
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)':
764
dependencies:
765
-
'@babel/core': 7.28.3
766
'@babel/helper-module-imports': 7.27.1
767
-
'@babel/helper-validator-identifier': 7.27.1
768
-
'@babel/traverse': 7.28.3
769
transitivePeerDependencies:
770
- supports-color
771
···
773
774
'@babel/helper-string-parser@7.27.1': {}
775
776
-
'@babel/helper-validator-identifier@7.27.1': {}
777
778
'@babel/helper-validator-option@7.27.1': {}
779
780
-
'@babel/helpers@7.28.3':
781
dependencies:
782
'@babel/template': 7.27.2
783
-
'@babel/types': 7.28.2
784
785
-
'@babel/parser@7.28.3':
786
dependencies:
787
-
'@babel/types': 7.28.2
788
789
-
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)':
790
dependencies:
791
-
'@babel/core': 7.28.3
792
'@babel/helper-plugin-utils': 7.27.1
793
794
'@babel/template@7.27.2':
795
dependencies:
796
'@babel/code-frame': 7.27.1
797
-
'@babel/parser': 7.28.3
798
-
'@babel/types': 7.28.2
799
800
-
'@babel/traverse@7.28.3':
801
dependencies:
802
'@babel/code-frame': 7.27.1
803
-
'@babel/generator': 7.28.3
804
'@babel/helper-globals': 7.28.0
805
-
'@babel/parser': 7.28.3
806
'@babel/template': 7.27.2
807
-
'@babel/types': 7.28.2
808
-
debug: 4.4.1
809
transitivePeerDependencies:
810
- supports-color
811
812
-
'@babel/types@7.28.2':
813
dependencies:
814
'@babel/helper-string-parser': 7.27.1
815
-
'@babel/helper-validator-identifier': 7.27.1
816
817
-
'@esbuild/aix-ppc64@0.21.5':
818
optional: true
819
820
-
'@esbuild/android-arm64@0.21.5':
821
optional: true
822
823
-
'@esbuild/android-arm@0.21.5':
824
optional: true
825
826
-
'@esbuild/android-x64@0.21.5':
827
optional: true
828
829
-
'@esbuild/darwin-arm64@0.21.5':
830
optional: true
831
832
-
'@esbuild/darwin-x64@0.21.5':
833
optional: true
834
835
-
'@esbuild/freebsd-arm64@0.21.5':
836
optional: true
837
838
-
'@esbuild/freebsd-x64@0.21.5':
839
optional: true
840
841
-
'@esbuild/linux-arm64@0.21.5':
842
optional: true
843
844
-
'@esbuild/linux-arm@0.21.5':
845
optional: true
846
847
-
'@esbuild/linux-ia32@0.21.5':
848
optional: true
849
850
-
'@esbuild/linux-loong64@0.21.5':
851
optional: true
852
853
-
'@esbuild/linux-mips64el@0.21.5':
854
optional: true
855
856
-
'@esbuild/linux-ppc64@0.21.5':
857
optional: true
858
859
-
'@esbuild/linux-riscv64@0.21.5':
860
optional: true
861
862
-
'@esbuild/linux-s390x@0.21.5':
863
optional: true
864
865
-
'@esbuild/linux-x64@0.21.5':
866
optional: true
867
868
-
'@esbuild/netbsd-x64@0.21.5':
869
optional: true
870
871
-
'@esbuild/openbsd-x64@0.21.5':
872
optional: true
873
874
-
'@esbuild/sunos-x64@0.21.5':
875
optional: true
876
877
-
'@esbuild/win32-arm64@0.21.5':
878
optional: true
879
880
-
'@esbuild/win32-ia32@0.21.5':
881
optional: true
882
883
-
'@esbuild/win32-x64@0.21.5':
884
optional: true
885
886
'@jridgewell/gen-mapping@0.3.13':
887
dependencies:
888
'@jridgewell/sourcemap-codec': 1.5.5
889
-
'@jridgewell/trace-mapping': 0.3.30
890
891
'@jridgewell/resolve-uri@3.1.2': {}
892
893
'@jridgewell/sourcemap-codec@1.5.5': {}
894
895
-
'@jridgewell/trace-mapping@0.3.30':
896
dependencies:
897
'@jridgewell/resolve-uri': 3.1.2
898
'@jridgewell/sourcemap-codec': 1.5.5
899
900
-
'@rollup/rollup-android-arm-eabi@4.46.2':
901
optional: true
902
903
-
'@rollup/rollup-android-arm64@4.46.2':
904
optional: true
905
906
-
'@rollup/rollup-darwin-arm64@4.46.2':
907
optional: true
908
909
-
'@rollup/rollup-darwin-x64@4.46.2':
910
optional: true
911
912
-
'@rollup/rollup-freebsd-arm64@4.46.2':
913
optional: true
914
915
-
'@rollup/rollup-freebsd-x64@4.46.2':
916
optional: true
917
918
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
919
optional: true
920
921
-
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
922
optional: true
923
924
-
'@rollup/rollup-linux-arm64-gnu@4.46.2':
925
optional: true
926
927
-
'@rollup/rollup-linux-arm64-musl@4.46.2':
928
optional: true
929
930
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
931
optional: true
932
933
-
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
934
optional: true
935
936
-
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
937
optional: true
938
939
-
'@rollup/rollup-linux-riscv64-musl@4.46.2':
940
optional: true
941
942
-
'@rollup/rollup-linux-s390x-gnu@4.46.2':
943
optional: true
944
945
-
'@rollup/rollup-linux-x64-gnu@4.46.2':
946
optional: true
947
948
-
'@rollup/rollup-linux-x64-musl@4.46.2':
949
optional: true
950
951
-
'@rollup/rollup-win32-arm64-msvc@4.46.2':
952
optional: true
953
954
-
'@rollup/rollup-win32-ia32-msvc@4.46.2':
955
optional: true
956
957
-
'@rollup/rollup-win32-x64-msvc@4.46.2':
958
optional: true
959
960
-
'@tauri-apps/api@2.0.0-rc.0': {}
961
962
-
'@tauri-apps/api@2.7.0': {}
963
964
-
'@tauri-apps/cli-darwin-arm64@2.0.0-rc.5':
965
optional: true
966
967
-
'@tauri-apps/cli-darwin-x64@2.0.0-rc.5':
968
optional: true
969
970
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5':
971
optional: true
972
973
-
'@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5':
974
optional: true
975
976
-
'@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5':
977
optional: true
978
979
-
'@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5':
980
optional: true
981
982
-
'@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5':
983
optional: true
984
985
-
'@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5':
986
optional: true
987
988
-
'@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5':
989
optional: true
990
991
-
'@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5':
992
optional: true
993
994
-
'@tauri-apps/cli@2.0.0-rc.5':
995
optionalDependencies:
996
-
'@tauri-apps/cli-darwin-arm64': 2.0.0-rc.5
997
-
'@tauri-apps/cli-darwin-x64': 2.0.0-rc.5
998
-
'@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.5
999
-
'@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.5
1000
-
'@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.5
1001
-
'@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.5
1002
-
'@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.5
1003
-
'@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.5
1004
-
'@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.5
1005
-
'@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.5
1006
1007
-
'@tauri-apps/plugin-deep-link@2.4.1':
1008
dependencies:
1009
-
'@tauri-apps/api': 2.7.0
1010
1011
-
'@tauri-apps/plugin-http@2.0.0-rc.1':
1012
dependencies:
1013
-
'@tauri-apps/api': 2.7.0
1014
1015
-
'@tauri-apps/plugin-process@2.0.0-rc.0':
1016
dependencies:
1017
-
'@tauri-apps/api': 2.0.0-rc.0
1018
1019
-
'@tauri-apps/plugin-shell@2.0.0-rc.0':
1020
dependencies:
1021
-
'@tauri-apps/api': 2.0.0-rc.0
1022
1023
'@types/animejs@3.1.13': {}
1024
1025
'@types/babel__core@7.20.5':
1026
dependencies:
1027
-
'@babel/parser': 7.28.3
1028
-
'@babel/types': 7.28.2
1029
'@types/babel__generator': 7.27.0
1030
'@types/babel__template': 7.4.4
1031
'@types/babel__traverse': 7.28.0
1032
1033
'@types/babel__generator@7.27.0':
1034
dependencies:
1035
-
'@babel/types': 7.28.2
1036
1037
'@types/babel__template@7.4.4':
1038
dependencies:
1039
-
'@babel/parser': 7.28.3
1040
-
'@babel/types': 7.28.2
1041
1042
'@types/babel__traverse@7.28.0':
1043
dependencies:
1044
-
'@babel/types': 7.28.2
1045
1046
'@types/estree@1.0.8': {}
1047
1048
-
animejs@3.2.2: {}
1049
1050
-
babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.3):
1051
dependencies:
1052
-
'@babel/core': 7.28.3
1053
'@babel/helper-module-imports': 7.18.6
1054
-
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3)
1055
-
'@babel/types': 7.28.2
1056
html-entities: 2.3.3
1057
parse5: 7.3.0
1058
-
validate-html-nesting: 1.2.3
1059
1060
-
babel-preset-solid@1.9.9(@babel/core@7.28.3)(solid-js@1.9.9):
1061
dependencies:
1062
-
'@babel/core': 7.28.3
1063
-
babel-plugin-jsx-dom-expressions: 0.40.1(@babel/core@7.28.3)
1064
optionalDependencies:
1065
-
solid-js: 1.9.9
1066
1067
-
browserslist@4.25.2:
1068
dependencies:
1069
-
caniuse-lite: 1.0.30001735
1070
-
electron-to-chromium: 1.5.202
1071
-
node-releases: 2.0.19
1072
-
update-browserslist-db: 1.1.3(browserslist@4.25.2)
1073
1074
-
caniuse-lite@1.0.30001735: {}
1075
1076
convert-source-map@2.0.0: {}
1077
1078
csstype@3.1.3: {}
1079
1080
-
debug@4.4.1:
1081
dependencies:
1082
ms: 2.1.3
1083
1084
-
electron-to-chromium@1.5.202: {}
1085
1086
entities@6.0.1: {}
1087
1088
-
esbuild@0.21.5:
1089
optionalDependencies:
1090
-
'@esbuild/aix-ppc64': 0.21.5
1091
-
'@esbuild/android-arm': 0.21.5
1092
-
'@esbuild/android-arm64': 0.21.5
1093
-
'@esbuild/android-x64': 0.21.5
1094
-
'@esbuild/darwin-arm64': 0.21.5
1095
-
'@esbuild/darwin-x64': 0.21.5
1096
-
'@esbuild/freebsd-arm64': 0.21.5
1097
-
'@esbuild/freebsd-x64': 0.21.5
1098
-
'@esbuild/linux-arm': 0.21.5
1099
-
'@esbuild/linux-arm64': 0.21.5
1100
-
'@esbuild/linux-ia32': 0.21.5
1101
-
'@esbuild/linux-loong64': 0.21.5
1102
-
'@esbuild/linux-mips64el': 0.21.5
1103
-
'@esbuild/linux-ppc64': 0.21.5
1104
-
'@esbuild/linux-riscv64': 0.21.5
1105
-
'@esbuild/linux-s390x': 0.21.5
1106
-
'@esbuild/linux-x64': 0.21.5
1107
-
'@esbuild/netbsd-x64': 0.21.5
1108
-
'@esbuild/openbsd-x64': 0.21.5
1109
-
'@esbuild/sunos-x64': 0.21.5
1110
-
'@esbuild/win32-arm64': 0.21.5
1111
-
'@esbuild/win32-ia32': 0.21.5
1112
-
'@esbuild/win32-x64': 0.21.5
1113
1114
escalade@3.2.0: {}
1115
1116
fsevents@2.3.3:
1117
optional: true
···
1140
1141
nanoid@3.3.11: {}
1142
1143
-
node-releases@2.0.19: {}
1144
1145
parse5@7.3.0:
1146
dependencies:
···
1148
1149
picocolors@1.1.1: {}
1150
1151
postcss@8.5.6:
1152
dependencies:
1153
nanoid: 3.3.11
1154
picocolors: 1.1.1
1155
source-map-js: 1.2.1
1156
1157
-
rollup@4.46.2:
1158
dependencies:
1159
'@types/estree': 1.0.8
1160
optionalDependencies:
1161
-
'@rollup/rollup-android-arm-eabi': 4.46.2
1162
-
'@rollup/rollup-android-arm64': 4.46.2
1163
-
'@rollup/rollup-darwin-arm64': 4.46.2
1164
-
'@rollup/rollup-darwin-x64': 4.46.2
1165
-
'@rollup/rollup-freebsd-arm64': 4.46.2
1166
-
'@rollup/rollup-freebsd-x64': 4.46.2
1167
-
'@rollup/rollup-linux-arm-gnueabihf': 4.46.2
1168
-
'@rollup/rollup-linux-arm-musleabihf': 4.46.2
1169
-
'@rollup/rollup-linux-arm64-gnu': 4.46.2
1170
-
'@rollup/rollup-linux-arm64-musl': 4.46.2
1171
-
'@rollup/rollup-linux-loongarch64-gnu': 4.46.2
1172
-
'@rollup/rollup-linux-ppc64-gnu': 4.46.2
1173
-
'@rollup/rollup-linux-riscv64-gnu': 4.46.2
1174
-
'@rollup/rollup-linux-riscv64-musl': 4.46.2
1175
-
'@rollup/rollup-linux-s390x-gnu': 4.46.2
1176
-
'@rollup/rollup-linux-x64-gnu': 4.46.2
1177
-
'@rollup/rollup-linux-x64-musl': 4.46.2
1178
-
'@rollup/rollup-win32-arm64-msvc': 4.46.2
1179
-
'@rollup/rollup-win32-ia32-msvc': 4.46.2
1180
-
'@rollup/rollup-win32-x64-msvc': 4.46.2
1181
fsevents: 2.3.3
1182
1183
semver@6.3.1: {}
1184
1185
-
seroval-plugins@1.3.2(seroval@1.3.2):
1186
dependencies:
1187
seroval: 1.3.2
1188
1189
seroval@1.3.2: {}
1190
1191
-
solid-js@1.9.9:
1192
dependencies:
1193
csstype: 3.1.3
1194
seroval: 1.3.2
1195
-
seroval-plugins: 1.3.2(seroval@1.3.2)
1196
1197
-
solid-refresh@0.6.3(solid-js@1.9.9):
1198
dependencies:
1199
-
'@babel/generator': 7.28.3
1200
'@babel/helper-module-imports': 7.27.1
1201
-
'@babel/types': 7.28.2
1202
-
solid-js: 1.9.9
1203
transitivePeerDependencies:
1204
- supports-color
1205
1206
source-map-js@1.2.1: {}
1207
1208
-
typescript@5.9.2: {}
1209
1210
-
update-browserslist-db@1.1.3(browserslist@4.25.2):
1211
dependencies:
1212
-
browserslist: 4.25.2
1213
escalade: 3.2.0
1214
picocolors: 1.1.1
1215
1216
-
validate-html-nesting@1.2.3: {}
1217
-
1218
-
vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@5.4.19):
1219
dependencies:
1220
-
'@babel/core': 7.28.3
1221
'@types/babel__core': 7.20.5
1222
-
babel-preset-solid: 1.9.9(@babel/core@7.28.3)(solid-js@1.9.9)
1223
merge-anything: 5.1.7
1224
-
solid-js: 1.9.9
1225
-
solid-refresh: 0.6.3(solid-js@1.9.9)
1226
-
vite: 5.4.19
1227
-
vitefu: 1.1.1(vite@5.4.19)
1228
transitivePeerDependencies:
1229
- supports-color
1230
1231
-
vite@5.4.19:
1232
dependencies:
1233
-
esbuild: 0.21.5
1234
postcss: 8.5.6
1235
-
rollup: 4.46.2
1236
optionalDependencies:
1237
fsevents: 2.3.3
1238
1239
-
vitefu@1.1.1(vite@5.4.19):
1240
optionalDependencies:
1241
-
vite: 5.4.19
1242
1243
yallist@3.1.1: {}
···
9
.:
10
dependencies:
11
'@tauri-apps/api':
12
+
specifier: 2.9.0
13
+
version: 2.9.0
14
'@tauri-apps/plugin-deep-link':
15
+
specifier: ^2.4.5
16
+
version: 2.4.5
17
'@tauri-apps/plugin-http':
18
+
specifier: 2.5.4
19
+
version: 2.5.4
20
'@tauri-apps/plugin-process':
21
+
specifier: 2.3.1
22
+
version: 2.3.1
23
'@tauri-apps/plugin-shell':
24
+
specifier: 2.3.3
25
+
version: 2.3.3
26
animejs:
27
+
specifier: ^4.2.2
28
+
version: 4.2.2
29
solid-js:
30
+
specifier: ^1.9.10
31
+
version: 1.9.10
32
devDependencies:
33
'@tauri-apps/cli':
34
+
specifier: 2.9.3
35
+
version: 2.9.3
36
+
'@types/animejs':
37
+
specifier: ^3.1.13
38
+
version: 3.1.13
39
typescript:
40
+
specifier: ^5.9.3
41
+
version: 5.9.3
42
vite:
43
+
specifier: ^7.2.2
44
+
version: 7.2.2
45
vite-plugin-solid:
46
+
specifier: ^2.11.10
47
+
version: 2.11.10(solid-js@1.9.10)(vite@7.2.2)
48
49
packages:
50
51
'@babel/code-frame@7.27.1':
52
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
53
engines: {node: '>=6.9.0'}
54
55
+
'@babel/compat-data@7.28.5':
56
+
resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
57
engines: {node: '>=6.9.0'}
58
59
+
'@babel/core@7.28.5':
60
+
resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
61
engines: {node: '>=6.9.0'}
62
63
+
'@babel/generator@7.28.5':
64
+
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
65
engines: {node: '>=6.9.0'}
66
67
'@babel/helper-compilation-targets@7.27.2':
···
94
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
95
engines: {node: '>=6.9.0'}
96
97
+
'@babel/helper-validator-identifier@7.28.5':
98
+
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
99
engines: {node: '>=6.9.0'}
100
101
'@babel/helper-validator-option@7.27.1':
102
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
103
engines: {node: '>=6.9.0'}
104
105
+
'@babel/helpers@7.28.4':
106
+
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
107
engines: {node: '>=6.9.0'}
108
109
+
'@babel/parser@7.28.5':
110
+
resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
111
engines: {node: '>=6.0.0'}
112
hasBin: true
113
···
121
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
122
engines: {node: '>=6.9.0'}
123
124
+
'@babel/traverse@7.28.5':
125
+
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
126
engines: {node: '>=6.9.0'}
127
128
+
'@babel/types@7.28.5':
129
+
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
130
engines: {node: '>=6.9.0'}
131
132
+
'@esbuild/aix-ppc64@0.25.12':
133
+
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
134
+
engines: {node: '>=18'}
135
cpu: [ppc64]
136
os: [aix]
137
138
+
'@esbuild/android-arm64@0.25.12':
139
+
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
140
+
engines: {node: '>=18'}
141
cpu: [arm64]
142
os: [android]
143
144
+
'@esbuild/android-arm@0.25.12':
145
+
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
146
+
engines: {node: '>=18'}
147
cpu: [arm]
148
os: [android]
149
150
+
'@esbuild/android-x64@0.25.12':
151
+
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
152
+
engines: {node: '>=18'}
153
cpu: [x64]
154
os: [android]
155
156
+
'@esbuild/darwin-arm64@0.25.12':
157
+
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
158
+
engines: {node: '>=18'}
159
cpu: [arm64]
160
os: [darwin]
161
162
+
'@esbuild/darwin-x64@0.25.12':
163
+
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
164
+
engines: {node: '>=18'}
165
cpu: [x64]
166
os: [darwin]
167
168
+
'@esbuild/freebsd-arm64@0.25.12':
169
+
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
170
+
engines: {node: '>=18'}
171
cpu: [arm64]
172
os: [freebsd]
173
174
+
'@esbuild/freebsd-x64@0.25.12':
175
+
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
176
+
engines: {node: '>=18'}
177
cpu: [x64]
178
os: [freebsd]
179
180
+
'@esbuild/linux-arm64@0.25.12':
181
+
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
182
+
engines: {node: '>=18'}
183
cpu: [arm64]
184
os: [linux]
185
186
+
'@esbuild/linux-arm@0.25.12':
187
+
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
188
+
engines: {node: '>=18'}
189
cpu: [arm]
190
os: [linux]
191
192
+
'@esbuild/linux-ia32@0.25.12':
193
+
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
194
+
engines: {node: '>=18'}
195
cpu: [ia32]
196
os: [linux]
197
198
+
'@esbuild/linux-loong64@0.25.12':
199
+
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
200
+
engines: {node: '>=18'}
201
cpu: [loong64]
202
os: [linux]
203
204
+
'@esbuild/linux-mips64el@0.25.12':
205
+
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
206
+
engines: {node: '>=18'}
207
cpu: [mips64el]
208
os: [linux]
209
210
+
'@esbuild/linux-ppc64@0.25.12':
211
+
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
212
+
engines: {node: '>=18'}
213
cpu: [ppc64]
214
os: [linux]
215
216
+
'@esbuild/linux-riscv64@0.25.12':
217
+
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
218
+
engines: {node: '>=18'}
219
cpu: [riscv64]
220
os: [linux]
221
222
+
'@esbuild/linux-s390x@0.25.12':
223
+
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
224
+
engines: {node: '>=18'}
225
cpu: [s390x]
226
os: [linux]
227
228
+
'@esbuild/linux-x64@0.25.12':
229
+
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
230
+
engines: {node: '>=18'}
231
cpu: [x64]
232
os: [linux]
233
234
+
'@esbuild/netbsd-arm64@0.25.12':
235
+
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
236
+
engines: {node: '>=18'}
237
+
cpu: [arm64]
238
+
os: [netbsd]
239
+
240
+
'@esbuild/netbsd-x64@0.25.12':
241
+
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
242
+
engines: {node: '>=18'}
243
cpu: [x64]
244
os: [netbsd]
245
246
+
'@esbuild/openbsd-arm64@0.25.12':
247
+
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
248
+
engines: {node: '>=18'}
249
+
cpu: [arm64]
250
+
os: [openbsd]
251
+
252
+
'@esbuild/openbsd-x64@0.25.12':
253
+
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
254
+
engines: {node: '>=18'}
255
cpu: [x64]
256
os: [openbsd]
257
258
+
'@esbuild/openharmony-arm64@0.25.12':
259
+
resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
260
+
engines: {node: '>=18'}
261
+
cpu: [arm64]
262
+
os: [openharmony]
263
+
264
+
'@esbuild/sunos-x64@0.25.12':
265
+
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
266
+
engines: {node: '>=18'}
267
cpu: [x64]
268
os: [sunos]
269
270
+
'@esbuild/win32-arm64@0.25.12':
271
+
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
272
+
engines: {node: '>=18'}
273
cpu: [arm64]
274
os: [win32]
275
276
+
'@esbuild/win32-ia32@0.25.12':
277
+
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
278
+
engines: {node: '>=18'}
279
cpu: [ia32]
280
os: [win32]
281
282
+
'@esbuild/win32-x64@0.25.12':
283
+
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
284
+
engines: {node: '>=18'}
285
cpu: [x64]
286
os: [win32]
287
288
'@jridgewell/gen-mapping@0.3.13':
289
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
290
291
+
'@jridgewell/remapping@2.3.5':
292
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
293
+
294
'@jridgewell/resolve-uri@3.1.2':
295
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
296
engines: {node: '>=6.0.0'}
···
298
'@jridgewell/sourcemap-codec@1.5.5':
299
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
300
301
+
'@jridgewell/trace-mapping@0.3.31':
302
+
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
303
304
+
'@rollup/rollup-android-arm-eabi@4.52.5':
305
+
resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
306
cpu: [arm]
307
os: [android]
308
309
+
'@rollup/rollup-android-arm64@4.52.5':
310
+
resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
311
cpu: [arm64]
312
os: [android]
313
314
+
'@rollup/rollup-darwin-arm64@4.52.5':
315
+
resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
316
cpu: [arm64]
317
os: [darwin]
318
319
+
'@rollup/rollup-darwin-x64@4.52.5':
320
+
resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
321
cpu: [x64]
322
os: [darwin]
323
324
+
'@rollup/rollup-freebsd-arm64@4.52.5':
325
+
resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
326
cpu: [arm64]
327
os: [freebsd]
328
329
+
'@rollup/rollup-freebsd-x64@4.52.5':
330
+
resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
331
cpu: [x64]
332
os: [freebsd]
333
334
+
'@rollup/rollup-linux-arm-gnueabihf@4.52.5':
335
+
resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
336
cpu: [arm]
337
os: [linux]
338
339
+
'@rollup/rollup-linux-arm-musleabihf@4.52.5':
340
+
resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
341
cpu: [arm]
342
os: [linux]
343
344
+
'@rollup/rollup-linux-arm64-gnu@4.52.5':
345
+
resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
346
cpu: [arm64]
347
os: [linux]
348
349
+
'@rollup/rollup-linux-arm64-musl@4.52.5':
350
+
resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
351
cpu: [arm64]
352
os: [linux]
353
354
+
'@rollup/rollup-linux-loong64-gnu@4.52.5':
355
+
resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
356
cpu: [loong64]
357
os: [linux]
358
359
+
'@rollup/rollup-linux-ppc64-gnu@4.52.5':
360
+
resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
361
cpu: [ppc64]
362
os: [linux]
363
364
+
'@rollup/rollup-linux-riscv64-gnu@4.52.5':
365
+
resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
366
cpu: [riscv64]
367
os: [linux]
368
369
+
'@rollup/rollup-linux-riscv64-musl@4.52.5':
370
+
resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
371
cpu: [riscv64]
372
os: [linux]
373
374
+
'@rollup/rollup-linux-s390x-gnu@4.52.5':
375
+
resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
376
cpu: [s390x]
377
os: [linux]
378
379
+
'@rollup/rollup-linux-x64-gnu@4.52.5':
380
+
resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
381
cpu: [x64]
382
os: [linux]
383
384
+
'@rollup/rollup-linux-x64-musl@4.52.5':
385
+
resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
386
cpu: [x64]
387
os: [linux]
388
389
+
'@rollup/rollup-openharmony-arm64@4.52.5':
390
+
resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
391
+
cpu: [arm64]
392
+
os: [openharmony]
393
+
394
+
'@rollup/rollup-win32-arm64-msvc@4.52.5':
395
+
resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
396
cpu: [arm64]
397
os: [win32]
398
399
+
'@rollup/rollup-win32-ia32-msvc@4.52.5':
400
+
resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
401
cpu: [ia32]
402
os: [win32]
403
404
+
'@rollup/rollup-win32-x64-gnu@4.52.5':
405
+
resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
406
cpu: [x64]
407
os: [win32]
408
409
+
'@rollup/rollup-win32-x64-msvc@4.52.5':
410
+
resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
411
+
cpu: [x64]
412
+
os: [win32]
413
414
+
'@tauri-apps/api@2.9.0':
415
+
resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==}
416
417
+
'@tauri-apps/cli-darwin-arm64@2.9.3':
418
+
resolution: {integrity: sha512-W8FQXZXQmQ0Fmj9UJXNrm2mLdIaLLriKVY7o/FzmizyIKTPIvHjfZALTNybbpTQRbJvKoGHLrW1DNzAWVDWJYg==}
419
engines: {node: '>= 10'}
420
cpu: [arm64]
421
os: [darwin]
422
423
+
'@tauri-apps/cli-darwin-x64@2.9.3':
424
+
resolution: {integrity: sha512-zDwu40rlshijt3TU6aRvzPUyVpapsx1sNfOlreDMTaMelQLHl6YoQzSRpLHYwrHrhimxyX2uDqnKIiuGel0Lhg==}
425
engines: {node: '>= 10'}
426
cpu: [x64]
427
os: [darwin]
428
429
+
'@tauri-apps/cli-linux-arm-gnueabihf@2.9.3':
430
+
resolution: {integrity: sha512-+Oc2OfcTRwYtW93VJqd/HOk77buORwC9IToj/qsEvM7bTMq6Kda4alpZprzwrCHYANSw+zD8PgjJdljTpe4p+g==}
431
engines: {node: '>= 10'}
432
cpu: [arm]
433
os: [linux]
434
435
+
'@tauri-apps/cli-linux-arm64-gnu@2.9.3':
436
+
resolution: {integrity: sha512-59GqU/J1n9wFyAtleoQOaU0oVIo+kwQynEw4meFDoKRXszKGor6lTsbsS3r0QKLSPbc0o/yYGJhqqCtkYjb/eg==}
437
engines: {node: '>= 10'}
438
cpu: [arm64]
439
os: [linux]
440
441
+
'@tauri-apps/cli-linux-arm64-musl@2.9.3':
442
+
resolution: {integrity: sha512-fzvG+jEn5/iYGNH6Z2IRMheYFC4pJdXa19BR9fFm6Bdn2cuajRLDKdUcEME/DCtwqclphXtFZTrT4oezY5vI/A==}
443
engines: {node: '>= 10'}
444
cpu: [arm64]
445
os: [linux]
446
447
+
'@tauri-apps/cli-linux-riscv64-gnu@2.9.3':
448
+
resolution: {integrity: sha512-qV8DZXI/fZwawk6T3Th1g6smiNC2KeQTk7XFgKvqZ6btC01z3UTsQmNGvI602zwm3Ld1TBZb4+rEWu2QmQimmw==}
449
+
engines: {node: '>= 10'}
450
+
cpu: [riscv64]
451
+
os: [linux]
452
+
453
+
'@tauri-apps/cli-linux-x64-gnu@2.9.3':
454
+
resolution: {integrity: sha512-tquyEONCNRfqEBWEe4eAHnxFN5yY5lFkCuD4w79XLIovUxVftQ684+xLp7zkhntkt4y20SMj2AgJa/+MOlx4Kg==}
455
engines: {node: '>= 10'}
456
cpu: [x64]
457
os: [linux]
458
459
+
'@tauri-apps/cli-linux-x64-musl@2.9.3':
460
+
resolution: {integrity: sha512-v2cBIB/6ji8DL+aiL5QUykU3ZO8OoJGyx50/qv2HQVzkf85KdaYSis3D/oVRemN/pcDz+vyCnnL3XnzFnDl4JQ==}
461
engines: {node: '>= 10'}
462
cpu: [x64]
463
os: [linux]
464
465
+
'@tauri-apps/cli-win32-arm64-msvc@2.9.3':
466
+
resolution: {integrity: sha512-ZGvBy7nvrHPbE0HeKp/ioaiw8bNgAHxWnb7JRZ4/G0A+oFj0SeSFxl9k5uU6FKnM7bHM23Gd1oeaDex9g5Fceg==}
467
engines: {node: '>= 10'}
468
cpu: [arm64]
469
os: [win32]
470
471
+
'@tauri-apps/cli-win32-ia32-msvc@2.9.3':
472
+
resolution: {integrity: sha512-UsgIwOnpCoY9NK9/65QiwgmWVIE80LE7SwRYVblGtmlY9RYfsYvpbItwsovA/AcHMTiO+OCvS/q9yLeqS3m6Sg==}
473
engines: {node: '>= 10'}
474
cpu: [ia32]
475
os: [win32]
476
477
+
'@tauri-apps/cli-win32-x64-msvc@2.9.3':
478
+
resolution: {integrity: sha512-fmw7NrrHE5m49idCvJAx9T9bsupjdJ0a3p3DPCNCZRGANU6R1tA1L+KTlVuUtdAldX2NqU/9UPo2SCslYKgJHQ==}
479
engines: {node: '>= 10'}
480
cpu: [x64]
481
os: [win32]
482
483
+
'@tauri-apps/cli@2.9.3':
484
+
resolution: {integrity: sha512-BQ7iLUXTQcyG1PpzLWeVSmBCedYDpnA/6Cm/kRFGtqjTf/eVUlyYO5S2ee07tLum3nWwDBWTGFZeruO8yEukfA==}
485
engines: {node: '>= 10'}
486
hasBin: true
487
488
+
'@tauri-apps/plugin-deep-link@2.4.5':
489
+
resolution: {integrity: sha512-Zf2RTj1D9IQQ45/jqW8XTKvql24HqlPjcpv0mV/O2jHQkNe11HOTZBVj6IK37qs+MWV7xZzcmazx/QVZnhAwaQ==}
490
491
+
'@tauri-apps/plugin-http@2.5.4':
492
+
resolution: {integrity: sha512-/i4U/9za3mrytTgfRn5RHneKubZE/dwRmshYwyMvNRlkWjvu1m4Ma72kcbVJMZFGXpkbl+qLyWMGrihtWB76Zg==}
493
494
+
'@tauri-apps/plugin-process@2.3.1':
495
+
resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==}
496
497
+
'@tauri-apps/plugin-shell@2.3.3':
498
+
resolution: {integrity: sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==}
499
500
'@types/animejs@3.1.13':
501
resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==}
···
515
'@types/estree@1.0.8':
516
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
517
518
+
animejs@4.2.2:
519
+
resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==}
520
521
+
babel-plugin-jsx-dom-expressions@0.40.3:
522
+
resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==}
523
peerDependencies:
524
'@babel/core': ^7.20.12
525
526
+
babel-preset-solid@1.9.10:
527
+
resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==}
528
peerDependencies:
529
'@babel/core': ^7.0.0
530
+
solid-js: ^1.9.10
531
peerDependenciesMeta:
532
solid-js:
533
optional: true
534
535
+
baseline-browser-mapping@2.8.25:
536
+
resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
537
+
hasBin: true
538
+
539
+
browserslist@4.27.0:
540
+
resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
541
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
542
hasBin: true
543
544
+
caniuse-lite@1.0.30001754:
545
+
resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==}
546
547
convert-source-map@2.0.0:
548
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
···
550
csstype@3.1.3:
551
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
552
553
+
debug@4.4.3:
554
+
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
555
engines: {node: '>=6.0'}
556
peerDependencies:
557
supports-color: '*'
···
559
supports-color:
560
optional: true
561
562
+
electron-to-chromium@1.5.248:
563
+
resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==}
564
565
entities@6.0.1:
566
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
567
engines: {node: '>=0.12'}
568
569
+
esbuild@0.25.12:
570
+
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
571
+
engines: {node: '>=18'}
572
hasBin: true
573
574
escalade@3.2.0:
575
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
576
engines: {node: '>=6'}
577
578
+
fdir@6.5.0:
579
+
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
580
+
engines: {node: '>=12.0.0'}
581
+
peerDependencies:
582
+
picomatch: ^3 || ^4
583
+
peerDependenciesMeta:
584
+
picomatch:
585
+
optional: true
586
+
587
fsevents@2.3.3:
588
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
589
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
···
628
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
629
hasBin: true
630
631
+
node-releases@2.0.27:
632
+
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
633
634
parse5@7.3.0:
635
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
637
picocolors@1.1.1:
638
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
639
640
+
picomatch@4.0.3:
641
+
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
642
+
engines: {node: '>=12'}
643
+
644
postcss@8.5.6:
645
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
646
engines: {node: ^10 || ^12 || >=14}
647
648
+
rollup@4.52.5:
649
+
resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
650
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
651
hasBin: true
652
···
654
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
655
hasBin: true
656
657
+
seroval-plugins@1.3.3:
658
+
resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==}
659
engines: {node: '>=10'}
660
peerDependencies:
661
seroval: ^1.0
···
664
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
665
engines: {node: '>=10'}
666
667
+
solid-js@1.9.10:
668
+
resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==}
669
670
solid-refresh@0.6.3:
671
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
676
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
677
engines: {node: '>=0.10.0'}
678
679
+
tinyglobby@0.2.15:
680
+
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
681
+
engines: {node: '>=12.0.0'}
682
+
683
+
typescript@5.9.3:
684
+
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
685
engines: {node: '>=14.17'}
686
hasBin: true
687
688
+
update-browserslist-db@1.1.4:
689
+
resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
690
hasBin: true
691
peerDependencies:
692
browserslist: '>= 4.21.0'
693
694
+
vite-plugin-solid@2.11.10:
695
+
resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==}
696
peerDependencies:
697
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
698
solid-js: ^1.7.2
···
701
'@testing-library/jest-dom':
702
optional: true
703
704
+
vite@7.2.2:
705
+
resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==}
706
+
engines: {node: ^20.19.0 || >=22.12.0}
707
hasBin: true
708
peerDependencies:
709
+
'@types/node': ^20.19.0 || >=22.12.0
710
+
jiti: '>=1.21.0'
711
+
less: ^4.0.0
712
lightningcss: ^1.21.0
713
+
sass: ^1.70.0
714
+
sass-embedded: ^1.70.0
715
+
stylus: '>=0.54.8'
716
+
sugarss: ^5.0.0
717
+
terser: ^5.16.0
718
+
tsx: ^4.8.1
719
+
yaml: ^2.4.2
720
peerDependenciesMeta:
721
'@types/node':
722
+
optional: true
723
+
jiti:
724
optional: true
725
less:
726
optional: true
···
736
optional: true
737
terser:
738
optional: true
739
+
tsx:
740
+
optional: true
741
+
yaml:
742
+
optional: true
743
744
vitefu@1.1.1:
745
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
···
754
755
snapshots:
756
757
'@babel/code-frame@7.27.1':
758
dependencies:
759
+
'@babel/helper-validator-identifier': 7.28.5
760
js-tokens: 4.0.0
761
picocolors: 1.1.1
762
763
+
'@babel/compat-data@7.28.5': {}
764
765
+
'@babel/core@7.28.5':
766
dependencies:
767
'@babel/code-frame': 7.27.1
768
+
'@babel/generator': 7.28.5
769
'@babel/helper-compilation-targets': 7.27.2
770
+
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
771
+
'@babel/helpers': 7.28.4
772
+
'@babel/parser': 7.28.5
773
'@babel/template': 7.27.2
774
+
'@babel/traverse': 7.28.5
775
+
'@babel/types': 7.28.5
776
+
'@jridgewell/remapping': 2.3.5
777
convert-source-map: 2.0.0
778
+
debug: 4.4.3
779
gensync: 1.0.0-beta.2
780
json5: 2.2.3
781
semver: 6.3.1
782
transitivePeerDependencies:
783
- supports-color
784
785
+
'@babel/generator@7.28.5':
786
dependencies:
787
+
'@babel/parser': 7.28.5
788
+
'@babel/types': 7.28.5
789
'@jridgewell/gen-mapping': 0.3.13
790
+
'@jridgewell/trace-mapping': 0.3.31
791
jsesc: 3.1.0
792
793
'@babel/helper-compilation-targets@7.27.2':
794
dependencies:
795
+
'@babel/compat-data': 7.28.5
796
'@babel/helper-validator-option': 7.27.1
797
+
browserslist: 4.27.0
798
lru-cache: 5.1.1
799
semver: 6.3.1
800
···
802
803
'@babel/helper-module-imports@7.18.6':
804
dependencies:
805
+
'@babel/types': 7.28.5
806
807
'@babel/helper-module-imports@7.27.1':
808
dependencies:
809
+
'@babel/traverse': 7.28.5
810
+
'@babel/types': 7.28.5
811
transitivePeerDependencies:
812
- supports-color
813
814
+
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
815
dependencies:
816
+
'@babel/core': 7.28.5
817
'@babel/helper-module-imports': 7.27.1
818
+
'@babel/helper-validator-identifier': 7.28.5
819
+
'@babel/traverse': 7.28.5
820
transitivePeerDependencies:
821
- supports-color
822
···
824
825
'@babel/helper-string-parser@7.27.1': {}
826
827
+
'@babel/helper-validator-identifier@7.28.5': {}
828
829
'@babel/helper-validator-option@7.27.1': {}
830
831
+
'@babel/helpers@7.28.4':
832
dependencies:
833
'@babel/template': 7.27.2
834
+
'@babel/types': 7.28.5
835
836
+
'@babel/parser@7.28.5':
837
dependencies:
838
+
'@babel/types': 7.28.5
839
840
+
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
841
dependencies:
842
+
'@babel/core': 7.28.5
843
'@babel/helper-plugin-utils': 7.27.1
844
845
'@babel/template@7.27.2':
846
dependencies:
847
'@babel/code-frame': 7.27.1
848
+
'@babel/parser': 7.28.5
849
+
'@babel/types': 7.28.5
850
851
+
'@babel/traverse@7.28.5':
852
dependencies:
853
'@babel/code-frame': 7.27.1
854
+
'@babel/generator': 7.28.5
855
'@babel/helper-globals': 7.28.0
856
+
'@babel/parser': 7.28.5
857
'@babel/template': 7.27.2
858
+
'@babel/types': 7.28.5
859
+
debug: 4.4.3
860
transitivePeerDependencies:
861
- supports-color
862
863
+
'@babel/types@7.28.5':
864
dependencies:
865
'@babel/helper-string-parser': 7.27.1
866
+
'@babel/helper-validator-identifier': 7.28.5
867
+
868
+
'@esbuild/aix-ppc64@0.25.12':
869
+
optional: true
870
+
871
+
'@esbuild/android-arm64@0.25.12':
872
+
optional: true
873
+
874
+
'@esbuild/android-arm@0.25.12':
875
+
optional: true
876
877
+
'@esbuild/android-x64@0.25.12':
878
optional: true
879
880
+
'@esbuild/darwin-arm64@0.25.12':
881
optional: true
882
883
+
'@esbuild/darwin-x64@0.25.12':
884
optional: true
885
886
+
'@esbuild/freebsd-arm64@0.25.12':
887
optional: true
888
889
+
'@esbuild/freebsd-x64@0.25.12':
890
optional: true
891
892
+
'@esbuild/linux-arm64@0.25.12':
893
optional: true
894
895
+
'@esbuild/linux-arm@0.25.12':
896
optional: true
897
898
+
'@esbuild/linux-ia32@0.25.12':
899
optional: true
900
901
+
'@esbuild/linux-loong64@0.25.12':
902
optional: true
903
904
+
'@esbuild/linux-mips64el@0.25.12':
905
optional: true
906
907
+
'@esbuild/linux-ppc64@0.25.12':
908
optional: true
909
910
+
'@esbuild/linux-riscv64@0.25.12':
911
optional: true
912
913
+
'@esbuild/linux-s390x@0.25.12':
914
optional: true
915
916
+
'@esbuild/linux-x64@0.25.12':
917
optional: true
918
919
+
'@esbuild/netbsd-arm64@0.25.12':
920
optional: true
921
922
+
'@esbuild/netbsd-x64@0.25.12':
923
optional: true
924
925
+
'@esbuild/openbsd-arm64@0.25.12':
926
optional: true
927
928
+
'@esbuild/openbsd-x64@0.25.12':
929
optional: true
930
931
+
'@esbuild/openharmony-arm64@0.25.12':
932
optional: true
933
934
+
'@esbuild/sunos-x64@0.25.12':
935
optional: true
936
937
+
'@esbuild/win32-arm64@0.25.12':
938
optional: true
939
940
+
'@esbuild/win32-ia32@0.25.12':
941
optional: true
942
943
+
'@esbuild/win32-x64@0.25.12':
944
optional: true
945
946
'@jridgewell/gen-mapping@0.3.13':
947
dependencies:
948
'@jridgewell/sourcemap-codec': 1.5.5
949
+
'@jridgewell/trace-mapping': 0.3.31
950
+
951
+
'@jridgewell/remapping@2.3.5':
952
+
dependencies:
953
+
'@jridgewell/gen-mapping': 0.3.13
954
+
'@jridgewell/trace-mapping': 0.3.31
955
956
'@jridgewell/resolve-uri@3.1.2': {}
957
958
'@jridgewell/sourcemap-codec@1.5.5': {}
959
960
+
'@jridgewell/trace-mapping@0.3.31':
961
dependencies:
962
'@jridgewell/resolve-uri': 3.1.2
963
'@jridgewell/sourcemap-codec': 1.5.5
964
965
+
'@rollup/rollup-android-arm-eabi@4.52.5':
966
optional: true
967
968
+
'@rollup/rollup-android-arm64@4.52.5':
969
optional: true
970
971
+
'@rollup/rollup-darwin-arm64@4.52.5':
972
optional: true
973
974
+
'@rollup/rollup-darwin-x64@4.52.5':
975
optional: true
976
977
+
'@rollup/rollup-freebsd-arm64@4.52.5':
978
optional: true
979
980
+
'@rollup/rollup-freebsd-x64@4.52.5':
981
optional: true
982
983
+
'@rollup/rollup-linux-arm-gnueabihf@4.52.5':
984
optional: true
985
986
+
'@rollup/rollup-linux-arm-musleabihf@4.52.5':
987
optional: true
988
989
+
'@rollup/rollup-linux-arm64-gnu@4.52.5':
990
optional: true
991
992
+
'@rollup/rollup-linux-arm64-musl@4.52.5':
993
optional: true
994
995
+
'@rollup/rollup-linux-loong64-gnu@4.52.5':
996
optional: true
997
998
+
'@rollup/rollup-linux-ppc64-gnu@4.52.5':
999
optional: true
1000
1001
+
'@rollup/rollup-linux-riscv64-gnu@4.52.5':
1002
optional: true
1003
1004
+
'@rollup/rollup-linux-riscv64-musl@4.52.5':
1005
optional: true
1006
1007
+
'@rollup/rollup-linux-s390x-gnu@4.52.5':
1008
optional: true
1009
1010
+
'@rollup/rollup-linux-x64-gnu@4.52.5':
1011
optional: true
1012
1013
+
'@rollup/rollup-linux-x64-musl@4.52.5':
1014
optional: true
1015
1016
+
'@rollup/rollup-openharmony-arm64@4.52.5':
1017
optional: true
1018
1019
+
'@rollup/rollup-win32-arm64-msvc@4.52.5':
1020
optional: true
1021
1022
+
'@rollup/rollup-win32-ia32-msvc@4.52.5':
1023
optional: true
1024
1025
+
'@rollup/rollup-win32-x64-gnu@4.52.5':
1026
+
optional: true
1027
1028
+
'@rollup/rollup-win32-x64-msvc@4.52.5':
1029
+
optional: true
1030
1031
+
'@tauri-apps/api@2.9.0': {}
1032
+
1033
+
'@tauri-apps/cli-darwin-arm64@2.9.3':
1034
optional: true
1035
1036
+
'@tauri-apps/cli-darwin-x64@2.9.3':
1037
+
optional: true
1038
+
1039
+
'@tauri-apps/cli-linux-arm-gnueabihf@2.9.3':
1040
optional: true
1041
1042
+
'@tauri-apps/cli-linux-arm64-gnu@2.9.3':
1043
optional: true
1044
1045
+
'@tauri-apps/cli-linux-arm64-musl@2.9.3':
1046
optional: true
1047
1048
+
'@tauri-apps/cli-linux-riscv64-gnu@2.9.3':
1049
optional: true
1050
1051
+
'@tauri-apps/cli-linux-x64-gnu@2.9.3':
1052
optional: true
1053
1054
+
'@tauri-apps/cli-linux-x64-musl@2.9.3':
1055
optional: true
1056
1057
+
'@tauri-apps/cli-win32-arm64-msvc@2.9.3':
1058
optional: true
1059
1060
+
'@tauri-apps/cli-win32-ia32-msvc@2.9.3':
1061
optional: true
1062
1063
+
'@tauri-apps/cli-win32-x64-msvc@2.9.3':
1064
optional: true
1065
1066
+
'@tauri-apps/cli@2.9.3':
1067
optionalDependencies:
1068
+
'@tauri-apps/cli-darwin-arm64': 2.9.3
1069
+
'@tauri-apps/cli-darwin-x64': 2.9.3
1070
+
'@tauri-apps/cli-linux-arm-gnueabihf': 2.9.3
1071
+
'@tauri-apps/cli-linux-arm64-gnu': 2.9.3
1072
+
'@tauri-apps/cli-linux-arm64-musl': 2.9.3
1073
+
'@tauri-apps/cli-linux-riscv64-gnu': 2.9.3
1074
+
'@tauri-apps/cli-linux-x64-gnu': 2.9.3
1075
+
'@tauri-apps/cli-linux-x64-musl': 2.9.3
1076
+
'@tauri-apps/cli-win32-arm64-msvc': 2.9.3
1077
+
'@tauri-apps/cli-win32-ia32-msvc': 2.9.3
1078
+
'@tauri-apps/cli-win32-x64-msvc': 2.9.3
1079
1080
+
'@tauri-apps/plugin-deep-link@2.4.5':
1081
dependencies:
1082
+
'@tauri-apps/api': 2.9.0
1083
1084
+
'@tauri-apps/plugin-http@2.5.4':
1085
dependencies:
1086
+
'@tauri-apps/api': 2.9.0
1087
1088
+
'@tauri-apps/plugin-process@2.3.1':
1089
dependencies:
1090
+
'@tauri-apps/api': 2.9.0
1091
1092
+
'@tauri-apps/plugin-shell@2.3.3':
1093
dependencies:
1094
+
'@tauri-apps/api': 2.9.0
1095
1096
'@types/animejs@3.1.13': {}
1097
1098
'@types/babel__core@7.20.5':
1099
dependencies:
1100
+
'@babel/parser': 7.28.5
1101
+
'@babel/types': 7.28.5
1102
'@types/babel__generator': 7.27.0
1103
'@types/babel__template': 7.4.4
1104
'@types/babel__traverse': 7.28.0
1105
1106
'@types/babel__generator@7.27.0':
1107
dependencies:
1108
+
'@babel/types': 7.28.5
1109
1110
'@types/babel__template@7.4.4':
1111
dependencies:
1112
+
'@babel/parser': 7.28.5
1113
+
'@babel/types': 7.28.5
1114
1115
'@types/babel__traverse@7.28.0':
1116
dependencies:
1117
+
'@babel/types': 7.28.5
1118
1119
'@types/estree@1.0.8': {}
1120
1121
+
animejs@4.2.2: {}
1122
1123
+
babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.28.5):
1124
dependencies:
1125
+
'@babel/core': 7.28.5
1126
'@babel/helper-module-imports': 7.18.6
1127
+
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
1128
+
'@babel/types': 7.28.5
1129
html-entities: 2.3.3
1130
parse5: 7.3.0
1131
1132
+
babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10):
1133
dependencies:
1134
+
'@babel/core': 7.28.5
1135
+
babel-plugin-jsx-dom-expressions: 0.40.3(@babel/core@7.28.5)
1136
optionalDependencies:
1137
+
solid-js: 1.9.10
1138
1139
+
baseline-browser-mapping@2.8.25: {}
1140
+
1141
+
browserslist@4.27.0:
1142
dependencies:
1143
+
baseline-browser-mapping: 2.8.25
1144
+
caniuse-lite: 1.0.30001754
1145
+
electron-to-chromium: 1.5.248
1146
+
node-releases: 2.0.27
1147
+
update-browserslist-db: 1.1.4(browserslist@4.27.0)
1148
1149
+
caniuse-lite@1.0.30001754: {}
1150
1151
convert-source-map@2.0.0: {}
1152
1153
csstype@3.1.3: {}
1154
1155
+
debug@4.4.3:
1156
dependencies:
1157
ms: 2.1.3
1158
1159
+
electron-to-chromium@1.5.248: {}
1160
1161
entities@6.0.1: {}
1162
1163
+
esbuild@0.25.12:
1164
optionalDependencies:
1165
+
'@esbuild/aix-ppc64': 0.25.12
1166
+
'@esbuild/android-arm': 0.25.12
1167
+
'@esbuild/android-arm64': 0.25.12
1168
+
'@esbuild/android-x64': 0.25.12
1169
+
'@esbuild/darwin-arm64': 0.25.12
1170
+
'@esbuild/darwin-x64': 0.25.12
1171
+
'@esbuild/freebsd-arm64': 0.25.12
1172
+
'@esbuild/freebsd-x64': 0.25.12
1173
+
'@esbuild/linux-arm': 0.25.12
1174
+
'@esbuild/linux-arm64': 0.25.12
1175
+
'@esbuild/linux-ia32': 0.25.12
1176
+
'@esbuild/linux-loong64': 0.25.12
1177
+
'@esbuild/linux-mips64el': 0.25.12
1178
+
'@esbuild/linux-ppc64': 0.25.12
1179
+
'@esbuild/linux-riscv64': 0.25.12
1180
+
'@esbuild/linux-s390x': 0.25.12
1181
+
'@esbuild/linux-x64': 0.25.12
1182
+
'@esbuild/netbsd-arm64': 0.25.12
1183
+
'@esbuild/netbsd-x64': 0.25.12
1184
+
'@esbuild/openbsd-arm64': 0.25.12
1185
+
'@esbuild/openbsd-x64': 0.25.12
1186
+
'@esbuild/openharmony-arm64': 0.25.12
1187
+
'@esbuild/sunos-x64': 0.25.12
1188
+
'@esbuild/win32-arm64': 0.25.12
1189
+
'@esbuild/win32-ia32': 0.25.12
1190
+
'@esbuild/win32-x64': 0.25.12
1191
1192
escalade@3.2.0: {}
1193
+
1194
+
fdir@6.5.0(picomatch@4.0.3):
1195
+
optionalDependencies:
1196
+
picomatch: 4.0.3
1197
1198
fsevents@2.3.3:
1199
optional: true
···
1222
1223
nanoid@3.3.11: {}
1224
1225
+
node-releases@2.0.27: {}
1226
1227
parse5@7.3.0:
1228
dependencies:
···
1230
1231
picocolors@1.1.1: {}
1232
1233
+
picomatch@4.0.3: {}
1234
+
1235
postcss@8.5.6:
1236
dependencies:
1237
nanoid: 3.3.11
1238
picocolors: 1.1.1
1239
source-map-js: 1.2.1
1240
1241
+
rollup@4.52.5:
1242
dependencies:
1243
'@types/estree': 1.0.8
1244
optionalDependencies:
1245
+
'@rollup/rollup-android-arm-eabi': 4.52.5
1246
+
'@rollup/rollup-android-arm64': 4.52.5
1247
+
'@rollup/rollup-darwin-arm64': 4.52.5
1248
+
'@rollup/rollup-darwin-x64': 4.52.5
1249
+
'@rollup/rollup-freebsd-arm64': 4.52.5
1250
+
'@rollup/rollup-freebsd-x64': 4.52.5
1251
+
'@rollup/rollup-linux-arm-gnueabihf': 4.52.5
1252
+
'@rollup/rollup-linux-arm-musleabihf': 4.52.5
1253
+
'@rollup/rollup-linux-arm64-gnu': 4.52.5
1254
+
'@rollup/rollup-linux-arm64-musl': 4.52.5
1255
+
'@rollup/rollup-linux-loong64-gnu': 4.52.5
1256
+
'@rollup/rollup-linux-ppc64-gnu': 4.52.5
1257
+
'@rollup/rollup-linux-riscv64-gnu': 4.52.5
1258
+
'@rollup/rollup-linux-riscv64-musl': 4.52.5
1259
+
'@rollup/rollup-linux-s390x-gnu': 4.52.5
1260
+
'@rollup/rollup-linux-x64-gnu': 4.52.5
1261
+
'@rollup/rollup-linux-x64-musl': 4.52.5
1262
+
'@rollup/rollup-openharmony-arm64': 4.52.5
1263
+
'@rollup/rollup-win32-arm64-msvc': 4.52.5
1264
+
'@rollup/rollup-win32-ia32-msvc': 4.52.5
1265
+
'@rollup/rollup-win32-x64-gnu': 4.52.5
1266
+
'@rollup/rollup-win32-x64-msvc': 4.52.5
1267
fsevents: 2.3.3
1268
1269
semver@6.3.1: {}
1270
1271
+
seroval-plugins@1.3.3(seroval@1.3.2):
1272
dependencies:
1273
seroval: 1.3.2
1274
1275
seroval@1.3.2: {}
1276
1277
+
solid-js@1.9.10:
1278
dependencies:
1279
csstype: 3.1.3
1280
seroval: 1.3.2
1281
+
seroval-plugins: 1.3.3(seroval@1.3.2)
1282
1283
+
solid-refresh@0.6.3(solid-js@1.9.10):
1284
dependencies:
1285
+
'@babel/generator': 7.28.5
1286
'@babel/helper-module-imports': 7.27.1
1287
+
'@babel/types': 7.28.5
1288
+
solid-js: 1.9.10
1289
transitivePeerDependencies:
1290
- supports-color
1291
1292
source-map-js@1.2.1: {}
1293
1294
+
tinyglobby@0.2.15:
1295
+
dependencies:
1296
+
fdir: 6.5.0(picomatch@4.0.3)
1297
+
picomatch: 4.0.3
1298
+
1299
+
typescript@5.9.3: {}
1300
1301
+
update-browserslist-db@1.1.4(browserslist@4.27.0):
1302
dependencies:
1303
+
browserslist: 4.27.0
1304
escalade: 3.2.0
1305
picocolors: 1.1.1
1306
1307
+
vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.2):
1308
dependencies:
1309
+
'@babel/core': 7.28.5
1310
'@types/babel__core': 7.20.5
1311
+
babel-preset-solid: 1.9.10(@babel/core@7.28.5)(solid-js@1.9.10)
1312
merge-anything: 5.1.7
1313
+
solid-js: 1.9.10
1314
+
solid-refresh: 0.6.3(solid-js@1.9.10)
1315
+
vite: 7.2.2
1316
+
vitefu: 1.1.1(vite@7.2.2)
1317
transitivePeerDependencies:
1318
- supports-color
1319
1320
+
vite@7.2.2:
1321
dependencies:
1322
+
esbuild: 0.25.12
1323
+
fdir: 6.5.0(picomatch@4.0.3)
1324
+
picomatch: 4.0.3
1325
postcss: 8.5.6
1326
+
rollup: 4.52.5
1327
+
tinyglobby: 0.2.15
1328
optionalDependencies:
1329
fsevents: 2.3.3
1330
1331
+
vitefu@1.1.1(vite@7.2.2):
1332
optionalDependencies:
1333
+
vite: 7.2.2
1334
1335
yallist@3.1.1: {}
+1
-1
public/icon/angle-down-solid.svg
+1
-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
-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
-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
-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
-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
-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
-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
-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
-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
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
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
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
-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
-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
-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
-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
-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
-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
+26
-6
src/Components/App.tsx
···
1
-
import { onMount } from "solid-js";
2
-
import anime from "animejs";
3
4
-
import NavBar from "./NavBar";
5
import PhotoList from "./PhotoList";
6
import PhotoViewer from "./PhotoViewer";
7
import SettingsMenu from "./SettingsMenu";
8
9
let App = () => {
10
onMount(() => {
11
-
anime.set('.settings',
12
{
13
display: 'none',
14
opacity: 0,
15
translateX: '500px'
16
})
17
})
18
19
return (
20
<div class="container">
21
-
<NavBar />
22
-
23
<PhotoList />
24
<PhotoViewer />
25
26
<SettingsMenu />
27
28
<div class="copy-notif">Image Copied!</div>
29
</div>
30
);
31
}
···
1
+
import { createSignal, onMount } from "solid-js";
2
3
import PhotoList from "./PhotoList";
4
import PhotoViewer from "./PhotoViewer";
5
import SettingsMenu from "./SettingsMenu";
6
+
import { animate, utils } from "animejs";
7
+
import { listen } from "@tauri-apps/api/event";
8
9
let App = () => {
10
+
let [ errorText, setErrorText ] = createSignal('');
11
+
12
onMount(() => {
13
+
utils.set('.settings',
14
{
15
display: 'none',
16
opacity: 0,
17
translateX: '500px'
18
})
19
+
20
+
listen<string>('vrcpm-error', ( ev ) => {
21
+
setErrorText(ev.payload);
22
+
23
+
utils.set('.error-notif', { translateX: '-50%', translateY: '-100px' });
24
+
animate('.error-notif', {
25
+
ease: 'outElastic',
26
+
opacity: 1,
27
+
translateY: '0px'
28
+
});
29
+
30
+
setTimeout(() => {
31
+
animate('.error-notif', {
32
+
ease: 'outElastic',
33
+
opacity: 0,
34
+
translateY: '-100px'
35
+
});
36
+
}, 2000);
37
+
});
38
})
39
40
return (
41
<div class="container">
42
<PhotoList />
43
<PhotoViewer />
44
45
<SettingsMenu />
46
47
<div class="copy-notif">Image Copied!</div>
48
+
<div class="error-notif">{ errorText() }</div>
49
</div>
50
);
51
}
+19
-3
src/Components/Managers/PhotoListRenderingManager.tsx
+19
-3
src/Components/Managers/PhotoListRenderingManager.tsx
···
5
6
const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
7
8
export class PhotoListRenderingManager{
9
private _layout: PhotoListRow[] = [];
10
private _canvas!: HTMLCanvasElement;
···
22
23
let lastDateString = null;
24
let row = new PhotoListRow();
25
-
row.Height = 100;
26
27
for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) {
28
let photo = window.PhotoManager.FilteredPhotos[i];
···
60
61
public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){
62
let currentY = 0;
63
-
64
// Loop through each row
65
for (let i = 0; i < this._layout.length; i++) {
66
let row = this._layout[i];
···
124
// ctx.strokeStyle = '#f00';
125
// ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height);
126
127
-
if(!photo.loaded)
128
// If the photo is not loaded, start a new task and load it in that task
129
setTimeout(() => photo.loadImage(), 1);
130
else{
···
136
// Photo is already loaded so we should draw it on the application
137
ctx.globalAlpha = photo.frames / 100;
138
ctx.drawImage(photo.image!, (rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, photo.scaledHeight!);
139
140
if(photo.frames < 100)
141
photo.frames += 10;
···
5
6
const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
7
8
+
let multilayerIcon = new Image();
9
+
multilayerIcon.src = '/icon/layer-group-solid-full.svg';
10
+
11
export class PhotoListRenderingManager{
12
private _layout: PhotoListRow[] = [];
13
private _canvas!: HTMLCanvasElement;
···
25
26
let lastDateString = null;
27
let row = new PhotoListRow();
28
+
row.Height = 0;
29
30
for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) {
31
let photo = window.PhotoManager.FilteredPhotos[i];
···
63
64
public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){
65
let currentY = 0;
66
+
67
// Loop through each row
68
for (let i = 0; i < this._layout.length; i++) {
69
let row = this._layout[i];
···
127
// ctx.strokeStyle = '#f00';
128
// ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height);
129
130
+
if(photo.error){
131
+
ctx.fillStyle = '#fff';
132
+
ctx.textAlign = 'center';
133
+
ctx.textBaseline = 'middle';
134
+
135
+
photo.x = (rowXPos - row.Width / 2) + canvas.width / 2;
136
+
photo.y = currentY - scroll;
137
+
138
+
ctx.font = '18px Rubik'
139
+
ctx.fillText('Error loading image.', photo.x + photo.scaledWidth! / 2, photo.y + photo.scaledHeight! / 2);
140
+
} else if(!photo.loaded)
141
// If the photo is not loaded, start a new task and load it in that task
142
setTimeout(() => photo.loadImage(), 1);
143
else{
···
149
// Photo is already loaded so we should draw it on the application
150
ctx.globalAlpha = photo.frames / 100;
151
ctx.drawImage(photo.image!, (rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, photo.scaledHeight!);
152
+
153
+
if(photo.isMultiLayer)
154
+
ctx.drawImage(multilayerIcon, ((rowXPos - row.Width / 2) + canvas.width / 2) + 5, (currentY - scroll) + 5, 20, 20);
155
156
if(photo.frames < 100)
157
photo.frames += 10;
+84
-16
src/Components/Managers/PhotoManager.tsx
+84
-16
src/Components/Managers/PhotoManager.tsx
···
46
if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD)
47
setHasBeenIndexed(true);
48
49
photoPaths.forEach(( path: string, i: number ) => {
50
let photo
51
···
54
else
55
photo = new Photo(path, false, i);
56
57
-
this.Photos.push(photo);
58
59
if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD)
60
photo.loadMeta();
61
})
62
63
this.Photos = MergeSort(this.Photos);
64
65
console.log(this.Photos.length + ' Photos found.');
66
if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){
67
console.log('No photos found or over bulk load limit, Skipping loading stage.');
68
···
75
76
listen('photo_meta_loaded', ( event: any ) => {
77
let data: PhotoMetadata = event.payload;
78
-
79
let photo = this.Photos.find(x => x.path === data.path);
80
if(!photo)return console.error('Cannot find photo.', data);
81
82
this._lastLoaded = photo.index;
83
84
if(this._onLoadedMeta[photo.index]){
···
96
97
photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1];
98
this._amountLoaded++;
99
-
100
photo.metaLoaded = true;
101
photo.onMetaLoaded();
102
103
if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){
104
this.FilteredPhotos = this.Photos;
···
110
111
listen('photo_create', async ( event: any ) => {
112
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);
116
117
photo.onMetaLoaded = () => this.ReloadFilters();
118
photo.loadMeta();
119
-
120
-
if(!window.SyncManager.IsSyncing()){
121
-
window.SyncManager.TriggerSync();
122
-
}
123
})
124
-
125
listen('photo_remove', ( event: any ) => {
126
this.Photos = this.Photos.filter(x => x.path !== event.payload);
127
-
this.FilteredPhotos = this.FilteredPhotos.filter(x => x.path !== event.payload);
128
-
129
if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path)
130
window.PhotoViewerManager.Close()
131
···
168
public ReloadFilters(){
169
this.FilteredPhotos = [];
170
171
switch(this._filterType){
172
case FilterType.USER:
173
this.Photos.map(p => {
174
if(p.metadata){
175
try{
176
let meta = JSON.parse(p.metadata);
177
-
let photo = meta.players.find(( y: any ) => y.displayName.toLowerCase().includes(this._filter) || y.id === this._filter);
178
179
if(photo)this.FilteredPhotos.push(p);
180
} catch(e){}
···
186
if(p.metadata){
187
try{
188
let meta = JSON.parse(p.metadata);
189
-
let photo = meta.world.name.toLowerCase().includes(this._filter) || meta.world.id === this._filter;
190
-
191
if(photo)this.FilteredPhotos.push(p);
192
} catch(e){}
193
}
···
46
if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD)
47
setHasBeenIndexed(true);
48
49
+
let photoLayers: Photo[] = [];
50
+
51
photoPaths.forEach(( path: string, i: number ) => {
52
let photo
53
···
56
else
57
photo = new Photo(path, false, i);
58
59
+
if(!photo.legacy && photo.splitPath[4]){
60
+
photoLayers.push(photo);
61
+
} else
62
+
this.Photos.push(photo);
63
64
if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD)
65
photo.loadMeta();
66
})
67
68
+
photoLayers.forEach(photo => {
69
+
let type = photo.splitPath[4];
70
+
photo.splitPath.pop();
71
+
72
+
let mainPhotoPath = photo.splitPath.join('_') + '.png';
73
+
let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath);
74
+
75
+
if(!mainPhoto)
76
+
this.Photos.push(photo);
77
+
else{
78
+
mainPhoto.isMultiLayer = true;
79
+
80
+
switch(type){
81
+
case 'Player.png':
82
+
mainPhoto.playerLayer = photo;
83
+
break;
84
+
case 'Environment.png':
85
+
mainPhoto.environmentLayer = photo;
86
+
break;
87
+
}
88
+
}
89
+
});
90
+
91
this.Photos = MergeSort(this.Photos);
92
+
console.log(this.Photos[0]);
93
94
console.log(this.Photos.length + ' Photos found.');
95
+
96
if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){
97
console.log('No photos found or over bulk load limit, Skipping loading stage.');
98
···
105
106
listen('photo_meta_loaded', ( event: any ) => {
107
let data: PhotoMetadata = event.payload;
108
+
109
let photo = this.Photos.find(x => x.path === data.path);
110
if(!photo)return console.error('Cannot find photo.', data);
111
+
// NOTE: this is triggered by multilayer photo layers loading their metadata
112
+
// we don't need to store metadata of those photos as they inherit this
113
+
// data from the main photo.
114
115
+
photo.error = data.error;
116
this._lastLoaded = photo.index;
117
118
if(this._onLoadedMeta[photo.index]){
···
130
131
photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1];
132
this._amountLoaded++;
133
+
134
+
photo.loadingMeta = false;
135
photo.metaLoaded = true;
136
photo.onMetaLoaded();
137
+
138
+
window.PhotoListRenderingManager.ComputeLayout();
139
140
if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){
141
this.FilteredPhotos = this.Photos;
···
147
148
listen('photo_create', async ( event: any ) => {
149
let photo = new Photo(event.payload, false, 0);
150
+
151
+
if(photo.splitPath[4]){
152
+
let type = photo.splitPath[4];
153
+
photo.splitPath.pop();
154
+
155
+
let mainPhotoPath = photo.splitPath.join('_') + '.png';
156
+
let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath);
157
+
158
+
if(!mainPhoto){
159
+
this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this
160
+
this.Photos.splice(0, 0, photo);
161
+
} else{
162
+
mainPhoto.isMultiLayer = true;
163
+
164
+
switch(type){
165
+
case 'Player.png':
166
+
mainPhoto.playerLayer = photo;
167
+
break;
168
+
case 'Environment.png':
169
+
mainPhoto.environmentLayer = photo;
170
+
break;
171
+
}
172
+
}
173
+
} else{
174
+
this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this
175
+
this.Photos.splice(0, 0, photo);
176
+
}
177
178
photo.onMetaLoaded = () => this.ReloadFilters();
179
photo.loadMeta();
180
})
181
+
182
listen('photo_remove', ( event: any ) => {
183
this.Photos = this.Photos.filter(x => x.path !== event.payload);
184
+
185
if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path)
186
window.PhotoViewerManager.Close()
187
···
224
public ReloadFilters(){
225
this.FilteredPhotos = [];
226
227
+
if(this._filter === ''){
228
+
this.FilteredPhotos = this.Photos;
229
+
window.PhotoListRenderingManager.ComputeLayout();
230
+
231
+
return;
232
+
}
233
+
234
switch(this._filterType){
235
case FilterType.USER:
236
this.Photos.map(p => {
237
if(p.metadata){
238
try{
239
let meta = JSON.parse(p.metadata);
240
+
let photo = meta.players.find(( y: any ) =>
241
+
y.displayName.toLowerCase().includes(this._filter) ||
242
+
y.id === this._filter
243
+
);
244
245
if(photo)this.FilteredPhotos.push(p);
246
} catch(e){}
···
252
if(p.metadata){
253
try{
254
let meta = JSON.parse(p.metadata);
255
+
let photo =
256
+
meta.world.name.toLowerCase().includes(this._filter) ||
257
+
meta.world.id === this._filter;
258
+
259
if(photo)this.FilteredPhotos.push(p);
260
} catch(e){}
261
}
-56
src/Components/Managers/SyncManager.tsx
-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
-
}
···
+82
-75
src/Components/PhotoList.tsx
+82
-75
src/Components/PhotoList.tsx
···
1
-
import { onCleanup, onMount } from "solid-js";
2
import { listen } from '@tauri-apps/api/event';
3
import { Window } from "@tauri-apps/api/window";
4
5
-
import anime from "animejs";
6
import FilterMenu from "./FilterMenu";
7
import { ViewState } from "./Managers/ViewManager";
8
import { invoke } from "@tauri-apps/api/core";
9
10
enum ListPopup{
11
FILTERS,
···
13
}
14
15
let PhotoList = () => {
16
-
let photoTreeLoadingContainer: HTMLElement;
17
-
18
let scrollToTop: HTMLElement;
19
let scrollToTopActive = false;
20
21
let photoContainer: HTMLCanvasElement;
22
-
let photoContainerBG: HTMLCanvasElement;
23
24
let filterContainer: HTMLDivElement;
25
26
let ctx: CanvasRenderingContext2D;
27
-
let ctxBG: CanvasRenderingContext2D;
28
29
let scroll: number = 0;
30
let targetScroll: number = 0;
···
32
let quitRender: boolean = true;
33
34
let currentPopup = ListPopup.NONE;
35
36
Window.getCurrent().isVisible().then(visible => {
37
quitRender = !visible;
···
39
40
41
window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => {
42
-
anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 });
43
-
anime({ targets: '.filter-options', opacity: 0, easing: 'easeInOutQuad', duration: 100 });
44
-
anime({ targets: '.reload-photos', opacity: 0, easing: 'easeInOutQuad', duration: 100 });
45
});
46
47
window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => {
48
-
anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 });
49
-
anime({ targets: '.filter-options', opacity: 1, easing: 'easeInOutQuad', duration: 100 });
50
-
anime({ targets: '.reload-photos', opacity: 1, easing: 'easeInOutQuad', duration: 100 });
51
});
52
53
54
window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.PHOTO_VIEWER, () => {
55
-
anime({ targets: photoContainer, opacity: 0, easing: 'easeInOutQuad', duration: 100 });
56
-
anime({ targets: '.filter-options', opacity: 0, easing: 'easeInOutQuad', duration: 100 });
57
-
anime({ targets: '.reload-photos', opacity: 0, easing: 'easeInOutQuad', duration: 100 });
58
});
59
60
window.ViewManager.OnStateTransition(ViewState.PHOTO_VIEWER, ViewState.PHOTO_LIST, () => {
61
-
anime({ targets: photoContainer, opacity: 1, easing: 'easeInOutQuad', duration: 100 });
62
-
anime({ targets: '.filter-options', opacity: 1, easing: 'easeInOutQuad', duration: 100 });
63
-
anime({ targets: '.reload-photos', opacity: 1, easing: 'easeInOutQuad', duration: 100 });
64
});
65
66
···
74
photoContainer.width = window.innerWidth;
75
photoContainer.height = window.innerHeight;
76
77
-
photoContainerBG.width = window.innerWidth;
78
-
photoContainerBG.height = window.innerHeight;
79
-
80
window.PhotoListRenderingManager.ComputeLayout();
81
}
82
83
let closeCurrentPopup = () => {
84
switch(currentPopup){
85
case ListPopup.FILTERS:
86
-
anime({
87
-
targets: filterContainer!,
88
opacity: 0,
89
easing: 'easeInOutQuad',
90
duration: 100,
91
-
complete: () => {
92
filterContainer!.style.display = 'none';
93
currentPopup = ListPopup.NONE;
94
}
···
98
}
99
}
100
101
-
let fps = 0;
102
-
setInterval(() => {
103
-
console.log('FPS: ' + fps);
104
-
fps = 0;
105
-
}, 1000);
106
-
107
let render = () => {
108
if(!quitRender)
109
requestAnimationFrame(render);
···
112
113
if(!scrollToTopActive && scroll > photoContainer.height){
114
scrollToTop.style.display = 'flex';
115
-
anime({ targets: scrollToTop, opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 });
116
117
scrollToTopActive = true;
118
} else if(scrollToTopActive && scroll < photoContainer.height){
119
-
anime({ targets: scrollToTop, opacity: 0, translateY: '-10px', complete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 });
120
scrollToTopActive = false;
121
}
122
123
-
if(!ctx || !ctxBG)return;
124
ctx.clearRect(0, 0, photoContainer.width, photoContainer.height);
125
-
ctxBG.clearRect(0, 0, photoContainerBG.width, photoContainerBG.height);
126
127
scroll = scroll + (targetScroll - scroll) * 0.1;
128
···
137
138
ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2);
139
}
140
-
141
-
ctxBG.drawImage(photoContainer, 0, 0);
142
-
fps += 1;
143
}
144
145
listen('hide-window', () => {
···
154
photoContainer.width = window.innerWidth;
155
photoContainer.height = window.innerHeight;
156
157
-
photoContainerBG.width = window.innerWidth;
158
-
photoContainerBG.height = window.innerHeight;
159
-
160
if(window.PhotoManager.HasFirstLoaded){
161
requestAnimationFrame(render);
162
window.PhotoManager.HasFirstLoaded = false;
···
166
window.PhotoManager.OnLoadingFinished(() => {
167
invoke('close_splashscreen');
168
169
-
anime({
170
-
targets: photoTreeLoadingContainer,
171
-
height: 0,
172
-
easing: 'easeInOutQuad',
173
-
duration: 500,
174
-
opacity: 0,
175
-
complete: () => {
176
-
photoTreeLoadingContainer.style.display = 'none';
177
-
}
178
-
})
179
-
180
-
anime({
181
-
targets: '.reload-photos',
182
opacity: 1,
183
duration: 150,
184
easing: 'easeInOutQuad'
185
})
186
187
window.PhotoListRenderingManager.SetCanvas(photoContainer!);
188
-
window.PhotoListRenderingManager.ComputeLayout();
189
-
190
render();
191
});
192
193
onMount(() => {
194
ctx = photoContainer.getContext('2d')!;
195
-
ctxBG = photoContainerBG.getContext('2d')!;
196
197
window.PhotoManager.Load();
198
199
-
anime.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' });
200
201
photoContainer.onwheel = ( e: WheelEvent ) => {
202
targetScroll += e.deltaY * 2;
···
211
photoContainer.width = window.innerWidth;
212
photoContainer.height = window.innerHeight;
213
214
-
photoContainerBG.width = window.innerWidth;
215
-
photoContainerBG.height = window.innerHeight;
216
-
217
photoContainer.onclick = ( e: MouseEvent ) => {
218
let photo = window.PhotoManager.FilteredPhotos.find(x =>
219
e.clientX > x.x &&
···
240
241
return (
242
<div class="photo-list">
243
-
<div ref={filterContainer!} class="filter-container" style={{
244
-
height: window.PhotoManager.HasBeenIndexed() ? '83px' : '110px',
245
-
width: window.PhotoManager.HasBeenIndexed() ? '600px' : '650px'
246
-
}}>
247
<FilterMenu />
248
</div>
249
-
250
-
<div class="photo-tree-loading" ref={( el ) => photoTreeLoadingContainer = el}>Scanning Photo Tree...</div>
251
252
<div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}>
253
<div class="icon">
254
<img draggable="false" src="/icon/angle-up-solid.svg"></img>
255
</div>
256
</div>
257
-
<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())}>
258
-
<div class="icon" style={{ width: '17px' }}>
259
-
<img draggable="false" width="17" height="17" src="/icon/arrows-rotate-solid.svg"></img>
260
-
</div>
261
-
</div>
262
263
<div class="filter-options">
264
<div>
···
268
269
filterContainer!.style.display = 'block';
270
271
-
anime({
272
-
targets: filterContainer!,
273
opacity: 1,
274
easing: 'easeInOutQuad',
275
duration: 100
276
});
277
-
}} class="icon" style={{ width: '20px', height: '20px', padding: '20px' }}>
278
<img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img>
279
</div>
280
<div class="icon-label">Filters</div>
281
</div>
282
</div>
283
284
<canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas>
285
-
<canvas class="photo-container-bg" ref={( el ) => photoContainerBG = el}></canvas>
286
</div>
287
)
288
}
···
1
+
import { createSignal, onCleanup, onMount, Show } from "solid-js";
2
import { listen } from '@tauri-apps/api/event';
3
import { Window } from "@tauri-apps/api/window";
4
5
import FilterMenu from "./FilterMenu";
6
import { ViewState } from "./Managers/ViewManager";
7
import { invoke } from "@tauri-apps/api/core";
8
+
import { animate, utils } from "animejs";
9
10
enum ListPopup{
11
FILTERS,
···
13
}
14
15
let PhotoList = () => {
16
let scrollToTop: HTMLElement;
17
let scrollToTopActive = false;
18
19
let photoContainer: HTMLCanvasElement;
20
21
let filterContainer: HTMLDivElement;
22
23
let ctx: CanvasRenderingContext2D;
24
25
let scroll: number = 0;
26
let targetScroll: number = 0;
···
28
let quitRender: boolean = true;
29
30
let currentPopup = ListPopup.NONE;
31
+
32
+
let [ updateAvailable, setUpdateAvailable ] = createSignal(false);
33
34
Window.getCurrent().isVisible().then(visible => {
35
quitRender = !visible;
···
37
38
39
window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => {
40
+
animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 });
41
+
animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 });
42
+
animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 });
43
});
44
45
window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => {
46
+
animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' });
47
+
animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 });
48
+
animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 });
49
});
50
51
52
window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.PHOTO_VIEWER, () => {
53
+
animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 });
54
+
animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 });
55
+
animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 });
56
});
57
58
window.ViewManager.OnStateTransition(ViewState.PHOTO_VIEWER, ViewState.PHOTO_LIST, () => {
59
+
animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' });
60
+
animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 });
61
+
animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 });
62
});
63
64
···
72
photoContainer.width = window.innerWidth;
73
photoContainer.height = window.innerHeight;
74
75
window.PhotoListRenderingManager.ComputeLayout();
76
}
77
78
let closeCurrentPopup = () => {
79
switch(currentPopup){
80
case ListPopup.FILTERS:
81
+
animate(filterContainer!, {
82
opacity: 0,
83
+
translateY: '10px',
84
easing: 'easeInOutQuad',
85
duration: 100,
86
+
onComplete: () => {
87
filterContainer!.style.display = 'none';
88
currentPopup = ListPopup.NONE;
89
}
···
93
}
94
}
95
96
let render = () => {
97
if(!quitRender)
98
requestAnimationFrame(render);
···
101
102
if(!scrollToTopActive && scroll > photoContainer.height){
103
scrollToTop.style.display = 'flex';
104
+
animate(scrollToTop, { opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 });
105
106
scrollToTopActive = true;
107
} else if(scrollToTopActive && scroll < photoContainer.height){
108
+
animate(scrollToTop, { opacity: 0, translateY: '-10px', onComplete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 });
109
+
110
scrollToTopActive = false;
111
}
112
113
+
if(!ctx)return;
114
ctx.clearRect(0, 0, photoContainer.width, photoContainer.height);
115
116
scroll = scroll + (targetScroll - scroll) * 0.1;
117
···
126
127
ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2);
128
}
129
}
130
131
listen('hide-window', () => {
···
140
photoContainer.width = window.innerWidth;
141
photoContainer.height = window.innerHeight;
142
143
if(window.PhotoManager.HasFirstLoaded){
144
requestAnimationFrame(render);
145
window.PhotoManager.HasFirstLoaded = false;
···
149
window.PhotoManager.OnLoadingFinished(() => {
150
invoke('close_splashscreen');
151
152
+
animate('.reload-photos', {
153
opacity: 1,
154
duration: 150,
155
easing: 'easeInOutQuad'
156
})
157
158
window.PhotoListRenderingManager.SetCanvas(photoContainer!);
159
render();
160
});
161
162
onMount(() => {
163
+
// Update Stuff
164
+
fetch('https://api.github.com/repos/phaze-the-dumb/VRChat-Photo-Manager/releases/latest')
165
+
.then(data => {
166
+
if(data.status !== 200)return;
167
+
168
+
data.json().then(async data => {
169
+
let currentVersion = await invoke('get_version');
170
+
setUpdateAvailable(data.tag_name !== currentVersion);
171
+
})
172
+
})
173
+
.catch(e => {
174
+
console.error(e);
175
+
setUpdateAvailable(false);
176
+
})
177
+
178
+
// Other Stuff
179
ctx = photoContainer.getContext('2d')!;
180
181
window.PhotoManager.Load();
182
183
+
utils.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' });
184
185
photoContainer.onwheel = ( e: WheelEvent ) => {
186
targetScroll += e.deltaY * 2;
···
195
photoContainer.width = window.innerWidth;
196
photoContainer.height = window.innerHeight;
197
198
photoContainer.onclick = ( e: MouseEvent ) => {
199
let photo = window.PhotoManager.FilteredPhotos.find(x =>
200
e.clientX > x.x &&
···
221
222
return (
223
<div class="photo-list">
224
+
<div ref={filterContainer!} class="filter-container">
225
<FilterMenu />
226
</div>
227
228
<div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}>
229
<div class="icon">
230
<img draggable="false" src="/icon/angle-up-solid.svg"></img>
231
</div>
232
</div>
233
234
<div class="filter-options">
235
<div>
···
239
240
filterContainer!.style.display = 'block';
241
242
+
animate(filterContainer!, {
243
opacity: 1,
244
+
translateY: 0,
245
easing: 'easeInOutQuad',
246
duration: 100
247
});
248
+
}} class="icon">
249
<img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img>
250
</div>
251
<div class="icon-label">Filters</div>
252
</div>
253
+
254
+
<div>
255
+
<div onClick={() => {
256
+
window.location.reload();
257
+
}} class="icon">
258
+
<img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/arrows-rotate-solid.svg"></img>
259
+
</div>
260
+
<div class="icon-label">Reload Photos</div>
261
+
</div>
262
+
263
+
<div>
264
+
<div onClick={() => {
265
+
utils.set('.settings', { display: 'block' });
266
+
animate('.settings', {
267
+
opacity: 1,
268
+
translateX: '0px',
269
+
easing: 'easeInOutQuad',
270
+
duration: 250
271
+
})
272
+
273
+
window.ViewManager.ChangeState(ViewState.SETTINGS);
274
+
}} class="icon">
275
+
<img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/gear-solid-full.svg"></img>
276
+
</div>
277
+
<div class="icon-label">Settings</div>
278
+
</div>
279
+
280
+
<Show when={updateAvailable()}>
281
+
<div>
282
+
<div onClick={() => {
283
+
invoke('open_url', { url: 'https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest' });
284
+
}} class="icon">
285
+
<img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/download-solid-full.svg"></img>
286
+
</div>
287
+
<div class="icon-label">Update Available</div>
288
+
</div>
289
+
</Show>
290
</div>
291
292
<canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas>
293
</div>
294
)
295
}
+210
-86
src/Components/PhotoViewer.tsx
+210
-86
src/Components/PhotoViewer.tsx
···
1
import { For, Show, createEffect, onCleanup, onMount } from "solid-js";
2
import { invoke } from '@tauri-apps/api/core';
3
-
import anime from 'animejs';
4
import { WorldCache } from "./Structs/WorldCache";
5
6
let PhotoViewer = () => {
7
let viewer: HTMLElement;
···
21
let viewerContextMenuButtons: HTMLElement[] = [];
22
23
let allowedToOpenTray = false;
24
-
let trayInAnimation = false;
25
26
let authorProfileButton: HTMLDivElement;
27
28
let switchPhotoWithKey = ( e: KeyboardEvent ) => {
29
switch(e.key){
···
52
}
53
}
54
55
let openTray = () => {
56
-
if(trayOpen || trayInAnimation)return;
57
58
-
trayOpen = true;
59
-
trayInAnimation = true;
60
61
window.CloseAllPopups.forEach(p => p());
62
-
anime({ targets: photoTray, bottom: '0px', duration: 500 });
63
64
-
anime({
65
-
targets: photoControls,
66
bottom: '160px',
67
scale: '0.75',
68
opacity: 0,
69
duration: 500,
70
-
complete: () => {
71
photoControls.style.display = 'none';
72
-
trayInAnimation = false;
73
}
74
});
75
76
photoTrayCloseBtn.style.display = 'flex';
77
-
anime({
78
-
targets: photoTrayCloseBtn,
79
bottom: '160px',
80
opacity: 1,
81
scale: 1,
82
duration: 500
···
84
}
85
86
let copyImage = () => {
87
-
invoke('copy_image', { path: window.PhotoViewerManager.CurrentPhoto()!.path })
88
.then(() => {
89
-
anime.set('.copy-notif', { translateX: '-50%', translateY: '-100px' });
90
-
anime({
91
-
targets: '.copy-notif',
92
opacity: 1,
93
translateY: '0px'
94
});
95
96
setTimeout(() => {
97
-
anime({
98
-
targets: '.copy-notif',
99
opacity: 0,
100
translateY: '-100px'
101
});
···
104
}
105
106
let closeTray = () => {
107
-
if(!trayOpen || trayInAnimation)return;
108
-
trayInAnimation = true;
109
110
window.CloseAllPopups.forEach(p => p());
111
-
anime({ targets: photoTray, bottom: '-150px', duration: 500 });
112
113
-
anime({
114
-
targets: photoTrayCloseBtn,
115
bottom: '10px',
116
scale: '0.75',
117
opacity: 0,
118
duration: 500,
119
-
complete: () => {
120
photoTrayCloseBtn.style.display = 'none';
121
-
trayOpen = false;
122
-
trayInAnimation = false;
123
}
124
});
125
126
photoControls.style.display = 'flex';
127
-
anime({
128
-
targets: photoControls,
129
bottom: '10px',
130
opacity: 1,
131
scale: 1,
132
duration: 500,
133
})
134
}
135
136
onMount(() => {
137
-
anime.set(photoControls, { translateX: '-50%' });
138
-
anime.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' });
139
140
window.addEventListener('keyup', switchPhotoWithKey);
141
142
let contextMenuOpen = false;
143
window.CloseAllPopups.push(() => {
144
contextMenuOpen = false;
145
-
anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' });
146
147
-
anime({
148
-
targets: viewerContextMenu,
149
opacity: 0,
150
easing: 'easeInOutQuad',
151
rotate: '30deg',
152
duration: 100,
153
-
complete: () => {
154
viewerContextMenu.style.display = 'none';
155
}
156
})
157
});
158
159
viewerContextMenuButtons[0].onclick = async () => {
160
window.CloseAllPopups.forEach(p => p());
161
// Context Menu -> Open file location
···
174
if(contextMenuOpen){
175
contextMenuOpen = false;
176
177
-
anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' });
178
179
-
anime({
180
-
targets: viewerContextMenu,
181
opacity: 0,
182
rotate: '30deg',
183
easing: 'easeInOutQuad',
184
duration: 100,
185
-
complete: () => {
186
viewerContextMenu.style.display = 'none';
187
}
188
})
···
193
viewerContextMenu.style.left = e.clientX + 'px';
194
viewerContextMenu.style.display = 'block';
195
196
-
anime.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' });
197
198
-
anime({
199
-
targets: viewerContextMenu,
200
opacity: 1,
201
rotate: '0deg',
202
easing: 'easeInOutQuad',
···
215
imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full";
216
imageViewer.crossOrigin = 'anonymous';
217
218
-
anime({
219
-
targets: imageViewer,
220
opacity: 1,
221
delay: 50,
222
duration: 150,
···
276
let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML;
277
278
authorProfileButton!.style.display = 'flex';
279
-
authorProfileButton!.onclick = () =>
280
invoke('open_url', { url: 'https://vrchat.com/home/user/' + id });
281
} catch(e){
282
console.error(e);
283
console.log('Couldn\'t decode metadata')
···
290
}
291
} else{
292
trayButton.style.display = 'none';
293
closeTray();
294
}
295
}
···
300
if(photo && !isOpen){
301
viewer.style.display = 'flex';
302
303
-
anime({
304
-
targets: viewer,
305
opacity: 1,
306
easing: 'easeInOutQuad',
307
duration: 150
308
});
309
-
310
-
anime({
311
-
targets: '.navbar',
312
-
top: '-50px'
313
-
})
314
315
-
anime.set('.prev-button', { left: '-50px', top: '50%' });
316
-
anime.set('.next-button', { right: '-50px', top: '50%' });
317
318
-
anime({ targets: '.prev-button', left: '0', easing: 'easeInOutQuad', duration: 100 });
319
-
anime({ targets: '.next-button', right: '0', easing: 'easeInOutQuad', duration: 100 });
320
321
window.CloseAllPopups.forEach(p => p());
322
} else if(!photo && isOpen){
323
-
anime({
324
-
targets: viewer,
325
opacity: 0,
326
easing: 'easeInOutQuad',
327
duration: 150,
328
-
complete: () => {
329
viewer.style.display = 'none';
330
}
331
});
332
-
333
-
anime({
334
-
targets: '.navbar',
335
-
top: '0px'
336
-
})
337
338
window.CloseAllPopups.forEach(p => p());
339
340
-
anime({ targets: '.prev-button', top: '75%', easing: 'easeInOutQuad', duration: 100 });
341
-
anime({ targets: '.next-button', top: '75%', easing: 'easeInOutQuad', duration: 100 });
342
}
343
344
isOpen = photo != null;
···
379
)
380
}
381
382
return (
383
<div class="photo-viewer" ref={( el ) => viewer = el}>
384
<div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}>
385
<div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div>
386
<div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div>
387
</div>
388
389
<div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}>
390
-
<div class="icon" style={{ width: '10px', margin: '0' }}>
391
<img draggable="false" src="/icon/x-solid.svg"></img>
392
</div>
393
</div>
394
-
<img class="image-container" ref={( el ) => imageViewer = el} />
395
396
<div class="prev-button" onClick={() => {
397
window.CloseAllPopups.forEach(p => p());
398
window.PhotoViewerManager.PreviousPhoto();
399
}}>
400
-
<div class="icon" style={{ width: '15px', margin: '0' }}>
401
<img draggable="false" src="/icon/arrow-left-solid.svg"></img>
402
</div>
403
</div>
···
406
window.CloseAllPopups.forEach(p => p());
407
window.PhotoViewerManager.NextPhoto();
408
}}>
409
-
<div class="icon" style={{ width: '15px', margin: '0' }}>
410
<img draggable="false" src="/icon/arrow-right-solid.svg"></img>
411
</div>
412
</div>
···
417
onClick={() => closeTray()}
418
ref={( el ) => photoTrayCloseBtn = el}
419
>
420
-
<div class="icon" style={{ width: '12px', margin: '0' }}>
421
<img draggable="false" src="/icon/angle-down-solid.svg"></img>
422
</div>
423
</div>
424
425
<div class="control-buttons" ref={( el ) => photoControls = el}>
426
<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' })}
429
onClick={() => { copyImage(); }}>
430
-
<div class="icon" style={{ width: '12px', margin: '0' }}>
431
<img draggable="false" src="/icon/copy-solid.svg"></img>
432
</div>
433
</div>
434
<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' })}
437
ref={( el ) => trayButton = el}
438
onClick={() => openTray()}
439
>
440
-
<div class="icon" style={{ width: '12px', margin: '0' }}>
441
<img draggable="false" src="/icon/angle-up-solid.svg"></img>
442
</div>
443
</div>
444
445
<div class="viewer-button"
446
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' })}
449
>
450
-
<div class="icon" style={{ width: '12px', margin: '0' }}>
451
<img draggable="false" src="/icon/user-solid.svg"></img>
452
</div>
453
</div>
454
455
<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
-
});
462
})}>
463
-
<div class="icon" style={{ width: '12px', margin: '0' }}>
464
<img draggable="false" src="/icon/trash-solid.svg"></img>
465
</div>
466
</div>
···
1
import { For, Show, createEffect, onCleanup, onMount } from "solid-js";
2
import { invoke } from '@tauri-apps/api/core';
3
import { WorldCache } from "./Structs/WorldCache";
4
+
import { animate, JSAnimation, utils } from "animejs";
5
6
let PhotoViewer = () => {
7
let viewer: HTMLElement;
···
21
let viewerContextMenuButtons: HTMLElement[] = [];
22
23
let allowedToOpenTray = false;
24
25
let authorProfileButton: HTMLDivElement;
26
+
27
+
let photoLayerManager!: HTMLDivElement;
28
29
let switchPhotoWithKey = ( e: KeyboardEvent ) => {
30
switch(e.key){
···
53
}
54
}
55
56
+
let trayAnimation: JSAnimation[] = [];
57
+
58
let openTray = () => {
59
+
if(trayOpen)return;
60
+
trayOpen = true;
61
62
+
trayAnimation.forEach(anim => anim.cancel());
63
64
window.CloseAllPopups.forEach(p => p());
65
+
trayAnimation[0] = animate(photoTray, { bottom: '-150px', duration: 500, ease: 'outElastic' });
66
67
+
trayAnimation[1] = animate(photoControls, {
68
bottom: '160px',
69
+
ease: 'outElastic',
70
scale: '0.75',
71
opacity: 0,
72
duration: 500,
73
+
onComplete: () => {
74
photoControls.style.display = 'none';
75
}
76
});
77
78
photoTrayCloseBtn.style.display = 'flex';
79
+
trayAnimation[2] = animate(photoTrayCloseBtn, {
80
bottom: '160px',
81
+
ease: 'outElastic',
82
opacity: 1,
83
scale: 1,
84
duration: 500
···
86
}
87
88
let copyImage = () => {
89
+
let path;
90
+
let photo = window.PhotoViewerManager.CurrentPhoto()!;
91
+
92
+
switch(layerManagerViewing){
93
+
case LayerManagerView.DEFAULT:
94
+
path = photo.path;
95
+
break;
96
+
case LayerManagerView.ENVIRONMENT:
97
+
path = photo.environmentLayer!.path;
98
+
break;
99
+
case LayerManagerView.PLAYER:
100
+
path = photo.playerLayer!.path;
101
+
break;
102
+
}
103
+
104
+
invoke('copy_image', { path })
105
.then(() => {
106
+
utils.set('.copy-notif', { translateX: '-50%', translateY: '-100px' });
107
+
animate('.copy-notif', {
108
+
ease: 'outElastic',
109
opacity: 1,
110
translateY: '0px'
111
});
112
113
setTimeout(() => {
114
+
animate('.copy-notif', {
115
+
ease: 'outElastic',
116
opacity: 0,
117
translateY: '-100px'
118
});
···
121
}
122
123
let closeTray = () => {
124
+
if(!trayOpen)return;
125
+
trayOpen = false;
126
+
127
+
trayAnimation.forEach(anim => anim.cancel());
128
129
window.CloseAllPopups.forEach(p => p());
130
+
trayAnimation[0] = animate(photoTray, { bottom: '-300px', duration: 500, ease: 'outElastic' });
131
132
+
trayAnimation[2] = animate(photoTrayCloseBtn, {
133
bottom: '10px',
134
scale: '0.75',
135
+
ease: 'outElastic',
136
opacity: 0,
137
duration: 500,
138
+
onComplete: () => {
139
photoTrayCloseBtn.style.display = 'none';
140
}
141
});
142
143
photoControls.style.display = 'flex';
144
+
trayAnimation[1] = animate(photoControls, {
145
bottom: '10px',
146
+
ease: 'outElastic',
147
opacity: 1,
148
scale: 1,
149
duration: 500,
150
})
151
}
152
153
+
let resizeImage = () => {
154
+
let dstWidth;
155
+
let dstHeight;
156
+
157
+
let imgHeight = imageViewer.naturalHeight;
158
+
let imgWidth = imageViewer.naturalWidth;
159
+
160
+
if(
161
+
imgWidth / window.innerWidth <
162
+
imgHeight / window.innerHeight
163
+
) {
164
+
dstWidth = imgWidth * (window.innerHeight / imgHeight);
165
+
dstHeight = window.innerHeight;
166
+
} else{
167
+
dstWidth = window.innerWidth;
168
+
dstHeight = imgHeight * (window.innerWidth / imgWidth);
169
+
}
170
+
171
+
imageViewer.style.width = dstWidth + 'px';
172
+
imageViewer.style.height = dstHeight + 'px';
173
+
}
174
+
175
onMount(() => {
176
+
utils.set(photoControls, { translateX: '-50%' });
177
+
utils.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' });
178
+
utils.set(photoLayerManager, { translateY: '20px', opacity: 0, display: 'none' });
179
180
window.addEventListener('keyup', switchPhotoWithKey);
181
+
window.addEventListener('resize', () => resizeImage());
182
183
let contextMenuOpen = false;
184
window.CloseAllPopups.push(() => {
185
contextMenuOpen = false;
186
+
utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' });
187
188
+
animate(viewerContextMenu, {
189
opacity: 0,
190
easing: 'easeInOutQuad',
191
rotate: '30deg',
192
duration: 100,
193
+
onComplete: () => {
194
viewerContextMenu.style.display = 'none';
195
}
196
})
197
});
198
199
+
window.CloseAllPopups.push(() => {
200
+
layerManagerOpen = false;
201
+
if(layerManagerAnimation)layerManagerAnimation.cancel();
202
+
203
+
layerManagerAnimation = animate(photoLayerManager, { translateY: '20px', opacity: 0, duration: 100, onComplete: () => utils.set(photoLayerManager, { display: 'none' }) });
204
+
});
205
+
206
viewerContextMenuButtons[0].onclick = async () => {
207
window.CloseAllPopups.forEach(p => p());
208
// Context Menu -> Open file location
···
221
if(contextMenuOpen){
222
contextMenuOpen = false;
223
224
+
utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' });
225
226
+
animate(viewerContextMenu, {
227
opacity: 0,
228
rotate: '30deg',
229
easing: 'easeInOutQuad',
230
duration: 100,
231
+
onComplete: () => {
232
viewerContextMenu.style.display = 'none';
233
}
234
})
···
239
viewerContextMenu.style.left = e.clientX + 'px';
240
viewerContextMenu.style.display = 'block';
241
242
+
utils.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' });
243
244
+
animate(viewerContextMenu, {
245
opacity: 1,
246
rotate: '0deg',
247
easing: 'easeInOutQuad',
···
260
imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full";
261
imageViewer.crossOrigin = 'anonymous';
262
263
+
imageViewer.onload = () => { resizeImage(); }
264
+
265
+
animate(imageViewer, {
266
opacity: 1,
267
delay: 50,
268
duration: 150,
···
322
let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML;
323
324
authorProfileButton!.style.display = 'flex';
325
+
authorProfileButton!.onclick = () => {
326
+
console.log(id);
327
invoke('open_url', { url: 'https://vrchat.com/home/user/' + id });
328
+
}
329
} catch(e){
330
console.error(e);
331
console.log('Couldn\'t decode metadata')
···
338
}
339
} else{
340
trayButton.style.display = 'none';
341
+
authorProfileButton!.style.display = 'none';
342
+
343
closeTray();
344
}
345
}
···
350
if(photo && !isOpen){
351
viewer.style.display = 'flex';
352
353
+
animate(viewer, {
354
opacity: 1,
355
easing: 'easeInOutQuad',
356
duration: 150
357
});
358
359
+
utils.set('.prev-button', { left: '-50px', top: '50%' });
360
+
utils.set('.next-button', { right: '-50px', top: '50%' });
361
362
+
animate('.prev-button', { left: '0', easing: 'easeInOutQuad', duration: 100 });
363
+
animate('.next-button', { right: '0', easing: 'easeInOutQuad', duration: 100 });
364
365
window.CloseAllPopups.forEach(p => p());
366
} else if(!photo && isOpen){
367
+
animate(viewer, {
368
opacity: 0,
369
easing: 'easeInOutQuad',
370
duration: 150,
371
+
onComplete: () => {
372
viewer.style.display = 'none';
373
}
374
});
375
376
window.CloseAllPopups.forEach(p => p());
377
378
+
animate('.prev-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 });
379
+
animate('.next-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 });
380
}
381
382
isOpen = photo != null;
···
417
)
418
}
419
420
+
enum LayerManagerView{
421
+
DEFAULT,
422
+
PLAYER,
423
+
ENVIRONMENT
424
+
}
425
+
426
+
let layerManagerOpen = false;
427
+
let layerManagerAnimation: null | JSAnimation = null;
428
+
let layerManagerViewing = LayerManagerView.DEFAULT;
429
+
430
+
let toggleLayerManager = () => {
431
+
if(layerManagerOpen){
432
+
// Close
433
+
layerManagerOpen = false;
434
+
if(layerManagerAnimation)layerManagerAnimation.cancel();
435
+
436
+
layerManagerAnimation = animate(photoLayerManager, { translateY: '20px', opacity: 0, duration: 100, onComplete: () => utils.set(photoLayerManager, { display: 'none' }) });
437
+
} else{
438
+
// Open
439
+
layerManagerOpen = true;
440
+
if(layerManagerAnimation)layerManagerAnimation.cancel();
441
+
442
+
utils.set(photoLayerManager, { display: 'block' });
443
+
layerManagerAnimation = animate(photoLayerManager, { translateY: '0px', opacity: 1, duration: 100 });
444
+
}
445
+
}
446
+
447
return (
448
<div class="photo-viewer" ref={( el ) => viewer = el}>
449
+
<div class="photo-layer-manager" ref={photoLayerManager}>
450
+
<Show when={window.PhotoViewerManager.CurrentPhoto()?.playerLayer}>
451
+
<div class="photo-layer-manager-layer" onClick={() => {
452
+
let photo = window.PhotoViewerManager.CurrentPhoto()?.playerLayer;
453
+
if(!photo)return;
454
+
455
+
layerManagerViewing = LayerManagerView.PLAYER;
456
+
457
+
imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full";
458
+
imageViewer.crossOrigin = 'anonymous';
459
+
}}>Player Layer</div>
460
+
</Show>
461
+
<Show when={window.PhotoViewerManager.CurrentPhoto()?.environmentLayer}>
462
+
<div class="photo-layer-manager-layer" onClick={() => {
463
+
let photo = window.PhotoViewerManager.CurrentPhoto()?.environmentLayer;
464
+
if(!photo)return;
465
+
466
+
layerManagerViewing = LayerManagerView.ENVIRONMENT;
467
+
468
+
imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full";
469
+
imageViewer.crossOrigin = 'anonymous';
470
+
}}>Environment Layer</div>
471
+
</Show>
472
+
<div class="photo-layer-manager-layer" onClick={() => {
473
+
let photo = window.PhotoViewerManager.CurrentPhoto();
474
+
if(!photo)return;
475
+
476
+
layerManagerViewing = LayerManagerView.DEFAULT;
477
+
478
+
imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full";
479
+
imageViewer.crossOrigin = 'anonymous';
480
+
}}>Default Layer</div>
481
+
</div>
482
+
483
<div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}>
484
<div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div>
485
<div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div>
486
</div>
487
488
<div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}>
489
+
<div class="icon-small" style={{ width: '10px', margin: '0' }}>
490
<img draggable="false" src="/icon/x-solid.svg"></img>
491
</div>
492
</div>
493
+
494
+
<div style={{
495
+
width: '100%',
496
+
height: '100%',
497
+
display: 'flex',
498
+
"justify-content": 'center',
499
+
'align-items': 'center'
500
+
}}>
501
+
<img class="image-container" ref={( el ) => imageViewer = el} />
502
+
</div>
503
504
<div class="prev-button" onClick={() => {
505
window.CloseAllPopups.forEach(p => p());
506
window.PhotoViewerManager.PreviousPhoto();
507
}}>
508
+
<div class="icon-small" style={{ width: '15px', margin: '0' }}>
509
<img draggable="false" src="/icon/arrow-left-solid.svg"></img>
510
</div>
511
</div>
···
514
window.CloseAllPopups.forEach(p => p());
515
window.PhotoViewerManager.NextPhoto();
516
}}>
517
+
<div class="icon-small" style={{ width: '15px', margin: '0' }}>
518
<img draggable="false" src="/icon/arrow-right-solid.svg"></img>
519
</div>
520
</div>
···
525
onClick={() => closeTray()}
526
ref={( el ) => photoTrayCloseBtn = el}
527
>
528
+
<div class="icon-small" style={{ width: '12px', margin: '0' }}>
529
<img draggable="false" src="/icon/angle-down-solid.svg"></img>
530
</div>
531
</div>
532
533
<div class="control-buttons" ref={( el ) => photoControls = el}>
534
<div class="viewer-button"
535
+
onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })}
536
+
onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })}
537
onClick={() => { copyImage(); }}>
538
+
<div class="icon-small" style={{ width: '12px', margin: '0' }}>
539
<img draggable="false" src="/icon/copy-solid.svg"></img>
540
</div>
541
</div>
542
<div class="viewer-button" style={{ width: '50px' }}
543
+
onMouseOver={( el ) => animate(el.currentTarget, { width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })}
544
+
onMouseLeave={( el ) => animate(el.currentTarget, { width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })}
545
ref={( el ) => trayButton = el}
546
onClick={() => openTray()}
547
>
548
+
<div class="icon-small" style={{ width: '12px', margin: '0' }}>
549
<img draggable="false" src="/icon/angle-up-solid.svg"></img>
550
</div>
551
</div>
552
553
<div class="viewer-button"
554
ref={authorProfileButton!}
555
+
onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })}
556
+
onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })}
557
>
558
+
<div class="icon-small" style={{ width: '12px', margin: '0' }}>
559
<img draggable="false" src="/icon/user-solid.svg"></img>
560
</div>
561
</div>
562
+
563
+
<Show when={window.PhotoViewerManager.CurrentPhoto()?.isMultiLayer}>
564
+
<div class="viewer-button"
565
+
onClick={toggleLayerManager}
566
+
onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })}
567
+
onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })}
568
+
>
569
+
<div class="icon-small" style={{ width: '17px', margin: '0' }}>
570
+
<img draggable="false" src="/icon/layer-group-solid-full.svg"></img>
571
+
</div>
572
+
</div>
573
+
</Show>
574
575
<div class="viewer-button"
576
+
onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })}
577
+
onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })}
578
+
onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("Are you sure you want to delete this photo?", async () => {
579
+
let photo = window.PhotoViewerManager.CurrentPhoto();
580
+
if(!photo)return;
581
+
582
+
invoke("delete_photo", { path: photo.path });
583
+
584
+
if(photo.playerLayer)invoke("delete_photo", { path: photo.playerLayer.path });
585
+
if(photo.environmentLayer)invoke("delete_photo", { path: photo.environmentLayer.path });
586
})}>
587
+
<div class="icon-small" style={{ width: '12px', margin: '0' }}>
588
<img draggable="false" src="/icon/trash-solid.svg"></img>
589
</div>
590
</div>
+180
-143
src/Components/SettingsMenu.tsx
+180
-143
src/Components/SettingsMenu.tsx
···
1
import { onCleanup, onMount, Show } from "solid-js";
2
import { bytesToFormatted } from "../utils";
3
import { invoke } from '@tauri-apps/api/core';
4
-
import anime from "animejs";
5
import { ViewState } from "./Managers/ViewManager";
6
7
let SettingsMenu = () => {
8
-
let sliderBar: HTMLElement;
9
-
let settingsContainer: HTMLElement;
10
-
let currentButton = 0;
11
-
let lastClickedButton = -1;
12
let finalPathConfirm: HTMLElement;
13
let finalPathInput: HTMLElement;
14
let finalPathData: string;
···
17
let closeWithKey = ( e: KeyboardEvent ) => {
18
if(e.key === 'Escape'){
19
window.ViewManager.ChangeState(ViewState.PHOTO_LIST);
20
-
anime({
21
-
targets: '.settings',
22
opacity: 0,
23
translateX: '500px',
24
easing: 'easeInOutQuad',
25
duration: 250,
26
-
complete: () => {
27
-
anime.set('.settings', { display: 'none' });
28
}
29
})
30
}
···
34
if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){
35
invoke('set_config_value_string', { key: 'transparent', value: 'true' });
36
37
-
anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 });
38
-
anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 });
39
} else{
40
invoke('set_config_value_string', { key: 'transparent', value: 'false' });
41
42
-
anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 });
43
-
anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 });
44
}
45
46
-
let sliderMouseDown = false;
47
-
let mouseStartX = 0;
48
49
-
let width = window.innerWidth;
50
-
let buttons = [ 370, 680 ];
51
52
-
let sliderPos = width / 2 - buttons[currentButton];
53
-
let sliderScale = width / (buttons[1] - buttons[0]);
54
55
-
let render = () => {
56
-
requestAnimationFrame(render);
57
58
-
if(!sliderMouseDown){
59
-
sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25;
60
-
anime.set(sliderBar, { translateX: sliderPos });
61
62
-
settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px';
63
-
}
64
-
}
65
66
-
render();
67
-
anime.set(sliderBar, { translateX: sliderPos });
68
69
-
sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => {
70
-
sliderMouseDown = true;
71
-
mouseStartX = e.touches[0].clientX;
72
-
})
73
74
-
window.addEventListener('touchmove', ( e: TouchEvent ) => {
75
-
if(sliderMouseDown){
76
-
anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) });
77
-
settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px';
78
-
}
79
-
})
80
81
window.addEventListener('keyup', closeWithKey);
82
83
-
window.addEventListener('touchend', ( e: TouchEvent ) => {
84
-
if(sliderMouseDown){
85
-
sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX);
86
87
-
anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) });
88
-
sliderMouseDown = false;
89
90
-
if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){
91
-
let shortestDistance = 0;
92
-
let selectedButton = -1;
93
94
-
buttons.forEach(( pos, indx ) => {
95
-
let dis = Math.abs(sliderPos - (width / 2 - pos));
96
97
-
if(selectedButton === -1){
98
-
shortestDistance = dis;
99
-
selectedButton = indx;
100
-
} else if(shortestDistance > dis){
101
-
shortestDistance = dis;
102
-
selectedButton = indx;
103
-
}
104
-
})
105
106
-
currentButton = selectedButton;
107
-
} else if(lastClickedButton != -1){
108
-
currentButton = lastClickedButton;
109
-
lastClickedButton = -1
110
-
}
111
-
}
112
-
})
113
114
-
sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => {
115
-
sliderMouseDown = true;
116
-
mouseStartX = e.clientX;
117
-
});
118
119
-
window.addEventListener('mousemove', ( e: MouseEvent ) => {
120
-
if(sliderMouseDown){
121
-
anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) });
122
-
settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px';
123
-
settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px';
124
-
}
125
-
})
126
127
-
window.addEventListener('mouseup', ( e: MouseEvent ) => {
128
-
if(sliderMouseDown){
129
-
sliderPos = sliderPos - (mouseStartX - e.clientX);
130
131
-
anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) });
132
-
sliderMouseDown = false;
133
134
-
if(Math.abs(mouseStartX - e.clientX) > 50){
135
-
let shortestDistance = 0;
136
-
let selectedButton = -1;
137
138
-
buttons.forEach(( pos, indx ) => {
139
-
let dis = Math.abs(sliderPos - (width / 2 - pos));
140
141
-
if(selectedButton === -1){
142
-
shortestDistance = dis;
143
-
selectedButton = indx;
144
-
} else if(shortestDistance > dis){
145
-
shortestDistance = dis;
146
-
selectedButton = indx;
147
-
}
148
-
})
149
150
-
currentButton = selectedButton;
151
-
} else if(lastClickedButton != -1){
152
-
currentButton = lastClickedButton;
153
-
lastClickedButton = -1
154
-
}
155
-
}
156
-
})
157
158
-
window.addEventListener('resize', () => {
159
-
width = window.innerWidth;
160
-
sliderPos = width / 2 - buttons[currentButton];
161
-
sliderScale = width / (buttons[1] - buttons[0]);
162
163
-
anime.set(sliderBar, { translateX: sliderPos });
164
-
})
165
166
-
sliderBar.addEventListener('wheel', ( e: WheelEvent ) => {
167
-
if(e.deltaY > 0){
168
-
if(buttons[currentButton + 1])
169
-
currentButton++;
170
-
} else{
171
-
if(buttons[currentButton - 1])
172
-
currentButton--;
173
-
}
174
-
})
175
})
176
177
onCleanup(() => {
···
180
181
return (
182
<div class="settings">
183
-
<div class="settings-container" ref={( el ) => settingsContainer = el}>
184
<div class="settings-block">
185
<h1>Storage Settings</h1>
186
<p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p>
···
199
200
<label for="start-in-bg-check">
201
<div class="selection-box">
202
-
<div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}>
203
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
204
</div>
205
</div>
···
223
224
<label for="start-with-win-check">
225
<div class="selection-box">
226
-
<div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}>
227
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
228
</div>
229
</div>
···
238
if(el.target.checked){
239
invoke('set_config_value_string', { key: 'transparent', value: 'true' });
240
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 });
243
} else{
244
invoke('set_config_value_string', { key: 'transparent', value: 'false' });
245
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 });
248
}
249
}} />
250
Window Transparency
251
252
<label for="transparent-check">
253
<div class="selection-box">
254
-
<div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}>
255
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
256
</div>
257
</div>
···
276
</span>
277
<span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}>
278
<span class="path" style={{ color: 'green' }} onClick={async () => {
279
-
finalPathPreviousData = finalPathData;
280
-
finalPathConfirm.style.display = 'none';
281
282
-
await invoke('change_final_path', { newPath: finalPathData });
283
-
window.location.reload();
284
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
-
})
295
296
-
window.location.reload();
297
}}>
298
Save
299
</span>
···
316
<br />
317
<p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p>
318
</div>
319
-
<div class="settings-block">
320
-
<p>WIP</p>
321
-
</div>
322
</div>
323
324
-
<div class="slide-bar-tri"></div>
325
<div class="slide-bar">
326
<div class="inner-slide-bar" ref={( el ) => sliderBar = el}>
327
<div class="slider-dot"></div>
···
339
<div class="slider-dot"></div>
340
<div class="slider-dot"></div>
341
</div>
342
-
</div>
343
</div>
344
)
345
}
···
1
import { onCleanup, onMount, Show } from "solid-js";
2
import { bytesToFormatted } from "../utils";
3
import { invoke } from '@tauri-apps/api/core';
4
import { ViewState } from "./Managers/ViewManager";
5
+
import { animate, utils } from "animejs";
6
7
let SettingsMenu = () => {
8
+
// let sliderBar: HTMLElement;
9
+
// let settingsContainer: HTMLElement;
10
+
// let currentButton = 0;
11
+
// let lastClickedButton = -1;
12
let finalPathConfirm: HTMLElement;
13
let finalPathInput: HTMLElement;
14
let finalPathData: string;
···
17
let closeWithKey = ( e: KeyboardEvent ) => {
18
if(e.key === 'Escape'){
19
window.ViewManager.ChangeState(ViewState.PHOTO_LIST);
20
+
console.log('h');
21
+
animate('.settings',{
22
opacity: 0,
23
translateX: '500px',
24
easing: 'easeInOutQuad',
25
duration: 250,
26
+
onComplete: () => {
27
+
console.log('h');
28
+
utils.set('.settings', { display: 'none' });
29
}
30
})
31
}
···
35
if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){
36
invoke('set_config_value_string', { key: 'transparent', value: 'true' });
37
38
+
animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 });
39
+
animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 });
40
} else{
41
invoke('set_config_value_string', { key: 'transparent', value: 'false' });
42
43
+
animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 });
44
+
animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 });
45
}
46
47
+
// let sliderMouseDown = false;
48
+
// let mouseStartX = 0;
49
50
+
// let width = window.innerWidth;
51
+
// let buttons = [ 370, 680 ];
52
53
+
// let sliderPos = width / 2 - buttons[currentButton];
54
+
// let sliderScale = width / (buttons[1] - buttons[0]);
55
56
+
// let render = () => {
57
+
// requestAnimationFrame(render);
58
59
+
// if(!sliderMouseDown){
60
+
// sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25;
61
+
// utils.set(sliderBar, { translateX: sliderPos });
62
63
+
// settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px';
64
+
// }
65
+
// }
66
67
+
// render();
68
+
// utils.set(sliderBar, { translateX: sliderPos });
69
70
+
// sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => {
71
+
// sliderMouseDown = true;
72
+
// mouseStartX = e.touches[0].clientX;
73
+
// })
74
75
+
// window.addEventListener('touchmove', ( e: TouchEvent ) => {
76
+
// if(sliderMouseDown){
77
+
// utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) });
78
+
// settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px';
79
+
// }
80
+
// })
81
82
window.addEventListener('keyup', closeWithKey);
83
84
+
// window.addEventListener('touchend', ( e: TouchEvent ) => {
85
+
// if(sliderMouseDown){
86
+
// sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX);
87
88
+
// utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) });
89
+
// sliderMouseDown = false;
90
91
+
// if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){
92
+
// let shortestDistance = 0;
93
+
// let selectedButton = -1;
94
95
+
// buttons.forEach(( pos, indx ) => {
96
+
// let dis = Math.abs(sliderPos - (width / 2 - pos));
97
98
+
// if(selectedButton === -1){
99
+
// shortestDistance = dis;
100
+
// selectedButton = indx;
101
+
// } else if(shortestDistance > dis){
102
+
// shortestDistance = dis;
103
+
// selectedButton = indx;
104
+
// }
105
+
// })
106
107
+
// currentButton = selectedButton;
108
+
// } else if(lastClickedButton != -1){
109
+
// currentButton = lastClickedButton;
110
+
// lastClickedButton = -1
111
+
// }
112
+
// }
113
+
// })
114
115
+
// sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => {
116
+
// sliderMouseDown = true;
117
+
// mouseStartX = e.clientX;
118
+
// });
119
120
+
// window.addEventListener('mousemove', ( e: MouseEvent ) => {
121
+
// if(sliderMouseDown){
122
+
// utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) });
123
+
// settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px';
124
+
// settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px';
125
+
// }
126
+
// })
127
128
+
// window.addEventListener('mouseup', ( e: MouseEvent ) => {
129
+
// if(sliderMouseDown){
130
+
// sliderPos = sliderPos - (mouseStartX - e.clientX);
131
132
+
// utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) });
133
+
// sliderMouseDown = false;
134
135
+
// if(Math.abs(mouseStartX - e.clientX) > 50){
136
+
// let shortestDistance = 0;
137
+
// let selectedButton = -1;
138
139
+
// buttons.forEach(( pos, indx ) => {
140
+
// let dis = Math.abs(sliderPos - (width / 2 - pos));
141
142
+
// if(selectedButton === -1){
143
+
// shortestDistance = dis;
144
+
// selectedButton = indx;
145
+
// } else if(shortestDistance > dis){
146
+
// shortestDistance = dis;
147
+
// selectedButton = indx;
148
+
// }
149
+
// })
150
151
+
// currentButton = selectedButton;
152
+
// } else if(lastClickedButton != -1){
153
+
// currentButton = lastClickedButton;
154
+
// lastClickedButton = -1
155
+
// }
156
+
// }
157
+
// })
158
159
+
// window.addEventListener('resize', () => {
160
+
// width = window.innerWidth;
161
+
// sliderPos = width / 2 - buttons[currentButton];
162
+
// sliderScale = width / (buttons[1] - buttons[0]);
163
164
+
// utils.set(sliderBar, { translateX: sliderPos });
165
+
// })
166
167
+
// sliderBar.addEventListener('wheel', ( e: WheelEvent ) => {
168
+
// if(e.deltaY > 0){
169
+
// if(buttons[currentButton + 1])
170
+
// currentButton++;
171
+
// } else{
172
+
// if(buttons[currentButton - 1])
173
+
// currentButton--;
174
+
// }
175
+
// })
176
})
177
178
onCleanup(() => {
···
181
182
return (
183
<div class="settings">
184
+
<div class="settings-close" onClick={() => {
185
+
window.ViewManager.ChangeState(ViewState.PHOTO_LIST);
186
+
animate('.settings',
187
+
{
188
+
opacity: 0,
189
+
translateX: '500px',
190
+
easing: 'easeInOutQuad',
191
+
duration: 250,
192
+
onComplete: () => {
193
+
utils.set('.settings', { display: 'none' });
194
+
}
195
+
})
196
+
}}>
197
+
<div class="icon"><img draggable="false" src="/icon/x-solid.svg"></img></div>
198
+
</div>
199
+
{/* <div class="settings-container" ref={( el ) => settingsContainer = el}> */}
200
+
<div class="settings-container">
201
<div class="settings-block">
202
<h1>Storage Settings</h1>
203
<p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p>
···
216
217
<label for="start-in-bg-check">
218
<div class="selection-box">
219
+
<div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}>
220
+
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
221
+
</div>
222
+
</div>
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' }}>
241
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
242
</div>
243
</div>
···
261
262
<label for="start-with-win-check">
263
<div class="selection-box">
264
+
<div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}>
265
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
266
</div>
267
</div>
···
276
if(el.target.checked){
277
invoke('set_config_value_string', { key: 'transparent', value: 'true' });
278
279
+
animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 });
280
+
animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 });
281
} else{
282
invoke('set_config_value_string', { key: 'transparent', value: 'false' });
283
284
+
animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 });
285
+
animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 });
286
}
287
}} />
288
Window Transparency
289
290
<label for="transparent-check">
291
<div class="selection-box">
292
+
<div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}>
293
<img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img>
294
</div>
295
</div>
···
314
</span>
315
<span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}>
316
<span class="path" style={{ color: 'green' }} onClick={async () => {
317
+
let changed = await invoke('change_final_path', { newPath: finalPathData });
318
319
+
if(changed){
320
+
finalPathPreviousData = finalPathData;
321
+
finalPathConfirm.style.display = 'none';
322
323
+
window.location.reload();
324
325
+
animate('.settings', {
326
+
opacity: 0,
327
+
translateX: '500px',
328
+
easing: 'easeInOutQuad',
329
+
duration: 250,
330
+
onComplete: () => {
331
+
utils.set('.settings', { display: 'none' });
332
+
}
333
+
})
334
+
335
+
window.location.reload();
336
+
}
337
}}>
338
Save
339
</span>
···
356
<br />
357
<p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p>
358
</div>
359
</div>
360
361
+
{/* <div class="slide-bar-tri"></div>
362
<div class="slide-bar">
363
<div class="inner-slide-bar" ref={( el ) => sliderBar = el}>
364
<div class="slider-dot"></div>
···
376
<div class="slider-dot"></div>
377
<div class="slider-dot"></div>
378
</div>
379
+
</div> */}
380
</div>
381
)
382
}
+43
-16
src/Components/Structs/Photo.ts
+43
-16
src/Components/Structs/Photo.ts
···
6
export class Photo{
7
path: string;
8
loaded: boolean = false;
9
loading: boolean = false;
10
metaLoaded: boolean = false;
11
image?: HTMLCanvasElement;
···
14
height?: number;
15
loadingRotate: number = 0;
16
metadata: any;
17
18
frames: number = 0;
19
shown: boolean = false;
···
29
legacy: boolean = false;
30
index: number = 0;
31
32
public onMetaLoaded: () => void = () => {};
33
34
constructor( path: string, isLegacy: boolean = false, i: number ){
···
37
this.index = i;
38
39
let split = this.path.split('_');
40
41
if(this.legacy)
42
this.dateString = split[2];
43
else
44
this.dateString = split[1];
45
46
let splitDateString = this.dateString.split('-');
47
48
this.date = new Date();
49
···
51
this.date.setMonth(parseInt(splitDateString[1]));
52
this.date.setDate(parseInt(splitDateString[2]));
53
54
-
let resSplit = split[3].split('x');
55
56
-
let width = parseInt(resSplit[0]);
57
-
let height = parseInt(resSplit[1]);
58
59
-
if(!isNaN(width) || !isNaN(height)){
60
-
this.width = width;
61
-
this.height = height;
62
-
63
-
let scale = Vars.PHOTO_HEIGHT / this.height;
64
-
65
-
this.scaledWidth = this.width * scale;
66
-
this.scaledHeight = Vars.PHOTO_HEIGHT;
67
-
}
68
}
69
70
loadMeta(){
71
invoke('load_photo_meta', { photo: this.path });
72
}
73
74
loadImage(){
75
-
if(this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return;
76
-
77
-
// this.loadMeta();
78
if(!this.metaLoaded)return this.loadMeta();
79
80
this.loading = true;
81
-
82
imagesLoading++;
83
84
this.image = document.createElement('canvas');
···
98
this.loading = false;
99
100
imagesLoading--;
101
}
102
}
103
}
···
6
export class Photo{
7
path: string;
8
loaded: boolean = false;
9
+
loadingMeta: boolean = false;
10
loading: boolean = false;
11
metaLoaded: boolean = false;
12
image?: HTMLCanvasElement;
···
15
height?: number;
16
loadingRotate: number = 0;
17
metadata: any;
18
+
19
+
error: boolean = false;
20
21
frames: number = 0;
22
shown: boolean = false;
···
32
legacy: boolean = false;
33
index: number = 0;
34
35
+
splitPath: string[];
36
+
37
+
playerLayer: Photo | null = null;
38
+
environmentLayer: Photo | null = null;
39
+
isMultiLayer = false;
40
+
41
public onMetaLoaded: () => void = () => {};
42
43
constructor( path: string, isLegacy: boolean = false, i: number ){
···
46
this.index = i;
47
48
let split = this.path.split('_');
49
+
this.splitPath = split;
50
51
if(this.legacy)
52
this.dateString = split[2];
53
else
54
this.dateString = split[1];
55
56
+
let timeString;
57
+
if(this.legacy)
58
+
timeString = split[3];
59
+
else
60
+
timeString = split[2];
61
+
62
let splitDateString = this.dateString.split('-');
63
+
let splitTimeString = timeString.split('-');
64
65
this.date = new Date();
66
···
68
this.date.setMonth(parseInt(splitDateString[1]));
69
this.date.setDate(parseInt(splitDateString[2]));
70
71
+
this.date.setHours(parseInt(splitTimeString[0]));
72
+
this.date.setMinutes(parseInt(splitTimeString[1]));
73
+
this.date.setSeconds(parseInt(splitTimeString[2]));
74
+
75
+
let resSplit;
76
+
if(this.legacy)
77
+
resSplit = split[0].split('x')
78
+
else
79
+
resSplit = split[3].split('x')
80
+
81
+
// let width = parseInt(resSplit[0]);
82
+
// let height = parseInt(resSplit[1]);
83
+
84
+
// if(!isNaN(width) || !isNaN(height)){
85
+
// this.width = width;
86
+
// this.height = height;
87
88
+
// let scale = Vars.PHOTO_HEIGHT / this.height;
89
90
+
// this.scaledWidth = this.width * scale;
91
+
// this.scaledHeight = Vars.PHOTO_HEIGHT;
92
+
// }
93
}
94
95
loadMeta(){
96
+
this.loadingMeta = true;
97
invoke('load_photo_meta', { photo: this.path });
98
}
99
100
loadImage(){
101
+
if(this.loadingMeta || this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return;
102
if(!this.metaLoaded)return this.loadMeta();
103
104
this.loading = true;
105
imagesLoading++;
106
107
this.image = document.createElement('canvas');
···
121
this.loading = false;
122
123
imagesLoading--;
124
+
}
125
+
126
+
this.imageEl.onerror = () => {
127
+
console.log('Cannot load image');
128
}
129
}
130
}
+1
src/Components/Structs/PhotoMetadata.ts
+1
src/Components/Structs/PhotoMetadata.ts
+72
src/css/filters.css
+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
+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
+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
+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
+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
+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
+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
-3
src/index.tsx
+9
-3
src/index.tsx
···
9
PhotoViewerManager: PhotoViewerManager;
10
WorldCacheManager: WorldCacheManager;
11
PhotoListRenderingManager: PhotoListRenderingManager;
12
-
SyncManager: SyncManager;
13
ViewManager: ViewManager;
14
15
CloseAllPopups: (() => void)[];
···
22
23
window.oncontextmenu = ( e ) => e.preventDefault();
24
25
import "./styles.css";
26
import App from "./Components/App";
27
import { invoke } from "@tauri-apps/api/core";
28
···
32
import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager";
33
import { WorldCacheManager } from "./Components/Managers/WorldCacheManager";
34
import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager";
35
-
import { SyncManager } from "./Components/Managers/SyncManager";
36
import { ViewManager } from "./Components/Managers/ViewManager";
37
38
window.LoadingManager = new LoadingManager();
···
41
window.PhotoViewerManager = new PhotoViewerManager();
42
window.WorldCacheManager = new WorldCacheManager();
43
window.PhotoListRenderingManager = new PhotoListRenderingManager();
44
-
window.SyncManager = new SyncManager();
45
window.ViewManager = new ViewManager();
46
47
(async () => {
···
9
PhotoViewerManager: PhotoViewerManager;
10
WorldCacheManager: WorldCacheManager;
11
PhotoListRenderingManager: PhotoListRenderingManager;
12
ViewManager: ViewManager;
13
14
CloseAllPopups: (() => void)[];
···
21
22
window.oncontextmenu = ( e ) => e.preventDefault();
23
24
+
import './css/icons.css';
25
+
import './css/tray.css';
26
+
import './css/settings.css';
27
+
import './css/slide-bar.css';
28
+
import './css/viewer.css';
29
+
import './css/filters.css';
30
+
import './css/list.css';
31
+
32
import "./styles.css";
33
+
34
import App from "./Components/App";
35
import { invoke } from "@tauri-apps/api/core";
36
···
40
import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager";
41
import { WorldCacheManager } from "./Components/Managers/WorldCacheManager";
42
import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager";
43
import { ViewManager } from "./Components/Managers/ViewManager";
44
45
window.LoadingManager = new LoadingManager();
···
48
window.PhotoViewerManager = new PhotoViewerManager();
49
window.WorldCacheManager = new WorldCacheManager();
50
window.PhotoListRenderingManager = new PhotoListRenderingManager();
51
window.ViewManager = new ViewManager();
52
53
(async () => {
+11
-767
src/styles.css
+11
-767
src/styles.css
···
7
background: #000;
8
margin: 0;
9
font-family: Rubik, 'Courier New';
10
}
11
12
.loading{
···
24
align-items: center;
25
}
26
27
-
.navbar{
28
-
background: #555a;
29
-
position: fixed;
30
-
top: 0;
31
-
left: 0;
32
-
width: 100%;
33
-
margin-top: -50px;
34
-
padding-top: 50px;
35
-
height: 50px;
36
-
display: flex;
37
-
backdrop-filter: blur(10px);
38
-
-webkit-backdrop-filter: blur(10px);
39
-
z-index: 10;
40
-
box-shadow: #000 0 0 10px;
41
-
}
42
-
43
-
.navbar .tabs{
44
-
width: calc(100% - 450px);
45
-
height: 100%;
46
-
display: flex;
47
-
}
48
-
49
-
.navbar .account{
50
-
width: 100px;
51
-
height: 100%;
52
-
display: flex;
53
-
justify-content: center;
54
-
align-items: center;
55
-
transition: 0.1s;
56
-
cursor: pointer;
57
-
user-select: none;
58
-
-webkit-user-select: none;
59
-
}
60
-
61
-
.navbar .account:hover{
62
-
background: #0005;
63
-
}
64
-
65
-
.navbar .control-lights{
66
-
width: 150px;
67
-
height: 50px;
68
-
display: flex;
69
-
justify-content: center;
70
-
align-items: center;
71
-
}
72
-
73
-
.control-lights .light{
74
-
user-select: none;
75
-
-webkit-user-select: none;
76
-
font-size: 20px;
77
-
text-align: center;
78
-
color: white;
79
-
width: 100%;
80
-
cursor: pointer;
81
-
display: flex;
82
-
justify-content: center;
83
-
align-items: center;
84
-
height: 50px;
85
-
filter: invert(100%);
86
-
}
87
-
88
-
.control-lights .light:hover{
89
-
background: #fff5;
90
-
}
91
-
92
-
.control-lights .light img{
93
-
width: 25%;
94
-
}
95
-
96
-
.icon{
97
-
width: 15px;
98
-
filter: invert(100%);
99
-
display: flex;
100
-
align-items: center;
101
-
justify-content: center;
102
-
height: 100%;
103
-
}
104
-
105
-
.icon-label{
106
-
margin-top: -20px;
107
-
margin-right: -200px;
108
-
width: 200px;
109
-
color: white;
110
-
pointer-events: none;
111
-
transform: translate(40px, -19px);
112
-
opacity: 0;
113
-
transition: 0.25s;
114
-
user-select: none;
115
-
-webkit-user-select: none;
116
-
}
117
-
118
-
.icon:hover ~ .icon-label{
119
-
opacity: 1;
120
-
transform: translate(60px, -19px);
121
-
}
122
-
123
-
.user-pfp{
124
-
width: 35px;
125
-
height: 35px;
126
-
background-size: cover !important;
127
-
background-position: center !important;
128
-
border-radius: 50%;
129
-
margin-right: 10px;
130
-
}
131
-
132
-
.account-dropdown{
133
-
font-size: 20px;
134
-
color: white;
135
-
}
136
-
137
-
.nav-tab{
138
-
color: white;
139
-
width: 150px;
140
-
height: 100%;
141
-
transition: 0.1s;
142
-
cursor: pointer;
143
-
user-select: none;
144
-
-webkit-user-select: none;
145
-
justify-content: center;
146
-
align-items: center;
147
-
display: flex;
148
-
}
149
-
150
-
.nav-tab:hover{
151
-
background: #0005;
152
-
}
153
-
154
-
.dropdown{
155
-
position: fixed;
156
-
right: 125px;
157
-
top: 60px;
158
-
background: #555a;
159
-
height: 60px;
160
-
width: 150px;
161
-
border-radius: 5px;
162
-
backdrop-filter: blur(5px);
163
-
z-index: 10;
164
-
}
165
-
166
-
.dropdown-button{
167
-
width: 100%;
168
-
text-align: center;
169
-
padding: 5.5px 0;
170
-
color: #aaa;
171
-
cursor: pointer;
172
-
user-select: none;
173
-
-webkit-user-select: none;
174
-
transition: 0.1s;
175
-
}
176
-
177
-
.dropdown-button:hover{
178
-
color: #fff;
179
-
}
180
-
181
-
.photo-list{
182
-
width: 100%;
183
-
height: 100%;
184
-
position: fixed;
185
-
top: 0;
186
-
left: 0;
187
-
overflow: hidden;
188
-
}
189
-
190
-
.filter-options{
191
-
position: fixed;
192
-
top: 55px;
193
-
left: 5px;
194
-
width: 40px;
195
-
height: 50px;
196
-
}
197
-
198
-
.filter-options img{
199
-
cursor: pointer;
200
-
user-select: none;
201
-
-webkit-user-select: none;
202
-
}
203
-
204
-
.filter-container{
205
-
display: none;
206
-
position: fixed;
207
-
bottom: 0;
208
-
left: 50%;
209
-
width: 600px;
210
-
height: 83px;
211
-
transform: translate(-50%);
212
-
padding: 10px;
213
-
border-radius: 5px 5px 0 0;
214
-
backdrop-filter: blur(5px);
215
-
-webkit-backdrop-filter: blur(5px);
216
-
background: #555a;
217
-
color: #fff;
218
-
text-align: center;
219
-
box-shadow: #0005 0 0 10px;
220
-
opacity: 0;
221
-
}
222
-
223
-
.filter-container > .filter-title{
224
-
font-size: 30px;
225
-
}
226
-
227
-
.filter-type-select{
228
-
display: flex;
229
-
justify-content: center;
230
-
align-items: center;
231
-
width: 75%;
232
-
margin: auto;
233
-
}
234
-
235
-
.filter-type-select > div{
236
-
width: 100%;
237
-
border: #fff 4px solid;
238
-
border-left: #fff 2px solid;
239
-
border-right: #fff 2px solid;
240
-
padding: 5px 0;
241
-
cursor: pointer;
242
-
user-select: none;
243
-
-webkit-user-select: none;
244
-
}
245
-
246
-
.filter-type-select > div:first-child{
247
-
border-left: #fff 4px solid;
248
-
border-radius: 10px 0 0 10px;
249
-
}
250
-
251
-
.filter-type-select > div:last-child{
252
-
border-right: #fff 4px solid;
253
-
border-radius: 0 10px 10px 0;
254
-
}
255
-
256
-
.filter-type-select > .selected-filter{
257
-
background: #00ccff55;
258
-
}
259
-
260
-
.filter-search{
261
-
margin-top: 10px;
262
-
padding: 5px;
263
-
border: #fff 4px solid;
264
-
border-radius: 10px;
265
-
background: #0008;
266
-
outline: none;
267
-
color: white;
268
-
font-size: 15px;
269
-
font-family: 'Rubik';
270
-
width: calc(75% - 18px);
271
-
}
272
-
273
-
.date-list{
274
-
mask-image: linear-gradient(to bottom, #0000, #000, #0000);
275
-
overflow: auto;
276
-
scrollbar-width: thin;
277
-
height: calc(100% - 100px);
278
-
padding: 50px 0;
279
-
}
280
-
281
-
.date-list-date{
282
-
padding: 10px;
283
-
user-select: none;
284
-
-webkit-user-select: none;
285
-
cursor: pointer;
286
-
transition: 0.1s;
287
-
border-radius: 10px;
288
-
}
289
-
290
-
.date-list-date:hover{
291
-
background: #0005;
292
-
box-shadow: inset #0005 0 0 10px;
293
-
}
294
-
295
-
.photo-tree-loading{
296
-
position: fixed;
297
-
top: 0;
298
-
left: 0;
299
-
width: 100%;
300
-
height: 100%;
301
-
display: flex;
302
-
justify-content: center;
303
-
align-items: center;
304
-
color: white;
305
-
font-size: 20px;
306
-
}
307
-
308
-
.loading-bar{
309
-
width: 500px;
310
-
height: 8px;
311
-
border-radius: 12px;
312
-
background: #333;
313
-
margin-top: 10px;
314
-
padding: 2px;
315
-
}
316
-
317
-
.loading-bar-inner{
318
-
width: 0%;
319
-
height: 8px;
320
-
border-radius: 18px;
321
-
background: #00ccff;
322
-
}
323
-
324
-
.photo-container{
325
-
width: 100%;
326
-
height: 100%;
327
-
}
328
-
329
-
.photo-container-bg{
330
-
width: 100%;
331
-
height: 100%;
332
-
position: fixed;
333
-
top: 0;
334
-
left: 0;
335
-
z-index: -1;
336
-
/* filter: blur(100px); */
337
-
}
338
-
339
-
.single-photo-container{
340
-
margin: 10px;
341
-
display: inline-block;
342
-
}
343
-
344
-
.photo-viewer{
345
-
justify-content: center;
346
-
width: 100%;
347
-
height: 100%;
348
-
position: fixed;
349
-
top: 0;
350
-
left: 0;
351
-
z-index: 5;
352
-
background: #0009;
353
-
backdrop-filter: blur(75px);
354
-
-webkit-backdrop-filter: blur(75px);
355
-
opacity: 0;
356
-
display: none;
357
-
}
358
-
359
-
.photo-context-menu{
360
-
position: fixed;
361
-
top: 0;
362
-
left: 0;
363
-
padding: 10px;
364
-
border-radius: 5px;
365
-
backdrop-filter: blur(5px);
366
-
-webkit-backdrop-filter: blur(5px);
367
-
background: #555a;
368
-
color: #aaa;
369
-
box-shadow: #0005 0 0 10px;
370
-
opacity: 0;
371
-
}
372
-
373
-
.photo-context-menu > div{
374
-
padding: 2px 10px;
375
-
width: calc(100% - 10px);
376
-
text-align: center;
377
-
transition: 0.1s;
378
-
}
379
-
380
-
.photo-context-menu > div:hover{
381
-
color: #fff;
382
-
cursor: pointer;
383
-
user-select: none;
384
-
-webkit-user-select: none;
385
-
}
386
-
387
-
.image-container{
388
-
height: 100%;
389
-
background-size: contain !important;
390
-
background-repeat: no-repeat !important;
391
-
background-position: center !important;
392
-
opacity: 0;
393
-
}
394
-
395
-
.viewer-button{
396
-
color: white;
397
-
width: 30px;
398
-
height: 30px;
399
-
display: flex;
400
-
justify-content: center;
401
-
align-items: center;
402
-
border-radius: 50px;
403
-
font-size: 12px;
404
-
background: #8885;
405
-
backdrop-filter: blur(10px);
406
-
-webkit-backdrop-filter: blur(10px);
407
-
user-select: none;
408
-
-webkit-user-select: none;
409
-
cursor: pointer;
410
-
z-index: 7;
411
-
box-shadow: #0008 0 0 10px;
412
-
}
413
-
414
-
.viewer-close{
415
-
position: fixed;
416
-
top: 10px;
417
-
right: 10px;
418
-
width: 35px;
419
-
height: 35px;
420
-
}
421
-
422
-
.prev-button{
423
-
transition: 0.25s;
424
-
position: fixed;
425
-
top: 50%;
426
-
left: 0;
427
-
color: white;
428
-
width: 50px;
429
-
height: 150px;
430
-
display: flex;
431
-
justify-content: center;
432
-
align-items: center;
433
-
transform: translateY(-50%);
434
-
background: rgba(255, 255, 255, 0.144);
435
-
backdrop-filter: blur(50px);
436
-
-webkit-backdrop-filter: blur(50px);
437
-
border-radius: 0 15px 15px 0;
438
-
cursor: pointer;
439
-
user-select: none;
440
-
-webkit-user-select: none;
441
-
box-shadow: #000 0 0 10px;
442
-
}
443
-
444
-
.prev-button:hover{
445
-
background: rgba(255, 255, 255, 0.349);
446
-
}
447
-
448
-
.next-button{
449
-
transition: 0.25s;
450
-
position: fixed;
451
-
top: 50%;
452
-
right: 0;
453
-
color: white;
454
-
width: 50px;
455
-
height: 150px;
456
-
display: flex;
457
-
justify-content: center;
458
-
align-items: center;
459
-
transform: translateY(-50%);
460
-
background: rgba(255, 255, 255, 0.144);
461
-
backdrop-filter: blur(50px);
462
-
-webkit-backdrop-filter: blur(50px);
463
-
border-radius: 15px 0 0 15px;
464
-
cursor: pointer;
465
-
user-select: none;
466
-
-webkit-user-select: none;
467
-
box-shadow: #000 0 0 10px;
468
-
}
469
-
470
-
.next-button:hover{
471
-
background: rgba(255, 255, 255, 0.349);
472
-
}
473
-
474
-
.reload-photos{
475
-
position: fixed;
476
-
top: 70px;
477
-
right: 20px;
478
-
color: white;
479
-
user-select: none;
480
-
-webkit-user-select: none;
481
-
cursor: pointer;
482
-
opacity: 0;
483
-
}
484
-
485
.confirmation-box{
486
position: fixed;
487
top: 0;
···
489
width: 100%;
490
height: 100%;
491
z-index: 15;
492
-
background: #0005;
493
transition: 0.25s;
494
-
backdrop-filter: blur(10px);
495
-
-webkit-backdrop-filter: blur(10px);
496
}
497
498
.confirmation-box-container{
···
552
box-shadow: #000a inset 0 0 10px;
553
}
554
555
-
.control-buttons{
556
-
position: fixed;
557
-
bottom: 10px;
558
-
left: 50%;
559
-
transform: translateX(-50%);
560
-
display: flex;
561
-
}
562
-
563
-
.control-buttons div{
564
-
margin: 0 20px;
565
}
566
567
-
.copy-notif{
568
position: fixed;
569
top: 40px;
570
left: 50%;
571
color: white;
572
transform: translateX(-50%) translateY(-100px);
573
-
background: #8885;
574
padding: 10px 40px;
575
backdrop-filter: blur(10px);
576
-webkit-backdrop-filter: blur(10px);
···
579
z-index: 12;
580
opacity: 0;
581
pointer-events: none;
582
-
}
583
-
584
-
.photo-tray{
585
-
position: fixed;
586
-
bottom: -150px;
587
-
left: 0;
588
-
width: 100%;
589
-
height: 150px;
590
-
background: #7778;
591
-
backdrop-filter: blur(10px);
592
-
-webkit-backdrop-filter: blur(10px);
593
-
box-shadow: #0008 0 0 10px;
594
-
padding-bottom: 150px;
595
-
margin-bottom: -150px;
596
-
}
597
-
598
-
.photo-tray-close{
599
-
position: fixed;
600
-
bottom: 160px;
601
-
left: 50%;
602
-
transform: translate(-50%);
603
-
color: white;
604
-
background: #8885;
605
-
backdrop-filter: blur(10px);
606
-
-webkit-backdrop-filter: blur(10px);
607
-
box-shadow: #0008 0 0 10px;
608
-
display: flex;
609
-
justify-content: center;
610
-
align-items: center;
611
-
height: 30px;
612
-
width: 50px;
613
-
border-radius: 50px;
614
-
cursor: pointer;
615
-
font-size: 12px;
616
-
user-select: none;
617
-
-webkit-user-select: none;
618
-
transition: 0.25s width;
619
-
}
620
-
621
-
.photo-tray-close:hover{
622
-
width: 70px;
623
-
}
624
-
625
-
.photo-tray-columns{
626
-
width: 100%;
627
-
height: 100%;
628
-
display: flex;
629
-
color: white;
630
-
text-align: center;
631
-
}
632
-
633
-
.photo-tray-column{
634
-
height: 100%;
635
-
width: 100%;
636
-
scrollbar-width: thin;
637
-
overflow-y: auto;
638
-
overflow-x: hidden;
639
-
mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%);
640
-
}
641
-
642
-
.tray-heading{
643
-
font-weight: bold;
644
-
font-size: 20px;
645
-
}
646
-
647
-
.world-tags{
648
-
display: flex;
649
-
width: 100%;
650
-
justify-content: center;
651
-
align-items: center;
652
-
}
653
-
654
-
.world-tags div{
655
-
padding: 0 10px;
656
-
color: #bbb;
657
-
transition: 0.25s;
658
-
}
659
-
660
-
.world-tags div:hover{
661
-
color: #ddd;
662
-
}
663
-
664
-
.world-name{
665
-
font-size: 17px;
666
-
}
667
-
668
-
.settings{
669
-
position: fixed;
670
-
top: 0;
671
-
left: 0;
672
-
width: 100%;
673
-
height: 100%;
674
-
background: rgba(0, 0, 0, 0.4);
675
-
backdrop-filter: blur(100px);
676
-
-webkit-backdrop-filter: blur(100px);
677
-
}
678
-
679
-
.slide-bar{
680
-
position: fixed;
681
-
bottom: 0;
682
-
left: 0;
683
-
width: 100%;
684
-
height: 50px;
685
-
border-top: #aaa 1px solid;
686
-
overflow-x: hidden;
687
-
mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%);
688
-
background: #aaa2;
689
-
box-shadow: #000 0 0 10px;
690
-
}
691
-
692
-
.inner-slide-bar{
693
-
display: flex;
694
-
height: 50px;
695
-
width: 200%;
696
-
color: white;
697
-
align-items: center;
698
-
cursor: pointer;
699
-
user-select: none;
700
-
-webkit-user-select: none;
701
-
}
702
-
703
-
.slider-dot{
704
-
width: 5px;
705
-
height: 5px;
706
-
border-radius: 5px;
707
-
background: #aaa;
708
-
margin: auto 25px;
709
-
}
710
-
711
-
.slider-text{
712
-
width: 200px;
713
-
text-align: center;
714
-
height: 50px;
715
-
display: flex;
716
-
justify-content: center;
717
-
align-items: center;
718
-
color: #aaa;
719
-
transition: 0.25s;
720
-
}
721
-
722
-
.slider-text:hover{
723
-
color: #fff;
724
-
}
725
-
726
-
.slide-bar-tri{
727
-
position: fixed;
728
-
bottom: 40px;
729
-
left: 50%;
730
-
transform: translateX(-50%);
731
-
border: transparent solid 5px;
732
-
border-top: #fff solid 5px;
733
-
}
734
-
735
-
.settings-container{
736
-
position: fixed;
737
-
top: 50px;
738
-
left: 0px;
739
-
width: 200%;
740
-
height: calc(100% - 100px);
741
-
display: flex;
742
-
}
743
-
744
-
.settings-block{
745
-
width: 50%;
746
-
height: 100%;
747
-
color: white;
748
-
text-align: center;
749
-
}
750
-
751
-
.selector{
752
-
padding: 10px 20px;
753
-
border-radius: 10px;
754
-
background: #000a;
755
-
display: inline-block;
756
-
margin: 10px;
757
-
}
758
-
759
-
.selector .selection-box{
760
-
height: 20px;
761
-
background: #777a;
762
-
margin: 5px -10px 0 -10px;
763
-
border-radius: 8px;
764
-
user-select: none;
765
-
-webkit-user-select: none;
766
-
cursor: pointer;
767
-
transition: 0.25s;
768
-
color: #fff1;
769
-
}
770
-
771
-
.selector .selection-box:hover{
772
-
height: 20px;
773
-
background: #777a;
774
-
margin: 5px -10px 0 -10px;
775
-
border-radius: 8px;
776
-
user-select: none;
777
-
-webkit-user-select: none;
778
-
cursor: pointer;
779
-
transition: 0.25s;
780
-
color: #fff5;
781
-
}
782
-
783
-
.selector input{
784
-
display: none;
785
-
}
786
-
787
-
.selector input:checked ~ label .selection-box{
788
-
background: rgba(0, 146, 204, 0.705);
789
-
color: #fff;
790
-
}
791
-
792
-
.path{
793
-
padding: 5px 10px;
794
-
background: #000a;
795
-
border-radius: 5px;
796
-
margin-left: 5px;
797
-
cursor: pointer;
798
-
}
799
-
800
-
.scroll-to-top{
801
-
position: fixed;
802
-
bottom: 10px;
803
-
right: 10px;
804
-
color: white;
805
-
width: 40px;
806
-
height: 40px;
807
-
cursor: pointer;
808
-
border-radius: 50%;
809
-
border: 2px solid white;
810
-
display: flex;
811
-
justify-content: center;
812
-
align-items: center;
813
-
}
814
-
815
-
.account-profile{
816
-
margin: auto;
817
-
width: 50%;
818
-
height: 200px;
819
-
display: flex;
820
-
}
821
-
822
-
.account-pfp{
823
-
width: 200px;
824
-
height: 200px;
825
-
background-position: center !important;
826
-
background-size: cover !important;
827
-
border-radius: 50%;
828
-
box-shadow: #0005 0 0 10px;
829
-
position: relative;
830
-
z-index: 10;
831
-
}
832
-
833
-
.account-desc{
834
-
width: calc(100% - 200px);
835
-
padding-left: 100px;
836
-
height: 150px;
837
-
margin: 25px 0;
838
-
margin-left: -100px;
839
-
background: #0009;
840
-
border-radius: 10px;
841
-
box-shadow: #0005 0 0 10px;
842
-
}
843
-
844
-
.storage-bar{
845
-
width: calc(100% - 20px);
846
-
height: 10px;
847
-
margin-left: 10px;
848
-
background: #555;
849
-
border-radius: 10px;
850
-
display: flex;
851
-
justify-content: left;
852
-
align-items: center;
853
-
margin-bottom: 2px;
854
-
}
855
-
856
-
.storage-bar-inner{
857
-
margin: 2px;
858
-
height: 6px;
859
-
background: #00ccff;
860
-
border-radius: 10px;
861
-
}
862
-
863
-
.account-notice{
864
-
background: #0007;
865
-
border-radius: 5px;
866
-
box-shadow: #0005 0 0 10px;
867
-
padding: 10px;
868
-
margin: auto;
869
-
width: calc(50% - 20px);
870
-
margin-top: 25px;
871
-
}
872
-
873
-
img{
874
-
max-width: 100%;
875
-
max-height: 100%;
876
}
···
7
background: #000;
8
margin: 0;
9
font-family: Rubik, 'Courier New';
10
+
overflow: hidden;
11
+
}
12
+
13
+
* {
14
+
box-sizing: border-box;
15
}
16
17
.loading{
···
29
align-items: center;
30
}
31
32
.confirmation-box{
33
position: fixed;
34
top: 0;
···
36
width: 100%;
37
height: 100%;
38
z-index: 15;
39
+
background: rgba(0, 0, 0, 0.76);
40
transition: 0.25s;
41
}
42
43
.confirmation-box-container{
···
97
box-shadow: #000a inset 0 0 10px;
98
}
99
100
+
img{
101
+
max-width: 100%;
102
+
max-height: 100%;
103
}
104
105
+
.error-notif{
106
position: fixed;
107
top: 40px;
108
left: 50%;
109
color: white;
110
transform: translateX(-50%) translateY(-100px);
111
+
background: rgba(43, 43, 43, 0.76);
112
padding: 10px 40px;
113
backdrop-filter: blur(10px);
114
-webkit-backdrop-filter: blur(10px);
···
117
z-index: 12;
118
opacity: 0;
119
pointer-events: none;
120
}
+872
-936
src-tauri/Cargo.lock
+872
-936
src-tauri/Cargo.lock
···
4
5
[[package]]
6
name = "VRChatPhotoManager"
7
-
version = "0.2.5"
8
dependencies = [
9
"arboard",
10
-
"dirs 5.0.1",
11
"fast_image_resize",
12
"image",
13
"mslnk",
···
19
"serde_json",
20
"tauri",
21
"tauri-build",
22
-
"tauri-plugin-deep-link",
23
"tauri-plugin-http",
24
"tauri-plugin-process",
25
"tauri-plugin-shell",
···
27
]
28
29
[[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
name = "adler2"
40
version = "2.0.1"
41
source = "registry+https://github.com/rust-lang/crates.io-index"
···
43
44
[[package]]
45
name = "aho-corasick"
46
-
version = "1.1.3"
47
source = "registry+https://github.com/rust-lang/crates.io-index"
48
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
49
dependencies = [
50
"memchr",
51
]
···
75
]
76
77
[[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
name = "android_system_properties"
85
version = "0.1.5"
86
source = "registry+https://github.com/rust-lang/crates.io-index"
···
91
92
[[package]]
93
name = "anyhow"
94
-
version = "1.0.99"
95
source = "registry+https://github.com/rust-lang/crates.io-index"
96
-
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
97
98
[[package]]
99
name = "arbitrary"
···
103
104
[[package]]
105
name = "arboard"
106
-
version = "3.6.0"
107
source = "registry+https://github.com/rust-lang/crates.io-index"
108
-
checksum = "55f533f8e0af236ffe5eb979b99381df3258853f00ba2e44b6e1955292c75227"
109
dependencies = [
110
"clipboard-win",
111
"image",
112
"log",
113
-
"objc2 0.6.2",
114
"objc2-app-kit",
115
"objc2-core-foundation",
116
"objc2-core-graphics",
117
-
"objc2-foundation 0.3.1",
118
"parking_lot",
119
"percent-encoding",
120
-
"windows-sys 0.59.0",
121
"x11rb",
122
]
123
···
129
dependencies = [
130
"proc-macro2",
131
"quote",
132
-
"syn 2.0.105",
133
]
134
135
[[package]]
···
164
165
[[package]]
166
name = "async-executor"
167
-
version = "1.13.2"
168
source = "registry+https://github.com/rust-lang/crates.io-index"
169
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
170
dependencies = [
171
"async-task",
172
"concurrent-queue",
···
178
179
[[package]]
180
name = "async-io"
181
-
version = "2.5.0"
182
source = "registry+https://github.com/rust-lang/crates.io-index"
183
-
checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
184
dependencies = [
185
-
"async-lock",
186
"cfg-if",
187
"concurrent-queue",
188
"futures-io",
189
"futures-lite",
190
"parking",
191
"polling",
192
-
"rustix 1.0.8",
193
"slab",
194
-
"windows-sys 0.60.2",
195
]
196
197
[[package]]
···
207
208
[[package]]
209
name = "async-process"
210
-
version = "2.4.0"
211
source = "registry+https://github.com/rust-lang/crates.io-index"
212
-
checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
213
dependencies = [
214
"async-channel",
215
"async-io",
···
220
"cfg-if",
221
"event-listener",
222
"futures-lite",
223
-
"rustix 1.0.8",
224
]
225
226
[[package]]
···
231
dependencies = [
232
"proc-macro2",
233
"quote",
234
-
"syn 2.0.105",
235
]
236
237
[[package]]
238
name = "async-signal"
239
-
version = "0.2.12"
240
source = "registry+https://github.com/rust-lang/crates.io-index"
241
-
checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
242
dependencies = [
243
"async-io",
244
"async-lock",
···
246
"cfg-if",
247
"futures-core",
248
"futures-io",
249
-
"rustix 1.0.8",
250
"signal-hook-registry",
251
"slab",
252
-
"windows-sys 0.60.2",
253
]
254
255
[[package]]
···
266
dependencies = [
267
"proc-macro2",
268
"quote",
269
-
"syn 2.0.105",
270
]
271
272
[[package]]
···
306
307
[[package]]
308
name = "av1-grain"
309
-
version = "0.2.4"
310
source = "registry+https://github.com/rust-lang/crates.io-index"
311
-
checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8"
312
dependencies = [
313
"anyhow",
314
"arrayvec",
···
328
]
329
330
[[package]]
331
-
name = "backtrace"
332
-
version = "0.3.75"
333
-
source = "registry+https://github.com/rust-lang/crates.io-index"
334
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
335
-
dependencies = [
336
-
"addr2line",
337
-
"cfg-if",
338
-
"libc",
339
-
"miniz_oxide",
340
-
"object",
341
-
"rustc-demangle",
342
-
"windows-targets 0.52.6",
343
-
]
344
-
345
-
[[package]]
346
name = "base64"
347
version = "0.21.7"
348
source = "registry+https://github.com/rust-lang/crates.io-index"
···
356
357
[[package]]
358
name = "bit_field"
359
-
version = "0.10.2"
360
source = "registry+https://github.com/rust-lang/crates.io-index"
361
-
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
362
363
[[package]]
364
name = "bitflags"
···
368
369
[[package]]
370
name = "bitflags"
371
-
version = "2.9.1"
372
source = "registry+https://github.com/rust-lang/crates.io-index"
373
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
374
dependencies = [
375
-
"serde",
376
]
377
378
[[package]]
···
401
402
[[package]]
403
name = "block2"
404
-
version = "0.6.1"
405
source = "registry+https://github.com/rust-lang/crates.io-index"
406
-
checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
407
dependencies = [
408
-
"objc2 0.6.2",
409
]
410
411
[[package]]
···
423
424
[[package]]
425
name = "brotli"
426
-
version = "8.0.1"
427
source = "registry+https://github.com/rust-lang/crates.io-index"
428
-
checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
429
dependencies = [
430
"alloc-no-stdlib",
431
"alloc-stdlib",
···
456
457
[[package]]
458
name = "bytemuck"
459
-
version = "1.23.2"
460
source = "registry+https://github.com/rust-lang/crates.io-index"
461
-
checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677"
462
463
[[package]]
464
name = "byteorder"
···
487
source = "registry+https://github.com/rust-lang/crates.io-index"
488
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
489
dependencies = [
490
-
"bitflags 2.9.1",
491
"cairo-sys-rs",
492
"glib",
493
"libc",
···
508
509
[[package]]
510
name = "camino"
511
-
version = "1.1.11"
512
source = "registry+https://github.com/rust-lang/crates.io-index"
513
-
checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0"
514
dependencies = [
515
-
"serde",
516
]
517
518
[[package]]
···
535
"semver",
536
"serde",
537
"serde_json",
538
-
"thiserror 2.0.14",
539
]
540
541
[[package]]
···
545
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
546
dependencies = [
547
"serde",
548
-
"toml 0.9.5",
549
]
550
551
[[package]]
552
name = "cc"
553
-
version = "1.2.32"
554
source = "registry+https://github.com/rust-lang/crates.io-index"
555
-
checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e"
556
dependencies = [
557
"jobserver",
558
"libc",
559
"shlex",
···
588
589
[[package]]
590
name = "cfg-if"
591
-
version = "1.0.1"
592
source = "registry+https://github.com/rust-lang/crates.io-index"
593
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
594
595
[[package]]
596
name = "cfg_aliases"
···
600
601
[[package]]
602
name = "chrono"
603
-
version = "0.4.41"
604
source = "registry+https://github.com/rust-lang/crates.io-index"
605
-
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
606
dependencies = [
607
-
"android-tzdata",
608
"iana-time-zone",
609
"num-traits",
610
"serde",
611
-
"windows-link",
612
]
613
614
[[package]]
···
732
source = "registry+https://github.com/rust-lang/crates.io-index"
733
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
734
dependencies = [
735
-
"bitflags 2.9.1",
736
"core-foundation 0.10.1",
737
"core-graphics-types",
738
"foreign-types 0.5.0",
···
745
source = "registry+https://github.com/rust-lang/crates.io-index"
746
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
747
dependencies = [
748
-
"bitflags 2.9.1",
749
"core-foundation 0.10.1",
750
"libc",
751
]
···
842
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
843
dependencies = [
844
"quote",
845
-
"syn 2.0.105",
846
]
847
848
[[package]]
···
852
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
853
dependencies = [
854
"quote",
855
-
"syn 2.0.105",
856
]
857
858
[[package]]
859
name = "darling"
860
-
version = "0.20.11"
861
source = "registry+https://github.com/rust-lang/crates.io-index"
862
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
863
dependencies = [
864
"darling_core",
865
"darling_macro",
···
867
868
[[package]]
869
name = "darling_core"
870
-
version = "0.20.11"
871
source = "registry+https://github.com/rust-lang/crates.io-index"
872
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
873
dependencies = [
874
"fnv",
875
"ident_case",
876
"proc-macro2",
877
"quote",
878
"strsim",
879
-
"syn 2.0.105",
880
]
881
882
[[package]]
883
name = "darling_macro"
884
-
version = "0.20.11"
885
source = "registry+https://github.com/rust-lang/crates.io-index"
886
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
887
dependencies = [
888
"darling_core",
889
"quote",
890
-
"syn 2.0.105",
891
]
892
893
[[package]]
894
name = "data-url"
895
-
version = "0.3.1"
896
source = "registry+https://github.com/rust-lang/crates.io-index"
897
-
checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a"
898
899
[[package]]
900
name = "deranged"
901
-
version = "0.4.0"
902
source = "registry+https://github.com/rust-lang/crates.io-index"
903
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
904
dependencies = [
905
"powerfmt",
906
-
"serde",
907
]
908
909
[[package]]
···
916
"proc-macro2",
917
"quote",
918
"rustc_version",
919
-
"syn 2.0.105",
920
]
921
922
[[package]]
···
931
932
[[package]]
933
name = "dirs"
934
-
version = "5.0.1"
935
-
source = "registry+https://github.com/rust-lang/crates.io-index"
936
-
checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
937
-
dependencies = [
938
-
"dirs-sys 0.4.1",
939
-
]
940
-
941
-
[[package]]
942
-
name = "dirs"
943
version = "6.0.0"
944
source = "registry+https://github.com/rust-lang/crates.io-index"
945
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
946
dependencies = [
947
-
"dirs-sys 0.5.0",
948
-
]
949
-
950
-
[[package]]
951
-
name = "dirs-sys"
952
-
version = "0.4.1"
953
-
source = "registry+https://github.com/rust-lang/crates.io-index"
954
-
checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
955
-
dependencies = [
956
-
"libc",
957
-
"option-ext",
958
-
"redox_users 0.4.6",
959
-
"windows-sys 0.48.0",
960
]
961
962
[[package]]
···
967
dependencies = [
968
"libc",
969
"option-ext",
970
-
"redox_users 0.5.2",
971
-
"windows-sys 0.60.2",
972
]
973
974
[[package]]
···
983
source = "registry+https://github.com/rust-lang/crates.io-index"
984
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
985
dependencies = [
986
-
"bitflags 2.9.1",
987
-
"objc2 0.6.2",
988
]
989
990
[[package]]
···
995
dependencies = [
996
"proc-macro2",
997
"quote",
998
-
"syn 2.0.105",
999
]
1000
1001
[[package]]
1002
name = "dlopen2"
1003
-
version = "0.7.0"
1004
source = "registry+https://github.com/rust-lang/crates.io-index"
1005
-
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
1006
dependencies = [
1007
"dlopen2_derive",
1008
"libc",
···
1018
dependencies = [
1019
"proc-macro2",
1020
"quote",
1021
-
"syn 2.0.105",
1022
]
1023
1024
[[package]]
···
1032
1033
[[package]]
1034
name = "document-features"
1035
-
version = "0.2.11"
1036
source = "registry+https://github.com/rust-lang/crates.io-index"
1037
-
checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
1038
dependencies = [
1039
"litrs",
1040
]
···
1083
1084
[[package]]
1085
name = "embed-resource"
1086
-
version = "3.0.5"
1087
source = "registry+https://github.com/rust-lang/crates.io-index"
1088
-
checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38"
1089
dependencies = [
1090
"cc",
1091
"memchr",
1092
"rustc_version",
1093
-
"toml 0.9.5",
1094
"vswhom",
1095
"winreg",
1096
]
···
1134
dependencies = [
1135
"proc-macro2",
1136
"quote",
1137
-
"syn 2.0.105",
1138
]
1139
1140
[[package]]
···
1154
dependencies = [
1155
"proc-macro2",
1156
"quote",
1157
-
"syn 2.0.105",
1158
]
1159
1160
[[package]]
···
1165
1166
[[package]]
1167
name = "erased-serde"
1168
-
version = "0.4.6"
1169
source = "registry+https://github.com/rust-lang/crates.io-index"
1170
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
1171
dependencies = [
1172
"serde",
1173
"typeid",
1174
]
1175
1176
[[package]]
1177
name = "errno"
1178
-
version = "0.3.13"
1179
source = "registry+https://github.com/rust-lang/crates.io-index"
1180
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
1181
dependencies = [
1182
"libc",
1183
-
"windows-sys 0.60.2",
1184
]
1185
1186
[[package]]
···
1227
1228
[[package]]
1229
name = "fast_image_resize"
1230
-
version = "4.2.3"
1231
source = "registry+https://github.com/rust-lang/crates.io-index"
1232
-
checksum = "43e5ce628b529e9bd2e2f378c1193215104b526fd494a572aa23414adc4e5553"
1233
dependencies = [
1234
"bytemuck",
1235
"cfg-if",
1236
"document-features",
1237
"image",
1238
"num-traits",
1239
-
"thiserror 1.0.69",
1240
]
1241
1242
[[package]]
···
1246
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1247
1248
[[package]]
1249
name = "fdeflate"
1250
version = "0.3.7"
1251
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1265
]
1266
1267
[[package]]
1268
-
name = "filetime"
1269
-
version = "0.2.25"
1270
source = "registry+https://github.com/rust-lang/crates.io-index"
1271
-
checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
1272
-
dependencies = [
1273
-
"cfg-if",
1274
-
"libc",
1275
-
"libredox",
1276
-
"windows-sys 0.59.0",
1277
-
]
1278
1279
[[package]]
1280
name = "flate2"
1281
-
version = "1.1.2"
1282
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
-
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
1284
dependencies = [
1285
"crc32fast",
1286
"miniz_oxide",
···
1319
dependencies = [
1320
"proc-macro2",
1321
"quote",
1322
-
"syn 2.0.105",
1323
]
1324
1325
[[package]]
···
1336
1337
[[package]]
1338
name = "form_urlencoded"
1339
-
version = "1.2.1"
1340
source = "registry+https://github.com/rust-lang/crates.io-index"
1341
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
1342
dependencies = [
1343
"percent-encoding",
1344
]
···
1416
dependencies = [
1417
"proc-macro2",
1418
"quote",
1419
-
"syn 2.0.105",
1420
]
1421
1422
[[package]]
···
1558
1559
[[package]]
1560
name = "generic-array"
1561
-
version = "0.14.7"
1562
source = "registry+https://github.com/rust-lang/crates.io-index"
1563
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1564
dependencies = [
1565
"typenum",
1566
"version_check",
···
1568
1569
[[package]]
1570
name = "gethostname"
1571
-
version = "0.4.3"
1572
source = "registry+https://github.com/rust-lang/crates.io-index"
1573
-
checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
1574
dependencies = [
1575
-
"libc",
1576
-
"windows-targets 0.48.5",
1577
]
1578
1579
[[package]]
···
1602
1603
[[package]]
1604
name = "getrandom"
1605
-
version = "0.3.3"
1606
source = "registry+https://github.com/rust-lang/crates.io-index"
1607
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1608
dependencies = [
1609
"cfg-if",
1610
"js-sys",
1611
"libc",
1612
"r-efi",
1613
-
"wasi 0.14.2+wasi-0.2.4",
1614
"wasm-bindgen",
1615
]
1616
···
1625
]
1626
1627
[[package]]
1628
-
name = "gimli"
1629
-
version = "0.31.1"
1630
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1631
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1632
-
1633
-
[[package]]
1634
name = "gio"
1635
version = "0.18.4"
1636
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1668
source = "registry+https://github.com/rust-lang/crates.io-index"
1669
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1670
dependencies = [
1671
-
"bitflags 2.9.1",
1672
"futures-channel",
1673
"futures-core",
1674
"futures-executor",
···
1692
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1693
dependencies = [
1694
"heck 0.4.1",
1695
-
"proc-macro-crate 2.0.0",
1696
"proc-macro-error",
1697
"proc-macro2",
1698
"quote",
1699
-
"syn 2.0.105",
1700
]
1701
1702
[[package]]
···
1775
"proc-macro-error",
1776
"proc-macro2",
1777
"quote",
1778
-
"syn 2.0.105",
1779
]
1780
1781
[[package]]
···
1790
"futures-core",
1791
"futures-sink",
1792
"http",
1793
-
"indexmap 2.10.0",
1794
"slab",
1795
"tokio",
1796
"tokio-util",
···
1799
1800
[[package]]
1801
name = "half"
1802
-
version = "2.6.0"
1803
source = "registry+https://github.com/rust-lang/crates.io-index"
1804
-
checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
1805
dependencies = [
1806
"cfg-if",
1807
"crunchy",
1808
]
1809
1810
[[package]]
···
1821
1822
[[package]]
1823
name = "hashbrown"
1824
-
version = "0.15.5"
1825
source = "registry+https://github.com/rust-lang/crates.io-index"
1826
-
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1827
1828
[[package]]
1829
name = "heck"
···
1903
1904
[[package]]
1905
name = "hyper"
1906
-
version = "1.6.0"
1907
source = "registry+https://github.com/rust-lang/crates.io-index"
1908
-
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1909
dependencies = [
1910
"bytes",
1911
"futures-channel",
1912
-
"futures-util",
1913
"h2",
1914
"http",
1915
"http-body",
1916
"httparse",
1917
"itoa",
1918
"pin-project-lite",
1919
"smallvec",
1920
"tokio",
1921
"want",
···
1956
1957
[[package]]
1958
name = "hyper-util"
1959
-
version = "0.1.16"
1960
source = "registry+https://github.com/rust-lang/crates.io-index"
1961
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1962
dependencies = [
1963
"base64 0.22.1",
1964
"bytes",
···
1972
"libc",
1973
"percent-encoding",
1974
"pin-project-lite",
1975
-
"socket2 0.6.0",
1976
"system-configuration",
1977
"tokio",
1978
"tower-service",
···
1982
1983
[[package]]
1984
name = "iana-time-zone"
1985
-
version = "0.1.63"
1986
source = "registry+https://github.com/rust-lang/crates.io-index"
1987
-
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1988
dependencies = [
1989
"android_system_properties",
1990
"core-foundation-sys",
···
1992
"js-sys",
1993
"log",
1994
"wasm-bindgen",
1995
-
"windows-core",
1996
]
1997
1998
[[package]]
···
2011
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
2012
dependencies = [
2013
"byteorder",
2014
-
"png",
2015
]
2016
2017
[[package]]
2018
name = "icu_collections"
2019
-
version = "2.0.0"
2020
source = "registry+https://github.com/rust-lang/crates.io-index"
2021
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
2022
dependencies = [
2023
"displaydoc",
2024
"potential_utf",
···
2029
2030
[[package]]
2031
name = "icu_locale_core"
2032
-
version = "2.0.0"
2033
source = "registry+https://github.com/rust-lang/crates.io-index"
2034
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
2035
dependencies = [
2036
"displaydoc",
2037
"litemap",
···
2042
2043
[[package]]
2044
name = "icu_normalizer"
2045
-
version = "2.0.0"
2046
source = "registry+https://github.com/rust-lang/crates.io-index"
2047
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
2048
dependencies = [
2049
-
"displaydoc",
2050
"icu_collections",
2051
"icu_normalizer_data",
2052
"icu_properties",
···
2057
2058
[[package]]
2059
name = "icu_normalizer_data"
2060
-
version = "2.0.0"
2061
source = "registry+https://github.com/rust-lang/crates.io-index"
2062
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
2063
2064
[[package]]
2065
name = "icu_properties"
2066
-
version = "2.0.1"
2067
source = "registry+https://github.com/rust-lang/crates.io-index"
2068
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
2069
dependencies = [
2070
-
"displaydoc",
2071
"icu_collections",
2072
"icu_locale_core",
2073
"icu_properties_data",
2074
"icu_provider",
2075
-
"potential_utf",
2076
"zerotrie",
2077
"zerovec",
2078
]
2079
2080
[[package]]
2081
name = "icu_properties_data"
2082
-
version = "2.0.1"
2083
source = "registry+https://github.com/rust-lang/crates.io-index"
2084
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
2085
2086
[[package]]
2087
name = "icu_provider"
2088
-
version = "2.0.0"
2089
source = "registry+https://github.com/rust-lang/crates.io-index"
2090
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
2091
dependencies = [
2092
"displaydoc",
2093
"icu_locale_core",
2094
-
"stable_deref_trait",
2095
-
"tinystr",
2096
"writeable",
2097
"yoke",
2098
"zerofrom",
···
2108
2109
[[package]]
2110
name = "idna"
2111
-
version = "1.0.3"
2112
source = "registry+https://github.com/rust-lang/crates.io-index"
2113
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
2114
dependencies = [
2115
"idna_adapter",
2116
"smallvec",
···
2129
2130
[[package]]
2131
name = "image"
2132
-
version = "0.25.6"
2133
source = "registry+https://github.com/rust-lang/crates.io-index"
2134
-
checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a"
2135
dependencies = [
2136
"bytemuck",
2137
"byteorder-lite",
···
2139
"exr",
2140
"gif",
2141
"image-webp",
2142
"num-traits",
2143
-
"png",
2144
"qoi",
2145
"ravif",
2146
"rayon",
···
2152
2153
[[package]]
2154
name = "image-webp"
2155
-
version = "0.2.3"
2156
source = "registry+https://github.com/rust-lang/crates.io-index"
2157
-
checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b"
2158
dependencies = [
2159
"byteorder-lite",
2160
"quick-error",
···
2162
2163
[[package]]
2164
name = "imgref"
2165
-
version = "1.11.0"
2166
source = "registry+https://github.com/rust-lang/crates.io-index"
2167
-
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"
2168
2169
[[package]]
2170
name = "indexmap"
···
2179
2180
[[package]]
2181
name = "indexmap"
2182
-
version = "2.10.0"
2183
source = "registry+https://github.com/rust-lang/crates.io-index"
2184
-
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
2185
dependencies = [
2186
"equivalent",
2187
-
"hashbrown 0.15.5",
2188
"serde",
2189
]
2190
2191
[[package]]
···
2199
2200
[[package]]
2201
name = "inotify"
2202
-
version = "0.9.6"
2203
source = "registry+https://github.com/rust-lang/crates.io-index"
2204
-
checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
2205
dependencies = [
2206
-
"bitflags 1.3.2",
2207
"inotify-sys",
2208
"libc",
2209
]
···
2225
dependencies = [
2226
"proc-macro2",
2227
"quote",
2228
-
"syn 2.0.105",
2229
-
]
2230
-
2231
-
[[package]]
2232
-
name = "io-uring"
2233
-
version = "0.7.9"
2234
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2235
-
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
2236
-
dependencies = [
2237
-
"bitflags 2.9.1",
2238
-
"cfg-if",
2239
-
"libc",
2240
]
2241
2242
[[package]]
···
2247
2248
[[package]]
2249
name = "iri-string"
2250
-
version = "0.7.8"
2251
source = "registry+https://github.com/rust-lang/crates.io-index"
2252
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
2253
dependencies = [
2254
"memchr",
2255
"serde",
···
2336
2337
[[package]]
2338
name = "jobserver"
2339
-
version = "0.1.33"
2340
source = "registry+https://github.com/rust-lang/crates.io-index"
2341
-
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
2342
dependencies = [
2343
-
"getrandom 0.3.3",
2344
"libc",
2345
]
2346
-
2347
-
[[package]]
2348
-
name = "jpeg-decoder"
2349
-
version = "0.3.2"
2350
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2351
-
checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07"
2352
2353
[[package]]
2354
name = "js-sys"
2355
-
version = "0.3.77"
2356
source = "registry+https://github.com/rust-lang/crates.io-index"
2357
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
2358
dependencies = [
2359
"once_cell",
2360
"wasm-bindgen",
···
2388
source = "registry+https://github.com/rust-lang/crates.io-index"
2389
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
2390
dependencies = [
2391
-
"bitflags 2.9.1",
2392
"serde",
2393
"unicode-segmentation",
2394
]
···
2421
dependencies = [
2422
"cssparser",
2423
"html5ever",
2424
-
"indexmap 2.10.0",
2425
"selectors",
2426
]
2427
···
2433
2434
[[package]]
2435
name = "lebe"
2436
-
version = "0.5.2"
2437
source = "registry+https://github.com/rust-lang/crates.io-index"
2438
-
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
2439
2440
[[package]]
2441
name = "libappindicator"
···
2463
2464
[[package]]
2465
name = "libc"
2466
-
version = "0.2.175"
2467
source = "registry+https://github.com/rust-lang/crates.io-index"
2468
-
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
2469
2470
[[package]]
2471
name = "libfuzzer-sys"
···
2489
2490
[[package]]
2491
name = "libredox"
2492
-
version = "0.1.9"
2493
source = "registry+https://github.com/rust-lang/crates.io-index"
2494
-
checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3"
2495
dependencies = [
2496
-
"bitflags 2.9.1",
2497
"libc",
2498
-
"redox_syscall",
2499
]
2500
2501
[[package]]
2502
name = "linux-raw-sys"
2503
-
version = "0.4.15"
2504
source = "registry+https://github.com/rust-lang/crates.io-index"
2505
-
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
2506
-
2507
-
[[package]]
2508
-
name = "linux-raw-sys"
2509
-
version = "0.9.4"
2510
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2511
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
2512
2513
[[package]]
2514
name = "litemap"
2515
-
version = "0.8.0"
2516
source = "registry+https://github.com/rust-lang/crates.io-index"
2517
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
2518
2519
[[package]]
2520
name = "litrs"
2521
-
version = "0.4.2"
2522
source = "registry+https://github.com/rust-lang/crates.io-index"
2523
-
checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed"
2524
2525
[[package]]
2526
name = "lock_api"
2527
-
version = "0.4.13"
2528
source = "registry+https://github.com/rust-lang/crates.io-index"
2529
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
2530
dependencies = [
2531
-
"autocfg",
2532
"scopeguard",
2533
]
2534
2535
[[package]]
2536
name = "log"
2537
-
version = "0.4.27"
2538
source = "registry+https://github.com/rust-lang/crates.io-index"
2539
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
2540
2541
[[package]]
2542
name = "loop9"
···
2581
dependencies = [
2582
"proc-macro2",
2583
"quote",
2584
-
"syn 2.0.105",
2585
]
2586
2587
[[package]]
···
2602
2603
[[package]]
2604
name = "memchr"
2605
-
version = "2.7.5"
2606
source = "registry+https://github.com/rust-lang/crates.io-index"
2607
-
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
2608
2609
[[package]]
2610
name = "memoffset"
···
2622
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2623
2624
[[package]]
2625
-
name = "minimal-lexical"
2626
-
version = "0.2.1"
2627
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2628
-
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
2629
-
2630
-
[[package]]
2631
name = "miniz_oxide"
2632
version = "0.8.9"
2633
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2639
2640
[[package]]
2641
name = "mio"
2642
-
version = "0.8.11"
2643
source = "registry+https://github.com/rust-lang/crates.io-index"
2644
-
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
2645
dependencies = [
2646
"libc",
2647
"log",
2648
"wasi 0.11.1+wasi-snapshot-preview1",
2649
-
"windows-sys 0.48.0",
2650
]
2651
2652
[[package]]
2653
-
name = "mio"
2654
-
version = "1.0.4"
2655
source = "registry+https://github.com/rust-lang/crates.io-index"
2656
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2657
dependencies = [
2658
-
"libc",
2659
-
"wasi 0.11.1+wasi-snapshot-preview1",
2660
-
"windows-sys 0.59.0",
2661
]
2662
2663
[[package]]
···
2681
"dpi",
2682
"gtk",
2683
"keyboard-types",
2684
-
"objc2 0.6.2",
2685
"objc2-app-kit",
2686
"objc2-core-foundation",
2687
-
"objc2-foundation 0.3.1",
2688
"once_cell",
2689
-
"png",
2690
"serde",
2691
-
"thiserror 2.0.14",
2692
"windows-sys 0.60.2",
2693
]
2694
···
2715
source = "registry+https://github.com/rust-lang/crates.io-index"
2716
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2717
dependencies = [
2718
-
"bitflags 2.9.1",
2719
"jni-sys",
2720
"log",
2721
"ndk-sys",
···
2751
source = "registry+https://github.com/rust-lang/crates.io-index"
2752
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2753
dependencies = [
2754
-
"bitflags 2.9.1",
2755
"cfg-if",
2756
"cfg_aliases",
2757
"libc",
···
2766
2767
[[package]]
2768
name = "nom"
2769
-
version = "7.1.3"
2770
source = "registry+https://github.com/rust-lang/crates.io-index"
2771
-
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
2772
dependencies = [
2773
"memchr",
2774
-
"minimal-lexical",
2775
]
2776
2777
[[package]]
···
2782
2783
[[package]]
2784
name = "notify"
2785
-
version = "6.1.1"
2786
source = "registry+https://github.com/rust-lang/crates.io-index"
2787
-
checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
2788
dependencies = [
2789
-
"bitflags 2.9.1",
2790
-
"crossbeam-channel",
2791
-
"filetime",
2792
"fsevent-sys",
2793
"inotify",
2794
"kqueue",
2795
"libc",
2796
"log",
2797
-
"mio 0.8.11",
2798
"walkdir",
2799
-
"windows-sys 0.48.0",
2800
]
2801
2802
[[package]]
2803
name = "num-bigint"
2804
version = "0.4.6"
2805
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2823
dependencies = [
2824
"proc-macro2",
2825
"quote",
2826
-
"syn 2.0.105",
2827
]
2828
2829
[[package]]
···
2857
2858
[[package]]
2859
name = "num_enum"
2860
-
version = "0.7.4"
2861
source = "registry+https://github.com/rust-lang/crates.io-index"
2862
-
checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2863
dependencies = [
2864
"num_enum_derive",
2865
"rustversion",
···
2867
2868
[[package]]
2869
name = "num_enum_derive"
2870
-
version = "0.7.4"
2871
source = "registry+https://github.com/rust-lang/crates.io-index"
2872
-
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2873
dependencies = [
2874
-
"proc-macro-crate 1.3.1",
2875
"proc-macro2",
2876
"quote",
2877
-
"syn 2.0.105",
2878
]
2879
2880
[[package]]
···
2895
2896
[[package]]
2897
name = "objc2"
2898
-
version = "0.6.2"
2899
source = "registry+https://github.com/rust-lang/crates.io-index"
2900
-
checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc"
2901
dependencies = [
2902
"objc2-encode",
2903
"objc2-exception-helper",
···
2905
2906
[[package]]
2907
name = "objc2-app-kit"
2908
-
version = "0.3.1"
2909
source = "registry+https://github.com/rust-lang/crates.io-index"
2910
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2911
dependencies = [
2912
-
"bitflags 2.9.1",
2913
-
"block2 0.6.1",
2914
"libc",
2915
-
"objc2 0.6.2",
2916
"objc2-cloud-kit",
2917
"objc2-core-data",
2918
"objc2-core-foundation",
2919
"objc2-core-graphics",
2920
"objc2-core-image",
2921
-
"objc2-foundation 0.3.1",
2922
-
"objc2-quartz-core 0.3.1",
2923
]
2924
2925
[[package]]
2926
name = "objc2-cloud-kit"
2927
-
version = "0.3.1"
2928
source = "registry+https://github.com/rust-lang/crates.io-index"
2929
-
checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d"
2930
dependencies = [
2931
-
"bitflags 2.9.1",
2932
-
"objc2 0.6.2",
2933
-
"objc2-foundation 0.3.1",
2934
]
2935
2936
[[package]]
2937
name = "objc2-core-data"
2938
-
version = "0.3.1"
2939
source = "registry+https://github.com/rust-lang/crates.io-index"
2940
-
checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d"
2941
dependencies = [
2942
-
"bitflags 2.9.1",
2943
-
"objc2 0.6.2",
2944
-
"objc2-foundation 0.3.1",
2945
]
2946
2947
[[package]]
2948
name = "objc2-core-foundation"
2949
-
version = "0.3.1"
2950
source = "registry+https://github.com/rust-lang/crates.io-index"
2951
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2952
dependencies = [
2953
-
"bitflags 2.9.1",
2954
"dispatch2",
2955
-
"objc2 0.6.2",
2956
]
2957
2958
[[package]]
2959
name = "objc2-core-graphics"
2960
-
version = "0.3.1"
2961
source = "registry+https://github.com/rust-lang/crates.io-index"
2962
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2963
dependencies = [
2964
-
"bitflags 2.9.1",
2965
"dispatch2",
2966
-
"objc2 0.6.2",
2967
"objc2-core-foundation",
2968
"objc2-io-surface",
2969
]
2970
2971
[[package]]
2972
name = "objc2-core-image"
2973
-
version = "0.3.1"
2974
source = "registry+https://github.com/rust-lang/crates.io-index"
2975
-
checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e"
2976
dependencies = [
2977
-
"objc2 0.6.2",
2978
-
"objc2-foundation 0.3.1",
2979
]
2980
2981
[[package]]
···
2999
source = "registry+https://github.com/rust-lang/crates.io-index"
3000
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
3001
dependencies = [
3002
-
"bitflags 2.9.1",
3003
"block2 0.5.1",
3004
"libc",
3005
"objc2 0.5.2",
···
3007
3008
[[package]]
3009
name = "objc2-foundation"
3010
-
version = "0.3.1"
3011
source = "registry+https://github.com/rust-lang/crates.io-index"
3012
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
3013
dependencies = [
3014
-
"bitflags 2.9.1",
3015
-
"block2 0.6.1",
3016
"libc",
3017
-
"objc2 0.6.2",
3018
"objc2-core-foundation",
3019
]
3020
3021
[[package]]
3022
name = "objc2-io-surface"
3023
-
version = "0.3.1"
3024
source = "registry+https://github.com/rust-lang/crates.io-index"
3025
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
3026
dependencies = [
3027
-
"bitflags 2.9.1",
3028
-
"objc2 0.6.2",
3029
"objc2-core-foundation",
3030
]
3031
···
3035
source = "registry+https://github.com/rust-lang/crates.io-index"
3036
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
3037
dependencies = [
3038
-
"bitflags 2.9.1",
3039
"block2 0.5.1",
3040
"objc2 0.5.2",
3041
"objc2-foundation 0.2.2",
···
3047
source = "registry+https://github.com/rust-lang/crates.io-index"
3048
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
3049
dependencies = [
3050
-
"bitflags 2.9.1",
3051
"block2 0.5.1",
3052
"objc2 0.5.2",
3053
"objc2-foundation 0.2.2",
···
3056
3057
[[package]]
3058
name = "objc2-quartz-core"
3059
-
version = "0.3.1"
3060
source = "registry+https://github.com/rust-lang/crates.io-index"
3061
-
checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5"
3062
dependencies = [
3063
-
"bitflags 2.9.1",
3064
-
"objc2 0.6.2",
3065
-
"objc2-foundation 0.3.1",
3066
]
3067
3068
[[package]]
3069
-
name = "objc2-ui-kit"
3070
-
version = "0.3.1"
3071
source = "registry+https://github.com/rust-lang/crates.io-index"
3072
-
checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed"
3073
dependencies = [
3074
-
"bitflags 2.9.1",
3075
-
"objc2 0.6.2",
3076
"objc2-core-foundation",
3077
-
"objc2-foundation 0.3.1",
3078
]
3079
3080
[[package]]
3081
-
name = "objc2-web-kit"
3082
-
version = "0.3.1"
3083
source = "registry+https://github.com/rust-lang/crates.io-index"
3084
-
checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad"
3085
dependencies = [
3086
-
"bitflags 2.9.1",
3087
-
"block2 0.6.1",
3088
-
"objc2 0.6.2",
3089
-
"objc2-app-kit",
3090
"objc2-core-foundation",
3091
-
"objc2-foundation 0.3.1",
3092
]
3093
3094
[[package]]
3095
-
name = "object"
3096
-
version = "0.36.7"
3097
source = "registry+https://github.com/rust-lang/crates.io-index"
3098
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
3099
dependencies = [
3100
-
"memchr",
3101
]
3102
3103
[[package]]
···
3120
3121
[[package]]
3122
name = "openssl"
3123
-
version = "0.10.73"
3124
source = "registry+https://github.com/rust-lang/crates.io-index"
3125
-
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
3126
dependencies = [
3127
-
"bitflags 2.9.1",
3128
"cfg-if",
3129
"foreign-types 0.3.2",
3130
"libc",
···
3141
dependencies = [
3142
"proc-macro2",
3143
"quote",
3144
-
"syn 2.0.105",
3145
]
3146
3147
[[package]]
···
3152
3153
[[package]]
3154
name = "openssl-sys"
3155
-
version = "0.9.109"
3156
source = "registry+https://github.com/rust-lang/crates.io-index"
3157
-
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
3158
dependencies = [
3159
"cc",
3160
"libc",
···
3190
3191
[[package]]
3192
name = "os_pipe"
3193
-
version = "1.2.2"
3194
source = "registry+https://github.com/rust-lang/crates.io-index"
3195
-
checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224"
3196
dependencies = [
3197
"libc",
3198
-
"windows-sys 0.59.0",
3199
]
3200
3201
[[package]]
···
3231
3232
[[package]]
3233
name = "parking_lot"
3234
-
version = "0.12.4"
3235
source = "registry+https://github.com/rust-lang/crates.io-index"
3236
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
3237
dependencies = [
3238
"lock_api",
3239
"parking_lot_core",
···
3241
3242
[[package]]
3243
name = "parking_lot_core"
3244
-
version = "0.9.11"
3245
source = "registry+https://github.com/rust-lang/crates.io-index"
3246
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
3247
dependencies = [
3248
"cfg-if",
3249
"libc",
3250
"redox_syscall",
3251
"smallvec",
3252
-
"windows-targets 0.52.6",
3253
]
3254
3255
[[package]]
···
3266
3267
[[package]]
3268
name = "percent-encoding"
3269
-
version = "2.3.1"
3270
source = "registry+https://github.com/rust-lang/crates.io-index"
3271
-
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
3272
3273
[[package]]
3274
name = "phf"
···
3374
"phf_shared 0.11.3",
3375
"proc-macro2",
3376
"quote",
3377
-
"syn 2.0.105",
3378
]
3379
3380
[[package]]
···
3435
3436
[[package]]
3437
name = "plist"
3438
-
version = "1.7.4"
3439
source = "registry+https://github.com/rust-lang/crates.io-index"
3440
-
checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1"
3441
dependencies = [
3442
"base64 0.22.1",
3443
-
"indexmap 2.10.0",
3444
"quick-xml",
3445
"serde",
3446
"time",
···
3460
]
3461
3462
[[package]]
3463
name = "polling"
3464
-
version = "3.10.0"
3465
source = "registry+https://github.com/rust-lang/crates.io-index"
3466
-
checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829"
3467
dependencies = [
3468
"cfg-if",
3469
"concurrent-queue",
3470
"hermit-abi",
3471
"pin-project-lite",
3472
-
"rustix 1.0.8",
3473
-
"windows-sys 0.60.2",
3474
]
3475
3476
[[package]]
3477
name = "potential_utf"
3478
-
version = "0.1.2"
3479
source = "registry+https://github.com/rust-lang/crates.io-index"
3480
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
3481
dependencies = [
3482
"zerovec",
3483
]
···
3515
3516
[[package]]
3517
name = "proc-macro-crate"
3518
-
version = "2.0.0"
3519
source = "registry+https://github.com/rust-lang/crates.io-index"
3520
-
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
3521
dependencies = [
3522
"toml_edit 0.20.2",
3523
]
3524
3525
[[package]]
3526
name = "proc-macro-crate"
3527
-
version = "3.3.0"
3528
source = "registry+https://github.com/rust-lang/crates.io-index"
3529
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
3530
dependencies = [
3531
-
"toml_edit 0.22.27",
3532
]
3533
3534
[[package]]
···
3563
3564
[[package]]
3565
name = "proc-macro2"
3566
-
version = "1.0.97"
3567
source = "registry+https://github.com/rust-lang/crates.io-index"
3568
-
checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1"
3569
dependencies = [
3570
"unicode-ident",
3571
]
···
3586
checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
3587
dependencies = [
3588
"quote",
3589
-
"syn 2.0.105",
3590
]
3591
3592
[[package]]
···
3606
]
3607
3608
[[package]]
3609
name = "qoi"
3610
version = "0.4.1"
3611
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3622
3623
[[package]]
3624
name = "quick-xml"
3625
-
version = "0.38.1"
3626
source = "registry+https://github.com/rust-lang/crates.io-index"
3627
-
checksum = "9845d9dccf565065824e69f9f235fafba1587031eda353c1f1561cd6a6be78f4"
3628
dependencies = [
3629
"memchr",
3630
]
3631
3632
[[package]]
3633
name = "quinn"
3634
-
version = "0.11.8"
3635
source = "registry+https://github.com/rust-lang/crates.io-index"
3636
-
checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8"
3637
dependencies = [
3638
"bytes",
3639
"cfg_aliases",
···
3642
"quinn-udp",
3643
"rustc-hash",
3644
"rustls",
3645
-
"socket2 0.5.10",
3646
-
"thiserror 2.0.14",
3647
"tokio",
3648
"tracing",
3649
"web-time",
···
3651
3652
[[package]]
3653
name = "quinn-proto"
3654
-
version = "0.11.12"
3655
source = "registry+https://github.com/rust-lang/crates.io-index"
3656
-
checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e"
3657
dependencies = [
3658
"bytes",
3659
-
"getrandom 0.3.3",
3660
"lru-slab",
3661
"rand 0.9.2",
3662
"ring",
···
3664
"rustls",
3665
"rustls-pki-types",
3666
"slab",
3667
-
"thiserror 2.0.14",
3668
"tinyvec",
3669
"tracing",
3670
"web-time",
···
3672
3673
[[package]]
3674
name = "quinn-udp"
3675
-
version = "0.5.13"
3676
source = "registry+https://github.com/rust-lang/crates.io-index"
3677
-
checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"
3678
dependencies = [
3679
"cfg_aliases",
3680
"libc",
3681
"once_cell",
3682
-
"socket2 0.5.10",
3683
"tracing",
3684
-
"windows-sys 0.59.0",
3685
]
3686
3687
[[package]]
3688
name = "quote"
3689
-
version = "1.0.40"
3690
source = "registry+https://github.com/rust-lang/crates.io-index"
3691
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
3692
dependencies = [
3693
"proc-macro2",
3694
]
···
3788
source = "registry+https://github.com/rust-lang/crates.io-index"
3789
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
3790
dependencies = [
3791
-
"getrandom 0.3.3",
3792
]
3793
3794
[[package]]
···
3887
3888
[[package]]
3889
name = "redox_syscall"
3890
-
version = "0.5.17"
3891
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3892
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
3893
-
dependencies = [
3894
-
"bitflags 2.9.1",
3895
-
]
3896
-
3897
-
[[package]]
3898
-
name = "redox_users"
3899
-
version = "0.4.6"
3900
source = "registry+https://github.com/rust-lang/crates.io-index"
3901
-
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
3902
dependencies = [
3903
-
"getrandom 0.2.16",
3904
-
"libredox",
3905
-
"thiserror 1.0.69",
3906
]
3907
3908
[[package]]
···
3913
dependencies = [
3914
"getrandom 0.2.16",
3915
"libredox",
3916
-
"thiserror 2.0.14",
3917
]
3918
3919
[[package]]
3920
name = "ref-cast"
3921
-
version = "1.0.24"
3922
source = "registry+https://github.com/rust-lang/crates.io-index"
3923
-
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
3924
dependencies = [
3925
"ref-cast-impl",
3926
]
3927
3928
[[package]]
3929
name = "ref-cast-impl"
3930
-
version = "1.0.24"
3931
source = "registry+https://github.com/rust-lang/crates.io-index"
3932
-
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
3933
dependencies = [
3934
"proc-macro2",
3935
"quote",
3936
-
"syn 2.0.105",
3937
]
3938
3939
[[package]]
3940
name = "regex"
3941
-
version = "1.11.1"
3942
source = "registry+https://github.com/rust-lang/crates.io-index"
3943
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
3944
dependencies = [
3945
"aho-corasick",
3946
"memchr",
···
3950
3951
[[package]]
3952
name = "regex-automata"
3953
-
version = "0.4.9"
3954
source = "registry+https://github.com/rust-lang/crates.io-index"
3955
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
3956
dependencies = [
3957
"aho-corasick",
3958
"memchr",
···
3961
3962
[[package]]
3963
name = "regex-syntax"
3964
-
version = "0.8.5"
3965
source = "registry+https://github.com/rust-lang/crates.io-index"
3966
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
3967
3968
[[package]]
3969
name = "reqwest"
3970
-
version = "0.12.23"
3971
source = "registry+https://github.com/rust-lang/crates.io-index"
3972
-
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
3973
dependencies = [
3974
"base64 0.22.1",
3975
"bytes",
···
4037
4038
[[package]]
4039
name = "rust-ini"
4040
-
version = "0.21.2"
4041
source = "registry+https://github.com/rust-lang/crates.io-index"
4042
-
checksum = "e7295b7ce3bf4806b419dc3420745998b447178b7005e2011947b38fc5aa6791"
4043
dependencies = [
4044
"cfg-if",
4045
"ordered-multimap",
4046
]
4047
4048
[[package]]
4049
-
name = "rustc-demangle"
4050
-
version = "0.1.26"
4051
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4052
-
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
4053
-
4054
-
[[package]]
4055
name = "rustc-hash"
4056
version = "2.1.1"
4057
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4068
4069
[[package]]
4070
name = "rustix"
4071
-
version = "0.38.44"
4072
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4073
-
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
4074
-
dependencies = [
4075
-
"bitflags 2.9.1",
4076
-
"errno",
4077
-
"libc",
4078
-
"linux-raw-sys 0.4.15",
4079
-
"windows-sys 0.59.0",
4080
-
]
4081
-
4082
-
[[package]]
4083
-
name = "rustix"
4084
-
version = "1.0.8"
4085
source = "registry+https://github.com/rust-lang/crates.io-index"
4086
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
4087
dependencies = [
4088
-
"bitflags 2.9.1",
4089
"errno",
4090
"libc",
4091
-
"linux-raw-sys 0.9.4",
4092
-
"windows-sys 0.60.2",
4093
]
4094
4095
[[package]]
4096
name = "rustls"
4097
-
version = "0.23.31"
4098
source = "registry+https://github.com/rust-lang/crates.io-index"
4099
-
checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc"
4100
dependencies = [
4101
"once_cell",
4102
"ring",
···
4108
4109
[[package]]
4110
name = "rustls-pki-types"
4111
-
version = "1.12.0"
4112
source = "registry+https://github.com/rust-lang/crates.io-index"
4113
-
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
4114
dependencies = [
4115
"web-time",
4116
"zeroize",
···
4118
4119
[[package]]
4120
name = "rustls-webpki"
4121
-
version = "0.103.4"
4122
source = "registry+https://github.com/rust-lang/crates.io-index"
4123
-
checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
4124
dependencies = [
4125
"ring",
4126
"rustls-pki-types",
···
4150
4151
[[package]]
4152
name = "schannel"
4153
-
version = "0.1.27"
4154
source = "registry+https://github.com/rust-lang/crates.io-index"
4155
-
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
4156
dependencies = [
4157
-
"windows-sys 0.59.0",
4158
]
4159
4160
[[package]]
···
4186
4187
[[package]]
4188
name = "schemars"
4189
-
version = "1.0.4"
4190
source = "registry+https://github.com/rust-lang/crates.io-index"
4191
-
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
4192
dependencies = [
4193
"dyn-clone",
4194
"ref-cast",
···
4205
"proc-macro2",
4206
"quote",
4207
"serde_derive_internals",
4208
-
"syn 2.0.105",
4209
]
4210
4211
[[package]]
···
4220
source = "registry+https://github.com/rust-lang/crates.io-index"
4221
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
4222
dependencies = [
4223
-
"bitflags 2.9.1",
4224
"core-foundation 0.9.4",
4225
"core-foundation-sys",
4226
"libc",
···
4229
4230
[[package]]
4231
name = "security-framework-sys"
4232
-
version = "2.14.0"
4233
source = "registry+https://github.com/rust-lang/crates.io-index"
4234
-
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
4235
dependencies = [
4236
"core-foundation-sys",
4237
"libc",
···
4257
4258
[[package]]
4259
name = "semver"
4260
-
version = "1.0.26"
4261
source = "registry+https://github.com/rust-lang/crates.io-index"
4262
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
4263
dependencies = [
4264
"serde",
4265
]
4266
4267
[[package]]
4268
name = "serde"
4269
-
version = "1.0.219"
4270
source = "registry+https://github.com/rust-lang/crates.io-index"
4271
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
4272
dependencies = [
4273
"serde_derive",
4274
]
4275
4276
[[package]]
4277
name = "serde-untagged"
4278
-
version = "0.1.8"
4279
source = "registry+https://github.com/rust-lang/crates.io-index"
4280
-
checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3"
4281
dependencies = [
4282
"erased-serde",
4283
"serde",
4284
"typeid",
4285
]
4286
4287
[[package]]
4288
name = "serde_derive"
4289
-
version = "1.0.219"
4290
source = "registry+https://github.com/rust-lang/crates.io-index"
4291
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
4292
dependencies = [
4293
"proc-macro2",
4294
"quote",
4295
-
"syn 2.0.105",
4296
]
4297
4298
[[package]]
···
4303
dependencies = [
4304
"proc-macro2",
4305
"quote",
4306
-
"syn 2.0.105",
4307
]
4308
4309
[[package]]
4310
name = "serde_json"
4311
-
version = "1.0.142"
4312
source = "registry+https://github.com/rust-lang/crates.io-index"
4313
-
checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7"
4314
dependencies = [
4315
"itoa",
4316
"memchr",
4317
"ryu",
4318
"serde",
4319
]
4320
4321
[[package]]
···
4326
dependencies = [
4327
"proc-macro2",
4328
"quote",
4329
-
"syn 2.0.105",
4330
]
4331
4332
[[package]]
···
4340
4341
[[package]]
4342
name = "serde_spanned"
4343
-
version = "1.0.0"
4344
source = "registry+https://github.com/rust-lang/crates.io-index"
4345
-
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
4346
dependencies = [
4347
-
"serde",
4348
]
4349
4350
[[package]]
···
4361
4362
[[package]]
4363
name = "serde_with"
4364
-
version = "3.14.0"
4365
source = "registry+https://github.com/rust-lang/crates.io-index"
4366
-
checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
4367
dependencies = [
4368
"base64 0.22.1",
4369
"chrono",
4370
"hex",
4371
"indexmap 1.9.3",
4372
-
"indexmap 2.10.0",
4373
"schemars 0.9.0",
4374
-
"schemars 1.0.4",
4375
-
"serde",
4376
-
"serde_derive",
4377
"serde_json",
4378
"serde_with_macros",
4379
"time",
···
4381
4382
[[package]]
4383
name = "serde_with_macros"
4384
-
version = "3.14.0"
4385
source = "registry+https://github.com/rust-lang/crates.io-index"
4386
-
checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
4387
dependencies = [
4388
"darling",
4389
"proc-macro2",
4390
"quote",
4391
-
"syn 2.0.105",
4392
]
4393
4394
[[package]]
4395
name = "serialize-to-javascript"
4396
-
version = "0.1.1"
4397
source = "registry+https://github.com/rust-lang/crates.io-index"
4398
-
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
4399
dependencies = [
4400
"serde",
4401
"serde_json",
···
4404
4405
[[package]]
4406
name = "serialize-to-javascript-impl"
4407
-
version = "0.1.1"
4408
source = "registry+https://github.com/rust-lang/crates.io-index"
4409
-
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
4410
dependencies = [
4411
"proc-macro2",
4412
"quote",
4413
-
"syn 1.0.109",
4414
]
4415
4416
[[package]]
···
4522
4523
[[package]]
4524
name = "socket2"
4525
-
version = "0.5.10"
4526
source = "registry+https://github.com/rust-lang/crates.io-index"
4527
-
checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
4528
dependencies = [
4529
"libc",
4530
-
"windows-sys 0.52.0",
4531
-
]
4532
-
4533
-
[[package]]
4534
-
name = "socket2"
4535
-
version = "0.6.0"
4536
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4537
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
4538
-
dependencies = [
4539
-
"libc",
4540
-
"windows-sys 0.59.0",
4541
]
4542
4543
[[package]]
···
4590
4591
[[package]]
4592
name = "stable_deref_trait"
4593
-
version = "1.2.0"
4594
source = "registry+https://github.com/rust-lang/crates.io-index"
4595
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
4596
4597
[[package]]
4598
name = "static_assertions"
···
4661
4662
[[package]]
4663
name = "syn"
4664
-
version = "2.0.105"
4665
source = "registry+https://github.com/rust-lang/crates.io-index"
4666
-
checksum = "7bc3fcb250e53458e712715cf74285c1f889686520d79294a9ef3bd7aa1fc619"
4667
dependencies = [
4668
"proc-macro2",
4669
"quote",
···
4687
dependencies = [
4688
"proc-macro2",
4689
"quote",
4690
-
"syn 2.0.105",
4691
]
4692
4693
[[package]]
···
4696
source = "registry+https://github.com/rust-lang/crates.io-index"
4697
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
4698
dependencies = [
4699
-
"bitflags 2.9.1",
4700
"core-foundation 0.9.4",
4701
"system-configuration-sys",
4702
]
···
4726
4727
[[package]]
4728
name = "tao"
4729
-
version = "0.34.0"
4730
source = "registry+https://github.com/rust-lang/crates.io-index"
4731
-
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
4732
dependencies = [
4733
-
"bitflags 2.9.1",
4734
"core-foundation 0.10.1",
4735
"core-graphics",
4736
"crossbeam-channel",
···
4747
"ndk",
4748
"ndk-context",
4749
"ndk-sys",
4750
-
"objc2 0.6.2",
4751
"objc2-app-kit",
4752
-
"objc2-foundation 0.3.1",
4753
"once_cell",
4754
"parking_lot",
4755
"raw-window-handle",
···
4758
"unicode-segmentation",
4759
"url",
4760
"windows",
4761
-
"windows-core",
4762
"windows-version",
4763
"x11-dl",
4764
]
···
4771
dependencies = [
4772
"proc-macro2",
4773
"quote",
4774
-
"syn 2.0.105",
4775
]
4776
4777
[[package]]
···
4782
4783
[[package]]
4784
name = "tauri"
4785
-
version = "2.7.0"
4786
source = "registry+https://github.com/rust-lang/crates.io-index"
4787
-
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
4788
dependencies = [
4789
"anyhow",
4790
"bytes",
4791
-
"dirs 6.0.0",
4792
"dunce",
4793
"embed_plist",
4794
-
"getrandom 0.3.3",
4795
"glob",
4796
"gtk",
4797
"heck 0.5.0",
···
4802
"log",
4803
"mime",
4804
"muda",
4805
-
"objc2 0.6.2",
4806
"objc2-app-kit",
4807
-
"objc2-foundation 0.3.1",
4808
"objc2-ui-kit",
4809
"percent-encoding",
4810
"plist",
4811
"raw-window-handle",
···
4820
"tauri-runtime",
4821
"tauri-runtime-wry",
4822
"tauri-utils",
4823
-
"thiserror 2.0.14",
4824
"tokio",
4825
"tray-icon",
4826
"url",
4827
-
"urlpattern",
4828
"webkit2gtk",
4829
"webview2-com",
4830
"window-vibrancy",
···
4833
4834
[[package]]
4835
name = "tauri-build"
4836
-
version = "2.3.1"
4837
source = "registry+https://github.com/rust-lang/crates.io-index"
4838
-
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
4839
dependencies = [
4840
"anyhow",
4841
"cargo_toml",
4842
-
"dirs 6.0.0",
4843
"glob",
4844
"heck 0.5.0",
4845
"json-patch",
···
4849
"serde_json",
4850
"tauri-utils",
4851
"tauri-winres",
4852
-
"toml 0.8.2",
4853
"walkdir",
4854
]
4855
4856
[[package]]
4857
name = "tauri-codegen"
4858
-
version = "2.3.1"
4859
source = "registry+https://github.com/rust-lang/crates.io-index"
4860
-
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
4861
dependencies = [
4862
"base64 0.22.1",
4863
"brotli",
4864
"ico",
4865
"json-patch",
4866
"plist",
4867
-
"png",
4868
"proc-macro2",
4869
"quote",
4870
"semver",
4871
"serde",
4872
"serde_json",
4873
"sha2",
4874
-
"syn 2.0.105",
4875
"tauri-utils",
4876
-
"thiserror 2.0.14",
4877
"time",
4878
"url",
4879
"uuid",
···
4882
4883
[[package]]
4884
name = "tauri-macros"
4885
-
version = "2.3.2"
4886
source = "registry+https://github.com/rust-lang/crates.io-index"
4887
-
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
4888
dependencies = [
4889
"heck 0.5.0",
4890
"proc-macro2",
4891
"quote",
4892
-
"syn 2.0.105",
4893
"tauri-codegen",
4894
"tauri-utils",
4895
]
4896
4897
[[package]]
4898
name = "tauri-plugin"
4899
-
version = "2.3.1"
4900
source = "registry+https://github.com/rust-lang/crates.io-index"
4901
-
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
4902
dependencies = [
4903
"anyhow",
4904
"glob",
···
4907
"serde",
4908
"serde_json",
4909
"tauri-utils",
4910
-
"toml 0.8.2",
4911
"walkdir",
4912
]
4913
4914
[[package]]
4915
name = "tauri-plugin-deep-link"
4916
-
version = "2.4.1"
4917
source = "registry+https://github.com/rust-lang/crates.io-index"
4918
-
checksum = "1fec67f32d7a06d80bd3dc009fdb678c35a66116d9cb8cd2bb32e406c2b5bbd2"
4919
dependencies = [
4920
"dunce",
4921
"rust-ini",
4922
"serde",
4923
"serde_json",
4924
"tauri",
4925
"tauri-plugin",
4926
"tauri-utils",
4927
-
"thiserror 2.0.14",
4928
"tracing",
4929
"url",
4930
"windows-registry",
4931
-
"windows-result",
4932
]
4933
4934
[[package]]
4935
name = "tauri-plugin-fs"
4936
-
version = "2.4.1"
4937
source = "registry+https://github.com/rust-lang/crates.io-index"
4938
-
checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99"
4939
dependencies = [
4940
"anyhow",
4941
"dunce",
···
4948
"tauri",
4949
"tauri-plugin",
4950
"tauri-utils",
4951
-
"thiserror 2.0.14",
4952
-
"toml 0.8.2",
4953
"url",
4954
]
4955
4956
[[package]]
4957
name = "tauri-plugin-http"
4958
-
version = "2.5.1"
4959
source = "registry+https://github.com/rust-lang/crates.io-index"
4960
-
checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2"
4961
dependencies = [
4962
"bytes",
4963
"cookie_store",
···
4971
"tauri",
4972
"tauri-plugin",
4973
"tauri-plugin-fs",
4974
-
"thiserror 2.0.14",
4975
"tokio",
4976
"url",
4977
"urlpattern",
···
4979
4980
[[package]]
4981
name = "tauri-plugin-process"
4982
-
version = "2.3.0"
4983
source = "registry+https://github.com/rust-lang/crates.io-index"
4984
-
checksum = "7461c622a5ea00eb9cd9f7a08dbd3bf79484499fd5c21aa2964677f64ca651ab"
4985
dependencies = [
4986
"tauri",
4987
"tauri-plugin",
···
4989
4990
[[package]]
4991
name = "tauri-plugin-shell"
4992
-
version = "2.3.0"
4993
source = "registry+https://github.com/rust-lang/crates.io-index"
4994
-
checksum = "2b9ffadec5c3523f11e8273465cacb3d86ea7652a28e6e2a2e9b5c182f791d25"
4995
dependencies = [
4996
"encoding_rs",
4997
"log",
···
5004
"shared_child",
5005
"tauri",
5006
"tauri-plugin",
5007
-
"thiserror 2.0.14",
5008
"tokio",
5009
]
5010
5011
[[package]]
5012
name = "tauri-plugin-single-instance"
5013
-
version = "2.3.2"
5014
source = "registry+https://github.com/rust-lang/crates.io-index"
5015
-
checksum = "50a0e5a4ce43cb3a733c3aef85e8478bc769dac743c615e26639cbf5d953faf7"
5016
dependencies = [
5017
"serde",
5018
"serde_json",
5019
"tauri",
5020
"tauri-plugin-deep-link",
5021
-
"thiserror 2.0.14",
5022
"tracing",
5023
"windows-sys 0.60.2",
5024
"zbus",
···
5026
5027
[[package]]
5028
name = "tauri-runtime"
5029
-
version = "2.7.1"
5030
source = "registry+https://github.com/rust-lang/crates.io-index"
5031
-
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
5032
dependencies = [
5033
"cookie",
5034
"dpi",
5035
"gtk",
5036
"http",
5037
"jni",
5038
-
"objc2 0.6.2",
5039
"objc2-ui-kit",
5040
"raw-window-handle",
5041
"serde",
5042
"serde_json",
5043
"tauri-utils",
5044
-
"thiserror 2.0.14",
5045
"url",
5046
"windows",
5047
]
5048
5049
[[package]]
5050
name = "tauri-runtime-wry"
5051
-
version = "2.7.2"
5052
source = "registry+https://github.com/rust-lang/crates.io-index"
5053
-
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
5054
dependencies = [
5055
"gtk",
5056
"http",
5057
"jni",
5058
"log",
5059
-
"objc2 0.6.2",
5060
"objc2-app-kit",
5061
-
"objc2-foundation 0.3.1",
5062
"once_cell",
5063
"percent-encoding",
5064
"raw-window-handle",
···
5075
5076
[[package]]
5077
name = "tauri-utils"
5078
-
version = "2.6.0"
5079
source = "registry+https://github.com/rust-lang/crates.io-index"
5080
-
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
5081
dependencies = [
5082
"anyhow",
5083
"brotli",
···
5103
"serde_json",
5104
"serde_with",
5105
"swift-rs",
5106
-
"thiserror 2.0.14",
5107
-
"toml 0.8.2",
5108
"url",
5109
"urlpattern",
5110
"uuid",
···
5118
checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074"
5119
dependencies = [
5120
"embed-resource",
5121
-
"toml 0.9.5",
5122
]
5123
5124
[[package]]
5125
name = "tempfile"
5126
-
version = "3.20.0"
5127
source = "registry+https://github.com/rust-lang/crates.io-index"
5128
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
5129
dependencies = [
5130
"fastrand",
5131
-
"getrandom 0.3.3",
5132
"once_cell",
5133
-
"rustix 1.0.8",
5134
-
"windows-sys 0.59.0",
5135
]
5136
5137
[[package]]
···
5156
5157
[[package]]
5158
name = "thiserror"
5159
-
version = "2.0.14"
5160
source = "registry+https://github.com/rust-lang/crates.io-index"
5161
-
checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e"
5162
dependencies = [
5163
-
"thiserror-impl 2.0.14",
5164
]
5165
5166
[[package]]
···
5171
dependencies = [
5172
"proc-macro2",
5173
"quote",
5174
-
"syn 2.0.105",
5175
]
5176
5177
[[package]]
5178
name = "thiserror-impl"
5179
-
version = "2.0.14"
5180
source = "registry+https://github.com/rust-lang/crates.io-index"
5181
-
checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227"
5182
dependencies = [
5183
"proc-macro2",
5184
"quote",
5185
-
"syn 2.0.105",
5186
]
5187
5188
[[package]]
5189
name = "tiff"
5190
-
version = "0.9.1"
5191
source = "registry+https://github.com/rust-lang/crates.io-index"
5192
-
checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e"
5193
dependencies = [
5194
"flate2",
5195
-
"jpeg-decoder",
5196
"weezl",
5197
]
5198
5199
[[package]]
5200
name = "time"
5201
-
version = "0.3.41"
5202
source = "registry+https://github.com/rust-lang/crates.io-index"
5203
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
5204
dependencies = [
5205
"deranged",
5206
"itoa",
···
5213
5214
[[package]]
5215
name = "time-core"
5216
-
version = "0.1.4"
5217
source = "registry+https://github.com/rust-lang/crates.io-index"
5218
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
5219
5220
[[package]]
5221
name = "time-macros"
5222
-
version = "0.2.22"
5223
source = "registry+https://github.com/rust-lang/crates.io-index"
5224
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
5225
dependencies = [
5226
"num-conv",
5227
"time-core",
···
5238
5239
[[package]]
5240
name = "tinystr"
5241
-
version = "0.8.1"
5242
source = "registry+https://github.com/rust-lang/crates.io-index"
5243
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
5244
dependencies = [
5245
"displaydoc",
5246
"zerovec",
···
5248
5249
[[package]]
5250
name = "tinyvec"
5251
-
version = "1.9.0"
5252
source = "registry+https://github.com/rust-lang/crates.io-index"
5253
-
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
5254
dependencies = [
5255
"tinyvec_macros",
5256
]
···
5263
5264
[[package]]
5265
name = "tokio"
5266
-
version = "1.47.1"
5267
source = "registry+https://github.com/rust-lang/crates.io-index"
5268
-
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
5269
dependencies = [
5270
-
"backtrace",
5271
"bytes",
5272
-
"io-uring",
5273
"libc",
5274
-
"mio 1.0.4",
5275
"pin-project-lite",
5276
-
"slab",
5277
-
"socket2 0.6.0",
5278
"tokio-macros",
5279
-
"windows-sys 0.59.0",
5280
]
5281
5282
[[package]]
5283
name = "tokio-macros"
5284
-
version = "2.5.0"
5285
source = "registry+https://github.com/rust-lang/crates.io-index"
5286
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
5287
dependencies = [
5288
"proc-macro2",
5289
"quote",
5290
-
"syn 2.0.105",
5291
]
5292
5293
[[package]]
···
5302
5303
[[package]]
5304
name = "tokio-rustls"
5305
-
version = "0.26.2"
5306
source = "registry+https://github.com/rust-lang/crates.io-index"
5307
-
checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
5308
dependencies = [
5309
"rustls",
5310
"tokio",
···
5312
5313
[[package]]
5314
name = "tokio-util"
5315
-
version = "0.7.16"
5316
source = "registry+https://github.com/rust-lang/crates.io-index"
5317
-
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
5318
dependencies = [
5319
"bytes",
5320
"futures-core",
···
5331
dependencies = [
5332
"serde",
5333
"serde_spanned 0.6.9",
5334
-
"toml_datetime 0.6.11",
5335
"toml_edit 0.20.2",
5336
]
5337
5338
[[package]]
5339
name = "toml"
5340
-
version = "0.9.5"
5341
source = "registry+https://github.com/rust-lang/crates.io-index"
5342
-
checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8"
5343
dependencies = [
5344
-
"indexmap 2.10.0",
5345
-
"serde",
5346
-
"serde_spanned 1.0.0",
5347
-
"toml_datetime 0.7.0",
5348
"toml_parser",
5349
"toml_writer",
5350
-
"winnow 0.7.12",
5351
]
5352
5353
[[package]]
5354
name = "toml_datetime"
5355
-
version = "0.6.11"
5356
source = "registry+https://github.com/rust-lang/crates.io-index"
5357
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
5358
dependencies = [
5359
"serde",
5360
]
5361
5362
[[package]]
5363
name = "toml_datetime"
5364
-
version = "0.7.0"
5365
source = "registry+https://github.com/rust-lang/crates.io-index"
5366
-
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
5367
dependencies = [
5368
-
"serde",
5369
]
5370
5371
[[package]]
···
5374
source = "registry+https://github.com/rust-lang/crates.io-index"
5375
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
5376
dependencies = [
5377
-
"indexmap 2.10.0",
5378
-
"toml_datetime 0.6.11",
5379
"winnow 0.5.40",
5380
]
5381
···
5385
source = "registry+https://github.com/rust-lang/crates.io-index"
5386
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
5387
dependencies = [
5388
-
"indexmap 2.10.0",
5389
"serde",
5390
"serde_spanned 0.6.9",
5391
-
"toml_datetime 0.6.11",
5392
"winnow 0.5.40",
5393
]
5394
5395
[[package]]
5396
name = "toml_edit"
5397
-
version = "0.22.27"
5398
source = "registry+https://github.com/rust-lang/crates.io-index"
5399
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
5400
dependencies = [
5401
-
"indexmap 2.10.0",
5402
-
"toml_datetime 0.6.11",
5403
-
"winnow 0.7.12",
5404
]
5405
5406
[[package]]
5407
name = "toml_parser"
5408
-
version = "1.0.2"
5409
source = "registry+https://github.com/rust-lang/crates.io-index"
5410
-
checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10"
5411
dependencies = [
5412
-
"winnow 0.7.12",
5413
]
5414
5415
[[package]]
5416
name = "toml_writer"
5417
-
version = "1.0.2"
5418
source = "registry+https://github.com/rust-lang/crates.io-index"
5419
-
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
5420
5421
[[package]]
5422
name = "tower"
···
5439
source = "registry+https://github.com/rust-lang/crates.io-index"
5440
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
5441
dependencies = [
5442
-
"bitflags 2.9.1",
5443
"bytes",
5444
"futures-util",
5445
"http",
···
5482
dependencies = [
5483
"proc-macro2",
5484
"quote",
5485
-
"syn 2.0.105",
5486
]
5487
5488
[[package]]
···
5496
5497
[[package]]
5498
name = "tray-icon"
5499
-
version = "0.21.1"
5500
source = "registry+https://github.com/rust-lang/crates.io-index"
5501
-
checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2"
5502
dependencies = [
5503
"crossbeam-channel",
5504
-
"dirs 6.0.0",
5505
"libappindicator",
5506
"muda",
5507
-
"objc2 0.6.2",
5508
"objc2-app-kit",
5509
"objc2-core-foundation",
5510
"objc2-core-graphics",
5511
-
"objc2-foundation 0.3.1",
5512
"once_cell",
5513
-
"png",
5514
"serde",
5515
-
"thiserror 2.0.14",
5516
-
"windows-sys 0.59.0",
5517
]
5518
5519
[[package]]
···
5530
5531
[[package]]
5532
name = "typenum"
5533
-
version = "1.18.0"
5534
source = "registry+https://github.com/rust-lang/crates.io-index"
5535
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
5536
5537
[[package]]
5538
name = "uds_windows"
···
5588
5589
[[package]]
5590
name = "unicode-ident"
5591
-
version = "1.0.18"
5592
source = "registry+https://github.com/rust-lang/crates.io-index"
5593
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
5594
5595
[[package]]
5596
name = "unicode-segmentation"
···
5606
5607
[[package]]
5608
name = "url"
5609
-
version = "2.5.4"
5610
source = "registry+https://github.com/rust-lang/crates.io-index"
5611
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
5612
dependencies = [
5613
"form_urlencoded",
5614
"idna",
···
5642
5643
[[package]]
5644
name = "uuid"
5645
-
version = "1.18.0"
5646
source = "registry+https://github.com/rust-lang/crates.io-index"
5647
-
checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be"
5648
dependencies = [
5649
-
"getrandom 0.3.3",
5650
"js-sys",
5651
"serde",
5652
"wasm-bindgen",
···
5671
5672
[[package]]
5673
name = "version-compare"
5674
-
version = "0.2.0"
5675
source = "registry+https://github.com/rust-lang/crates.io-index"
5676
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
5677
5678
[[package]]
5679
name = "version_check"
···
5733
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
5734
5735
[[package]]
5736
-
name = "wasi"
5737
-
version = "0.14.2+wasi-0.2.4"
5738
source = "registry+https://github.com/rust-lang/crates.io-index"
5739
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
5740
dependencies = [
5741
-
"wit-bindgen-rt",
5742
]
5743
5744
[[package]]
5745
name = "wasm-bindgen"
5746
-
version = "0.2.100"
5747
source = "registry+https://github.com/rust-lang/crates.io-index"
5748
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
5749
dependencies = [
5750
"cfg-if",
5751
"once_cell",
5752
"rustversion",
5753
"wasm-bindgen-macro",
5754
-
]
5755
-
5756
-
[[package]]
5757
-
name = "wasm-bindgen-backend"
5758
-
version = "0.2.100"
5759
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5760
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
5761
-
dependencies = [
5762
-
"bumpalo",
5763
-
"log",
5764
-
"proc-macro2",
5765
-
"quote",
5766
-
"syn 2.0.105",
5767
"wasm-bindgen-shared",
5768
]
5769
5770
[[package]]
5771
name = "wasm-bindgen-futures"
5772
-
version = "0.4.50"
5773
source = "registry+https://github.com/rust-lang/crates.io-index"
5774
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
5775
dependencies = [
5776
"cfg-if",
5777
"js-sys",
···
5782
5783
[[package]]
5784
name = "wasm-bindgen-macro"
5785
-
version = "0.2.100"
5786
source = "registry+https://github.com/rust-lang/crates.io-index"
5787
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
5788
dependencies = [
5789
"quote",
5790
"wasm-bindgen-macro-support",
···
5792
5793
[[package]]
5794
name = "wasm-bindgen-macro-support"
5795
-
version = "0.2.100"
5796
source = "registry+https://github.com/rust-lang/crates.io-index"
5797
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
5798
dependencies = [
5799
"proc-macro2",
5800
"quote",
5801
-
"syn 2.0.105",
5802
-
"wasm-bindgen-backend",
5803
"wasm-bindgen-shared",
5804
]
5805
5806
[[package]]
5807
name = "wasm-bindgen-shared"
5808
-
version = "0.2.100"
5809
source = "registry+https://github.com/rust-lang/crates.io-index"
5810
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
5811
dependencies = [
5812
"unicode-ident",
5813
]
···
5827
5828
[[package]]
5829
name = "web-sys"
5830
-
version = "0.3.77"
5831
source = "registry+https://github.com/rust-lang/crates.io-index"
5832
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
5833
dependencies = [
5834
"js-sys",
5835
"wasm-bindgen",
···
5891
5892
[[package]]
5893
name = "webpki-roots"
5894
-
version = "1.0.2"
5895
source = "registry+https://github.com/rust-lang/crates.io-index"
5896
-
checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
5897
dependencies = [
5898
"rustls-pki-types",
5899
]
···
5907
"webview2-com-macros",
5908
"webview2-com-sys",
5909
"windows",
5910
-
"windows-core",
5911
"windows-implement",
5912
"windows-interface",
5913
]
···
5920
dependencies = [
5921
"proc-macro2",
5922
"quote",
5923
-
"syn 2.0.105",
5924
]
5925
5926
[[package]]
···
5929
source = "registry+https://github.com/rust-lang/crates.io-index"
5930
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
5931
dependencies = [
5932
-
"thiserror 2.0.14",
5933
"windows",
5934
-
"windows-core",
5935
]
5936
5937
[[package]]
···
5958
5959
[[package]]
5960
name = "winapi-util"
5961
-
version = "0.1.9"
5962
source = "registry+https://github.com/rust-lang/crates.io-index"
5963
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
5964
dependencies = [
5965
-
"windows-sys 0.59.0",
5966
]
5967
5968
[[package]]
···
5977
source = "registry+https://github.com/rust-lang/crates.io-index"
5978
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
5979
dependencies = [
5980
-
"objc2 0.6.2",
5981
"objc2-app-kit",
5982
"objc2-core-foundation",
5983
-
"objc2-foundation 0.3.1",
5984
"raw-window-handle",
5985
"windows-sys 0.59.0",
5986
"windows-version",
···
5993
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
5994
dependencies = [
5995
"windows-collections",
5996
-
"windows-core",
5997
"windows-future",
5998
-
"windows-link",
5999
"windows-numerics",
6000
]
6001
···
6005
source = "registry+https://github.com/rust-lang/crates.io-index"
6006
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
6007
dependencies = [
6008
-
"windows-core",
6009
]
6010
6011
[[package]]
···
6016
dependencies = [
6017
"windows-implement",
6018
"windows-interface",
6019
-
"windows-link",
6020
-
"windows-result",
6021
-
"windows-strings",
6022
]
6023
6024
[[package]]
···
6027
source = "registry+https://github.com/rust-lang/crates.io-index"
6028
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
6029
dependencies = [
6030
-
"windows-core",
6031
-
"windows-link",
6032
"windows-threading",
6033
]
6034
6035
[[package]]
6036
name = "windows-implement"
6037
-
version = "0.60.0"
6038
source = "registry+https://github.com/rust-lang/crates.io-index"
6039
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
6040
dependencies = [
6041
"proc-macro2",
6042
"quote",
6043
-
"syn 2.0.105",
6044
]
6045
6046
[[package]]
6047
name = "windows-interface"
6048
-
version = "0.59.1"
6049
source = "registry+https://github.com/rust-lang/crates.io-index"
6050
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
6051
dependencies = [
6052
"proc-macro2",
6053
"quote",
6054
-
"syn 2.0.105",
6055
]
6056
6057
[[package]]
···
6059
version = "0.1.3"
6060
source = "registry+https://github.com/rust-lang/crates.io-index"
6061
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
6062
6063
[[package]]
6064
name = "windows-numerics"
···
6066
source = "registry+https://github.com/rust-lang/crates.io-index"
6067
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
6068
dependencies = [
6069
-
"windows-core",
6070
-
"windows-link",
6071
]
6072
6073
[[package]]
···
6076
source = "registry+https://github.com/rust-lang/crates.io-index"
6077
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
6078
dependencies = [
6079
-
"windows-link",
6080
-
"windows-result",
6081
-
"windows-strings",
6082
]
6083
6084
[[package]]
···
6087
source = "registry+https://github.com/rust-lang/crates.io-index"
6088
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
6089
dependencies = [
6090
-
"windows-link",
6091
]
6092
6093
[[package]]
···
6096
source = "registry+https://github.com/rust-lang/crates.io-index"
6097
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
6098
dependencies = [
6099
-
"windows-link",
6100
]
6101
6102
[[package]]
6103
-
name = "windows-sys"
6104
-
version = "0.45.0"
6105
source = "registry+https://github.com/rust-lang/crates.io-index"
6106
-
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
6107
dependencies = [
6108
-
"windows-targets 0.42.2",
6109
]
6110
6111
[[package]]
6112
name = "windows-sys"
6113
-
version = "0.48.0"
6114
source = "registry+https://github.com/rust-lang/crates.io-index"
6115
-
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
6116
dependencies = [
6117
-
"windows-targets 0.48.5",
6118
]
6119
6120
[[package]]
···
6141
source = "registry+https://github.com/rust-lang/crates.io-index"
6142
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
6143
dependencies = [
6144
-
"windows-targets 0.53.3",
6145
]
6146
6147
[[package]]
···
6161
6162
[[package]]
6163
name = "windows-targets"
6164
-
version = "0.48.5"
6165
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6166
-
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
6167
-
dependencies = [
6168
-
"windows_aarch64_gnullvm 0.48.5",
6169
-
"windows_aarch64_msvc 0.48.5",
6170
-
"windows_i686_gnu 0.48.5",
6171
-
"windows_i686_msvc 0.48.5",
6172
-
"windows_x86_64_gnu 0.48.5",
6173
-
"windows_x86_64_gnullvm 0.48.5",
6174
-
"windows_x86_64_msvc 0.48.5",
6175
-
]
6176
-
6177
-
[[package]]
6178
-
name = "windows-targets"
6179
version = "0.52.6"
6180
source = "registry+https://github.com/rust-lang/crates.io-index"
6181
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
···
6192
6193
[[package]]
6194
name = "windows-targets"
6195
-
version = "0.53.3"
6196
source = "registry+https://github.com/rust-lang/crates.io-index"
6197
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
6198
dependencies = [
6199
-
"windows-link",
6200
-
"windows_aarch64_gnullvm 0.53.0",
6201
-
"windows_aarch64_msvc 0.53.0",
6202
-
"windows_i686_gnu 0.53.0",
6203
-
"windows_i686_gnullvm 0.53.0",
6204
-
"windows_i686_msvc 0.53.0",
6205
-
"windows_x86_64_gnu 0.53.0",
6206
-
"windows_x86_64_gnullvm 0.53.0",
6207
-
"windows_x86_64_msvc 0.53.0",
6208
]
6209
6210
[[package]]
···
6213
source = "registry+https://github.com/rust-lang/crates.io-index"
6214
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
6215
dependencies = [
6216
-
"windows-link",
6217
]
6218
6219
[[package]]
6220
name = "windows-version"
6221
-
version = "0.1.4"
6222
source = "registry+https://github.com/rust-lang/crates.io-index"
6223
-
checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
6224
dependencies = [
6225
-
"windows-link",
6226
]
6227
6228
[[package]]
···
6230
version = "0.42.2"
6231
source = "registry+https://github.com/rust-lang/crates.io-index"
6232
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
6233
-
6234
-
[[package]]
6235
-
name = "windows_aarch64_gnullvm"
6236
-
version = "0.48.5"
6237
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6238
-
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
6239
6240
[[package]]
6241
name = "windows_aarch64_gnullvm"
···
6245
6246
[[package]]
6247
name = "windows_aarch64_gnullvm"
6248
-
version = "0.53.0"
6249
source = "registry+https://github.com/rust-lang/crates.io-index"
6250
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
6251
6252
[[package]]
6253
name = "windows_aarch64_msvc"
···
6257
6258
[[package]]
6259
name = "windows_aarch64_msvc"
6260
-
version = "0.48.5"
6261
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6262
-
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
6263
-
6264
-
[[package]]
6265
-
name = "windows_aarch64_msvc"
6266
version = "0.52.6"
6267
source = "registry+https://github.com/rust-lang/crates.io-index"
6268
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
6269
6270
[[package]]
6271
name = "windows_aarch64_msvc"
6272
-
version = "0.53.0"
6273
source = "registry+https://github.com/rust-lang/crates.io-index"
6274
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
6275
6276
[[package]]
6277
name = "windows_i686_gnu"
···
6281
6282
[[package]]
6283
name = "windows_i686_gnu"
6284
-
version = "0.48.5"
6285
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6286
-
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
6287
-
6288
-
[[package]]
6289
-
name = "windows_i686_gnu"
6290
version = "0.52.6"
6291
source = "registry+https://github.com/rust-lang/crates.io-index"
6292
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
6293
6294
[[package]]
6295
name = "windows_i686_gnu"
6296
-
version = "0.53.0"
6297
source = "registry+https://github.com/rust-lang/crates.io-index"
6298
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
6299
6300
[[package]]
6301
name = "windows_i686_gnullvm"
···
6305
6306
[[package]]
6307
name = "windows_i686_gnullvm"
6308
-
version = "0.53.0"
6309
source = "registry+https://github.com/rust-lang/crates.io-index"
6310
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
6311
6312
[[package]]
6313
name = "windows_i686_msvc"
···
6317
6318
[[package]]
6319
name = "windows_i686_msvc"
6320
-
version = "0.48.5"
6321
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6322
-
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
6323
-
6324
-
[[package]]
6325
-
name = "windows_i686_msvc"
6326
version = "0.52.6"
6327
source = "registry+https://github.com/rust-lang/crates.io-index"
6328
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
6329
6330
[[package]]
6331
name = "windows_i686_msvc"
6332
-
version = "0.53.0"
6333
source = "registry+https://github.com/rust-lang/crates.io-index"
6334
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
6335
6336
[[package]]
6337
name = "windows_x86_64_gnu"
···
6341
6342
[[package]]
6343
name = "windows_x86_64_gnu"
6344
-
version = "0.48.5"
6345
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6346
-
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
6347
-
6348
-
[[package]]
6349
-
name = "windows_x86_64_gnu"
6350
version = "0.52.6"
6351
source = "registry+https://github.com/rust-lang/crates.io-index"
6352
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
6353
6354
[[package]]
6355
name = "windows_x86_64_gnu"
6356
-
version = "0.53.0"
6357
source = "registry+https://github.com/rust-lang/crates.io-index"
6358
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
6359
6360
[[package]]
6361
name = "windows_x86_64_gnullvm"
···
6365
6366
[[package]]
6367
name = "windows_x86_64_gnullvm"
6368
-
version = "0.48.5"
6369
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6370
-
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
6371
-
6372
-
[[package]]
6373
-
name = "windows_x86_64_gnullvm"
6374
version = "0.52.6"
6375
source = "registry+https://github.com/rust-lang/crates.io-index"
6376
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
6377
6378
[[package]]
6379
name = "windows_x86_64_gnullvm"
6380
-
version = "0.53.0"
6381
source = "registry+https://github.com/rust-lang/crates.io-index"
6382
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
6383
6384
[[package]]
6385
name = "windows_x86_64_msvc"
···
6389
6390
[[package]]
6391
name = "windows_x86_64_msvc"
6392
-
version = "0.48.5"
6393
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6394
-
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
6395
-
6396
-
[[package]]
6397
-
name = "windows_x86_64_msvc"
6398
version = "0.52.6"
6399
source = "registry+https://github.com/rust-lang/crates.io-index"
6400
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
6401
6402
[[package]]
6403
name = "windows_x86_64_msvc"
6404
-
version = "0.53.0"
6405
source = "registry+https://github.com/rust-lang/crates.io-index"
6406
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
6407
6408
[[package]]
6409
name = "winnow"
···
6416
6417
[[package]]
6418
name = "winnow"
6419
-
version = "0.7.12"
6420
source = "registry+https://github.com/rust-lang/crates.io-index"
6421
-
checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
6422
dependencies = [
6423
"memchr",
6424
]
···
6434
]
6435
6436
[[package]]
6437
-
name = "wit-bindgen-rt"
6438
-
version = "0.39.0"
6439
source = "registry+https://github.com/rust-lang/crates.io-index"
6440
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
6441
-
dependencies = [
6442
-
"bitflags 2.9.1",
6443
-
]
6444
6445
[[package]]
6446
name = "writeable"
6447
-
version = "0.6.1"
6448
source = "registry+https://github.com/rust-lang/crates.io-index"
6449
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
6450
6451
[[package]]
6452
name = "wry"
6453
-
version = "0.52.1"
6454
source = "registry+https://github.com/rust-lang/crates.io-index"
6455
-
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
6456
dependencies = [
6457
"base64 0.22.1",
6458
-
"block2 0.6.1",
6459
"cookie",
6460
"crossbeam-channel",
6461
"dpi",
6462
"dunce",
6463
"gdkx11",
···
6469
"kuchikiki",
6470
"libc",
6471
"ndk",
6472
-
"objc2 0.6.2",
6473
"objc2-app-kit",
6474
"objc2-core-foundation",
6475
-
"objc2-foundation 0.3.1",
6476
"objc2-ui-kit",
6477
"objc2-web-kit",
6478
"once_cell",
···
6481
"sha2",
6482
"soup3",
6483
"tao-macros",
6484
-
"thiserror 2.0.14",
6485
"url",
6486
"webkit2gtk",
6487
"webkit2gtk-sys",
6488
"webview2-com",
6489
"windows",
6490
-
"windows-core",
6491
"windows-version",
6492
"x11-dl",
6493
]
···
6515
6516
[[package]]
6517
name = "x11rb"
6518
-
version = "0.13.1"
6519
source = "registry+https://github.com/rust-lang/crates.io-index"
6520
-
checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12"
6521
dependencies = [
6522
"gethostname",
6523
-
"rustix 0.38.44",
6524
"x11rb-protocol",
6525
]
6526
6527
[[package]]
6528
name = "x11rb-protocol"
6529
-
version = "0.13.1"
6530
source = "registry+https://github.com/rust-lang/crates.io-index"
6531
-
checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d"
6532
6533
[[package]]
6534
name = "yoke"
6535
-
version = "0.8.0"
6536
source = "registry+https://github.com/rust-lang/crates.io-index"
6537
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
6538
dependencies = [
6539
-
"serde",
6540
"stable_deref_trait",
6541
"yoke-derive",
6542
"zerofrom",
···
6544
6545
[[package]]
6546
name = "yoke-derive"
6547
-
version = "0.8.0"
6548
source = "registry+https://github.com/rust-lang/crates.io-index"
6549
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
6550
dependencies = [
6551
"proc-macro2",
6552
"quote",
6553
-
"syn 2.0.105",
6554
"synstructure",
6555
]
6556
6557
[[package]]
6558
name = "zbus"
6559
-
version = "5.9.0"
6560
source = "registry+https://github.com/rust-lang/crates.io-index"
6561
-
checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
6562
dependencies = [
6563
"async-broadcast",
6564
"async-executor",
···
6580
"serde_repr",
6581
"tracing",
6582
"uds_windows",
6583
-
"windows-sys 0.59.0",
6584
-
"winnow 0.7.12",
6585
"zbus_macros",
6586
"zbus_names",
6587
"zvariant",
···
6589
6590
[[package]]
6591
name = "zbus_macros"
6592
-
version = "5.9.0"
6593
source = "registry+https://github.com/rust-lang/crates.io-index"
6594
-
checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
6595
dependencies = [
6596
-
"proc-macro-crate 3.3.0",
6597
"proc-macro2",
6598
"quote",
6599
-
"syn 2.0.105",
6600
"zbus_names",
6601
"zvariant",
6602
"zvariant_utils",
···
6610
dependencies = [
6611
"serde",
6612
"static_assertions",
6613
-
"winnow 0.7.12",
6614
"zvariant",
6615
]
6616
6617
[[package]]
6618
name = "zerocopy"
6619
-
version = "0.8.26"
6620
source = "registry+https://github.com/rust-lang/crates.io-index"
6621
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
6622
dependencies = [
6623
"zerocopy-derive",
6624
]
6625
6626
[[package]]
6627
name = "zerocopy-derive"
6628
-
version = "0.8.26"
6629
source = "registry+https://github.com/rust-lang/crates.io-index"
6630
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
6631
dependencies = [
6632
"proc-macro2",
6633
"quote",
6634
-
"syn 2.0.105",
6635
]
6636
6637
[[package]]
···
6651
dependencies = [
6652
"proc-macro2",
6653
"quote",
6654
-
"syn 2.0.105",
6655
"synstructure",
6656
]
6657
6658
[[package]]
6659
name = "zeroize"
6660
-
version = "1.8.1"
6661
source = "registry+https://github.com/rust-lang/crates.io-index"
6662
-
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
6663
6664
[[package]]
6665
name = "zerotrie"
6666
-
version = "0.2.2"
6667
source = "registry+https://github.com/rust-lang/crates.io-index"
6668
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
6669
dependencies = [
6670
"displaydoc",
6671
"yoke",
···
6674
6675
[[package]]
6676
name = "zerovec"
6677
-
version = "0.11.4"
6678
source = "registry+https://github.com/rust-lang/crates.io-index"
6679
-
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
6680
dependencies = [
6681
"yoke",
6682
"zerofrom",
···
6685
6686
[[package]]
6687
name = "zerovec-derive"
6688
-
version = "0.11.1"
6689
source = "registry+https://github.com/rust-lang/crates.io-index"
6690
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
6691
dependencies = [
6692
"proc-macro2",
6693
"quote",
6694
-
"syn 2.0.105",
6695
]
6696
6697
[[package]]
···
6711
6712
[[package]]
6713
name = "zune-jpeg"
6714
-
version = "0.4.20"
6715
source = "registry+https://github.com/rust-lang/crates.io-index"
6716
-
checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089"
6717
dependencies = [
6718
"zune-core",
6719
]
6720
6721
[[package]]
6722
name = "zvariant"
6723
-
version = "5.6.0"
6724
source = "registry+https://github.com/rust-lang/crates.io-index"
6725
-
checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
6726
dependencies = [
6727
"endi",
6728
"enumflags2",
6729
"serde",
6730
-
"winnow 0.7.12",
6731
"zvariant_derive",
6732
"zvariant_utils",
6733
]
6734
6735
[[package]]
6736
name = "zvariant_derive"
6737
-
version = "5.6.0"
6738
source = "registry+https://github.com/rust-lang/crates.io-index"
6739
-
checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
6740
dependencies = [
6741
-
"proc-macro-crate 3.3.0",
6742
"proc-macro2",
6743
"quote",
6744
-
"syn 2.0.105",
6745
"zvariant_utils",
6746
]
6747
6748
[[package]]
6749
name = "zvariant_utils"
6750
-
version = "3.2.0"
6751
source = "registry+https://github.com/rust-lang/crates.io-index"
6752
-
checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
6753
dependencies = [
6754
"proc-macro2",
6755
"quote",
6756
"serde",
6757
-
"static_assertions",
6758
-
"syn 2.0.105",
6759
-
"winnow 0.7.12",
6760
]
···
4
5
[[package]]
6
name = "VRChatPhotoManager"
7
+
version = "0.2.7"
8
dependencies = [
9
"arboard",
10
+
"dirs",
11
"fast_image_resize",
12
"image",
13
"mslnk",
···
19
"serde_json",
20
"tauri",
21
"tauri-build",
22
"tauri-plugin-http",
23
"tauri-plugin-process",
24
"tauri-plugin-shell",
···
26
]
27
28
[[package]]
29
name = "adler2"
30
version = "2.0.1"
31
source = "registry+https://github.com/rust-lang/crates.io-index"
···
33
34
[[package]]
35
name = "aho-corasick"
36
+
version = "1.1.4"
37
source = "registry+https://github.com/rust-lang/crates.io-index"
38
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
39
dependencies = [
40
"memchr",
41
]
···
65
]
66
67
[[package]]
68
name = "android_system_properties"
69
version = "0.1.5"
70
source = "registry+https://github.com/rust-lang/crates.io-index"
···
75
76
[[package]]
77
name = "anyhow"
78
+
version = "1.0.100"
79
source = "registry+https://github.com/rust-lang/crates.io-index"
80
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
81
82
[[package]]
83
name = "arbitrary"
···
87
88
[[package]]
89
name = "arboard"
90
+
version = "3.6.1"
91
source = "registry+https://github.com/rust-lang/crates.io-index"
92
+
checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf"
93
dependencies = [
94
"clipboard-win",
95
"image",
96
"log",
97
+
"objc2 0.6.3",
98
"objc2-app-kit",
99
"objc2-core-foundation",
100
"objc2-core-graphics",
101
+
"objc2-foundation 0.3.2",
102
"parking_lot",
103
"percent-encoding",
104
+
"windows-sys 0.60.2",
105
"x11rb",
106
]
107
···
113
dependencies = [
114
"proc-macro2",
115
"quote",
116
+
"syn 2.0.109",
117
]
118
119
[[package]]
···
148
149
[[package]]
150
name = "async-executor"
151
+
version = "1.13.3"
152
source = "registry+https://github.com/rust-lang/crates.io-index"
153
+
checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
154
dependencies = [
155
"async-task",
156
"concurrent-queue",
···
162
163
[[package]]
164
name = "async-io"
165
+
version = "2.6.0"
166
source = "registry+https://github.com/rust-lang/crates.io-index"
167
+
checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
168
dependencies = [
169
+
"autocfg",
170
"cfg-if",
171
"concurrent-queue",
172
"futures-io",
173
"futures-lite",
174
"parking",
175
"polling",
176
+
"rustix",
177
"slab",
178
+
"windows-sys 0.61.2",
179
]
180
181
[[package]]
···
191
192
[[package]]
193
name = "async-process"
194
+
version = "2.5.0"
195
source = "registry+https://github.com/rust-lang/crates.io-index"
196
+
checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
197
dependencies = [
198
"async-channel",
199
"async-io",
···
204
"cfg-if",
205
"event-listener",
206
"futures-lite",
207
+
"rustix",
208
]
209
210
[[package]]
···
215
dependencies = [
216
"proc-macro2",
217
"quote",
218
+
"syn 2.0.109",
219
]
220
221
[[package]]
222
name = "async-signal"
223
+
version = "0.2.13"
224
source = "registry+https://github.com/rust-lang/crates.io-index"
225
+
checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
226
dependencies = [
227
"async-io",
228
"async-lock",
···
230
"cfg-if",
231
"futures-core",
232
"futures-io",
233
+
"rustix",
234
"signal-hook-registry",
235
"slab",
236
+
"windows-sys 0.61.2",
237
]
238
239
[[package]]
···
250
dependencies = [
251
"proc-macro2",
252
"quote",
253
+
"syn 2.0.109",
254
]
255
256
[[package]]
···
290
291
[[package]]
292
name = "av1-grain"
293
+
version = "0.2.5"
294
source = "registry+https://github.com/rust-lang/crates.io-index"
295
+
checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8"
296
dependencies = [
297
"anyhow",
298
"arrayvec",
···
312
]
313
314
[[package]]
315
name = "base64"
316
version = "0.21.7"
317
source = "registry+https://github.com/rust-lang/crates.io-index"
···
325
326
[[package]]
327
name = "bit_field"
328
+
version = "0.10.3"
329
source = "registry+https://github.com/rust-lang/crates.io-index"
330
+
checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
331
332
[[package]]
333
name = "bitflags"
···
337
338
[[package]]
339
name = "bitflags"
340
+
version = "2.10.0"
341
source = "registry+https://github.com/rust-lang/crates.io-index"
342
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
343
dependencies = [
344
+
"serde_core",
345
]
346
347
[[package]]
···
370
371
[[package]]
372
name = "block2"
373
+
version = "0.6.2"
374
source = "registry+https://github.com/rust-lang/crates.io-index"
375
+
checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
376
dependencies = [
377
+
"objc2 0.6.3",
378
]
379
380
[[package]]
···
392
393
[[package]]
394
name = "brotli"
395
+
version = "8.0.2"
396
source = "registry+https://github.com/rust-lang/crates.io-index"
397
+
checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
398
dependencies = [
399
"alloc-no-stdlib",
400
"alloc-stdlib",
···
425
426
[[package]]
427
name = "bytemuck"
428
+
version = "1.24.0"
429
source = "registry+https://github.com/rust-lang/crates.io-index"
430
+
checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
431
432
[[package]]
433
name = "byteorder"
···
456
source = "registry+https://github.com/rust-lang/crates.io-index"
457
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
458
dependencies = [
459
+
"bitflags 2.10.0",
460
"cairo-sys-rs",
461
"glib",
462
"libc",
···
477
478
[[package]]
479
name = "camino"
480
+
version = "1.2.1"
481
source = "registry+https://github.com/rust-lang/crates.io-index"
482
+
checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609"
483
dependencies = [
484
+
"serde_core",
485
]
486
487
[[package]]
···
504
"semver",
505
"serde",
506
"serde_json",
507
+
"thiserror 2.0.17",
508
]
509
510
[[package]]
···
514
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
515
dependencies = [
516
"serde",
517
+
"toml 0.9.8",
518
]
519
520
[[package]]
521
name = "cc"
522
+
version = "1.2.45"
523
source = "registry+https://github.com/rust-lang/crates.io-index"
524
+
checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe"
525
dependencies = [
526
+
"find-msvc-tools",
527
"jobserver",
528
"libc",
529
"shlex",
···
558
559
[[package]]
560
name = "cfg-if"
561
+
version = "1.0.4"
562
source = "registry+https://github.com/rust-lang/crates.io-index"
563
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
564
565
[[package]]
566
name = "cfg_aliases"
···
570
571
[[package]]
572
name = "chrono"
573
+
version = "0.4.42"
574
source = "registry+https://github.com/rust-lang/crates.io-index"
575
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
576
dependencies = [
577
"iana-time-zone",
578
"num-traits",
579
"serde",
580
+
"windows-link 0.2.1",
581
]
582
583
[[package]]
···
701
source = "registry+https://github.com/rust-lang/crates.io-index"
702
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
703
dependencies = [
704
+
"bitflags 2.10.0",
705
"core-foundation 0.10.1",
706
"core-graphics-types",
707
"foreign-types 0.5.0",
···
714
source = "registry+https://github.com/rust-lang/crates.io-index"
715
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
716
dependencies = [
717
+
"bitflags 2.10.0",
718
"core-foundation 0.10.1",
719
"libc",
720
]
···
811
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
812
dependencies = [
813
"quote",
814
+
"syn 2.0.109",
815
]
816
817
[[package]]
···
821
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
822
dependencies = [
823
"quote",
824
+
"syn 2.0.109",
825
]
826
827
[[package]]
828
name = "darling"
829
+
version = "0.21.3"
830
source = "registry+https://github.com/rust-lang/crates.io-index"
831
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
832
dependencies = [
833
"darling_core",
834
"darling_macro",
···
836
837
[[package]]
838
name = "darling_core"
839
+
version = "0.21.3"
840
source = "registry+https://github.com/rust-lang/crates.io-index"
841
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
842
dependencies = [
843
"fnv",
844
"ident_case",
845
"proc-macro2",
846
"quote",
847
"strsim",
848
+
"syn 2.0.109",
849
]
850
851
[[package]]
852
name = "darling_macro"
853
+
version = "0.21.3"
854
source = "registry+https://github.com/rust-lang/crates.io-index"
855
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
856
dependencies = [
857
"darling_core",
858
"quote",
859
+
"syn 2.0.109",
860
]
861
862
[[package]]
863
name = "data-url"
864
+
version = "0.3.2"
865
source = "registry+https://github.com/rust-lang/crates.io-index"
866
+
checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376"
867
868
[[package]]
869
name = "deranged"
870
+
version = "0.5.5"
871
source = "registry+https://github.com/rust-lang/crates.io-index"
872
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
873
dependencies = [
874
"powerfmt",
875
+
"serde_core",
876
]
877
878
[[package]]
···
885
"proc-macro2",
886
"quote",
887
"rustc_version",
888
+
"syn 2.0.109",
889
]
890
891
[[package]]
···
900
901
[[package]]
902
name = "dirs"
903
version = "6.0.0"
904
source = "registry+https://github.com/rust-lang/crates.io-index"
905
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
906
dependencies = [
907
+
"dirs-sys",
908
]
909
910
[[package]]
···
915
dependencies = [
916
"libc",
917
"option-ext",
918
+
"redox_users",
919
+
"windows-sys 0.61.2",
920
]
921
922
[[package]]
···
931
source = "registry+https://github.com/rust-lang/crates.io-index"
932
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
933
dependencies = [
934
+
"bitflags 2.10.0",
935
+
"objc2 0.6.3",
936
]
937
938
[[package]]
···
943
dependencies = [
944
"proc-macro2",
945
"quote",
946
+
"syn 2.0.109",
947
]
948
949
[[package]]
950
name = "dlopen2"
951
+
version = "0.8.0"
952
source = "registry+https://github.com/rust-lang/crates.io-index"
953
+
checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff"
954
dependencies = [
955
"dlopen2_derive",
956
"libc",
···
966
dependencies = [
967
"proc-macro2",
968
"quote",
969
+
"syn 2.0.109",
970
]
971
972
[[package]]
···
980
981
[[package]]
982
name = "document-features"
983
+
version = "0.2.12"
984
source = "registry+https://github.com/rust-lang/crates.io-index"
985
+
checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
986
dependencies = [
987
"litrs",
988
]
···
1031
1032
[[package]]
1033
name = "embed-resource"
1034
+
version = "3.0.6"
1035
source = "registry+https://github.com/rust-lang/crates.io-index"
1036
+
checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e"
1037
dependencies = [
1038
"cc",
1039
"memchr",
1040
"rustc_version",
1041
+
"toml 0.9.8",
1042
"vswhom",
1043
"winreg",
1044
]
···
1082
dependencies = [
1083
"proc-macro2",
1084
"quote",
1085
+
"syn 2.0.109",
1086
]
1087
1088
[[package]]
···
1102
dependencies = [
1103
"proc-macro2",
1104
"quote",
1105
+
"syn 2.0.109",
1106
]
1107
1108
[[package]]
···
1113
1114
[[package]]
1115
name = "erased-serde"
1116
+
version = "0.4.9"
1117
source = "registry+https://github.com/rust-lang/crates.io-index"
1118
+
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
1119
dependencies = [
1120
"serde",
1121
+
"serde_core",
1122
"typeid",
1123
]
1124
1125
[[package]]
1126
name = "errno"
1127
+
version = "0.3.14"
1128
source = "registry+https://github.com/rust-lang/crates.io-index"
1129
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1130
dependencies = [
1131
"libc",
1132
+
"windows-sys 0.61.2",
1133
]
1134
1135
[[package]]
···
1176
1177
[[package]]
1178
name = "fast_image_resize"
1179
+
version = "5.3.0"
1180
source = "registry+https://github.com/rust-lang/crates.io-index"
1181
+
checksum = "1bd1eda71e8af93f8b00e189404235d82f4de77ea4a0d182b44a7f03994d647c"
1182
dependencies = [
1183
"bytemuck",
1184
"cfg-if",
1185
"document-features",
1186
"image",
1187
"num-traits",
1188
+
"thiserror 2.0.17",
1189
]
1190
1191
[[package]]
···
1195
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1196
1197
[[package]]
1198
+
name = "fax"
1199
+
version = "0.2.6"
1200
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1201
+
checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
1202
+
dependencies = [
1203
+
"fax_derive",
1204
+
]
1205
+
1206
+
[[package]]
1207
+
name = "fax_derive"
1208
+
version = "0.2.0"
1209
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1210
+
checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
1211
+
dependencies = [
1212
+
"proc-macro2",
1213
+
"quote",
1214
+
"syn 2.0.109",
1215
+
]
1216
+
1217
+
[[package]]
1218
name = "fdeflate"
1219
version = "0.3.7"
1220
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1234
]
1235
1236
[[package]]
1237
+
name = "find-msvc-tools"
1238
+
version = "0.1.4"
1239
source = "registry+https://github.com/rust-lang/crates.io-index"
1240
+
checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
1241
1242
[[package]]
1243
name = "flate2"
1244
+
version = "1.1.5"
1245
source = "registry+https://github.com/rust-lang/crates.io-index"
1246
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
1247
dependencies = [
1248
"crc32fast",
1249
"miniz_oxide",
···
1282
dependencies = [
1283
"proc-macro2",
1284
"quote",
1285
+
"syn 2.0.109",
1286
]
1287
1288
[[package]]
···
1299
1300
[[package]]
1301
name = "form_urlencoded"
1302
+
version = "1.2.2"
1303
source = "registry+https://github.com/rust-lang/crates.io-index"
1304
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1305
dependencies = [
1306
"percent-encoding",
1307
]
···
1379
dependencies = [
1380
"proc-macro2",
1381
"quote",
1382
+
"syn 2.0.109",
1383
]
1384
1385
[[package]]
···
1521
1522
[[package]]
1523
name = "generic-array"
1524
+
version = "0.14.9"
1525
source = "registry+https://github.com/rust-lang/crates.io-index"
1526
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
1527
dependencies = [
1528
"typenum",
1529
"version_check",
···
1531
1532
[[package]]
1533
name = "gethostname"
1534
+
version = "1.1.0"
1535
source = "registry+https://github.com/rust-lang/crates.io-index"
1536
+
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
1537
dependencies = [
1538
+
"rustix",
1539
+
"windows-link 0.2.1",
1540
]
1541
1542
[[package]]
···
1565
1566
[[package]]
1567
name = "getrandom"
1568
+
version = "0.3.4"
1569
source = "registry+https://github.com/rust-lang/crates.io-index"
1570
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1571
dependencies = [
1572
"cfg-if",
1573
"js-sys",
1574
"libc",
1575
"r-efi",
1576
+
"wasip2",
1577
"wasm-bindgen",
1578
]
1579
···
1588
]
1589
1590
[[package]]
1591
name = "gio"
1592
version = "0.18.4"
1593
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1625
source = "registry+https://github.com/rust-lang/crates.io-index"
1626
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1627
dependencies = [
1628
+
"bitflags 2.10.0",
1629
"futures-channel",
1630
"futures-core",
1631
"futures-executor",
···
1649
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1650
dependencies = [
1651
"heck 0.4.1",
1652
+
"proc-macro-crate 2.0.2",
1653
"proc-macro-error",
1654
"proc-macro2",
1655
"quote",
1656
+
"syn 2.0.109",
1657
]
1658
1659
[[package]]
···
1732
"proc-macro-error",
1733
"proc-macro2",
1734
"quote",
1735
+
"syn 2.0.109",
1736
]
1737
1738
[[package]]
···
1747
"futures-core",
1748
"futures-sink",
1749
"http",
1750
+
"indexmap 2.12.0",
1751
"slab",
1752
"tokio",
1753
"tokio-util",
···
1756
1757
[[package]]
1758
name = "half"
1759
+
version = "2.7.1"
1760
source = "registry+https://github.com/rust-lang/crates.io-index"
1761
+
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
1762
dependencies = [
1763
"cfg-if",
1764
"crunchy",
1765
+
"zerocopy",
1766
]
1767
1768
[[package]]
···
1779
1780
[[package]]
1781
name = "hashbrown"
1782
+
version = "0.16.0"
1783
source = "registry+https://github.com/rust-lang/crates.io-index"
1784
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1785
1786
[[package]]
1787
name = "heck"
···
1861
1862
[[package]]
1863
name = "hyper"
1864
+
version = "1.7.0"
1865
source = "registry+https://github.com/rust-lang/crates.io-index"
1866
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
1867
dependencies = [
1868
+
"atomic-waker",
1869
"bytes",
1870
"futures-channel",
1871
+
"futures-core",
1872
"h2",
1873
"http",
1874
"http-body",
1875
"httparse",
1876
"itoa",
1877
"pin-project-lite",
1878
+
"pin-utils",
1879
"smallvec",
1880
"tokio",
1881
"want",
···
1916
1917
[[package]]
1918
name = "hyper-util"
1919
+
version = "0.1.17"
1920
source = "registry+https://github.com/rust-lang/crates.io-index"
1921
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
1922
dependencies = [
1923
"base64 0.22.1",
1924
"bytes",
···
1932
"libc",
1933
"percent-encoding",
1934
"pin-project-lite",
1935
+
"socket2",
1936
"system-configuration",
1937
"tokio",
1938
"tower-service",
···
1942
1943
[[package]]
1944
name = "iana-time-zone"
1945
+
version = "0.1.64"
1946
source = "registry+https://github.com/rust-lang/crates.io-index"
1947
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1948
dependencies = [
1949
"android_system_properties",
1950
"core-foundation-sys",
···
1952
"js-sys",
1953
"log",
1954
"wasm-bindgen",
1955
+
"windows-core 0.62.2",
1956
]
1957
1958
[[package]]
···
1971
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1972
dependencies = [
1973
"byteorder",
1974
+
"png 0.17.16",
1975
]
1976
1977
[[package]]
1978
name = "icu_collections"
1979
+
version = "2.1.1"
1980
source = "registry+https://github.com/rust-lang/crates.io-index"
1981
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
1982
dependencies = [
1983
"displaydoc",
1984
"potential_utf",
···
1989
1990
[[package]]
1991
name = "icu_locale_core"
1992
+
version = "2.1.1"
1993
source = "registry+https://github.com/rust-lang/crates.io-index"
1994
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
1995
dependencies = [
1996
"displaydoc",
1997
"litemap",
···
2002
2003
[[package]]
2004
name = "icu_normalizer"
2005
+
version = "2.1.1"
2006
source = "registry+https://github.com/rust-lang/crates.io-index"
2007
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
2008
dependencies = [
2009
"icu_collections",
2010
"icu_normalizer_data",
2011
"icu_properties",
···
2016
2017
[[package]]
2018
name = "icu_normalizer_data"
2019
+
version = "2.1.1"
2020
source = "registry+https://github.com/rust-lang/crates.io-index"
2021
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
2022
2023
[[package]]
2024
name = "icu_properties"
2025
+
version = "2.1.1"
2026
source = "registry+https://github.com/rust-lang/crates.io-index"
2027
+
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
2028
dependencies = [
2029
"icu_collections",
2030
"icu_locale_core",
2031
"icu_properties_data",
2032
"icu_provider",
2033
"zerotrie",
2034
"zerovec",
2035
]
2036
2037
[[package]]
2038
name = "icu_properties_data"
2039
+
version = "2.1.1"
2040
source = "registry+https://github.com/rust-lang/crates.io-index"
2041
+
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
2042
2043
[[package]]
2044
name = "icu_provider"
2045
+
version = "2.1.1"
2046
source = "registry+https://github.com/rust-lang/crates.io-index"
2047
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
2048
dependencies = [
2049
"displaydoc",
2050
"icu_locale_core",
2051
"writeable",
2052
"yoke",
2053
"zerofrom",
···
2063
2064
[[package]]
2065
name = "idna"
2066
+
version = "1.1.0"
2067
source = "registry+https://github.com/rust-lang/crates.io-index"
2068
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
2069
dependencies = [
2070
"idna_adapter",
2071
"smallvec",
···
2084
2085
[[package]]
2086
name = "image"
2087
+
version = "0.25.8"
2088
source = "registry+https://github.com/rust-lang/crates.io-index"
2089
+
checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7"
2090
dependencies = [
2091
"bytemuck",
2092
"byteorder-lite",
···
2094
"exr",
2095
"gif",
2096
"image-webp",
2097
+
"moxcms",
2098
"num-traits",
2099
+
"png 0.18.0",
2100
"qoi",
2101
"ravif",
2102
"rayon",
···
2108
2109
[[package]]
2110
name = "image-webp"
2111
+
version = "0.2.4"
2112
source = "registry+https://github.com/rust-lang/crates.io-index"
2113
+
checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
2114
dependencies = [
2115
"byteorder-lite",
2116
"quick-error",
···
2118
2119
[[package]]
2120
name = "imgref"
2121
+
version = "1.12.0"
2122
source = "registry+https://github.com/rust-lang/crates.io-index"
2123
+
checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8"
2124
2125
[[package]]
2126
name = "indexmap"
···
2135
2136
[[package]]
2137
name = "indexmap"
2138
+
version = "2.12.0"
2139
source = "registry+https://github.com/rust-lang/crates.io-index"
2140
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
2141
dependencies = [
2142
"equivalent",
2143
+
"hashbrown 0.16.0",
2144
"serde",
2145
+
"serde_core",
2146
]
2147
2148
[[package]]
···
2156
2157
[[package]]
2158
name = "inotify"
2159
+
version = "0.11.0"
2160
source = "registry+https://github.com/rust-lang/crates.io-index"
2161
+
checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
2162
dependencies = [
2163
+
"bitflags 2.10.0",
2164
"inotify-sys",
2165
"libc",
2166
]
···
2182
dependencies = [
2183
"proc-macro2",
2184
"quote",
2185
+
"syn 2.0.109",
2186
]
2187
2188
[[package]]
···
2193
2194
[[package]]
2195
name = "iri-string"
2196
+
version = "0.7.9"
2197
source = "registry+https://github.com/rust-lang/crates.io-index"
2198
+
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
2199
dependencies = [
2200
"memchr",
2201
"serde",
···
2282
2283
[[package]]
2284
name = "jobserver"
2285
+
version = "0.1.34"
2286
source = "registry+https://github.com/rust-lang/crates.io-index"
2287
+
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
2288
dependencies = [
2289
+
"getrandom 0.3.4",
2290
"libc",
2291
]
2292
2293
[[package]]
2294
name = "js-sys"
2295
+
version = "0.3.82"
2296
source = "registry+https://github.com/rust-lang/crates.io-index"
2297
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
2298
dependencies = [
2299
"once_cell",
2300
"wasm-bindgen",
···
2328
source = "registry+https://github.com/rust-lang/crates.io-index"
2329
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
2330
dependencies = [
2331
+
"bitflags 2.10.0",
2332
"serde",
2333
"unicode-segmentation",
2334
]
···
2361
dependencies = [
2362
"cssparser",
2363
"html5ever",
2364
+
"indexmap 2.12.0",
2365
"selectors",
2366
]
2367
···
2373
2374
[[package]]
2375
name = "lebe"
2376
+
version = "0.5.3"
2377
source = "registry+https://github.com/rust-lang/crates.io-index"
2378
+
checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8"
2379
2380
[[package]]
2381
name = "libappindicator"
···
2403
2404
[[package]]
2405
name = "libc"
2406
+
version = "0.2.177"
2407
source = "registry+https://github.com/rust-lang/crates.io-index"
2408
+
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
2409
2410
[[package]]
2411
name = "libfuzzer-sys"
···
2429
2430
[[package]]
2431
name = "libredox"
2432
+
version = "0.1.10"
2433
source = "registry+https://github.com/rust-lang/crates.io-index"
2434
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
2435
dependencies = [
2436
+
"bitflags 2.10.0",
2437
"libc",
2438
]
2439
2440
[[package]]
2441
name = "linux-raw-sys"
2442
+
version = "0.11.0"
2443
source = "registry+https://github.com/rust-lang/crates.io-index"
2444
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
2445
2446
[[package]]
2447
name = "litemap"
2448
+
version = "0.8.1"
2449
source = "registry+https://github.com/rust-lang/crates.io-index"
2450
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
2451
2452
[[package]]
2453
name = "litrs"
2454
+
version = "1.0.0"
2455
source = "registry+https://github.com/rust-lang/crates.io-index"
2456
+
checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
2457
2458
[[package]]
2459
name = "lock_api"
2460
+
version = "0.4.14"
2461
source = "registry+https://github.com/rust-lang/crates.io-index"
2462
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
2463
dependencies = [
2464
"scopeguard",
2465
]
2466
2467
[[package]]
2468
name = "log"
2469
+
version = "0.4.28"
2470
source = "registry+https://github.com/rust-lang/crates.io-index"
2471
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
2472
2473
[[package]]
2474
name = "loop9"
···
2513
dependencies = [
2514
"proc-macro2",
2515
"quote",
2516
+
"syn 2.0.109",
2517
]
2518
2519
[[package]]
···
2534
2535
[[package]]
2536
name = "memchr"
2537
+
version = "2.7.6"
2538
source = "registry+https://github.com/rust-lang/crates.io-index"
2539
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
2540
2541
[[package]]
2542
name = "memoffset"
···
2554
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2555
2556
[[package]]
2557
name = "miniz_oxide"
2558
version = "0.8.9"
2559
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2565
2566
[[package]]
2567
name = "mio"
2568
+
version = "1.1.0"
2569
source = "registry+https://github.com/rust-lang/crates.io-index"
2570
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
2571
dependencies = [
2572
"libc",
2573
"log",
2574
"wasi 0.11.1+wasi-snapshot-preview1",
2575
+
"windows-sys 0.61.2",
2576
]
2577
2578
[[package]]
2579
+
name = "moxcms"
2580
+
version = "0.7.9"
2581
source = "registry+https://github.com/rust-lang/crates.io-index"
2582
+
checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6"
2583
dependencies = [
2584
+
"num-traits",
2585
+
"pxfm",
2586
]
2587
2588
[[package]]
···
2606
"dpi",
2607
"gtk",
2608
"keyboard-types",
2609
+
"objc2 0.6.3",
2610
"objc2-app-kit",
2611
"objc2-core-foundation",
2612
+
"objc2-foundation 0.3.2",
2613
"once_cell",
2614
+
"png 0.17.16",
2615
"serde",
2616
+
"thiserror 2.0.17",
2617
"windows-sys 0.60.2",
2618
]
2619
···
2640
source = "registry+https://github.com/rust-lang/crates.io-index"
2641
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2642
dependencies = [
2643
+
"bitflags 2.10.0",
2644
"jni-sys",
2645
"log",
2646
"ndk-sys",
···
2676
source = "registry+https://github.com/rust-lang/crates.io-index"
2677
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2678
dependencies = [
2679
+
"bitflags 2.10.0",
2680
"cfg-if",
2681
"cfg_aliases",
2682
"libc",
···
2691
2692
[[package]]
2693
name = "nom"
2694
+
version = "8.0.0"
2695
source = "registry+https://github.com/rust-lang/crates.io-index"
2696
+
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
2697
dependencies = [
2698
"memchr",
2699
]
2700
2701
[[package]]
···
2706
2707
[[package]]
2708
name = "notify"
2709
+
version = "8.2.0"
2710
source = "registry+https://github.com/rust-lang/crates.io-index"
2711
+
checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3"
2712
dependencies = [
2713
+
"bitflags 2.10.0",
2714
"fsevent-sys",
2715
"inotify",
2716
"kqueue",
2717
"libc",
2718
"log",
2719
+
"mio",
2720
+
"notify-types",
2721
"walkdir",
2722
+
"windows-sys 0.60.2",
2723
]
2724
2725
[[package]]
2726
+
name = "notify-types"
2727
+
version = "2.0.0"
2728
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2729
+
checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d"
2730
+
2731
+
[[package]]
2732
name = "num-bigint"
2733
version = "0.4.6"
2734
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2752
dependencies = [
2753
"proc-macro2",
2754
"quote",
2755
+
"syn 2.0.109",
2756
]
2757
2758
[[package]]
···
2786
2787
[[package]]
2788
name = "num_enum"
2789
+
version = "0.7.5"
2790
source = "registry+https://github.com/rust-lang/crates.io-index"
2791
+
checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
2792
dependencies = [
2793
"num_enum_derive",
2794
"rustversion",
···
2796
2797
[[package]]
2798
name = "num_enum_derive"
2799
+
version = "0.7.5"
2800
source = "registry+https://github.com/rust-lang/crates.io-index"
2801
+
checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
2802
dependencies = [
2803
+
"proc-macro-crate 3.4.0",
2804
"proc-macro2",
2805
"quote",
2806
+
"syn 2.0.109",
2807
]
2808
2809
[[package]]
···
2824
2825
[[package]]
2826
name = "objc2"
2827
+
version = "0.6.3"
2828
source = "registry+https://github.com/rust-lang/crates.io-index"
2829
+
checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
2830
dependencies = [
2831
"objc2-encode",
2832
"objc2-exception-helper",
···
2834
2835
[[package]]
2836
name = "objc2-app-kit"
2837
+
version = "0.3.2"
2838
source = "registry+https://github.com/rust-lang/crates.io-index"
2839
+
checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
2840
dependencies = [
2841
+
"bitflags 2.10.0",
2842
+
"block2 0.6.2",
2843
"libc",
2844
+
"objc2 0.6.3",
2845
"objc2-cloud-kit",
2846
"objc2-core-data",
2847
"objc2-core-foundation",
2848
"objc2-core-graphics",
2849
"objc2-core-image",
2850
+
"objc2-core-text",
2851
+
"objc2-core-video",
2852
+
"objc2-foundation 0.3.2",
2853
+
"objc2-quartz-core 0.3.2",
2854
]
2855
2856
[[package]]
2857
name = "objc2-cloud-kit"
2858
+
version = "0.3.2"
2859
source = "registry+https://github.com/rust-lang/crates.io-index"
2860
+
checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
2861
dependencies = [
2862
+
"bitflags 2.10.0",
2863
+
"objc2 0.6.3",
2864
+
"objc2-foundation 0.3.2",
2865
]
2866
2867
[[package]]
2868
name = "objc2-core-data"
2869
+
version = "0.3.2"
2870
source = "registry+https://github.com/rust-lang/crates.io-index"
2871
+
checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
2872
dependencies = [
2873
+
"bitflags 2.10.0",
2874
+
"objc2 0.6.3",
2875
+
"objc2-foundation 0.3.2",
2876
]
2877
2878
[[package]]
2879
name = "objc2-core-foundation"
2880
+
version = "0.3.2"
2881
source = "registry+https://github.com/rust-lang/crates.io-index"
2882
+
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
2883
dependencies = [
2884
+
"bitflags 2.10.0",
2885
"dispatch2",
2886
+
"objc2 0.6.3",
2887
]
2888
2889
[[package]]
2890
name = "objc2-core-graphics"
2891
+
version = "0.3.2"
2892
source = "registry+https://github.com/rust-lang/crates.io-index"
2893
+
checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
2894
dependencies = [
2895
+
"bitflags 2.10.0",
2896
"dispatch2",
2897
+
"objc2 0.6.3",
2898
"objc2-core-foundation",
2899
"objc2-io-surface",
2900
]
2901
2902
[[package]]
2903
name = "objc2-core-image"
2904
+
version = "0.3.2"
2905
source = "registry+https://github.com/rust-lang/crates.io-index"
2906
+
checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006"
2907
dependencies = [
2908
+
"objc2 0.6.3",
2909
+
"objc2-foundation 0.3.2",
2910
+
]
2911
+
2912
+
[[package]]
2913
+
name = "objc2-core-text"
2914
+
version = "0.3.2"
2915
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2916
+
checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
2917
+
dependencies = [
2918
+
"bitflags 2.10.0",
2919
+
"objc2 0.6.3",
2920
+
"objc2-core-foundation",
2921
+
"objc2-core-graphics",
2922
+
]
2923
+
2924
+
[[package]]
2925
+
name = "objc2-core-video"
2926
+
version = "0.3.2"
2927
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2928
+
checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
2929
+
dependencies = [
2930
+
"bitflags 2.10.0",
2931
+
"objc2 0.6.3",
2932
+
"objc2-core-foundation",
2933
+
"objc2-core-graphics",
2934
+
"objc2-io-surface",
2935
]
2936
2937
[[package]]
···
2955
source = "registry+https://github.com/rust-lang/crates.io-index"
2956
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2957
dependencies = [
2958
+
"bitflags 2.10.0",
2959
"block2 0.5.1",
2960
"libc",
2961
"objc2 0.5.2",
···
2963
2964
[[package]]
2965
name = "objc2-foundation"
2966
+
version = "0.3.2"
2967
source = "registry+https://github.com/rust-lang/crates.io-index"
2968
+
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2969
dependencies = [
2970
+
"bitflags 2.10.0",
2971
+
"block2 0.6.2",
2972
"libc",
2973
+
"objc2 0.6.3",
2974
"objc2-core-foundation",
2975
]
2976
2977
[[package]]
2978
name = "objc2-io-surface"
2979
+
version = "0.3.2"
2980
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2981
+
checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2982
+
dependencies = [
2983
+
"bitflags 2.10.0",
2984
+
"objc2 0.6.3",
2985
+
"objc2-core-foundation",
2986
+
]
2987
+
2988
+
[[package]]
2989
+
name = "objc2-javascript-core"
2990
+
version = "0.3.2"
2991
source = "registry+https://github.com/rust-lang/crates.io-index"
2992
+
checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586"
2993
dependencies = [
2994
+
"objc2 0.6.3",
2995
"objc2-core-foundation",
2996
]
2997
···
3001
source = "registry+https://github.com/rust-lang/crates.io-index"
3002
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
3003
dependencies = [
3004
+
"bitflags 2.10.0",
3005
"block2 0.5.1",
3006
"objc2 0.5.2",
3007
"objc2-foundation 0.2.2",
···
3013
source = "registry+https://github.com/rust-lang/crates.io-index"
3014
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
3015
dependencies = [
3016
+
"bitflags 2.10.0",
3017
"block2 0.5.1",
3018
"objc2 0.5.2",
3019
"objc2-foundation 0.2.2",
···
3022
3023
[[package]]
3024
name = "objc2-quartz-core"
3025
+
version = "0.3.2"
3026
source = "registry+https://github.com/rust-lang/crates.io-index"
3027
+
checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
3028
dependencies = [
3029
+
"bitflags 2.10.0",
3030
+
"objc2 0.6.3",
3031
+
"objc2-foundation 0.3.2",
3032
]
3033
3034
[[package]]
3035
+
name = "objc2-security"
3036
+
version = "0.3.2"
3037
source = "registry+https://github.com/rust-lang/crates.io-index"
3038
+
checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a"
3039
dependencies = [
3040
+
"bitflags 2.10.0",
3041
+
"objc2 0.6.3",
3042
"objc2-core-foundation",
3043
]
3044
3045
[[package]]
3046
+
name = "objc2-ui-kit"
3047
+
version = "0.3.2"
3048
source = "registry+https://github.com/rust-lang/crates.io-index"
3049
+
checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
3050
dependencies = [
3051
+
"bitflags 2.10.0",
3052
+
"objc2 0.6.3",
3053
"objc2-core-foundation",
3054
+
"objc2-foundation 0.3.2",
3055
]
3056
3057
[[package]]
3058
+
name = "objc2-web-kit"
3059
+
version = "0.3.2"
3060
source = "registry+https://github.com/rust-lang/crates.io-index"
3061
+
checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f"
3062
dependencies = [
3063
+
"bitflags 2.10.0",
3064
+
"block2 0.6.2",
3065
+
"objc2 0.6.3",
3066
+
"objc2-app-kit",
3067
+
"objc2-core-foundation",
3068
+
"objc2-foundation 0.3.2",
3069
+
"objc2-javascript-core",
3070
+
"objc2-security",
3071
]
3072
3073
[[package]]
···
3090
3091
[[package]]
3092
name = "openssl"
3093
+
version = "0.10.74"
3094
source = "registry+https://github.com/rust-lang/crates.io-index"
3095
+
checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654"
3096
dependencies = [
3097
+
"bitflags 2.10.0",
3098
"cfg-if",
3099
"foreign-types 0.3.2",
3100
"libc",
···
3111
dependencies = [
3112
"proc-macro2",
3113
"quote",
3114
+
"syn 2.0.109",
3115
]
3116
3117
[[package]]
···
3122
3123
[[package]]
3124
name = "openssl-sys"
3125
+
version = "0.9.110"
3126
source = "registry+https://github.com/rust-lang/crates.io-index"
3127
+
checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2"
3128
dependencies = [
3129
"cc",
3130
"libc",
···
3160
3161
[[package]]
3162
name = "os_pipe"
3163
+
version = "1.2.3"
3164
source = "registry+https://github.com/rust-lang/crates.io-index"
3165
+
checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967"
3166
dependencies = [
3167
"libc",
3168
+
"windows-sys 0.61.2",
3169
]
3170
3171
[[package]]
···
3201
3202
[[package]]
3203
name = "parking_lot"
3204
+
version = "0.12.5"
3205
source = "registry+https://github.com/rust-lang/crates.io-index"
3206
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
3207
dependencies = [
3208
"lock_api",
3209
"parking_lot_core",
···
3211
3212
[[package]]
3213
name = "parking_lot_core"
3214
+
version = "0.9.12"
3215
source = "registry+https://github.com/rust-lang/crates.io-index"
3216
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
3217
dependencies = [
3218
"cfg-if",
3219
"libc",
3220
"redox_syscall",
3221
"smallvec",
3222
+
"windows-link 0.2.1",
3223
]
3224
3225
[[package]]
···
3236
3237
[[package]]
3238
name = "percent-encoding"
3239
+
version = "2.3.2"
3240
source = "registry+https://github.com/rust-lang/crates.io-index"
3241
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
3242
3243
[[package]]
3244
name = "phf"
···
3344
"phf_shared 0.11.3",
3345
"proc-macro2",
3346
"quote",
3347
+
"syn 2.0.109",
3348
]
3349
3350
[[package]]
···
3405
3406
[[package]]
3407
name = "plist"
3408
+
version = "1.8.0"
3409
source = "registry+https://github.com/rust-lang/crates.io-index"
3410
+
checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
3411
dependencies = [
3412
"base64 0.22.1",
3413
+
"indexmap 2.12.0",
3414
"quick-xml",
3415
"serde",
3416
"time",
···
3430
]
3431
3432
[[package]]
3433
+
name = "png"
3434
+
version = "0.18.0"
3435
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3436
+
checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
3437
+
dependencies = [
3438
+
"bitflags 2.10.0",
3439
+
"crc32fast",
3440
+
"fdeflate",
3441
+
"flate2",
3442
+
"miniz_oxide",
3443
+
]
3444
+
3445
+
[[package]]
3446
name = "polling"
3447
+
version = "3.11.0"
3448
source = "registry+https://github.com/rust-lang/crates.io-index"
3449
+
checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
3450
dependencies = [
3451
"cfg-if",
3452
"concurrent-queue",
3453
"hermit-abi",
3454
"pin-project-lite",
3455
+
"rustix",
3456
+
"windows-sys 0.61.2",
3457
]
3458
3459
[[package]]
3460
name = "potential_utf"
3461
+
version = "0.1.4"
3462
source = "registry+https://github.com/rust-lang/crates.io-index"
3463
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
3464
dependencies = [
3465
"zerovec",
3466
]
···
3498
3499
[[package]]
3500
name = "proc-macro-crate"
3501
+
version = "2.0.2"
3502
source = "registry+https://github.com/rust-lang/crates.io-index"
3503
+
checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
3504
dependencies = [
3505
+
"toml_datetime 0.6.3",
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",
3516
]
3517
3518
[[package]]
···
3547
3548
[[package]]
3549
name = "proc-macro2"
3550
+
version = "1.0.103"
3551
source = "registry+https://github.com/rust-lang/crates.io-index"
3552
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
3553
dependencies = [
3554
"unicode-ident",
3555
]
···
3570
checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
3571
dependencies = [
3572
"quote",
3573
+
"syn 2.0.109",
3574
]
3575
3576
[[package]]
···
3590
]
3591
3592
[[package]]
3593
+
name = "pxfm"
3594
+
version = "0.1.25"
3595
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3596
+
checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84"
3597
+
dependencies = [
3598
+
"num-traits",
3599
+
]
3600
+
3601
+
[[package]]
3602
name = "qoi"
3603
version = "0.4.1"
3604
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3615
3616
[[package]]
3617
name = "quick-xml"
3618
+
version = "0.38.3"
3619
source = "registry+https://github.com/rust-lang/crates.io-index"
3620
+
checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89"
3621
dependencies = [
3622
"memchr",
3623
]
3624
3625
[[package]]
3626
name = "quinn"
3627
+
version = "0.11.9"
3628
source = "registry+https://github.com/rust-lang/crates.io-index"
3629
+
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
3630
dependencies = [
3631
"bytes",
3632
"cfg_aliases",
···
3635
"quinn-udp",
3636
"rustc-hash",
3637
"rustls",
3638
+
"socket2",
3639
+
"thiserror 2.0.17",
3640
"tokio",
3641
"tracing",
3642
"web-time",
···
3644
3645
[[package]]
3646
name = "quinn-proto"
3647
+
version = "0.11.13"
3648
source = "registry+https://github.com/rust-lang/crates.io-index"
3649
+
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
3650
dependencies = [
3651
"bytes",
3652
+
"getrandom 0.3.4",
3653
"lru-slab",
3654
"rand 0.9.2",
3655
"ring",
···
3657
"rustls",
3658
"rustls-pki-types",
3659
"slab",
3660
+
"thiserror 2.0.17",
3661
"tinyvec",
3662
"tracing",
3663
"web-time",
···
3665
3666
[[package]]
3667
name = "quinn-udp"
3668
+
version = "0.5.14"
3669
source = "registry+https://github.com/rust-lang/crates.io-index"
3670
+
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
3671
dependencies = [
3672
"cfg_aliases",
3673
"libc",
3674
"once_cell",
3675
+
"socket2",
3676
"tracing",
3677
+
"windows-sys 0.60.2",
3678
]
3679
3680
[[package]]
3681
name = "quote"
3682
+
version = "1.0.42"
3683
source = "registry+https://github.com/rust-lang/crates.io-index"
3684
+
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
3685
dependencies = [
3686
"proc-macro2",
3687
]
···
3781
source = "registry+https://github.com/rust-lang/crates.io-index"
3782
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
3783
dependencies = [
3784
+
"getrandom 0.3.4",
3785
]
3786
3787
[[package]]
···
3880
3881
[[package]]
3882
name = "redox_syscall"
3883
+
version = "0.5.18"
3884
source = "registry+https://github.com/rust-lang/crates.io-index"
3885
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
3886
dependencies = [
3887
+
"bitflags 2.10.0",
3888
]
3889
3890
[[package]]
···
3895
dependencies = [
3896
"getrandom 0.2.16",
3897
"libredox",
3898
+
"thiserror 2.0.17",
3899
]
3900
3901
[[package]]
3902
name = "ref-cast"
3903
+
version = "1.0.25"
3904
source = "registry+https://github.com/rust-lang/crates.io-index"
3905
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
3906
dependencies = [
3907
"ref-cast-impl",
3908
]
3909
3910
[[package]]
3911
name = "ref-cast-impl"
3912
+
version = "1.0.25"
3913
source = "registry+https://github.com/rust-lang/crates.io-index"
3914
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
3915
dependencies = [
3916
"proc-macro2",
3917
"quote",
3918
+
"syn 2.0.109",
3919
]
3920
3921
[[package]]
3922
name = "regex"
3923
+
version = "1.12.2"
3924
source = "registry+https://github.com/rust-lang/crates.io-index"
3925
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
3926
dependencies = [
3927
"aho-corasick",
3928
"memchr",
···
3932
3933
[[package]]
3934
name = "regex-automata"
3935
+
version = "0.4.13"
3936
source = "registry+https://github.com/rust-lang/crates.io-index"
3937
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
3938
dependencies = [
3939
"aho-corasick",
3940
"memchr",
···
3943
3944
[[package]]
3945
name = "regex-syntax"
3946
+
version = "0.8.8"
3947
source = "registry+https://github.com/rust-lang/crates.io-index"
3948
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
3949
3950
[[package]]
3951
name = "reqwest"
3952
+
version = "0.12.24"
3953
source = "registry+https://github.com/rust-lang/crates.io-index"
3954
+
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
3955
dependencies = [
3956
"base64 0.22.1",
3957
"bytes",
···
4019
4020
[[package]]
4021
name = "rust-ini"
4022
+
version = "0.21.3"
4023
source = "registry+https://github.com/rust-lang/crates.io-index"
4024
+
checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7"
4025
dependencies = [
4026
"cfg-if",
4027
"ordered-multimap",
4028
]
4029
4030
[[package]]
4031
name = "rustc-hash"
4032
version = "2.1.1"
4033
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4044
4045
[[package]]
4046
name = "rustix"
4047
+
version = "1.1.2"
4048
source = "registry+https://github.com/rust-lang/crates.io-index"
4049
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
4050
dependencies = [
4051
+
"bitflags 2.10.0",
4052
"errno",
4053
"libc",
4054
+
"linux-raw-sys",
4055
+
"windows-sys 0.61.2",
4056
]
4057
4058
[[package]]
4059
name = "rustls"
4060
+
version = "0.23.35"
4061
source = "registry+https://github.com/rust-lang/crates.io-index"
4062
+
checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
4063
dependencies = [
4064
"once_cell",
4065
"ring",
···
4071
4072
[[package]]
4073
name = "rustls-pki-types"
4074
+
version = "1.13.0"
4075
source = "registry+https://github.com/rust-lang/crates.io-index"
4076
+
checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a"
4077
dependencies = [
4078
"web-time",
4079
"zeroize",
···
4081
4082
[[package]]
4083
name = "rustls-webpki"
4084
+
version = "0.103.8"
4085
source = "registry+https://github.com/rust-lang/crates.io-index"
4086
+
checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
4087
dependencies = [
4088
"ring",
4089
"rustls-pki-types",
···
4113
4114
[[package]]
4115
name = "schannel"
4116
+
version = "0.1.28"
4117
source = "registry+https://github.com/rust-lang/crates.io-index"
4118
+
checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
4119
dependencies = [
4120
+
"windows-sys 0.61.2",
4121
]
4122
4123
[[package]]
···
4149
4150
[[package]]
4151
name = "schemars"
4152
+
version = "1.1.0"
4153
source = "registry+https://github.com/rust-lang/crates.io-index"
4154
+
checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
4155
dependencies = [
4156
"dyn-clone",
4157
"ref-cast",
···
4168
"proc-macro2",
4169
"quote",
4170
"serde_derive_internals",
4171
+
"syn 2.0.109",
4172
]
4173
4174
[[package]]
···
4183
source = "registry+https://github.com/rust-lang/crates.io-index"
4184
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
4185
dependencies = [
4186
+
"bitflags 2.10.0",
4187
"core-foundation 0.9.4",
4188
"core-foundation-sys",
4189
"libc",
···
4192
4193
[[package]]
4194
name = "security-framework-sys"
4195
+
version = "2.15.0"
4196
source = "registry+https://github.com/rust-lang/crates.io-index"
4197
+
checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
4198
dependencies = [
4199
"core-foundation-sys",
4200
"libc",
···
4220
4221
[[package]]
4222
name = "semver"
4223
+
version = "1.0.27"
4224
source = "registry+https://github.com/rust-lang/crates.io-index"
4225
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
4226
dependencies = [
4227
"serde",
4228
+
"serde_core",
4229
]
4230
4231
[[package]]
4232
name = "serde"
4233
+
version = "1.0.228"
4234
source = "registry+https://github.com/rust-lang/crates.io-index"
4235
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
4236
dependencies = [
4237
+
"serde_core",
4238
"serde_derive",
4239
]
4240
4241
[[package]]
4242
name = "serde-untagged"
4243
+
version = "0.1.9"
4244
source = "registry+https://github.com/rust-lang/crates.io-index"
4245
+
checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
4246
dependencies = [
4247
"erased-serde",
4248
"serde",
4249
+
"serde_core",
4250
"typeid",
4251
]
4252
4253
[[package]]
4254
+
name = "serde_core"
4255
+
version = "1.0.228"
4256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4257
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
4258
+
dependencies = [
4259
+
"serde_derive",
4260
+
]
4261
+
4262
+
[[package]]
4263
name = "serde_derive"
4264
+
version = "1.0.228"
4265
source = "registry+https://github.com/rust-lang/crates.io-index"
4266
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
4267
dependencies = [
4268
"proc-macro2",
4269
"quote",
4270
+
"syn 2.0.109",
4271
]
4272
4273
[[package]]
···
4278
dependencies = [
4279
"proc-macro2",
4280
"quote",
4281
+
"syn 2.0.109",
4282
]
4283
4284
[[package]]
4285
name = "serde_json"
4286
+
version = "1.0.145"
4287
source = "registry+https://github.com/rust-lang/crates.io-index"
4288
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
4289
dependencies = [
4290
"itoa",
4291
"memchr",
4292
"ryu",
4293
"serde",
4294
+
"serde_core",
4295
]
4296
4297
[[package]]
···
4302
dependencies = [
4303
"proc-macro2",
4304
"quote",
4305
+
"syn 2.0.109",
4306
]
4307
4308
[[package]]
···
4316
4317
[[package]]
4318
name = "serde_spanned"
4319
+
version = "1.0.3"
4320
source = "registry+https://github.com/rust-lang/crates.io-index"
4321
+
checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
4322
dependencies = [
4323
+
"serde_core",
4324
]
4325
4326
[[package]]
···
4337
4338
[[package]]
4339
name = "serde_with"
4340
+
version = "3.15.1"
4341
source = "registry+https://github.com/rust-lang/crates.io-index"
4342
+
checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04"
4343
dependencies = [
4344
"base64 0.22.1",
4345
"chrono",
4346
"hex",
4347
"indexmap 1.9.3",
4348
+
"indexmap 2.12.0",
4349
"schemars 0.9.0",
4350
+
"schemars 1.1.0",
4351
+
"serde_core",
4352
"serde_json",
4353
"serde_with_macros",
4354
"time",
···
4356
4357
[[package]]
4358
name = "serde_with_macros"
4359
+
version = "3.15.1"
4360
source = "registry+https://github.com/rust-lang/crates.io-index"
4361
+
checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955"
4362
dependencies = [
4363
"darling",
4364
"proc-macro2",
4365
"quote",
4366
+
"syn 2.0.109",
4367
]
4368
4369
[[package]]
4370
name = "serialize-to-javascript"
4371
+
version = "0.1.2"
4372
source = "registry+https://github.com/rust-lang/crates.io-index"
4373
+
checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
4374
dependencies = [
4375
"serde",
4376
"serde_json",
···
4379
4380
[[package]]
4381
name = "serialize-to-javascript-impl"
4382
+
version = "0.1.2"
4383
source = "registry+https://github.com/rust-lang/crates.io-index"
4384
+
checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
4385
dependencies = [
4386
"proc-macro2",
4387
"quote",
4388
+
"syn 2.0.109",
4389
]
4390
4391
[[package]]
···
4497
4498
[[package]]
4499
name = "socket2"
4500
+
version = "0.6.1"
4501
source = "registry+https://github.com/rust-lang/crates.io-index"
4502
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
4503
dependencies = [
4504
"libc",
4505
+
"windows-sys 0.60.2",
4506
]
4507
4508
[[package]]
···
4555
4556
[[package]]
4557
name = "stable_deref_trait"
4558
+
version = "1.2.1"
4559
source = "registry+https://github.com/rust-lang/crates.io-index"
4560
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
4561
4562
[[package]]
4563
name = "static_assertions"
···
4626
4627
[[package]]
4628
name = "syn"
4629
+
version = "2.0.109"
4630
source = "registry+https://github.com/rust-lang/crates.io-index"
4631
+
checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f"
4632
dependencies = [
4633
"proc-macro2",
4634
"quote",
···
4652
dependencies = [
4653
"proc-macro2",
4654
"quote",
4655
+
"syn 2.0.109",
4656
]
4657
4658
[[package]]
···
4661
source = "registry+https://github.com/rust-lang/crates.io-index"
4662
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
4663
dependencies = [
4664
+
"bitflags 2.10.0",
4665
"core-foundation 0.9.4",
4666
"system-configuration-sys",
4667
]
···
4691
4692
[[package]]
4693
name = "tao"
4694
+
version = "0.34.5"
4695
source = "registry+https://github.com/rust-lang/crates.io-index"
4696
+
checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7"
4697
dependencies = [
4698
+
"bitflags 2.10.0",
4699
+
"block2 0.6.2",
4700
"core-foundation 0.10.1",
4701
"core-graphics",
4702
"crossbeam-channel",
···
4713
"ndk",
4714
"ndk-context",
4715
"ndk-sys",
4716
+
"objc2 0.6.3",
4717
"objc2-app-kit",
4718
+
"objc2-foundation 0.3.2",
4719
"once_cell",
4720
"parking_lot",
4721
"raw-window-handle",
···
4724
"unicode-segmentation",
4725
"url",
4726
"windows",
4727
+
"windows-core 0.61.2",
4728
"windows-version",
4729
"x11-dl",
4730
]
···
4737
dependencies = [
4738
"proc-macro2",
4739
"quote",
4740
+
"syn 2.0.109",
4741
]
4742
4743
[[package]]
···
4748
4749
[[package]]
4750
name = "tauri"
4751
+
version = "2.9.2"
4752
source = "registry+https://github.com/rust-lang/crates.io-index"
4753
+
checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5"
4754
dependencies = [
4755
"anyhow",
4756
"bytes",
4757
+
"cookie",
4758
+
"dirs",
4759
"dunce",
4760
"embed_plist",
4761
+
"getrandom 0.3.4",
4762
"glob",
4763
"gtk",
4764
"heck 0.5.0",
···
4769
"log",
4770
"mime",
4771
"muda",
4772
+
"objc2 0.6.3",
4773
"objc2-app-kit",
4774
+
"objc2-foundation 0.3.2",
4775
"objc2-ui-kit",
4776
+
"objc2-web-kit",
4777
"percent-encoding",
4778
"plist",
4779
"raw-window-handle",
···
4788
"tauri-runtime",
4789
"tauri-runtime-wry",
4790
"tauri-utils",
4791
+
"thiserror 2.0.17",
4792
"tokio",
4793
"tray-icon",
4794
"url",
4795
"webkit2gtk",
4796
"webview2-com",
4797
"window-vibrancy",
···
4800
4801
[[package]]
4802
name = "tauri-build"
4803
+
version = "2.5.1"
4804
source = "registry+https://github.com/rust-lang/crates.io-index"
4805
+
checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38"
4806
dependencies = [
4807
"anyhow",
4808
"cargo_toml",
4809
+
"dirs",
4810
"glob",
4811
"heck 0.5.0",
4812
"json-patch",
···
4816
"serde_json",
4817
"tauri-utils",
4818
"tauri-winres",
4819
+
"toml 0.9.8",
4820
"walkdir",
4821
]
4822
4823
[[package]]
4824
name = "tauri-codegen"
4825
+
version = "2.5.0"
4826
source = "registry+https://github.com/rust-lang/crates.io-index"
4827
+
checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190"
4828
dependencies = [
4829
"base64 0.22.1",
4830
"brotli",
4831
"ico",
4832
"json-patch",
4833
"plist",
4834
+
"png 0.17.16",
4835
"proc-macro2",
4836
"quote",
4837
"semver",
4838
"serde",
4839
"serde_json",
4840
"sha2",
4841
+
"syn 2.0.109",
4842
"tauri-utils",
4843
+
"thiserror 2.0.17",
4844
"time",
4845
"url",
4846
"uuid",
···
4849
4850
[[package]]
4851
name = "tauri-macros"
4852
+
version = "2.5.0"
4853
source = "registry+https://github.com/rust-lang/crates.io-index"
4854
+
checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f"
4855
dependencies = [
4856
"heck 0.5.0",
4857
"proc-macro2",
4858
"quote",
4859
+
"syn 2.0.109",
4860
"tauri-codegen",
4861
"tauri-utils",
4862
]
4863
4864
[[package]]
4865
name = "tauri-plugin"
4866
+
version = "2.5.1"
4867
source = "registry+https://github.com/rust-lang/crates.io-index"
4868
+
checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d"
4869
dependencies = [
4870
"anyhow",
4871
"glob",
···
4874
"serde",
4875
"serde_json",
4876
"tauri-utils",
4877
+
"toml 0.9.8",
4878
"walkdir",
4879
]
4880
4881
[[package]]
4882
name = "tauri-plugin-deep-link"
4883
+
version = "2.4.5"
4884
source = "registry+https://github.com/rust-lang/crates.io-index"
4885
+
checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73"
4886
dependencies = [
4887
"dunce",
4888
+
"plist",
4889
"rust-ini",
4890
"serde",
4891
"serde_json",
4892
"tauri",
4893
"tauri-plugin",
4894
"tauri-utils",
4895
+
"thiserror 2.0.17",
4896
"tracing",
4897
"url",
4898
"windows-registry",
4899
+
"windows-result 0.3.4",
4900
]
4901
4902
[[package]]
4903
name = "tauri-plugin-fs"
4904
+
version = "2.4.4"
4905
source = "registry+https://github.com/rust-lang/crates.io-index"
4906
+
checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9"
4907
dependencies = [
4908
"anyhow",
4909
"dunce",
···
4916
"tauri",
4917
"tauri-plugin",
4918
"tauri-utils",
4919
+
"thiserror 2.0.17",
4920
+
"toml 0.9.8",
4921
"url",
4922
]
4923
4924
[[package]]
4925
name = "tauri-plugin-http"
4926
+
version = "2.5.4"
4927
source = "registry+https://github.com/rust-lang/crates.io-index"
4928
+
checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70"
4929
dependencies = [
4930
"bytes",
4931
"cookie_store",
···
4939
"tauri",
4940
"tauri-plugin",
4941
"tauri-plugin-fs",
4942
+
"thiserror 2.0.17",
4943
"tokio",
4944
"url",
4945
"urlpattern",
···
4947
4948
[[package]]
4949
name = "tauri-plugin-process"
4950
+
version = "2.3.1"
4951
source = "registry+https://github.com/rust-lang/crates.io-index"
4952
+
checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a"
4953
dependencies = [
4954
"tauri",
4955
"tauri-plugin",
···
4957
4958
[[package]]
4959
name = "tauri-plugin-shell"
4960
+
version = "2.3.3"
4961
source = "registry+https://github.com/rust-lang/crates.io-index"
4962
+
checksum = "c374b6db45f2a8a304f0273a15080d98c70cde86178855fc24653ba657a1144c"
4963
dependencies = [
4964
"encoding_rs",
4965
"log",
···
4972
"shared_child",
4973
"tauri",
4974
"tauri-plugin",
4975
+
"thiserror 2.0.17",
4976
"tokio",
4977
]
4978
4979
[[package]]
4980
name = "tauri-plugin-single-instance"
4981
+
version = "2.3.6"
4982
source = "registry+https://github.com/rust-lang/crates.io-index"
4983
+
checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710"
4984
dependencies = [
4985
"serde",
4986
"serde_json",
4987
"tauri",
4988
"tauri-plugin-deep-link",
4989
+
"thiserror 2.0.17",
4990
"tracing",
4991
"windows-sys 0.60.2",
4992
"zbus",
···
4994
4995
[[package]]
4996
name = "tauri-runtime"
4997
+
version = "2.9.1"
4998
source = "registry+https://github.com/rust-lang/crates.io-index"
4999
+
checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926"
5000
dependencies = [
5001
"cookie",
5002
"dpi",
5003
"gtk",
5004
"http",
5005
"jni",
5006
+
"objc2 0.6.3",
5007
"objc2-ui-kit",
5008
+
"objc2-web-kit",
5009
"raw-window-handle",
5010
"serde",
5011
"serde_json",
5012
"tauri-utils",
5013
+
"thiserror 2.0.17",
5014
"url",
5015
+
"webkit2gtk",
5016
+
"webview2-com",
5017
"windows",
5018
]
5019
5020
[[package]]
5021
name = "tauri-runtime-wry"
5022
+
version = "2.9.1"
5023
source = "registry+https://github.com/rust-lang/crates.io-index"
5024
+
checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93"
5025
dependencies = [
5026
"gtk",
5027
"http",
5028
"jni",
5029
"log",
5030
+
"objc2 0.6.3",
5031
"objc2-app-kit",
5032
+
"objc2-foundation 0.3.2",
5033
"once_cell",
5034
"percent-encoding",
5035
"raw-window-handle",
···
5046
5047
[[package]]
5048
name = "tauri-utils"
5049
+
version = "2.8.0"
5050
source = "registry+https://github.com/rust-lang/crates.io-index"
5051
+
checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673"
5052
dependencies = [
5053
"anyhow",
5054
"brotli",
···
5074
"serde_json",
5075
"serde_with",
5076
"swift-rs",
5077
+
"thiserror 2.0.17",
5078
+
"toml 0.9.8",
5079
"url",
5080
"urlpattern",
5081
"uuid",
···
5089
checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074"
5090
dependencies = [
5091
"embed-resource",
5092
+
"toml 0.9.8",
5093
]
5094
5095
[[package]]
5096
name = "tempfile"
5097
+
version = "3.23.0"
5098
source = "registry+https://github.com/rust-lang/crates.io-index"
5099
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
5100
dependencies = [
5101
"fastrand",
5102
+
"getrandom 0.3.4",
5103
"once_cell",
5104
+
"rustix",
5105
+
"windows-sys 0.61.2",
5106
]
5107
5108
[[package]]
···
5127
5128
[[package]]
5129
name = "thiserror"
5130
+
version = "2.0.17"
5131
source = "registry+https://github.com/rust-lang/crates.io-index"
5132
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
5133
dependencies = [
5134
+
"thiserror-impl 2.0.17",
5135
]
5136
5137
[[package]]
···
5142
dependencies = [
5143
"proc-macro2",
5144
"quote",
5145
+
"syn 2.0.109",
5146
]
5147
5148
[[package]]
5149
name = "thiserror-impl"
5150
+
version = "2.0.17"
5151
source = "registry+https://github.com/rust-lang/crates.io-index"
5152
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
5153
dependencies = [
5154
"proc-macro2",
5155
"quote",
5156
+
"syn 2.0.109",
5157
]
5158
5159
[[package]]
5160
name = "tiff"
5161
+
version = "0.10.3"
5162
source = "registry+https://github.com/rust-lang/crates.io-index"
5163
+
checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f"
5164
dependencies = [
5165
+
"fax",
5166
"flate2",
5167
+
"half",
5168
+
"quick-error",
5169
"weezl",
5170
+
"zune-jpeg",
5171
]
5172
5173
[[package]]
5174
name = "time"
5175
+
version = "0.3.44"
5176
source = "registry+https://github.com/rust-lang/crates.io-index"
5177
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
5178
dependencies = [
5179
"deranged",
5180
"itoa",
···
5187
5188
[[package]]
5189
name = "time-core"
5190
+
version = "0.1.6"
5191
source = "registry+https://github.com/rust-lang/crates.io-index"
5192
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
5193
5194
[[package]]
5195
name = "time-macros"
5196
+
version = "0.2.24"
5197
source = "registry+https://github.com/rust-lang/crates.io-index"
5198
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
5199
dependencies = [
5200
"num-conv",
5201
"time-core",
···
5212
5213
[[package]]
5214
name = "tinystr"
5215
+
version = "0.8.2"
5216
source = "registry+https://github.com/rust-lang/crates.io-index"
5217
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
5218
dependencies = [
5219
"displaydoc",
5220
"zerovec",
···
5222
5223
[[package]]
5224
name = "tinyvec"
5225
+
version = "1.10.0"
5226
source = "registry+https://github.com/rust-lang/crates.io-index"
5227
+
checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
5228
dependencies = [
5229
"tinyvec_macros",
5230
]
···
5237
5238
[[package]]
5239
name = "tokio"
5240
+
version = "1.48.0"
5241
source = "registry+https://github.com/rust-lang/crates.io-index"
5242
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
5243
dependencies = [
5244
"bytes",
5245
"libc",
5246
+
"mio",
5247
"pin-project-lite",
5248
+
"socket2",
5249
"tokio-macros",
5250
+
"windows-sys 0.61.2",
5251
]
5252
5253
[[package]]
5254
name = "tokio-macros"
5255
+
version = "2.6.0"
5256
source = "registry+https://github.com/rust-lang/crates.io-index"
5257
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
5258
dependencies = [
5259
"proc-macro2",
5260
"quote",
5261
+
"syn 2.0.109",
5262
]
5263
5264
[[package]]
···
5273
5274
[[package]]
5275
name = "tokio-rustls"
5276
+
version = "0.26.4"
5277
source = "registry+https://github.com/rust-lang/crates.io-index"
5278
+
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
5279
dependencies = [
5280
"rustls",
5281
"tokio",
···
5283
5284
[[package]]
5285
name = "tokio-util"
5286
+
version = "0.7.17"
5287
source = "registry+https://github.com/rust-lang/crates.io-index"
5288
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
5289
dependencies = [
5290
"bytes",
5291
"futures-core",
···
5302
dependencies = [
5303
"serde",
5304
"serde_spanned 0.6.9",
5305
+
"toml_datetime 0.6.3",
5306
"toml_edit 0.20.2",
5307
]
5308
5309
[[package]]
5310
name = "toml"
5311
+
version = "0.9.8"
5312
source = "registry+https://github.com/rust-lang/crates.io-index"
5313
+
checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
5314
dependencies = [
5315
+
"indexmap 2.12.0",
5316
+
"serde_core",
5317
+
"serde_spanned 1.0.3",
5318
+
"toml_datetime 0.7.3",
5319
"toml_parser",
5320
"toml_writer",
5321
+
"winnow 0.7.13",
5322
]
5323
5324
[[package]]
5325
name = "toml_datetime"
5326
+
version = "0.6.3"
5327
source = "registry+https://github.com/rust-lang/crates.io-index"
5328
+
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
5329
dependencies = [
5330
"serde",
5331
]
5332
5333
[[package]]
5334
name = "toml_datetime"
5335
+
version = "0.7.3"
5336
source = "registry+https://github.com/rust-lang/crates.io-index"
5337
+
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
5338
dependencies = [
5339
+
"serde_core",
5340
]
5341
5342
[[package]]
···
5345
source = "registry+https://github.com/rust-lang/crates.io-index"
5346
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
5347
dependencies = [
5348
+
"indexmap 2.12.0",
5349
+
"toml_datetime 0.6.3",
5350
"winnow 0.5.40",
5351
]
5352
···
5356
source = "registry+https://github.com/rust-lang/crates.io-index"
5357
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
5358
dependencies = [
5359
+
"indexmap 2.12.0",
5360
"serde",
5361
"serde_spanned 0.6.9",
5362
+
"toml_datetime 0.6.3",
5363
"winnow 0.5.40",
5364
]
5365
5366
[[package]]
5367
name = "toml_edit"
5368
+
version = "0.23.7"
5369
source = "registry+https://github.com/rust-lang/crates.io-index"
5370
+
checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d"
5371
dependencies = [
5372
+
"indexmap 2.12.0",
5373
+
"toml_datetime 0.7.3",
5374
+
"toml_parser",
5375
+
"winnow 0.7.13",
5376
]
5377
5378
[[package]]
5379
name = "toml_parser"
5380
+
version = "1.0.4"
5381
source = "registry+https://github.com/rust-lang/crates.io-index"
5382
+
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
5383
dependencies = [
5384
+
"winnow 0.7.13",
5385
]
5386
5387
[[package]]
5388
name = "toml_writer"
5389
+
version = "1.0.4"
5390
source = "registry+https://github.com/rust-lang/crates.io-index"
5391
+
checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
5392
5393
[[package]]
5394
name = "tower"
···
5411
source = "registry+https://github.com/rust-lang/crates.io-index"
5412
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
5413
dependencies = [
5414
+
"bitflags 2.10.0",
5415
"bytes",
5416
"futures-util",
5417
"http",
···
5454
dependencies = [
5455
"proc-macro2",
5456
"quote",
5457
+
"syn 2.0.109",
5458
]
5459
5460
[[package]]
···
5468
5469
[[package]]
5470
name = "tray-icon"
5471
+
version = "0.21.2"
5472
source = "registry+https://github.com/rust-lang/crates.io-index"
5473
+
checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b"
5474
dependencies = [
5475
"crossbeam-channel",
5476
+
"dirs",
5477
"libappindicator",
5478
"muda",
5479
+
"objc2 0.6.3",
5480
"objc2-app-kit",
5481
"objc2-core-foundation",
5482
"objc2-core-graphics",
5483
+
"objc2-foundation 0.3.2",
5484
"once_cell",
5485
+
"png 0.17.16",
5486
"serde",
5487
+
"thiserror 2.0.17",
5488
+
"windows-sys 0.60.2",
5489
]
5490
5491
[[package]]
···
5502
5503
[[package]]
5504
name = "typenum"
5505
+
version = "1.19.0"
5506
source = "registry+https://github.com/rust-lang/crates.io-index"
5507
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
5508
5509
[[package]]
5510
name = "uds_windows"
···
5560
5561
[[package]]
5562
name = "unicode-ident"
5563
+
version = "1.0.22"
5564
source = "registry+https://github.com/rust-lang/crates.io-index"
5565
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
5566
5567
[[package]]
5568
name = "unicode-segmentation"
···
5578
5579
[[package]]
5580
name = "url"
5581
+
version = "2.5.7"
5582
source = "registry+https://github.com/rust-lang/crates.io-index"
5583
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
5584
dependencies = [
5585
"form_urlencoded",
5586
"idna",
···
5614
5615
[[package]]
5616
name = "uuid"
5617
+
version = "1.18.1"
5618
source = "registry+https://github.com/rust-lang/crates.io-index"
5619
+
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
5620
dependencies = [
5621
+
"getrandom 0.3.4",
5622
"js-sys",
5623
"serde",
5624
"wasm-bindgen",
···
5643
5644
[[package]]
5645
name = "version-compare"
5646
+
version = "0.2.1"
5647
source = "registry+https://github.com/rust-lang/crates.io-index"
5648
+
checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
5649
5650
[[package]]
5651
name = "version_check"
···
5705
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
5706
5707
[[package]]
5708
+
name = "wasip2"
5709
+
version = "1.0.1+wasi-0.2.4"
5710
source = "registry+https://github.com/rust-lang/crates.io-index"
5711
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
5712
dependencies = [
5713
+
"wit-bindgen",
5714
]
5715
5716
[[package]]
5717
name = "wasm-bindgen"
5718
+
version = "0.2.105"
5719
source = "registry+https://github.com/rust-lang/crates.io-index"
5720
+
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
5721
dependencies = [
5722
"cfg-if",
5723
"once_cell",
5724
"rustversion",
5725
"wasm-bindgen-macro",
5726
"wasm-bindgen-shared",
5727
]
5728
5729
[[package]]
5730
name = "wasm-bindgen-futures"
5731
+
version = "0.4.55"
5732
source = "registry+https://github.com/rust-lang/crates.io-index"
5733
+
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
5734
dependencies = [
5735
"cfg-if",
5736
"js-sys",
···
5741
5742
[[package]]
5743
name = "wasm-bindgen-macro"
5744
+
version = "0.2.105"
5745
source = "registry+https://github.com/rust-lang/crates.io-index"
5746
+
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
5747
dependencies = [
5748
"quote",
5749
"wasm-bindgen-macro-support",
···
5751
5752
[[package]]
5753
name = "wasm-bindgen-macro-support"
5754
+
version = "0.2.105"
5755
source = "registry+https://github.com/rust-lang/crates.io-index"
5756
+
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
5757
dependencies = [
5758
+
"bumpalo",
5759
"proc-macro2",
5760
"quote",
5761
+
"syn 2.0.109",
5762
"wasm-bindgen-shared",
5763
]
5764
5765
[[package]]
5766
name = "wasm-bindgen-shared"
5767
+
version = "0.2.105"
5768
source = "registry+https://github.com/rust-lang/crates.io-index"
5769
+
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
5770
dependencies = [
5771
"unicode-ident",
5772
]
···
5786
5787
[[package]]
5788
name = "web-sys"
5789
+
version = "0.3.82"
5790
source = "registry+https://github.com/rust-lang/crates.io-index"
5791
+
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
5792
dependencies = [
5793
"js-sys",
5794
"wasm-bindgen",
···
5850
5851
[[package]]
5852
name = "webpki-roots"
5853
+
version = "1.0.4"
5854
source = "registry+https://github.com/rust-lang/crates.io-index"
5855
+
checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
5856
dependencies = [
5857
"rustls-pki-types",
5858
]
···
5866
"webview2-com-macros",
5867
"webview2-com-sys",
5868
"windows",
5869
+
"windows-core 0.61.2",
5870
"windows-implement",
5871
"windows-interface",
5872
]
···
5879
dependencies = [
5880
"proc-macro2",
5881
"quote",
5882
+
"syn 2.0.109",
5883
]
5884
5885
[[package]]
···
5888
source = "registry+https://github.com/rust-lang/crates.io-index"
5889
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
5890
dependencies = [
5891
+
"thiserror 2.0.17",
5892
"windows",
5893
+
"windows-core 0.61.2",
5894
]
5895
5896
[[package]]
···
5917
5918
[[package]]
5919
name = "winapi-util"
5920
+
version = "0.1.11"
5921
source = "registry+https://github.com/rust-lang/crates.io-index"
5922
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
5923
dependencies = [
5924
+
"windows-sys 0.61.2",
5925
]
5926
5927
[[package]]
···
5936
source = "registry+https://github.com/rust-lang/crates.io-index"
5937
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
5938
dependencies = [
5939
+
"objc2 0.6.3",
5940
"objc2-app-kit",
5941
"objc2-core-foundation",
5942
+
"objc2-foundation 0.3.2",
5943
"raw-window-handle",
5944
"windows-sys 0.59.0",
5945
"windows-version",
···
5952
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
5953
dependencies = [
5954
"windows-collections",
5955
+
"windows-core 0.61.2",
5956
"windows-future",
5957
+
"windows-link 0.1.3",
5958
"windows-numerics",
5959
]
5960
···
5964
source = "registry+https://github.com/rust-lang/crates.io-index"
5965
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
5966
dependencies = [
5967
+
"windows-core 0.61.2",
5968
]
5969
5970
[[package]]
···
5975
dependencies = [
5976
"windows-implement",
5977
"windows-interface",
5978
+
"windows-link 0.1.3",
5979
+
"windows-result 0.3.4",
5980
+
"windows-strings 0.4.2",
5981
+
]
5982
+
5983
+
[[package]]
5984
+
name = "windows-core"
5985
+
version = "0.62.2"
5986
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5987
+
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
5988
+
dependencies = [
5989
+
"windows-implement",
5990
+
"windows-interface",
5991
+
"windows-link 0.2.1",
5992
+
"windows-result 0.4.1",
5993
+
"windows-strings 0.5.1",
5994
]
5995
5996
[[package]]
···
5999
source = "registry+https://github.com/rust-lang/crates.io-index"
6000
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
6001
dependencies = [
6002
+
"windows-core 0.61.2",
6003
+
"windows-link 0.1.3",
6004
"windows-threading",
6005
]
6006
6007
[[package]]
6008
name = "windows-implement"
6009
+
version = "0.60.2"
6010
source = "registry+https://github.com/rust-lang/crates.io-index"
6011
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
6012
dependencies = [
6013
"proc-macro2",
6014
"quote",
6015
+
"syn 2.0.109",
6016
]
6017
6018
[[package]]
6019
name = "windows-interface"
6020
+
version = "0.59.3"
6021
source = "registry+https://github.com/rust-lang/crates.io-index"
6022
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
6023
dependencies = [
6024
"proc-macro2",
6025
"quote",
6026
+
"syn 2.0.109",
6027
]
6028
6029
[[package]]
···
6031
version = "0.1.3"
6032
source = "registry+https://github.com/rust-lang/crates.io-index"
6033
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
6034
+
6035
+
[[package]]
6036
+
name = "windows-link"
6037
+
version = "0.2.1"
6038
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6039
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
6040
6041
[[package]]
6042
name = "windows-numerics"
···
6044
source = "registry+https://github.com/rust-lang/crates.io-index"
6045
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
6046
dependencies = [
6047
+
"windows-core 0.61.2",
6048
+
"windows-link 0.1.3",
6049
]
6050
6051
[[package]]
···
6054
source = "registry+https://github.com/rust-lang/crates.io-index"
6055
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
6056
dependencies = [
6057
+
"windows-link 0.1.3",
6058
+
"windows-result 0.3.4",
6059
+
"windows-strings 0.4.2",
6060
]
6061
6062
[[package]]
···
6065
source = "registry+https://github.com/rust-lang/crates.io-index"
6066
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
6067
dependencies = [
6068
+
"windows-link 0.1.3",
6069
+
]
6070
+
6071
+
[[package]]
6072
+
name = "windows-result"
6073
+
version = "0.4.1"
6074
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6075
+
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
6076
+
dependencies = [
6077
+
"windows-link 0.2.1",
6078
]
6079
6080
[[package]]
···
6083
source = "registry+https://github.com/rust-lang/crates.io-index"
6084
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
6085
dependencies = [
6086
+
"windows-link 0.1.3",
6087
]
6088
6089
[[package]]
6090
+
name = "windows-strings"
6091
+
version = "0.5.1"
6092
source = "registry+https://github.com/rust-lang/crates.io-index"
6093
+
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
6094
dependencies = [
6095
+
"windows-link 0.2.1",
6096
]
6097
6098
[[package]]
6099
name = "windows-sys"
6100
+
version = "0.45.0"
6101
source = "registry+https://github.com/rust-lang/crates.io-index"
6102
+
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
6103
dependencies = [
6104
+
"windows-targets 0.42.2",
6105
]
6106
6107
[[package]]
···
6128
source = "registry+https://github.com/rust-lang/crates.io-index"
6129
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
6130
dependencies = [
6131
+
"windows-targets 0.53.5",
6132
+
]
6133
+
6134
+
[[package]]
6135
+
name = "windows-sys"
6136
+
version = "0.61.2"
6137
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6138
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
6139
+
dependencies = [
6140
+
"windows-link 0.2.1",
6141
]
6142
6143
[[package]]
···
6157
6158
[[package]]
6159
name = "windows-targets"
6160
version = "0.52.6"
6161
source = "registry+https://github.com/rust-lang/crates.io-index"
6162
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
···
6173
6174
[[package]]
6175
name = "windows-targets"
6176
+
version = "0.53.5"
6177
source = "registry+https://github.com/rust-lang/crates.io-index"
6178
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
6179
dependencies = [
6180
+
"windows-link 0.2.1",
6181
+
"windows_aarch64_gnullvm 0.53.1",
6182
+
"windows_aarch64_msvc 0.53.1",
6183
+
"windows_i686_gnu 0.53.1",
6184
+
"windows_i686_gnullvm 0.53.1",
6185
+
"windows_i686_msvc 0.53.1",
6186
+
"windows_x86_64_gnu 0.53.1",
6187
+
"windows_x86_64_gnullvm 0.53.1",
6188
+
"windows_x86_64_msvc 0.53.1",
6189
]
6190
6191
[[package]]
···
6194
source = "registry+https://github.com/rust-lang/crates.io-index"
6195
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
6196
dependencies = [
6197
+
"windows-link 0.1.3",
6198
]
6199
6200
[[package]]
6201
name = "windows-version"
6202
+
version = "0.1.7"
6203
source = "registry+https://github.com/rust-lang/crates.io-index"
6204
+
checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
6205
dependencies = [
6206
+
"windows-link 0.2.1",
6207
]
6208
6209
[[package]]
···
6211
version = "0.42.2"
6212
source = "registry+https://github.com/rust-lang/crates.io-index"
6213
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
6214
6215
[[package]]
6216
name = "windows_aarch64_gnullvm"
···
6220
6221
[[package]]
6222
name = "windows_aarch64_gnullvm"
6223
+
version = "0.53.1"
6224
source = "registry+https://github.com/rust-lang/crates.io-index"
6225
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
6226
6227
[[package]]
6228
name = "windows_aarch64_msvc"
···
6232
6233
[[package]]
6234
name = "windows_aarch64_msvc"
6235
version = "0.52.6"
6236
source = "registry+https://github.com/rust-lang/crates.io-index"
6237
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
6238
6239
[[package]]
6240
name = "windows_aarch64_msvc"
6241
+
version = "0.53.1"
6242
source = "registry+https://github.com/rust-lang/crates.io-index"
6243
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
6244
6245
[[package]]
6246
name = "windows_i686_gnu"
···
6250
6251
[[package]]
6252
name = "windows_i686_gnu"
6253
version = "0.52.6"
6254
source = "registry+https://github.com/rust-lang/crates.io-index"
6255
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
6256
6257
[[package]]
6258
name = "windows_i686_gnu"
6259
+
version = "0.53.1"
6260
source = "registry+https://github.com/rust-lang/crates.io-index"
6261
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
6262
6263
[[package]]
6264
name = "windows_i686_gnullvm"
···
6268
6269
[[package]]
6270
name = "windows_i686_gnullvm"
6271
+
version = "0.53.1"
6272
source = "registry+https://github.com/rust-lang/crates.io-index"
6273
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
6274
6275
[[package]]
6276
name = "windows_i686_msvc"
···
6280
6281
[[package]]
6282
name = "windows_i686_msvc"
6283
version = "0.52.6"
6284
source = "registry+https://github.com/rust-lang/crates.io-index"
6285
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
6286
6287
[[package]]
6288
name = "windows_i686_msvc"
6289
+
version = "0.53.1"
6290
source = "registry+https://github.com/rust-lang/crates.io-index"
6291
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
6292
6293
[[package]]
6294
name = "windows_x86_64_gnu"
···
6298
6299
[[package]]
6300
name = "windows_x86_64_gnu"
6301
version = "0.52.6"
6302
source = "registry+https://github.com/rust-lang/crates.io-index"
6303
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
6304
6305
[[package]]
6306
name = "windows_x86_64_gnu"
6307
+
version = "0.53.1"
6308
source = "registry+https://github.com/rust-lang/crates.io-index"
6309
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
6310
6311
[[package]]
6312
name = "windows_x86_64_gnullvm"
···
6316
6317
[[package]]
6318
name = "windows_x86_64_gnullvm"
6319
version = "0.52.6"
6320
source = "registry+https://github.com/rust-lang/crates.io-index"
6321
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
6322
6323
[[package]]
6324
name = "windows_x86_64_gnullvm"
6325
+
version = "0.53.1"
6326
source = "registry+https://github.com/rust-lang/crates.io-index"
6327
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
6328
6329
[[package]]
6330
name = "windows_x86_64_msvc"
···
6334
6335
[[package]]
6336
name = "windows_x86_64_msvc"
6337
version = "0.52.6"
6338
source = "registry+https://github.com/rust-lang/crates.io-index"
6339
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
6340
6341
[[package]]
6342
name = "windows_x86_64_msvc"
6343
+
version = "0.53.1"
6344
source = "registry+https://github.com/rust-lang/crates.io-index"
6345
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
6346
6347
[[package]]
6348
name = "winnow"
···
6355
6356
[[package]]
6357
name = "winnow"
6358
+
version = "0.7.13"
6359
source = "registry+https://github.com/rust-lang/crates.io-index"
6360
+
checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
6361
dependencies = [
6362
"memchr",
6363
]
···
6373
]
6374
6375
[[package]]
6376
+
name = "wit-bindgen"
6377
+
version = "0.46.0"
6378
source = "registry+https://github.com/rust-lang/crates.io-index"
6379
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
6380
6381
[[package]]
6382
name = "writeable"
6383
+
version = "0.6.2"
6384
source = "registry+https://github.com/rust-lang/crates.io-index"
6385
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
6386
6387
[[package]]
6388
name = "wry"
6389
+
version = "0.53.5"
6390
source = "registry+https://github.com/rust-lang/crates.io-index"
6391
+
checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2"
6392
dependencies = [
6393
"base64 0.22.1",
6394
+
"block2 0.6.2",
6395
"cookie",
6396
"crossbeam-channel",
6397
+
"dirs",
6398
"dpi",
6399
"dunce",
6400
"gdkx11",
···
6406
"kuchikiki",
6407
"libc",
6408
"ndk",
6409
+
"objc2 0.6.3",
6410
"objc2-app-kit",
6411
"objc2-core-foundation",
6412
+
"objc2-foundation 0.3.2",
6413
"objc2-ui-kit",
6414
"objc2-web-kit",
6415
"once_cell",
···
6418
"sha2",
6419
"soup3",
6420
"tao-macros",
6421
+
"thiserror 2.0.17",
6422
"url",
6423
"webkit2gtk",
6424
"webkit2gtk-sys",
6425
"webview2-com",
6426
"windows",
6427
+
"windows-core 0.61.2",
6428
"windows-version",
6429
"x11-dl",
6430
]
···
6452
6453
[[package]]
6454
name = "x11rb"
6455
+
version = "0.13.2"
6456
source = "registry+https://github.com/rust-lang/crates.io-index"
6457
+
checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
6458
dependencies = [
6459
"gethostname",
6460
+
"rustix",
6461
"x11rb-protocol",
6462
]
6463
6464
[[package]]
6465
name = "x11rb-protocol"
6466
+
version = "0.13.2"
6467
source = "registry+https://github.com/rust-lang/crates.io-index"
6468
+
checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
6469
6470
[[package]]
6471
name = "yoke"
6472
+
version = "0.8.1"
6473
source = "registry+https://github.com/rust-lang/crates.io-index"
6474
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
6475
dependencies = [
6476
"stable_deref_trait",
6477
"yoke-derive",
6478
"zerofrom",
···
6480
6481
[[package]]
6482
name = "yoke-derive"
6483
+
version = "0.8.1"
6484
source = "registry+https://github.com/rust-lang/crates.io-index"
6485
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
6486
dependencies = [
6487
"proc-macro2",
6488
"quote",
6489
+
"syn 2.0.109",
6490
"synstructure",
6491
]
6492
6493
[[package]]
6494
name = "zbus"
6495
+
version = "5.12.0"
6496
source = "registry+https://github.com/rust-lang/crates.io-index"
6497
+
checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91"
6498
dependencies = [
6499
"async-broadcast",
6500
"async-executor",
···
6516
"serde_repr",
6517
"tracing",
6518
"uds_windows",
6519
+
"uuid",
6520
+
"windows-sys 0.61.2",
6521
+
"winnow 0.7.13",
6522
"zbus_macros",
6523
"zbus_names",
6524
"zvariant",
···
6526
6527
[[package]]
6528
name = "zbus_macros"
6529
+
version = "5.12.0"
6530
source = "registry+https://github.com/rust-lang/crates.io-index"
6531
+
checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314"
6532
dependencies = [
6533
+
"proc-macro-crate 3.4.0",
6534
"proc-macro2",
6535
"quote",
6536
+
"syn 2.0.109",
6537
"zbus_names",
6538
"zvariant",
6539
"zvariant_utils",
···
6547
dependencies = [
6548
"serde",
6549
"static_assertions",
6550
+
"winnow 0.7.13",
6551
"zvariant",
6552
]
6553
6554
[[package]]
6555
name = "zerocopy"
6556
+
version = "0.8.27"
6557
source = "registry+https://github.com/rust-lang/crates.io-index"
6558
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
6559
dependencies = [
6560
"zerocopy-derive",
6561
]
6562
6563
[[package]]
6564
name = "zerocopy-derive"
6565
+
version = "0.8.27"
6566
source = "registry+https://github.com/rust-lang/crates.io-index"
6567
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
6568
dependencies = [
6569
"proc-macro2",
6570
"quote",
6571
+
"syn 2.0.109",
6572
]
6573
6574
[[package]]
···
6588
dependencies = [
6589
"proc-macro2",
6590
"quote",
6591
+
"syn 2.0.109",
6592
"synstructure",
6593
]
6594
6595
[[package]]
6596
name = "zeroize"
6597
+
version = "1.8.2"
6598
source = "registry+https://github.com/rust-lang/crates.io-index"
6599
+
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
6600
6601
[[package]]
6602
name = "zerotrie"
6603
+
version = "0.2.3"
6604
source = "registry+https://github.com/rust-lang/crates.io-index"
6605
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
6606
dependencies = [
6607
"displaydoc",
6608
"yoke",
···
6611
6612
[[package]]
6613
name = "zerovec"
6614
+
version = "0.11.5"
6615
source = "registry+https://github.com/rust-lang/crates.io-index"
6616
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
6617
dependencies = [
6618
"yoke",
6619
"zerofrom",
···
6622
6623
[[package]]
6624
name = "zerovec-derive"
6625
+
version = "0.11.2"
6626
source = "registry+https://github.com/rust-lang/crates.io-index"
6627
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
6628
dependencies = [
6629
"proc-macro2",
6630
"quote",
6631
+
"syn 2.0.109",
6632
]
6633
6634
[[package]]
···
6648
6649
[[package]]
6650
name = "zune-jpeg"
6651
+
version = "0.4.21"
6652
source = "registry+https://github.com/rust-lang/crates.io-index"
6653
+
checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
6654
dependencies = [
6655
"zune-core",
6656
]
6657
6658
[[package]]
6659
name = "zvariant"
6660
+
version = "5.8.0"
6661
source = "registry+https://github.com/rust-lang/crates.io-index"
6662
+
checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c"
6663
dependencies = [
6664
"endi",
6665
"enumflags2",
6666
"serde",
6667
+
"winnow 0.7.13",
6668
"zvariant_derive",
6669
"zvariant_utils",
6670
]
6671
6672
[[package]]
6673
name = "zvariant_derive"
6674
+
version = "5.8.0"
6675
source = "registry+https://github.com/rust-lang/crates.io-index"
6676
+
checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006"
6677
dependencies = [
6678
+
"proc-macro-crate 3.4.0",
6679
"proc-macro2",
6680
"quote",
6681
+
"syn 2.0.109",
6682
"zvariant_utils",
6683
]
6684
6685
[[package]]
6686
name = "zvariant_utils"
6687
+
version = "3.2.1"
6688
source = "registry+https://github.com/rust-lang/crates.io-index"
6689
+
checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
6690
dependencies = [
6691
"proc-macro2",
6692
"quote",
6693
"serde",
6694
+
"syn 2.0.109",
6695
+
"winnow 0.7.13",
6696
]
+14
-15
src-tauri/Cargo.toml
+14
-15
src-tauri/Cargo.toml
···
1
[package]
2
name = "VRChatPhotoManager"
3
-
version = "0.2.5"
4
description = "VRChat Photo Manager"
5
authors = ["_phaz"]
6
edition = "2021"
···
11
tauri-build = { version = "2.0.0-rc", features = [] }
12
13
[dependencies]
14
-
tauri = { version = "2.7.0", features = [ "tray-icon", "image-png", "devtools" ] }
15
serde = { version = "1.0", features = ["derive"] }
16
serde_json = "1.0"
17
-
open = "5.1.2"
18
-
tauri-plugin-deep-link = "2.0.1"
19
-
dirs = "5.0.1"
20
-
notify = "6.1.1"
21
-
regex = "1.10.4"
22
reqwest = { version = "0.12", features = ["blocking"] }
23
-
image = "0.25.2"
24
-
fast_image_resize = { version = "4.2.1", features = [ "image" ] }
25
-
arboard = "3.6.0"
26
-
tauri-plugin-single-instance = { version = "2.3.2", features = ["deep-link"] }
27
-
tauri-plugin-shell = "2.3.0"
28
-
tauri-plugin-http = "2.5.1"
29
-
tauri-plugin-process = "2.3.0"
30
[target.'cfg(windows)'.dependencies]
31
-
mslnk = { version = "0.1.8" }
32
33
[features]
34
# this feature is used for production builds or when `devPath` points to the filesystem
···
1
[package]
2
name = "VRChatPhotoManager"
3
+
version = "0.2.7-hot1"
4
description = "VRChat Photo Manager"
5
authors = ["_phaz"]
6
edition = "2021"
···
11
tauri-build = { version = "2.0.0-rc", features = [] }
12
13
[dependencies]
14
+
tauri = { version = "2.9", features = [ "tray-icon", "image-png", "devtools" ] }
15
serde = { version = "1.0", features = ["derive"] }
16
serde_json = "1.0"
17
+
open = "5.3"
18
+
dirs = "6.0"
19
+
notify = "8.2"
20
+
regex = "1.12"
21
reqwest = { version = "0.12", features = ["blocking"] }
22
+
image = "0.25"
23
+
fast_image_resize = { version = "5.3", features = [ "image" ] }
24
+
arboard = "3.6"
25
+
tauri-plugin-single-instance = { version = "2.3", features = ["deep-link"] }
26
+
tauri-plugin-shell = "2.3"
27
+
tauri-plugin-http = "2.5"
28
+
tauri-plugin-process = "2.3"
29
[target.'cfg(windows)'.dependencies]
30
+
mslnk = { version = "0.1" }
31
32
[features]
33
# this feature is used for production builds or when `devPath` points to the filesystem
+1
-1
src-tauri/gen/schemas/acl-manifests.json
+1
-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
+50
-56
src-tauri/gen/schemas/desktop-schema.json
···
519
"markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
520
},
521
{
522
-
"description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`",
523
"type": "string",
524
"const": "core:app:default",
525
-
"markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`"
526
},
527
{
528
"description": "Enables the app_hide command without any pre-configured scope.",
···
567
"markdownDescription": "Enables the name command without any pre-configured scope."
568
},
569
{
570
"description": "Enables the remove_data_store command without any pre-configured scope.",
571
"type": "string",
572
"const": "core:app:allow-remove-data-store",
573
"markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
574
},
575
{
576
"description": "Enables the set_app_theme command without any pre-configured scope.",
577
"type": "string",
578
"const": "core:app:allow-set-app-theme",
···
639
"markdownDescription": "Denies the name command without any pre-configured scope."
640
},
641
{
642
"description": "Denies the remove_data_store command without any pre-configured scope.",
643
"type": "string",
644
"const": "core:app:deny-remove-data-store",
645
"markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
646
},
647
{
648
"description": "Denies the set_app_theme command without any pre-configured scope.",
···
1827
"markdownDescription": "Enables the set_focus command without any pre-configured scope."
1828
},
1829
{
1830
"description": "Enables the set_fullscreen command without any pre-configured scope.",
1831
"type": "string",
1832
"const": "core:window:allow-set-fullscreen",
···
1897
"type": "string",
1898
"const": "core:window:allow-set-shadow",
1899
"markdownDescription": "Enables the set_shadow command without any pre-configured scope."
1900
},
1901
{
1902
"description": "Enables the set_size command without any pre-configured scope.",
···
2271
"markdownDescription": "Denies the set_focus command without any pre-configured scope."
2272
},
2273
{
2274
"description": "Denies the set_fullscreen command without any pre-configured scope.",
2275
"type": "string",
2276
"const": "core:window:deny-set-fullscreen",
···
2341
"type": "string",
2342
"const": "core:window:deny-set-shadow",
2343
"markdownDescription": "Denies the set_shadow command without any pre-configured scope."
2344
},
2345
{
2346
"description": "Denies the set_size command without any pre-configured scope.",
···
2431
"type": "string",
2432
"const": "core:window:deny-unminimize",
2433
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
2434
-
},
2435
-
{
2436
-
"description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`",
2437
-
"type": "string",
2438
-
"const": "deep-link:default",
2439
-
"markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`"
2440
-
},
2441
-
{
2442
-
"description": "Enables the get_current command without any pre-configured scope.",
2443
-
"type": "string",
2444
-
"const": "deep-link:allow-get-current",
2445
-
"markdownDescription": "Enables the get_current command without any pre-configured scope."
2446
-
},
2447
-
{
2448
-
"description": "Enables the is_registered command without any pre-configured scope.",
2449
-
"type": "string",
2450
-
"const": "deep-link:allow-is-registered",
2451
-
"markdownDescription": "Enables the is_registered command without any pre-configured scope."
2452
-
},
2453
-
{
2454
-
"description": "Enables the register command without any pre-configured scope.",
2455
-
"type": "string",
2456
-
"const": "deep-link:allow-register",
2457
-
"markdownDescription": "Enables the register command without any pre-configured scope."
2458
-
},
2459
-
{
2460
-
"description": "Enables the unregister command without any pre-configured scope.",
2461
-
"type": "string",
2462
-
"const": "deep-link:allow-unregister",
2463
-
"markdownDescription": "Enables the unregister command without any pre-configured scope."
2464
-
},
2465
-
{
2466
-
"description": "Denies the get_current command without any pre-configured scope.",
2467
-
"type": "string",
2468
-
"const": "deep-link:deny-get-current",
2469
-
"markdownDescription": "Denies the get_current command without any pre-configured scope."
2470
-
},
2471
-
{
2472
-
"description": "Denies the is_registered command without any pre-configured scope.",
2473
-
"type": "string",
2474
-
"const": "deep-link:deny-is-registered",
2475
-
"markdownDescription": "Denies the is_registered command without any pre-configured scope."
2476
-
},
2477
-
{
2478
-
"description": "Denies the register command without any pre-configured scope.",
2479
-
"type": "string",
2480
-
"const": "deep-link:deny-register",
2481
-
"markdownDescription": "Denies the register command without any pre-configured scope."
2482
-
},
2483
-
{
2484
-
"description": "Denies the unregister command without any pre-configured scope.",
2485
-
"type": "string",
2486
-
"const": "deep-link:deny-unregister",
2487
-
"markdownDescription": "Denies the unregister command without any pre-configured scope."
2488
},
2489
{
2490
"description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
···
519
"markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
520
},
521
{
522
+
"description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`",
523
"type": "string",
524
"const": "core:app:default",
525
+
"markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`"
526
},
527
{
528
"description": "Enables the app_hide command without any pre-configured scope.",
···
567
"markdownDescription": "Enables the name command without any pre-configured scope."
568
},
569
{
570
+
"description": "Enables the register_listener command without any pre-configured scope.",
571
+
"type": "string",
572
+
"const": "core:app:allow-register-listener",
573
+
"markdownDescription": "Enables the register_listener command without any pre-configured scope."
574
+
},
575
+
{
576
"description": "Enables the remove_data_store command without any pre-configured scope.",
577
"type": "string",
578
"const": "core:app:allow-remove-data-store",
579
"markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
580
},
581
{
582
+
"description": "Enables the remove_listener command without any pre-configured scope.",
583
+
"type": "string",
584
+
"const": "core:app:allow-remove-listener",
585
+
"markdownDescription": "Enables the remove_listener command without any pre-configured scope."
586
+
},
587
+
{
588
"description": "Enables the set_app_theme command without any pre-configured scope.",
589
"type": "string",
590
"const": "core:app:allow-set-app-theme",
···
651
"markdownDescription": "Denies the name command without any pre-configured scope."
652
},
653
{
654
+
"description": "Denies the register_listener command without any pre-configured scope.",
655
+
"type": "string",
656
+
"const": "core:app:deny-register-listener",
657
+
"markdownDescription": "Denies the register_listener command without any pre-configured scope."
658
+
},
659
+
{
660
"description": "Denies the remove_data_store command without any pre-configured scope.",
661
"type": "string",
662
"const": "core:app:deny-remove-data-store",
663
"markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
664
+
},
665
+
{
666
+
"description": "Denies the remove_listener command without any pre-configured scope.",
667
+
"type": "string",
668
+
"const": "core:app:deny-remove-listener",
669
+
"markdownDescription": "Denies the remove_listener command without any pre-configured scope."
670
},
671
{
672
"description": "Denies the set_app_theme command without any pre-configured scope.",
···
1851
"markdownDescription": "Enables the set_focus command without any pre-configured scope."
1852
},
1853
{
1854
+
"description": "Enables the set_focusable command without any pre-configured scope.",
1855
+
"type": "string",
1856
+
"const": "core:window:allow-set-focusable",
1857
+
"markdownDescription": "Enables the set_focusable command without any pre-configured scope."
1858
+
},
1859
+
{
1860
"description": "Enables the set_fullscreen command without any pre-configured scope.",
1861
"type": "string",
1862
"const": "core:window:allow-set-fullscreen",
···
1927
"type": "string",
1928
"const": "core:window:allow-set-shadow",
1929
"markdownDescription": "Enables the set_shadow command without any pre-configured scope."
1930
+
},
1931
+
{
1932
+
"description": "Enables the set_simple_fullscreen command without any pre-configured scope.",
1933
+
"type": "string",
1934
+
"const": "core:window:allow-set-simple-fullscreen",
1935
+
"markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope."
1936
},
1937
{
1938
"description": "Enables the set_size command without any pre-configured scope.",
···
2307
"markdownDescription": "Denies the set_focus command without any pre-configured scope."
2308
},
2309
{
2310
+
"description": "Denies the set_focusable command without any pre-configured scope.",
2311
+
"type": "string",
2312
+
"const": "core:window:deny-set-focusable",
2313
+
"markdownDescription": "Denies the set_focusable command without any pre-configured scope."
2314
+
},
2315
+
{
2316
"description": "Denies the set_fullscreen command without any pre-configured scope.",
2317
"type": "string",
2318
"const": "core:window:deny-set-fullscreen",
···
2383
"type": "string",
2384
"const": "core:window:deny-set-shadow",
2385
"markdownDescription": "Denies the set_shadow command without any pre-configured scope."
2386
+
},
2387
+
{
2388
+
"description": "Denies the set_simple_fullscreen command without any pre-configured scope.",
2389
+
"type": "string",
2390
+
"const": "core:window:deny-set-simple-fullscreen",
2391
+
"markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope."
2392
},
2393
{
2394
"description": "Denies the set_size command without any pre-configured scope.",
···
2479
"type": "string",
2480
"const": "core:window:deny-unminimize",
2481
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
2482
},
2483
{
2484
"description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
+50
-56
src-tauri/gen/schemas/linux-schema.json
+50
-56
src-tauri/gen/schemas/linux-schema.json
···
519
"markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
520
},
521
{
522
-
"description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`",
523
"type": "string",
524
"const": "core:app:default",
525
-
"markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`"
526
},
527
{
528
"description": "Enables the app_hide command without any pre-configured scope.",
···
567
"markdownDescription": "Enables the name command without any pre-configured scope."
568
},
569
{
570
"description": "Enables the remove_data_store command without any pre-configured scope.",
571
"type": "string",
572
"const": "core:app:allow-remove-data-store",
573
"markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
574
},
575
{
576
"description": "Enables the set_app_theme command without any pre-configured scope.",
577
"type": "string",
578
"const": "core:app:allow-set-app-theme",
···
639
"markdownDescription": "Denies the name command without any pre-configured scope."
640
},
641
{
642
"description": "Denies the remove_data_store command without any pre-configured scope.",
643
"type": "string",
644
"const": "core:app:deny-remove-data-store",
645
"markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
646
},
647
{
648
"description": "Denies the set_app_theme command without any pre-configured scope.",
···
1827
"markdownDescription": "Enables the set_focus command without any pre-configured scope."
1828
},
1829
{
1830
"description": "Enables the set_fullscreen command without any pre-configured scope.",
1831
"type": "string",
1832
"const": "core:window:allow-set-fullscreen",
···
1897
"type": "string",
1898
"const": "core:window:allow-set-shadow",
1899
"markdownDescription": "Enables the set_shadow command without any pre-configured scope."
1900
},
1901
{
1902
"description": "Enables the set_size command without any pre-configured scope.",
···
2271
"markdownDescription": "Denies the set_focus command without any pre-configured scope."
2272
},
2273
{
2274
"description": "Denies the set_fullscreen command without any pre-configured scope.",
2275
"type": "string",
2276
"const": "core:window:deny-set-fullscreen",
···
2341
"type": "string",
2342
"const": "core:window:deny-set-shadow",
2343
"markdownDescription": "Denies the set_shadow command without any pre-configured scope."
2344
},
2345
{
2346
"description": "Denies the set_size command without any pre-configured scope.",
···
2431
"type": "string",
2432
"const": "core:window:deny-unminimize",
2433
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
2434
-
},
2435
-
{
2436
-
"description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`",
2437
-
"type": "string",
2438
-
"const": "deep-link:default",
2439
-
"markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`"
2440
-
},
2441
-
{
2442
-
"description": "Enables the get_current command without any pre-configured scope.",
2443
-
"type": "string",
2444
-
"const": "deep-link:allow-get-current",
2445
-
"markdownDescription": "Enables the get_current command without any pre-configured scope."
2446
-
},
2447
-
{
2448
-
"description": "Enables the is_registered command without any pre-configured scope.",
2449
-
"type": "string",
2450
-
"const": "deep-link:allow-is-registered",
2451
-
"markdownDescription": "Enables the is_registered command without any pre-configured scope."
2452
-
},
2453
-
{
2454
-
"description": "Enables the register command without any pre-configured scope.",
2455
-
"type": "string",
2456
-
"const": "deep-link:allow-register",
2457
-
"markdownDescription": "Enables the register command without any pre-configured scope."
2458
-
},
2459
-
{
2460
-
"description": "Enables the unregister command without any pre-configured scope.",
2461
-
"type": "string",
2462
-
"const": "deep-link:allow-unregister",
2463
-
"markdownDescription": "Enables the unregister command without any pre-configured scope."
2464
-
},
2465
-
{
2466
-
"description": "Denies the get_current command without any pre-configured scope.",
2467
-
"type": "string",
2468
-
"const": "deep-link:deny-get-current",
2469
-
"markdownDescription": "Denies the get_current command without any pre-configured scope."
2470
-
},
2471
-
{
2472
-
"description": "Denies the is_registered command without any pre-configured scope.",
2473
-
"type": "string",
2474
-
"const": "deep-link:deny-is-registered",
2475
-
"markdownDescription": "Denies the is_registered command without any pre-configured scope."
2476
-
},
2477
-
{
2478
-
"description": "Denies the register command without any pre-configured scope.",
2479
-
"type": "string",
2480
-
"const": "deep-link:deny-register",
2481
-
"markdownDescription": "Denies the register command without any pre-configured scope."
2482
-
},
2483
-
{
2484
-
"description": "Denies the unregister command without any pre-configured scope.",
2485
-
"type": "string",
2486
-
"const": "deep-link:deny-unregister",
2487
-
"markdownDescription": "Denies the unregister command without any pre-configured scope."
2488
},
2489
{
2490
"description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
···
519
"markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
520
},
521
{
522
+
"description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`",
523
"type": "string",
524
"const": "core:app:default",
525
+
"markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`"
526
},
527
{
528
"description": "Enables the app_hide command without any pre-configured scope.",
···
567
"markdownDescription": "Enables the name command without any pre-configured scope."
568
},
569
{
570
+
"description": "Enables the register_listener command without any pre-configured scope.",
571
+
"type": "string",
572
+
"const": "core:app:allow-register-listener",
573
+
"markdownDescription": "Enables the register_listener command without any pre-configured scope."
574
+
},
575
+
{
576
"description": "Enables the remove_data_store command without any pre-configured scope.",
577
"type": "string",
578
"const": "core:app:allow-remove-data-store",
579
"markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
580
},
581
{
582
+
"description": "Enables the remove_listener command without any pre-configured scope.",
583
+
"type": "string",
584
+
"const": "core:app:allow-remove-listener",
585
+
"markdownDescription": "Enables the remove_listener command without any pre-configured scope."
586
+
},
587
+
{
588
"description": "Enables the set_app_theme command without any pre-configured scope.",
589
"type": "string",
590
"const": "core:app:allow-set-app-theme",
···
651
"markdownDescription": "Denies the name command without any pre-configured scope."
652
},
653
{
654
+
"description": "Denies the register_listener command without any pre-configured scope.",
655
+
"type": "string",
656
+
"const": "core:app:deny-register-listener",
657
+
"markdownDescription": "Denies the register_listener command without any pre-configured scope."
658
+
},
659
+
{
660
"description": "Denies the remove_data_store command without any pre-configured scope.",
661
"type": "string",
662
"const": "core:app:deny-remove-data-store",
663
"markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
664
+
},
665
+
{
666
+
"description": "Denies the remove_listener command without any pre-configured scope.",
667
+
"type": "string",
668
+
"const": "core:app:deny-remove-listener",
669
+
"markdownDescription": "Denies the remove_listener command without any pre-configured scope."
670
},
671
{
672
"description": "Denies the set_app_theme command without any pre-configured scope.",
···
1851
"markdownDescription": "Enables the set_focus command without any pre-configured scope."
1852
},
1853
{
1854
+
"description": "Enables the set_focusable command without any pre-configured scope.",
1855
+
"type": "string",
1856
+
"const": "core:window:allow-set-focusable",
1857
+
"markdownDescription": "Enables the set_focusable command without any pre-configured scope."
1858
+
},
1859
+
{
1860
"description": "Enables the set_fullscreen command without any pre-configured scope.",
1861
"type": "string",
1862
"const": "core:window:allow-set-fullscreen",
···
1927
"type": "string",
1928
"const": "core:window:allow-set-shadow",
1929
"markdownDescription": "Enables the set_shadow command without any pre-configured scope."
1930
+
},
1931
+
{
1932
+
"description": "Enables the set_simple_fullscreen command without any pre-configured scope.",
1933
+
"type": "string",
1934
+
"const": "core:window:allow-set-simple-fullscreen",
1935
+
"markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope."
1936
},
1937
{
1938
"description": "Enables the set_size command without any pre-configured scope.",
···
2307
"markdownDescription": "Denies the set_focus command without any pre-configured scope."
2308
},
2309
{
2310
+
"description": "Denies the set_focusable command without any pre-configured scope.",
2311
+
"type": "string",
2312
+
"const": "core:window:deny-set-focusable",
2313
+
"markdownDescription": "Denies the set_focusable command without any pre-configured scope."
2314
+
},
2315
+
{
2316
"description": "Denies the set_fullscreen command without any pre-configured scope.",
2317
"type": "string",
2318
"const": "core:window:deny-set-fullscreen",
···
2383
"type": "string",
2384
"const": "core:window:deny-set-shadow",
2385
"markdownDescription": "Denies the set_shadow command without any pre-configured scope."
2386
+
},
2387
+
{
2388
+
"description": "Denies the set_simple_fullscreen command without any pre-configured scope.",
2389
+
"type": "string",
2390
+
"const": "core:window:deny-set-simple-fullscreen",
2391
+
"markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope."
2392
},
2393
{
2394
"description": "Denies the set_size command without any pre-configured scope.",
···
2479
"type": "string",
2480
"const": "core:window:deny-unminimize",
2481
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
2482
},
2483
{
2484
"description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
+50
-56
src-tauri/gen/schemas/windows-schema.json
+50
-56
src-tauri/gen/schemas/windows-schema.json
···
519
"markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
520
},
521
{
522
-
"description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`",
523
"type": "string",
524
"const": "core:app:default",
525
-
"markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`"
526
},
527
{
528
"description": "Enables the app_hide command without any pre-configured scope.",
···
567
"markdownDescription": "Enables the name command without any pre-configured scope."
568
},
569
{
570
"description": "Enables the remove_data_store command without any pre-configured scope.",
571
"type": "string",
572
"const": "core:app:allow-remove-data-store",
573
"markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
574
},
575
{
576
"description": "Enables the set_app_theme command without any pre-configured scope.",
577
"type": "string",
578
"const": "core:app:allow-set-app-theme",
···
639
"markdownDescription": "Denies the name command without any pre-configured scope."
640
},
641
{
642
"description": "Denies the remove_data_store command without any pre-configured scope.",
643
"type": "string",
644
"const": "core:app:deny-remove-data-store",
645
"markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
646
},
647
{
648
"description": "Denies the set_app_theme command without any pre-configured scope.",
···
1827
"markdownDescription": "Enables the set_focus command without any pre-configured scope."
1828
},
1829
{
1830
"description": "Enables the set_fullscreen command without any pre-configured scope.",
1831
"type": "string",
1832
"const": "core:window:allow-set-fullscreen",
···
1897
"type": "string",
1898
"const": "core:window:allow-set-shadow",
1899
"markdownDescription": "Enables the set_shadow command without any pre-configured scope."
1900
},
1901
{
1902
"description": "Enables the set_size command without any pre-configured scope.",
···
2271
"markdownDescription": "Denies the set_focus command without any pre-configured scope."
2272
},
2273
{
2274
"description": "Denies the set_fullscreen command without any pre-configured scope.",
2275
"type": "string",
2276
"const": "core:window:deny-set-fullscreen",
···
2341
"type": "string",
2342
"const": "core:window:deny-set-shadow",
2343
"markdownDescription": "Denies the set_shadow command without any pre-configured scope."
2344
},
2345
{
2346
"description": "Denies the set_size command without any pre-configured scope.",
···
2431
"type": "string",
2432
"const": "core:window:deny-unminimize",
2433
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
2434
-
},
2435
-
{
2436
-
"description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`",
2437
-
"type": "string",
2438
-
"const": "deep-link:default",
2439
-
"markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`"
2440
-
},
2441
-
{
2442
-
"description": "Enables the get_current command without any pre-configured scope.",
2443
-
"type": "string",
2444
-
"const": "deep-link:allow-get-current",
2445
-
"markdownDescription": "Enables the get_current command without any pre-configured scope."
2446
-
},
2447
-
{
2448
-
"description": "Enables the is_registered command without any pre-configured scope.",
2449
-
"type": "string",
2450
-
"const": "deep-link:allow-is-registered",
2451
-
"markdownDescription": "Enables the is_registered command without any pre-configured scope."
2452
-
},
2453
-
{
2454
-
"description": "Enables the register command without any pre-configured scope.",
2455
-
"type": "string",
2456
-
"const": "deep-link:allow-register",
2457
-
"markdownDescription": "Enables the register command without any pre-configured scope."
2458
-
},
2459
-
{
2460
-
"description": "Enables the unregister command without any pre-configured scope.",
2461
-
"type": "string",
2462
-
"const": "deep-link:allow-unregister",
2463
-
"markdownDescription": "Enables the unregister command without any pre-configured scope."
2464
-
},
2465
-
{
2466
-
"description": "Denies the get_current command without any pre-configured scope.",
2467
-
"type": "string",
2468
-
"const": "deep-link:deny-get-current",
2469
-
"markdownDescription": "Denies the get_current command without any pre-configured scope."
2470
-
},
2471
-
{
2472
-
"description": "Denies the is_registered command without any pre-configured scope.",
2473
-
"type": "string",
2474
-
"const": "deep-link:deny-is-registered",
2475
-
"markdownDescription": "Denies the is_registered command without any pre-configured scope."
2476
-
},
2477
-
{
2478
-
"description": "Denies the register command without any pre-configured scope.",
2479
-
"type": "string",
2480
-
"const": "deep-link:deny-register",
2481
-
"markdownDescription": "Denies the register command without any pre-configured scope."
2482
-
},
2483
-
{
2484
-
"description": "Denies the unregister command without any pre-configured scope.",
2485
-
"type": "string",
2486
-
"const": "deep-link:deny-unregister",
2487
-
"markdownDescription": "Denies the unregister command without any pre-configured scope."
2488
},
2489
{
2490
"description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
···
519
"markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
520
},
521
{
522
+
"description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`",
523
"type": "string",
524
"const": "core:app:default",
525
+
"markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`"
526
},
527
{
528
"description": "Enables the app_hide command without any pre-configured scope.",
···
567
"markdownDescription": "Enables the name command without any pre-configured scope."
568
},
569
{
570
+
"description": "Enables the register_listener command without any pre-configured scope.",
571
+
"type": "string",
572
+
"const": "core:app:allow-register-listener",
573
+
"markdownDescription": "Enables the register_listener command without any pre-configured scope."
574
+
},
575
+
{
576
"description": "Enables the remove_data_store command without any pre-configured scope.",
577
"type": "string",
578
"const": "core:app:allow-remove-data-store",
579
"markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
580
},
581
{
582
+
"description": "Enables the remove_listener command without any pre-configured scope.",
583
+
"type": "string",
584
+
"const": "core:app:allow-remove-listener",
585
+
"markdownDescription": "Enables the remove_listener command without any pre-configured scope."
586
+
},
587
+
{
588
"description": "Enables the set_app_theme command without any pre-configured scope.",
589
"type": "string",
590
"const": "core:app:allow-set-app-theme",
···
651
"markdownDescription": "Denies the name command without any pre-configured scope."
652
},
653
{
654
+
"description": "Denies the register_listener command without any pre-configured scope.",
655
+
"type": "string",
656
+
"const": "core:app:deny-register-listener",
657
+
"markdownDescription": "Denies the register_listener command without any pre-configured scope."
658
+
},
659
+
{
660
"description": "Denies the remove_data_store command without any pre-configured scope.",
661
"type": "string",
662
"const": "core:app:deny-remove-data-store",
663
"markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
664
+
},
665
+
{
666
+
"description": "Denies the remove_listener command without any pre-configured scope.",
667
+
"type": "string",
668
+
"const": "core:app:deny-remove-listener",
669
+
"markdownDescription": "Denies the remove_listener command without any pre-configured scope."
670
},
671
{
672
"description": "Denies the set_app_theme command without any pre-configured scope.",
···
1851
"markdownDescription": "Enables the set_focus command without any pre-configured scope."
1852
},
1853
{
1854
+
"description": "Enables the set_focusable command without any pre-configured scope.",
1855
+
"type": "string",
1856
+
"const": "core:window:allow-set-focusable",
1857
+
"markdownDescription": "Enables the set_focusable command without any pre-configured scope."
1858
+
},
1859
+
{
1860
"description": "Enables the set_fullscreen command without any pre-configured scope.",
1861
"type": "string",
1862
"const": "core:window:allow-set-fullscreen",
···
1927
"type": "string",
1928
"const": "core:window:allow-set-shadow",
1929
"markdownDescription": "Enables the set_shadow command without any pre-configured scope."
1930
+
},
1931
+
{
1932
+
"description": "Enables the set_simple_fullscreen command without any pre-configured scope.",
1933
+
"type": "string",
1934
+
"const": "core:window:allow-set-simple-fullscreen",
1935
+
"markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope."
1936
},
1937
{
1938
"description": "Enables the set_size command without any pre-configured scope.",
···
2307
"markdownDescription": "Denies the set_focus command without any pre-configured scope."
2308
},
2309
{
2310
+
"description": "Denies the set_focusable command without any pre-configured scope.",
2311
+
"type": "string",
2312
+
"const": "core:window:deny-set-focusable",
2313
+
"markdownDescription": "Denies the set_focusable command without any pre-configured scope."
2314
+
},
2315
+
{
2316
"description": "Denies the set_fullscreen command without any pre-configured scope.",
2317
"type": "string",
2318
"const": "core:window:deny-set-fullscreen",
···
2383
"type": "string",
2384
"const": "core:window:deny-set-shadow",
2385
"markdownDescription": "Denies the set_shadow command without any pre-configured scope."
2386
+
},
2387
+
{
2388
+
"description": "Denies the set_simple_fullscreen command without any pre-configured scope.",
2389
+
"type": "string",
2390
+
"const": "core:window:deny-set-simple-fullscreen",
2391
+
"markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope."
2392
},
2393
{
2394
"description": "Denies the set_size command without any pre-configured scope.",
···
2479
"type": "string",
2480
"const": "core:window:deny-unminimize",
2481
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
2482
},
2483
{
2484
"description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
+17
-9
src-tauri/src/frontend_calls/change_final_path.rs
+17
-9
src-tauri/src/frontend_calls/change_final_path.rs
···
1
use std::fs;
2
3
-
#[tauri::command]
4
-
pub fn change_final_path(new_path: &str) {
5
-
let config_path = dirs::config_dir()
6
-
.unwrap()
7
-
.join("PhazeDev/VRChatPhotoManager/.photos_path");
8
9
-
fs::write(&config_path, new_path.as_bytes()).unwrap();
10
11
match fs::metadata(&new_path) {
12
-
Ok(_) => {}
13
Err(_) => {
14
-
fs::create_dir(&new_path).unwrap();
15
}
16
-
};
17
}
···
1
use std::fs;
2
3
+
use tauri::{Emitter, State, Window};
4
5
+
use crate::util::cache::Cache;
6
7
+
#[tauri::command]
8
+
pub fn change_final_path(new_path: &str, window: Window, cache: State<Cache>) -> bool {
9
match fs::metadata(&new_path) {
10
+
Ok(_) => {
11
+
let config_path = dirs::config_dir()
12
+
.unwrap()
13
+
.join("PhazeDev/VRChatPhotoManager/.photos_path");
14
+
15
+
fs::write(&config_path, new_path.as_bytes()).unwrap();
16
+
cache.insert("photo-path".into(), new_path.to_owned());
17
+
18
+
true
19
+
}
20
Err(_) => {
21
+
window.emit("vrcpm-error", "Error Changing Path: Path does not exist.").unwrap();
22
+
false
23
}
24
+
}
25
}
+5
-3
src-tauri/src/frontend_calls/close_splashscreen.rs
+5
-3
src-tauri/src/frontend_calls/close_splashscreen.rs
···
1
use std::env;
2
-
use tauri::{ Emitter, Manager };
3
4
use super::config::get_config_value_string;
5
6
#[tauri::command]
7
-
pub fn close_splashscreen( window: tauri::Window ) {
8
let args: Vec<String> = env::args().collect();
9
10
let mut show = true;
···
14
}
15
}
16
17
-
let value: String = match get_config_value_string("start-in-bg".to_owned()) { Some(val) => val, None => "false".to_owned() };
18
if value == "true"{
19
show = false;
20
}
···
1
use std::env;
2
+
use tauri::{ Emitter, Manager, State };
3
+
4
+
use crate::frontend_calls::config::Config;
5
6
use super::config::get_config_value_string;
7
8
#[tauri::command]
9
+
pub fn close_splashscreen( window: tauri::Window, config: State<Config> ) {
10
let args: Vec<String> = env::args().collect();
11
12
let mut show = true;
···
16
}
17
}
18
19
+
let value: String = match get_config_value_string("start-in-bg".to_owned(), config) { Some(val) => val, None => "false".to_owned() };
20
if value == "true"{
21
show = false;
22
}
+43
-22
src-tauri/src/frontend_calls/config.rs
+43
-22
src-tauri/src/frontend_calls/config.rs
···
1
-
use std::{fs, path::PathBuf};
2
3
use serde_json::Value;
4
5
pub fn get_config_path() -> PathBuf {
6
let path = dirs::config_dir()
···
17
path
18
}
19
20
-
#[tauri::command]
21
-
pub fn set_config_value_string(key: String, value: String) {
22
-
let path = get_config_path();
23
24
-
let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap();
25
-
config[key] = Value::from(value);
26
27
-
fs::write(path, config.to_string()).unwrap();
28
}
29
30
#[tauri::command]
31
-
pub fn get_config_value_string(key: String) -> Option<String> {
32
-
let config: Value =
33
-
serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap();
34
-
let string = config[key].as_str();
35
36
if string.is_some() {
37
Some(string.unwrap().to_owned())
···
41
}
42
43
#[tauri::command]
44
-
pub fn set_config_value_int(key: String, value: i64) {
45
-
let path = get_config_path();
46
-
47
-
let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap();
48
-
config[key] = Value::from(value);
49
-
50
-
fs::write(path, config.to_string()).unwrap();
51
}
52
53
#[tauri::command]
54
-
pub fn get_config_value_int(key: String) -> Option<i64> {
55
-
let config: Value =
56
-
serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap();
57
-
config[key].as_i64()
58
}
···
1
+
use std::{fs, path::PathBuf, sync::Mutex};
2
3
use serde_json::Value;
4
+
use tauri::State;
5
6
pub fn get_config_path() -> PathBuf {
7
let path = dirs::config_dir()
···
18
path
19
}
20
21
+
pub struct Config{
22
+
config: Mutex<Value>
23
+
}
24
+
25
+
impl Config{
26
+
pub fn new() -> Config{
27
+
let path = get_config_path();
28
+
let config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap();
29
+
30
+
Config {
31
+
config: Mutex::new(config)
32
+
}
33
+
}
34
+
35
+
pub fn set( &self, key: String, value: Value ){
36
+
let mut lock = self.config.lock().unwrap();
37
+
lock[key] = value;
38
+
}
39
+
40
+
pub fn get( &self, key: String ) -> Value{
41
+
let lock = self.config.lock().unwrap();
42
+
lock[key].clone()
43
+
}
44
+
45
+
pub fn save( &self ){
46
+
let path = get_config_path();
47
+
let string = serde_json::to_string(&self.config).unwrap();
48
49
+
fs::write(path, string).unwrap();
50
+
}
51
+
}
52
53
+
#[tauri::command]
54
+
pub fn set_config_value_string( key: String, value: String, config: State<Config> ) {
55
+
config.set(key, Value::from(value));
56
}
57
58
#[tauri::command]
59
+
pub fn get_config_value_string( key: String, config: State<Config> ) -> Option<String> {
60
+
let string = config.get(key);
61
+
let string = string.as_str();
62
63
if string.is_some() {
64
Some(string.unwrap().to_owned())
···
68
}
69
70
#[tauri::command]
71
+
pub fn set_config_value_int( key: String, value: i64, config: State<Config> ) {
72
+
config.set(key, Value::from(value));
73
}
74
75
#[tauri::command]
76
+
pub fn get_config_value_int( key: String, config: State<Config> ) -> Option<i64> {
77
+
let string = config.get(key);
78
+
string.as_i64()
79
}
+21
-3
src-tauri/src/frontend_calls/load_photo_meta.rs
+21
-3
src-tauri/src/frontend_calls/load_photo_meta.rs
···
20
let mut buffer = Vec::new();
21
22
let _out = file.read_to_end(&mut buffer);
23
+
let png = PNGImage::new(buffer, photo.clone());
24
+
25
+
if png.is_err(){
26
+
println!("Failed to load: {} => {}", base_dir, png.unwrap_err());
27
+
28
+
window.emit("photo_meta_loaded", PNGImage {
29
+
width: 1920,
30
+
height: 1080,
31
+
bit_depth: 0,
32
+
colour_type: 0,
33
+
compression_method: 0,
34
+
filter_method: 0,
35
+
interlace_method: 0,
36
+
metadata: "".into(),
37
+
error: true,
38
+
path: photo
39
+
}).unwrap();
40
+
} else{
41
+
println!("Loaded: {}", base_dir);
42
+
window.emit("photo_meta_loaded", png.unwrap()).unwrap();
43
+
}
44
}
45
Err(_) => {
46
println!("Cannot read image file: {:?}", base_dir);
+14
-8
src-tauri/src/frontend_calls/load_photos.rs
+14
-8
src-tauri/src/frontend_calls/load_photos.rs
···
16
let base_dir = cache.get("photo-path".into()).unwrap();
17
18
thread::spawn(move || {
19
-
20
let mut photos: Vec<path::PathBuf> = Vec::new();
21
let mut size: usize = 0;
22
23
for folder in fs::read_dir(&base_dir).unwrap() {
24
let f = folder.unwrap();
25
26
if f.metadata().unwrap().is_dir() {
27
for photo in fs::read_dir(f.path()).unwrap() {
···
30
if p.metadata().unwrap().is_file() {
31
let fname = p.path();
32
33
-
let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap();
34
-
let re2 = Regex::new(
35
-
r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap();
36
-
let re3 = Regex::new("VRChat_[0-9]{4}x[0-9]{4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap();
37
-
38
let name = p.file_name();
39
let name = name.to_str().unwrap();
40
41
-
let re3_match = re3.is_match(name);
42
43
-
if re1.is_match(name) || re2.is_match(name) || re3_match {
44
let path = fname.to_path_buf().clone();
45
let metadata = fs::metadata(&path).unwrap();
46
···
16
let base_dir = cache.get("photo-path".into()).unwrap();
17
18
thread::spawn(move || {
19
let mut photos: Vec<path::PathBuf> = Vec::new();
20
let mut size: usize = 0;
21
22
+
let re = Regex::new(r"^[0-9]{4}-[0-9]{2}$").unwrap();
23
+
24
for folder in fs::read_dir(&base_dir).unwrap() {
25
let f = folder.unwrap();
26
+
if !re.is_match(f.file_name().to_str().unwrap()){ continue; }
27
28
if f.metadata().unwrap().is_dir() {
29
for photo in fs::read_dir(f.path()).unwrap() {
···
32
if p.metadata().unwrap().is_file() {
33
let fname = p.path();
34
35
let name = p.file_name();
36
let name = name.to_str().unwrap();
37
38
+
let re1_match = // This is the current format used by VRChat
39
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(name) ||
40
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(name) ||
41
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(name);
42
+
43
+
let re2_match = // This is the format VRCX uses if you enable renaming photos
44
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(name);
45
46
+
let re3_match = // This is an old format VRChat used for naming photos
47
+
Regex::new(r"(?m)VRChat_[0-9]{3,4}x[0-9]{3,4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap().is_match(name);
48
+
49
+
if re1_match || re2_match || re3_match {
50
let path = fname.to_path_buf().clone();
51
let metadata = fs::metadata(&path).unwrap();
52
-1
src-tauri/src/frontend_calls/mod.rs
-1
src-tauri/src/frontend_calls/mod.rs
+19
-4
src-tauri/src/frontend_calls/open_folder.rs
+19
-4
src-tauri/src/frontend_calls/open_folder.rs
···
7
8
#[cfg(target_os = "linux")]
9
{
10
+
let path = url.replace("\\", "/");
11
+
12
+
let mut dir_path: Vec<_> = path.split("/").collect();
13
+
dir_path.pop();
14
+
let dir_path = dir_path.join("/");
15
+
16
+
let commands = vec![
17
+
( "nautilus", vec![ path.clone() ] ),
18
+
( "nemo", vec![ path.clone() ] ),
19
+
( "thunar", vec![ path.clone() ] ),
20
+
( "caja", vec![ "--select".into(), path.clone() ] ),
21
+
( "pcmanfm-qt", vec![ dir_path.clone() ] ),
22
+
( "pcmanfm", vec![ dir_path.clone() ] ),
23
+
( "dolphin", vec![ "--select".into(), path.clone() ] ),
24
+
( "konqueror", vec![ "--select".into(), path.clone() ] ),
25
+
( "xdg-open", vec![ dir_path.clone() ] )
26
+
];
27
28
+
for command in commands{
29
+
if Command::new(command.0).args(command.1).spawn().is_ok() { break; } }
30
}
31
}
-11
src-tauri/src/frontend_calls/sync_photos.rs
-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
-
}
···
+28
-20
src-tauri/src/main.rs
+28
-20
src-tauri/src/main.rs
···
1
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
2
3
mod frontend_calls;
4
-
mod photosync;
5
mod pngmeta;
6
mod util;
7
mod worldscraper;
···
16
use util::{ cache::Cache, get_photo_path::get_photo_path };
17
use std::{ env, fs, sync::Mutex, thread };
18
use tauri::{ Emitter, Manager, State, WindowEvent };
19
-
use tauri_plugin_deep_link::DeepLinkExt;
20
21
-
// TODO: Linux support
22
23
fn main() {
24
#[cfg(target_os = "linux")]
···
79
80
println!("Loading App...");
81
let photos_path = util::get_photo_path::get_photo_path();
82
83
cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned());
84
···
99
let path = event.paths.first().unwrap();
100
let name = path.file_name().unwrap().to_str().unwrap().to_owned();
101
102
-
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();
103
-
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();
104
105
-
if
106
-
re1.is_match(&name) ||
107
-
re2.is_match(&name)
108
-
{
109
sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap();
110
}
111
},
···
113
let path = event.paths.first().unwrap();
114
let name = path.file_name().unwrap().to_str().unwrap().to_owned();
115
116
-
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();
117
-
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();
118
119
-
if
120
-
re1.is_match(&name) ||
121
-
re2.is_match(&name)
122
-
{
123
thread::sleep(time::Duration::from_millis(1000));
124
sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap();
125
}
···
145
.plugin(tauri_plugin_single_instance::init(| app, _argv, _cwd | {
146
app.get_webview_window("main").unwrap().show().unwrap();
147
}))
148
-
.plugin(tauri_plugin_deep_link::init())
149
.plugin(tauri_plugin_process::init())
150
.plugin(tauri_plugin_http::init())
151
.plugin(tauri_plugin_shell::init())
···
154
util::handle_uri_proto::handle_uri_proto(req, res, cache);
155
})
156
.on_window_event(|window, event| match event {
157
-
WindowEvent::CloseRequested { api, .. } => {
158
window.hide().unwrap();
159
api.prevent_close();
160
}
161
_ => {}
162
})
163
.manage(cache)
164
.manage(Mutex::new(clipboard))
165
.setup(|app| {
166
let handle = app.handle();
167
-
168
-
app.deep_link().register("vrcpm").unwrap();
169
util::setup_traymenu::setup_traymenu(handle);
170
171
// reads the file update mpsc channel and sends the events to the frontend
···
200
start_with_win::start_with_win,
201
get_user_photos_path::get_user_photos_path,
202
change_final_path::change_final_path,
203
-
sync_photos::sync_photos,
204
util::get_version::get_version,
205
config::set_config_value_string,
206
config::get_config_value_string,
···
1
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
2
3
mod frontend_calls;
4
mod pngmeta;
5
mod util;
6
mod worldscraper;
···
15
use util::{ cache::Cache, get_photo_path::get_photo_path };
16
use std::{ env, fs, sync::Mutex, thread };
17
use tauri::{ Emitter, Manager, State, WindowEvent };
18
19
+
use crate::frontend_calls::config::{get_config_value_string, Config};
20
21
fn main() {
22
#[cfg(target_os = "linux")]
···
77
78
println!("Loading App...");
79
let photos_path = util::get_photo_path::get_photo_path();
80
+
println!("Loading photos from: {:#?}", &photos_path);
81
82
cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned());
83
···
98
let path = event.paths.first().unwrap();
99
let name = path.file_name().unwrap().to_str().unwrap().to_owned();
100
101
+
let re1_match = // This is the current format used by VRChat
102
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) ||
103
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) ||
104
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name);
105
106
+
let re2_match = // This is the format VRCX uses if you enable renaming photos
107
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(&name);
108
+
109
+
if re1_match || re2_match{
110
sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap();
111
}
112
},
···
114
let path = event.paths.first().unwrap();
115
let name = path.file_name().unwrap().to_str().unwrap().to_owned();
116
117
+
let re1_match = // This is the current format used by VRChat
118
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) ||
119
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) ||
120
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name);
121
122
+
let re2_match = // This is the format VRCX uses if you enable renaming photos
123
+
Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(&name);
124
+
125
+
if re1_match || re2_match{
126
thread::sleep(time::Duration::from_millis(1000));
127
sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap();
128
}
···
148
.plugin(tauri_plugin_single_instance::init(| app, _argv, _cwd | {
149
app.get_webview_window("main").unwrap().show().unwrap();
150
}))
151
.plugin(tauri_plugin_process::init())
152
.plugin(tauri_plugin_http::init())
153
.plugin(tauri_plugin_shell::init())
···
156
util::handle_uri_proto::handle_uri_proto(req, res, cache);
157
})
158
.on_window_event(|window, event| match event {
159
+
WindowEvent::CloseRequested { api, .. } => {
160
+
let config: State<Config> = window.state();
161
+
162
+
let val = get_config_value_string("close-to-tray".into(), config.clone());
163
+
if val.is_none() || val.unwrap() != "true"{
164
+
config.save();
165
+
return;
166
+
}
167
+
168
window.hide().unwrap();
169
api.prevent_close();
170
}
171
_ => {}
172
})
173
+
.manage(Config::new())
174
.manage(cache)
175
.manage(Mutex::new(clipboard))
176
.setup(|app| {
177
let handle = app.handle();
178
util::setup_traymenu::setup_traymenu(handle);
179
180
// reads the file update mpsc channel and sends the events to the frontend
···
209
start_with_win::start_with_win,
210
get_user_photos_path::get_user_photos_path,
211
change_final_path::change_final_path,
212
util::get_version::get_version,
213
config::set_config_value_string,
214
config::get_config_value_string,
-261
src-tauri/src/photosync.rs
-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
+8
-24
src-tauri/src/pngmeta.rs
···
1
-
use serde::ser::{Serialize, SerializeStruct, Serializer};
2
use std::str;
3
4
-
#[derive(Clone)]
5
pub struct PNGImage {
6
pub width: u32,
7
pub height: u32,
···
12
pub interlace_method: u8,
13
pub metadata: String,
14
pub path: String,
15
}
16
17
impl PNGImage {
18
-
pub fn new(buff: Vec<u8>, path: String) -> PNGImage {
19
if buff[0] != 0x89
20
|| buff[1] != 0x50
21
|| buff[2] != 0x4E
···
26
|| buff[7] != 0x0A
27
{
28
dbg!(path);
29
-
panic!("Image is not a PNG file");
30
}
31
32
let mut img = PNGImage {
···
39
interlace_method: 0,
40
metadata: "".to_string(),
41
path: path,
42
};
43
44
img.read_png_chunk(8, buff);
45
-
img
46
}
47
48
fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) {
···
82
}
83
}
84
}
85
-
86
-
impl Serialize for PNGImage {
87
-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
88
-
where
89
-
S: Serializer,
90
-
{
91
-
let mut s = serializer.serialize_struct("PNGImage", 7)?;
92
-
s.serialize_field("width", &self.width)?;
93
-
s.serialize_field("height", &self.height)?;
94
-
s.serialize_field("bit_depth", &self.bit_depth)?;
95
-
s.serialize_field("colour_type", &self.colour_type)?;
96
-
s.serialize_field("compression_method", &self.compression_method)?;
97
-
s.serialize_field("filter_method", &self.filter_method)?;
98
-
s.serialize_field("interlace_method", &self.interlace_method)?;
99
-
s.serialize_field("metadata", &self.metadata)?;
100
-
s.serialize_field("path", &self.path)?;
101
-
s.end()
102
-
}
103
-
}
···
1
use std::str;
2
3
+
use serde::Serialize;
4
+
5
+
#[derive(Clone, Debug, Serialize)]
6
pub struct PNGImage {
7
pub width: u32,
8
pub height: u32,
···
13
pub interlace_method: u8,
14
pub metadata: String,
15
pub path: String,
16
+
pub error: bool
17
}
18
19
impl PNGImage {
20
+
pub fn new(buff: Vec<u8>, path: String) -> Result<PNGImage, &'static str> {
21
if buff[0] != 0x89
22
|| buff[1] != 0x50
23
|| buff[2] != 0x4E
···
28
|| buff[7] != 0x0A
29
{
30
dbg!(path);
31
+
return Err("Image is not a PNG file");
32
}
33
34
let mut img = PNGImage {
···
41
interlace_method: 0,
42
metadata: "".to_string(),
43
path: path,
44
+
error: false
45
};
46
47
img.read_png_chunk(8, buff);
48
+
Ok(img)
49
}
50
51
fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) {
···
85
}
86
}
87
}
+1
-1
src-tauri/src/util/cache.rs
+1
-1
src-tauri/src/util/cache.rs
+7
-1
src-tauri/src/util/get_photo_path.rs
+7
-1
src-tauri/src/util/get_photo_path.rs
-6
src-tauri/src/util/handle_uri_proto.rs
-6
src-tauri/src/util/handle_uri_proto.rs
···
33
return;
34
}
35
36
-
// TODO: Only accept files that are in the vrchat photos folder
37
-
// Slightly more complex than originally thought, need to find a way to cache the VRC photos path
38
-
// since i need to be able to load lots of photos very quickly. This shouldn't be a security issue
39
-
// because tauri should only let the frontend of VRCPhotoManager read files throught this. Only
40
-
// becomes a potential issue if the frontend gets modified or there's an issue with tauri.
41
-
42
#[cfg(windows)]
43
let path = uri.path().split_at(1).1;
44
+2
-2
src-tauri/tauri.conf.json
+2
-2
src-tauri/tauri.conf.json