+5
-1
.gitignore
+5
-1
.gitignore
-3
.vscode/extensions.json
-3
.vscode/extensions.json
-7
README.md
-7
README.md
···
1
-
# Tauri + Solid + Typescript
2
-
3
-
This template should help get you started developing with Tauri, Solid and Typescript in Vite.
4
-
5
-
## Recommended IDE Setup
6
-
7
-
- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)
···
+11
-8
package.json
+11
-8
package.json
···
12
},
13
"license": "MIT",
14
"dependencies": {
15
-
"@tauri-apps/api": "^2",
16
-
"@tauri-apps/plugin-opener": "^2",
17
-
"animejs": "^4.1.2",
18
-
"solid-js": "^1.9.3"
19
},
20
"devDependencies": {
21
-
"@tauri-apps/cli": "^2",
22
"@types/animejs": "^3.1.13",
23
-
"typescript": "~5.6.2",
24
-
"vite": "^6.0.3",
25
-
"vite-plugin-solid": "^2.11.0"
26
}
27
}
···
12
},
13
"license": "MIT",
14
"dependencies": {
15
+
"@tauri-apps/api": "^2.9.0",
16
+
"@tauri-apps/plugin-clipboard-manager": "~2",
17
+
"@tauri-apps/plugin-dialog": "~2.4.2",
18
+
"@tauri-apps/plugin-opener": "^2.5.2",
19
+
"@tauri-apps/plugin-os": "~2",
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.6.3",
27
+
"vite": "^6.4.1",
28
+
"vite-plugin-solid": "^2.11.10"
29
}
30
}
+483
-428
pnpm-lock.yaml
+483
-428
pnpm-lock.yaml
···
9
.:
10
dependencies:
11
'@tauri-apps/api':
12
-
specifier: ^2
13
-
version: 2.7.0
14
'@tauri-apps/plugin-opener':
15
-
specifier: ^2
16
-
version: 2.4.0
17
animejs:
18
-
specifier: ^4.1.2
19
-
version: 4.1.2
20
solid-js:
21
-
specifier: ^1.9.3
22
-
version: 1.9.7
23
devDependencies:
24
'@tauri-apps/cli':
25
-
specifier: ^2
26
-
version: 2.7.1
27
'@types/animejs':
28
specifier: ^3.1.13
29
version: 3.1.13
30
typescript:
31
-
specifier: ~5.6.2
32
version: 5.6.3
33
vite:
34
-
specifier: ^6.0.3
35
-
version: 6.3.5
36
vite-plugin-solid:
37
-
specifier: ^2.11.0
38
-
version: 2.11.8(solid-js@1.9.7)(vite@6.3.5)
39
40
packages:
41
-
42
-
'@ampproject/remapping@2.3.0':
43
-
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
44
-
engines: {node: '>=6.0.0'}
45
46
'@babel/code-frame@7.27.1':
47
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
48
engines: {node: '>=6.9.0'}
49
50
-
'@babel/compat-data@7.28.0':
51
-
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
52
engines: {node: '>=6.9.0'}
53
54
-
'@babel/core@7.28.0':
55
-
resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
56
engines: {node: '>=6.9.0'}
57
58
-
'@babel/generator@7.28.0':
59
-
resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
60
engines: {node: '>=6.9.0'}
61
62
'@babel/helper-compilation-targets@7.27.2':
···
75
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
76
engines: {node: '>=6.9.0'}
77
78
-
'@babel/helper-module-transforms@7.27.3':
79
-
resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
80
engines: {node: '>=6.9.0'}
81
peerDependencies:
82
'@babel/core': ^7.0.0
···
89
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
90
engines: {node: '>=6.9.0'}
91
92
-
'@babel/helper-validator-identifier@7.27.1':
93
-
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
94
engines: {node: '>=6.9.0'}
95
96
'@babel/helper-validator-option@7.27.1':
97
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
98
engines: {node: '>=6.9.0'}
99
100
-
'@babel/helpers@7.28.2':
101
-
resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==}
102
engines: {node: '>=6.9.0'}
103
104
-
'@babel/parser@7.28.0':
105
-
resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
106
engines: {node: '>=6.0.0'}
107
hasBin: true
108
···
116
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
117
engines: {node: '>=6.9.0'}
118
119
-
'@babel/traverse@7.28.0':
120
-
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
121
engines: {node: '>=6.9.0'}
122
123
-
'@babel/types@7.28.2':
124
-
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
125
engines: {node: '>=6.9.0'}
126
127
-
'@esbuild/aix-ppc64@0.25.8':
128
-
resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==}
129
engines: {node: '>=18'}
130
cpu: [ppc64]
131
os: [aix]
132
133
-
'@esbuild/android-arm64@0.25.8':
134
-
resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==}
135
engines: {node: '>=18'}
136
cpu: [arm64]
137
os: [android]
138
139
-
'@esbuild/android-arm@0.25.8':
140
-
resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==}
141
engines: {node: '>=18'}
142
cpu: [arm]
143
os: [android]
144
145
-
'@esbuild/android-x64@0.25.8':
146
-
resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==}
147
engines: {node: '>=18'}
148
cpu: [x64]
149
os: [android]
150
151
-
'@esbuild/darwin-arm64@0.25.8':
152
-
resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==}
153
engines: {node: '>=18'}
154
cpu: [arm64]
155
os: [darwin]
156
157
-
'@esbuild/darwin-x64@0.25.8':
158
-
resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==}
159
engines: {node: '>=18'}
160
cpu: [x64]
161
os: [darwin]
162
163
-
'@esbuild/freebsd-arm64@0.25.8':
164
-
resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==}
165
engines: {node: '>=18'}
166
cpu: [arm64]
167
os: [freebsd]
168
169
-
'@esbuild/freebsd-x64@0.25.8':
170
-
resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==}
171
engines: {node: '>=18'}
172
cpu: [x64]
173
os: [freebsd]
174
175
-
'@esbuild/linux-arm64@0.25.8':
176
-
resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==}
177
engines: {node: '>=18'}
178
cpu: [arm64]
179
os: [linux]
180
181
-
'@esbuild/linux-arm@0.25.8':
182
-
resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==}
183
engines: {node: '>=18'}
184
cpu: [arm]
185
os: [linux]
186
187
-
'@esbuild/linux-ia32@0.25.8':
188
-
resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==}
189
engines: {node: '>=18'}
190
cpu: [ia32]
191
os: [linux]
192
193
-
'@esbuild/linux-loong64@0.25.8':
194
-
resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==}
195
engines: {node: '>=18'}
196
cpu: [loong64]
197
os: [linux]
198
199
-
'@esbuild/linux-mips64el@0.25.8':
200
-
resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==}
201
engines: {node: '>=18'}
202
cpu: [mips64el]
203
os: [linux]
204
205
-
'@esbuild/linux-ppc64@0.25.8':
206
-
resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==}
207
engines: {node: '>=18'}
208
cpu: [ppc64]
209
os: [linux]
210
211
-
'@esbuild/linux-riscv64@0.25.8':
212
-
resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==}
213
engines: {node: '>=18'}
214
cpu: [riscv64]
215
os: [linux]
216
217
-
'@esbuild/linux-s390x@0.25.8':
218
-
resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==}
219
engines: {node: '>=18'}
220
cpu: [s390x]
221
os: [linux]
222
223
-
'@esbuild/linux-x64@0.25.8':
224
-
resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==}
225
engines: {node: '>=18'}
226
cpu: [x64]
227
os: [linux]
228
229
-
'@esbuild/netbsd-arm64@0.25.8':
230
-
resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==}
231
engines: {node: '>=18'}
232
cpu: [arm64]
233
os: [netbsd]
234
235
-
'@esbuild/netbsd-x64@0.25.8':
236
-
resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==}
237
engines: {node: '>=18'}
238
cpu: [x64]
239
os: [netbsd]
240
241
-
'@esbuild/openbsd-arm64@0.25.8':
242
-
resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==}
243
engines: {node: '>=18'}
244
cpu: [arm64]
245
os: [openbsd]
246
247
-
'@esbuild/openbsd-x64@0.25.8':
248
-
resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==}
249
engines: {node: '>=18'}
250
cpu: [x64]
251
os: [openbsd]
252
253
-
'@esbuild/openharmony-arm64@0.25.8':
254
-
resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==}
255
engines: {node: '>=18'}
256
cpu: [arm64]
257
os: [openharmony]
258
259
-
'@esbuild/sunos-x64@0.25.8':
260
-
resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==}
261
engines: {node: '>=18'}
262
cpu: [x64]
263
os: [sunos]
264
265
-
'@esbuild/win32-arm64@0.25.8':
266
-
resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==}
267
engines: {node: '>=18'}
268
cpu: [arm64]
269
os: [win32]
270
271
-
'@esbuild/win32-ia32@0.25.8':
272
-
resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==}
273
engines: {node: '>=18'}
274
cpu: [ia32]
275
os: [win32]
276
277
-
'@esbuild/win32-x64@0.25.8':
278
-
resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==}
279
engines: {node: '>=18'}
280
cpu: [x64]
281
os: [win32]
282
283
-
'@jridgewell/gen-mapping@0.3.12':
284
-
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
285
286
'@jridgewell/resolve-uri@3.1.2':
287
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
288
engines: {node: '>=6.0.0'}
289
290
-
'@jridgewell/sourcemap-codec@1.5.4':
291
-
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
292
293
-
'@jridgewell/trace-mapping@0.3.29':
294
-
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
295
296
-
'@rollup/rollup-android-arm-eabi@4.46.1':
297
-
resolution: {integrity: sha512-oENme6QxtLCqjChRUUo3S6X8hjCXnWmJWnedD7VbGML5GUtaOtAyx+fEEXnBXVf0CBZApMQU0Idwi0FmyxzQhw==}
298
cpu: [arm]
299
os: [android]
300
301
-
'@rollup/rollup-android-arm64@4.46.1':
302
-
resolution: {integrity: sha512-OikvNT3qYTl9+4qQ9Bpn6+XHM+ogtFadRLuT2EXiFQMiNkXFLQfNVppi5o28wvYdHL2s3fM0D/MZJ8UkNFZWsw==}
303
cpu: [arm64]
304
os: [android]
305
306
-
'@rollup/rollup-darwin-arm64@4.46.1':
307
-
resolution: {integrity: sha512-EFYNNGij2WllnzljQDQnlFTXzSJw87cpAs4TVBAWLdkvic5Uh5tISrIL6NRcxoh/b2EFBG/TK8hgRrGx94zD4A==}
308
cpu: [arm64]
309
os: [darwin]
310
311
-
'@rollup/rollup-darwin-x64@4.46.1':
312
-
resolution: {integrity: sha512-ZaNH06O1KeTug9WI2+GRBE5Ujt9kZw4a1+OIwnBHal92I8PxSsl5KpsrPvthRynkhMck4XPdvY0z26Cym/b7oA==}
313
cpu: [x64]
314
os: [darwin]
315
316
-
'@rollup/rollup-freebsd-arm64@4.46.1':
317
-
resolution: {integrity: sha512-n4SLVebZP8uUlJ2r04+g2U/xFeiQlw09Me5UFqny8HGbARl503LNH5CqFTb5U5jNxTouhRjai6qPT0CR5c/Iig==}
318
cpu: [arm64]
319
os: [freebsd]
320
321
-
'@rollup/rollup-freebsd-x64@4.46.1':
322
-
resolution: {integrity: sha512-8vu9c02F16heTqpvo3yeiu7Vi1REDEC/yES/dIfq3tSXe6mLndiwvYr3AAvd1tMNUqE9yeGYa5w7PRbI5QUV+w==}
323
cpu: [x64]
324
os: [freebsd]
325
326
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.1':
327
-
resolution: {integrity: sha512-K4ncpWl7sQuyp6rWiGUvb6Q18ba8mzM0rjWJ5JgYKlIXAau1db7hZnR0ldJvqKWWJDxqzSLwGUhA4jp+KqgDtQ==}
328
cpu: [arm]
329
os: [linux]
330
331
-
'@rollup/rollup-linux-arm-musleabihf@4.46.1':
332
-
resolution: {integrity: sha512-YykPnXsjUjmXE6j6k2QBBGAn1YsJUix7pYaPLK3RVE0bQL2jfdbfykPxfF8AgBlqtYbfEnYHmLXNa6QETjdOjQ==}
333
cpu: [arm]
334
os: [linux]
335
336
-
'@rollup/rollup-linux-arm64-gnu@4.46.1':
337
-
resolution: {integrity: sha512-kKvqBGbZ8i9pCGW3a1FH3HNIVg49dXXTsChGFsHGXQaVJPLA4f/O+XmTxfklhccxdF5FefUn2hvkoGJH0ScWOA==}
338
cpu: [arm64]
339
os: [linux]
340
341
-
'@rollup/rollup-linux-arm64-musl@4.46.1':
342
-
resolution: {integrity: sha512-zzX5nTw1N1plmqC9RGC9vZHFuiM7ZP7oSWQGqpbmfjK7p947D518cVK1/MQudsBdcD84t6k70WNczJOct6+hdg==}
343
cpu: [arm64]
344
os: [linux]
345
346
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.1':
347
-
resolution: {integrity: sha512-O8CwgSBo6ewPpktFfSDgB6SJN9XDcPSvuwxfejiddbIC/hn9Tg6Ai0f0eYDf3XvB/+PIWzOQL+7+TZoB8p9Yuw==}
348
cpu: [loong64]
349
os: [linux]
350
351
-
'@rollup/rollup-linux-ppc64-gnu@4.46.1':
352
-
resolution: {integrity: sha512-JnCfFVEKeq6G3h3z8e60kAp8Rd7QVnWCtPm7cxx+5OtP80g/3nmPtfdCXbVl063e3KsRnGSKDHUQMydmzc/wBA==}
353
cpu: [ppc64]
354
os: [linux]
355
356
-
'@rollup/rollup-linux-riscv64-gnu@4.46.1':
357
-
resolution: {integrity: sha512-dVxuDqS237eQXkbYzQQfdf/njgeNw6LZuVyEdUaWwRpKHhsLI+y4H/NJV8xJGU19vnOJCVwaBFgr936FHOnJsQ==}
358
cpu: [riscv64]
359
os: [linux]
360
361
-
'@rollup/rollup-linux-riscv64-musl@4.46.1':
362
-
resolution: {integrity: sha512-CvvgNl2hrZrTR9jXK1ye0Go0HQRT6ohQdDfWR47/KFKiLd5oN5T14jRdUVGF4tnsN8y9oSfMOqH6RuHh+ck8+w==}
363
cpu: [riscv64]
364
os: [linux]
365
366
-
'@rollup/rollup-linux-s390x-gnu@4.46.1':
367
-
resolution: {integrity: sha512-x7ANt2VOg2565oGHJ6rIuuAon+A8sfe1IeUx25IKqi49OjSr/K3awoNqr9gCwGEJo9OuXlOn+H2p1VJKx1psxA==}
368
cpu: [s390x]
369
os: [linux]
370
371
-
'@rollup/rollup-linux-x64-gnu@4.46.1':
372
-
resolution: {integrity: sha512-9OADZYryz/7E8/qt0vnaHQgmia2Y0wrjSSn1V/uL+zw/i7NUhxbX4cHXdEQ7dnJgzYDS81d8+tf6nbIdRFZQoQ==}
373
cpu: [x64]
374
os: [linux]
375
376
-
'@rollup/rollup-linux-x64-musl@4.46.1':
377
-
resolution: {integrity: sha512-NuvSCbXEKY+NGWHyivzbjSVJi68Xfq1VnIvGmsuXs6TCtveeoDRKutI5vf2ntmNnVq64Q4zInet0UDQ+yMB6tA==}
378
cpu: [x64]
379
os: [linux]
380
381
-
'@rollup/rollup-win32-arm64-msvc@4.46.1':
382
-
resolution: {integrity: sha512-mWz+6FSRb82xuUMMV1X3NGiaPFqbLN9aIueHleTZCc46cJvwTlvIh7reQLk4p97dv0nddyewBhwzryBHH7wtPw==}
383
cpu: [arm64]
384
os: [win32]
385
386
-
'@rollup/rollup-win32-ia32-msvc@4.46.1':
387
-
resolution: {integrity: sha512-7Thzy9TMXDw9AU4f4vsLNBxh7/VOKuXi73VH3d/kHGr0tZ3x/ewgL9uC7ojUKmH1/zvmZe2tLapYcZllk3SO8Q==}
388
cpu: [ia32]
389
os: [win32]
390
391
-
'@rollup/rollup-win32-x64-msvc@4.46.1':
392
-
resolution: {integrity: sha512-7GVB4luhFmGUNXXJhH2jJwZCFB3pIOixv2E3s17GQHBFUOQaISlt7aGcQgqvCaDSxTZJUzlK/QJ1FN8S94MrzQ==}
393
cpu: [x64]
394
os: [win32]
395
396
-
'@tauri-apps/api@2.7.0':
397
-
resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==}
398
399
-
'@tauri-apps/cli-darwin-arm64@2.7.1':
400
-
resolution: {integrity: sha512-j2NXQN6+08G03xYiyKDKqbCV2Txt+hUKg0a8hYr92AmoCU8fgCjHyva/p16lGFGUG3P2Yu0xiNe1hXL9ZuRMzA==}
401
engines: {node: '>= 10'}
402
cpu: [arm64]
403
os: [darwin]
404
405
-
'@tauri-apps/cli-darwin-x64@2.7.1':
406
-
resolution: {integrity: sha512-CdYAefeM35zKsc91qIyKzbaO7FhzTyWKsE8hj7tEJ1INYpoh1NeNNyL/NSEA3Nebi5ilugioJ5tRK8ZXG8y3gw==}
407
engines: {node: '>= 10'}
408
cpu: [x64]
409
os: [darwin]
410
411
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.7.1':
412
-
resolution: {integrity: sha512-dnvyJrTA1UJxJjQ8q1N/gWomjP8Twij1BUQu2fdcT3OPpqlrbOk5R1yT0oD/721xoKNjroB5BXCsmmlykllxNg==}
413
engines: {node: '>= 10'}
414
cpu: [arm]
415
os: [linux]
416
417
-
'@tauri-apps/cli-linux-arm64-gnu@2.7.1':
418
-
resolution: {integrity: sha512-FtBW6LJPNRTws3qyUc294AqCWU91l/H0SsFKq6q4Q45MSS4x6wxLxou8zB53tLDGEPx3JSoPLcDaSfPlSbyujQ==}
419
engines: {node: '>= 10'}
420
cpu: [arm64]
421
os: [linux]
422
423
-
'@tauri-apps/cli-linux-arm64-musl@2.7.1':
424
-
resolution: {integrity: sha512-/HXY0t4FHkpFzjeYS5c16mlA6z0kzn5uKLWptTLTdFSnYpr8FCnOP4Sdkvm2TDQPF2ERxXtNCd+WR/jQugbGnA==}
425
engines: {node: '>= 10'}
426
cpu: [arm64]
427
os: [linux]
428
429
-
'@tauri-apps/cli-linux-riscv64-gnu@2.7.1':
430
-
resolution: {integrity: sha512-GeW5lVI2GhhnaYckiDzstG2j2Jwlud5d2XefRGwlOK+C/bVGLT1le8MNPYK8wgRlpeK8fG1WnJJYD6Ke7YQ8bg==}
431
engines: {node: '>= 10'}
432
cpu: [riscv64]
433
os: [linux]
434
435
-
'@tauri-apps/cli-linux-x64-gnu@2.7.1':
436
-
resolution: {integrity: sha512-DprxKQkPxIPYwUgg+cscpv2lcIUhn2nxEPlk0UeaiV9vATxCXyytxr1gLcj3xgjGyNPlM0MlJyYaPy1JmRg1cA==}
437
engines: {node: '>= 10'}
438
cpu: [x64]
439
os: [linux]
440
441
-
'@tauri-apps/cli-linux-x64-musl@2.7.1':
442
-
resolution: {integrity: sha512-KLlq3kOK7OUyDR757c0zQjPULpGZpLhNB0lZmZpHXvoOUcqZoCXJHh4dT/mryWZJp5ilrem5l8o9ngrDo0X1AA==}
443
engines: {node: '>= 10'}
444
cpu: [x64]
445
os: [linux]
446
447
-
'@tauri-apps/cli-win32-arm64-msvc@2.7.1':
448
-
resolution: {integrity: sha512-dH7KUjKkSypCeWPiainHyXoES3obS+JIZVoSwSZfKq2gWgs48FY3oT0hQNYrWveE+VR4VoR3b/F3CPGbgFvksA==}
449
engines: {node: '>= 10'}
450
cpu: [arm64]
451
os: [win32]
452
453
-
'@tauri-apps/cli-win32-ia32-msvc@2.7.1':
454
-
resolution: {integrity: sha512-1oeibfyWQPVcijOrTg709qhbXArjX3x1MPjrmA5anlygwrbByxLBcLXvotcOeULFcnH2FYUMMLLant8kgvwE5A==}
455
engines: {node: '>= 10'}
456
cpu: [ia32]
457
os: [win32]
458
459
-
'@tauri-apps/cli-win32-x64-msvc@2.7.1':
460
-
resolution: {integrity: sha512-D7Q9kDObutuirCNLxYQ7KAg2Xxg99AjcdYz/KuMw5HvyEPbkC9Q7JL0vOrQOrHEHxIQ2lYzFOZvKKoC2yyqXcg==}
461
engines: {node: '>= 10'}
462
cpu: [x64]
463
os: [win32]
464
465
-
'@tauri-apps/cli@2.7.1':
466
-
resolution: {integrity: sha512-RcGWR4jOUEl92w3uvI0h61Llkfj9lwGD1iwvDRD2isMrDhOzjeeeVn9aGzeW1jubQ/kAbMYfydcA4BA0Cy733Q==}
467
engines: {node: '>= 10'}
468
hasBin: true
469
470
-
'@tauri-apps/plugin-opener@2.4.0':
471
-
resolution: {integrity: sha512-43VyN8JJtvKWJY72WI/KNZszTpDpzHULFxQs0CJBIYUdCRowQ6Q1feWTDb979N7nldqSuDOaBupZ6wz2nvuWwQ==}
472
473
'@types/animejs@3.1.13':
474
resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==}
···
482
'@types/babel__template@7.4.4':
483
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
484
485
-
'@types/babel__traverse@7.20.7':
486
-
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
487
488
'@types/estree@1.0.8':
489
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
490
491
-
animejs@4.1.2:
492
-
resolution: {integrity: sha512-QojQzHzN4ZCOGk4Seir5CWPHGKFPpMAsen3KEj/BHsIKDceH0xKd3FBWflyKiNefKG2fn3+ofpY9jD/UXhpY6A==}
493
494
-
babel-plugin-jsx-dom-expressions@0.39.8:
495
-
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==}
496
peerDependencies:
497
'@babel/core': ^7.20.12
498
499
-
babel-preset-solid@1.9.6:
500
-
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==}
501
peerDependencies:
502
'@babel/core': ^7.0.0
503
504
-
browserslist@4.25.1:
505
-
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
506
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
507
hasBin: true
508
509
-
caniuse-lite@1.0.30001731:
510
-
resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==}
511
512
convert-source-map@2.0.0:
513
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
···
515
csstype@3.1.3:
516
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
517
518
-
debug@4.4.1:
519
-
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
520
engines: {node: '>=6.0'}
521
peerDependencies:
522
supports-color: '*'
···
524
supports-color:
525
optional: true
526
527
-
electron-to-chromium@1.5.192:
528
-
resolution: {integrity: sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==}
529
530
entities@6.0.1:
531
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
532
engines: {node: '>=0.12'}
533
534
-
esbuild@0.25.8:
535
-
resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==}
536
engines: {node: '>=18'}
537
hasBin: true
538
···
540
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
541
engines: {node: '>=6'}
542
543
-
fdir@6.4.6:
544
-
resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
545
peerDependencies:
546
picomatch: ^3 || ^4
547
peerDependenciesMeta:
···
592
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
593
hasBin: true
594
595
-
node-releases@2.0.19:
596
-
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
597
598
parse5@7.3.0:
599
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
609
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
610
engines: {node: ^10 || ^12 || >=14}
611
612
-
rollup@4.46.1:
613
-
resolution: {integrity: sha512-33xGNBsDJAkzt0PvninskHlWnTIPgDtTwhg0U38CUoNP/7H6wI2Cz6dUeoNPbjdTdsYTGuiFFASuUOWovH0SyQ==}
614
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
615
hasBin: true
616
···
618
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
619
hasBin: true
620
621
-
seroval-plugins@1.3.2:
622
-
resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==}
623
engines: {node: '>=10'}
624
peerDependencies:
625
seroval: ^1.0
···
628
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
629
engines: {node: '>=10'}
630
631
-
solid-js@1.9.7:
632
-
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==}
633
634
solid-refresh@0.6.3:
635
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
640
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
641
engines: {node: '>=0.10.0'}
642
643
-
tinyglobby@0.2.14:
644
-
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
645
engines: {node: '>=12.0.0'}
646
647
typescript@5.6.3:
···
649
engines: {node: '>=14.17'}
650
hasBin: true
651
652
-
update-browserslist-db@1.1.3:
653
-
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
654
hasBin: true
655
peerDependencies:
656
browserslist: '>= 4.21.0'
657
658
-
validate-html-nesting@1.2.3:
659
-
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
660
-
661
-
vite-plugin-solid@2.11.8:
662
-
resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==}
663
peerDependencies:
664
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
665
solid-js: ^1.7.2
···
668
'@testing-library/jest-dom':
669
optional: true
670
671
-
vite@6.3.5:
672
-
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
673
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
674
hasBin: true
675
peerDependencies:
···
721
722
snapshots:
723
724
-
'@ampproject/remapping@2.3.0':
725
-
dependencies:
726
-
'@jridgewell/gen-mapping': 0.3.12
727
-
'@jridgewell/trace-mapping': 0.3.29
728
-
729
'@babel/code-frame@7.27.1':
730
dependencies:
731
-
'@babel/helper-validator-identifier': 7.27.1
732
js-tokens: 4.0.0
733
picocolors: 1.1.1
734
735
-
'@babel/compat-data@7.28.0': {}
736
737
-
'@babel/core@7.28.0':
738
dependencies:
739
-
'@ampproject/remapping': 2.3.0
740
'@babel/code-frame': 7.27.1
741
-
'@babel/generator': 7.28.0
742
'@babel/helper-compilation-targets': 7.27.2
743
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0)
744
-
'@babel/helpers': 7.28.2
745
-
'@babel/parser': 7.28.0
746
'@babel/template': 7.27.2
747
-
'@babel/traverse': 7.28.0
748
-
'@babel/types': 7.28.2
749
convert-source-map: 2.0.0
750
-
debug: 4.4.1
751
gensync: 1.0.0-beta.2
752
json5: 2.2.3
753
semver: 6.3.1
754
transitivePeerDependencies:
755
- supports-color
756
757
-
'@babel/generator@7.28.0':
758
dependencies:
759
-
'@babel/parser': 7.28.0
760
-
'@babel/types': 7.28.2
761
-
'@jridgewell/gen-mapping': 0.3.12
762
-
'@jridgewell/trace-mapping': 0.3.29
763
jsesc: 3.1.0
764
765
'@babel/helper-compilation-targets@7.27.2':
766
dependencies:
767
-
'@babel/compat-data': 7.28.0
768
'@babel/helper-validator-option': 7.27.1
769
-
browserslist: 4.25.1
770
lru-cache: 5.1.1
771
semver: 6.3.1
772
···
774
775
'@babel/helper-module-imports@7.18.6':
776
dependencies:
777
-
'@babel/types': 7.28.2
778
779
'@babel/helper-module-imports@7.27.1':
780
dependencies:
781
-
'@babel/traverse': 7.28.0
782
-
'@babel/types': 7.28.2
783
transitivePeerDependencies:
784
- supports-color
785
786
-
'@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
787
dependencies:
788
-
'@babel/core': 7.28.0
789
'@babel/helper-module-imports': 7.27.1
790
-
'@babel/helper-validator-identifier': 7.27.1
791
-
'@babel/traverse': 7.28.0
792
transitivePeerDependencies:
793
- supports-color
794
···
796
797
'@babel/helper-string-parser@7.27.1': {}
798
799
-
'@babel/helper-validator-identifier@7.27.1': {}
800
801
'@babel/helper-validator-option@7.27.1': {}
802
803
-
'@babel/helpers@7.28.2':
804
dependencies:
805
'@babel/template': 7.27.2
806
-
'@babel/types': 7.28.2
807
808
-
'@babel/parser@7.28.0':
809
dependencies:
810
-
'@babel/types': 7.28.2
811
812
-
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
813
dependencies:
814
-
'@babel/core': 7.28.0
815
'@babel/helper-plugin-utils': 7.27.1
816
817
'@babel/template@7.27.2':
818
dependencies:
819
'@babel/code-frame': 7.27.1
820
-
'@babel/parser': 7.28.0
821
-
'@babel/types': 7.28.2
822
823
-
'@babel/traverse@7.28.0':
824
dependencies:
825
'@babel/code-frame': 7.27.1
826
-
'@babel/generator': 7.28.0
827
'@babel/helper-globals': 7.28.0
828
-
'@babel/parser': 7.28.0
829
'@babel/template': 7.27.2
830
-
'@babel/types': 7.28.2
831
-
debug: 4.4.1
832
transitivePeerDependencies:
833
- supports-color
834
835
-
'@babel/types@7.28.2':
836
dependencies:
837
'@babel/helper-string-parser': 7.27.1
838
-
'@babel/helper-validator-identifier': 7.27.1
839
840
-
'@esbuild/aix-ppc64@0.25.8':
841
optional: true
842
843
-
'@esbuild/android-arm64@0.25.8':
844
optional: true
845
846
-
'@esbuild/android-arm@0.25.8':
847
optional: true
848
849
-
'@esbuild/android-x64@0.25.8':
850
optional: true
851
852
-
'@esbuild/darwin-arm64@0.25.8':
853
optional: true
854
855
-
'@esbuild/darwin-x64@0.25.8':
856
optional: true
857
858
-
'@esbuild/freebsd-arm64@0.25.8':
859
optional: true
860
861
-
'@esbuild/freebsd-x64@0.25.8':
862
optional: true
863
864
-
'@esbuild/linux-arm64@0.25.8':
865
optional: true
866
867
-
'@esbuild/linux-arm@0.25.8':
868
optional: true
869
870
-
'@esbuild/linux-ia32@0.25.8':
871
optional: true
872
873
-
'@esbuild/linux-loong64@0.25.8':
874
optional: true
875
876
-
'@esbuild/linux-mips64el@0.25.8':
877
optional: true
878
879
-
'@esbuild/linux-ppc64@0.25.8':
880
optional: true
881
882
-
'@esbuild/linux-riscv64@0.25.8':
883
optional: true
884
885
-
'@esbuild/linux-s390x@0.25.8':
886
optional: true
887
888
-
'@esbuild/linux-x64@0.25.8':
889
optional: true
890
891
-
'@esbuild/netbsd-arm64@0.25.8':
892
optional: true
893
894
-
'@esbuild/netbsd-x64@0.25.8':
895
optional: true
896
897
-
'@esbuild/openbsd-arm64@0.25.8':
898
optional: true
899
900
-
'@esbuild/openbsd-x64@0.25.8':
901
optional: true
902
903
-
'@esbuild/openharmony-arm64@0.25.8':
904
optional: true
905
906
-
'@esbuild/sunos-x64@0.25.8':
907
optional: true
908
909
-
'@esbuild/win32-arm64@0.25.8':
910
optional: true
911
912
-
'@esbuild/win32-ia32@0.25.8':
913
optional: true
914
915
-
'@esbuild/win32-x64@0.25.8':
916
optional: true
917
918
-
'@jridgewell/gen-mapping@0.3.12':
919
dependencies:
920
-
'@jridgewell/sourcemap-codec': 1.5.4
921
-
'@jridgewell/trace-mapping': 0.3.29
922
923
'@jridgewell/resolve-uri@3.1.2': {}
924
925
-
'@jridgewell/sourcemap-codec@1.5.4': {}
926
927
-
'@jridgewell/trace-mapping@0.3.29':
928
dependencies:
929
'@jridgewell/resolve-uri': 3.1.2
930
-
'@jridgewell/sourcemap-codec': 1.5.4
931
932
-
'@rollup/rollup-android-arm-eabi@4.46.1':
933
optional: true
934
935
-
'@rollup/rollup-android-arm64@4.46.1':
936
optional: true
937
938
-
'@rollup/rollup-darwin-arm64@4.46.1':
939
optional: true
940
941
-
'@rollup/rollup-darwin-x64@4.46.1':
942
optional: true
943
944
-
'@rollup/rollup-freebsd-arm64@4.46.1':
945
optional: true
946
947
-
'@rollup/rollup-freebsd-x64@4.46.1':
948
optional: true
949
950
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.1':
951
optional: true
952
953
-
'@rollup/rollup-linux-arm-musleabihf@4.46.1':
954
optional: true
955
956
-
'@rollup/rollup-linux-arm64-gnu@4.46.1':
957
optional: true
958
959
-
'@rollup/rollup-linux-arm64-musl@4.46.1':
960
optional: true
961
962
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.1':
963
optional: true
964
965
-
'@rollup/rollup-linux-ppc64-gnu@4.46.1':
966
optional: true
967
968
-
'@rollup/rollup-linux-riscv64-gnu@4.46.1':
969
optional: true
970
971
-
'@rollup/rollup-linux-riscv64-musl@4.46.1':
972
optional: true
973
974
-
'@rollup/rollup-linux-s390x-gnu@4.46.1':
975
optional: true
976
977
-
'@rollup/rollup-linux-x64-gnu@4.46.1':
978
optional: true
979
980
-
'@rollup/rollup-linux-x64-musl@4.46.1':
981
optional: true
982
983
-
'@rollup/rollup-win32-arm64-msvc@4.46.1':
984
optional: true
985
986
-
'@rollup/rollup-win32-ia32-msvc@4.46.1':
987
optional: true
988
989
-
'@rollup/rollup-win32-x64-msvc@4.46.1':
990
optional: true
991
992
-
'@tauri-apps/api@2.7.0': {}
993
994
-
'@tauri-apps/cli-darwin-arm64@2.7.1':
995
optional: true
996
997
-
'@tauri-apps/cli-darwin-x64@2.7.1':
998
optional: true
999
1000
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.7.1':
1001
optional: true
1002
1003
-
'@tauri-apps/cli-linux-arm64-gnu@2.7.1':
1004
optional: true
1005
1006
-
'@tauri-apps/cli-linux-arm64-musl@2.7.1':
1007
optional: true
1008
1009
-
'@tauri-apps/cli-linux-riscv64-gnu@2.7.1':
1010
optional: true
1011
1012
-
'@tauri-apps/cli-linux-x64-gnu@2.7.1':
1013
optional: true
1014
1015
-
'@tauri-apps/cli-linux-x64-musl@2.7.1':
1016
optional: true
1017
1018
-
'@tauri-apps/cli-win32-arm64-msvc@2.7.1':
1019
optional: true
1020
1021
-
'@tauri-apps/cli-win32-ia32-msvc@2.7.1':
1022
optional: true
1023
1024
-
'@tauri-apps/cli-win32-x64-msvc@2.7.1':
1025
optional: true
1026
1027
-
'@tauri-apps/cli@2.7.1':
1028
optionalDependencies:
1029
-
'@tauri-apps/cli-darwin-arm64': 2.7.1
1030
-
'@tauri-apps/cli-darwin-x64': 2.7.1
1031
-
'@tauri-apps/cli-linux-arm-gnueabihf': 2.7.1
1032
-
'@tauri-apps/cli-linux-arm64-gnu': 2.7.1
1033
-
'@tauri-apps/cli-linux-arm64-musl': 2.7.1
1034
-
'@tauri-apps/cli-linux-riscv64-gnu': 2.7.1
1035
-
'@tauri-apps/cli-linux-x64-gnu': 2.7.1
1036
-
'@tauri-apps/cli-linux-x64-musl': 2.7.1
1037
-
'@tauri-apps/cli-win32-arm64-msvc': 2.7.1
1038
-
'@tauri-apps/cli-win32-ia32-msvc': 2.7.1
1039
-
'@tauri-apps/cli-win32-x64-msvc': 2.7.1
1040
1041
-
'@tauri-apps/plugin-opener@2.4.0':
1042
dependencies:
1043
-
'@tauri-apps/api': 2.7.0
1044
1045
'@types/animejs@3.1.13': {}
1046
1047
'@types/babel__core@7.20.5':
1048
dependencies:
1049
-
'@babel/parser': 7.28.0
1050
-
'@babel/types': 7.28.2
1051
'@types/babel__generator': 7.27.0
1052
'@types/babel__template': 7.4.4
1053
-
'@types/babel__traverse': 7.20.7
1054
1055
'@types/babel__generator@7.27.0':
1056
dependencies:
1057
-
'@babel/types': 7.28.2
1058
1059
'@types/babel__template@7.4.4':
1060
dependencies:
1061
-
'@babel/parser': 7.28.0
1062
-
'@babel/types': 7.28.2
1063
1064
-
'@types/babel__traverse@7.20.7':
1065
dependencies:
1066
-
'@babel/types': 7.28.2
1067
1068
'@types/estree@1.0.8': {}
1069
1070
-
animejs@4.1.2: {}
1071
1072
-
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0):
1073
dependencies:
1074
-
'@babel/core': 7.28.0
1075
'@babel/helper-module-imports': 7.18.6
1076
-
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
1077
-
'@babel/types': 7.28.2
1078
html-entities: 2.3.3
1079
parse5: 7.3.0
1080
-
validate-html-nesting: 1.2.3
1081
1082
-
babel-preset-solid@1.9.6(@babel/core@7.28.0):
1083
dependencies:
1084
-
'@babel/core': 7.28.0
1085
-
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0)
1086
1087
-
browserslist@4.25.1:
1088
dependencies:
1089
-
caniuse-lite: 1.0.30001731
1090
-
electron-to-chromium: 1.5.192
1091
-
node-releases: 2.0.19
1092
-
update-browserslist-db: 1.1.3(browserslist@4.25.1)
1093
1094
-
caniuse-lite@1.0.30001731: {}
1095
1096
convert-source-map@2.0.0: {}
1097
1098
csstype@3.1.3: {}
1099
1100
-
debug@4.4.1:
1101
dependencies:
1102
ms: 2.1.3
1103
1104
-
electron-to-chromium@1.5.192: {}
1105
1106
entities@6.0.1: {}
1107
1108
-
esbuild@0.25.8:
1109
optionalDependencies:
1110
-
'@esbuild/aix-ppc64': 0.25.8
1111
-
'@esbuild/android-arm': 0.25.8
1112
-
'@esbuild/android-arm64': 0.25.8
1113
-
'@esbuild/android-x64': 0.25.8
1114
-
'@esbuild/darwin-arm64': 0.25.8
1115
-
'@esbuild/darwin-x64': 0.25.8
1116
-
'@esbuild/freebsd-arm64': 0.25.8
1117
-
'@esbuild/freebsd-x64': 0.25.8
1118
-
'@esbuild/linux-arm': 0.25.8
1119
-
'@esbuild/linux-arm64': 0.25.8
1120
-
'@esbuild/linux-ia32': 0.25.8
1121
-
'@esbuild/linux-loong64': 0.25.8
1122
-
'@esbuild/linux-mips64el': 0.25.8
1123
-
'@esbuild/linux-ppc64': 0.25.8
1124
-
'@esbuild/linux-riscv64': 0.25.8
1125
-
'@esbuild/linux-s390x': 0.25.8
1126
-
'@esbuild/linux-x64': 0.25.8
1127
-
'@esbuild/netbsd-arm64': 0.25.8
1128
-
'@esbuild/netbsd-x64': 0.25.8
1129
-
'@esbuild/openbsd-arm64': 0.25.8
1130
-
'@esbuild/openbsd-x64': 0.25.8
1131
-
'@esbuild/openharmony-arm64': 0.25.8
1132
-
'@esbuild/sunos-x64': 0.25.8
1133
-
'@esbuild/win32-arm64': 0.25.8
1134
-
'@esbuild/win32-ia32': 0.25.8
1135
-
'@esbuild/win32-x64': 0.25.8
1136
1137
escalade@3.2.0: {}
1138
1139
-
fdir@6.4.6(picomatch@4.0.3):
1140
optionalDependencies:
1141
picomatch: 4.0.3
1142
···
1167
1168
nanoid@3.3.11: {}
1169
1170
-
node-releases@2.0.19: {}
1171
1172
parse5@7.3.0:
1173
dependencies:
···
1183
picocolors: 1.1.1
1184
source-map-js: 1.2.1
1185
1186
-
rollup@4.46.1:
1187
dependencies:
1188
'@types/estree': 1.0.8
1189
optionalDependencies:
1190
-
'@rollup/rollup-android-arm-eabi': 4.46.1
1191
-
'@rollup/rollup-android-arm64': 4.46.1
1192
-
'@rollup/rollup-darwin-arm64': 4.46.1
1193
-
'@rollup/rollup-darwin-x64': 4.46.1
1194
-
'@rollup/rollup-freebsd-arm64': 4.46.1
1195
-
'@rollup/rollup-freebsd-x64': 4.46.1
1196
-
'@rollup/rollup-linux-arm-gnueabihf': 4.46.1
1197
-
'@rollup/rollup-linux-arm-musleabihf': 4.46.1
1198
-
'@rollup/rollup-linux-arm64-gnu': 4.46.1
1199
-
'@rollup/rollup-linux-arm64-musl': 4.46.1
1200
-
'@rollup/rollup-linux-loongarch64-gnu': 4.46.1
1201
-
'@rollup/rollup-linux-ppc64-gnu': 4.46.1
1202
-
'@rollup/rollup-linux-riscv64-gnu': 4.46.1
1203
-
'@rollup/rollup-linux-riscv64-musl': 4.46.1
1204
-
'@rollup/rollup-linux-s390x-gnu': 4.46.1
1205
-
'@rollup/rollup-linux-x64-gnu': 4.46.1
1206
-
'@rollup/rollup-linux-x64-musl': 4.46.1
1207
-
'@rollup/rollup-win32-arm64-msvc': 4.46.1
1208
-
'@rollup/rollup-win32-ia32-msvc': 4.46.1
1209
-
'@rollup/rollup-win32-x64-msvc': 4.46.1
1210
fsevents: 2.3.3
1211
1212
semver@6.3.1: {}
1213
1214
-
seroval-plugins@1.3.2(seroval@1.3.2):
1215
dependencies:
1216
seroval: 1.3.2
1217
1218
seroval@1.3.2: {}
1219
1220
-
solid-js@1.9.7:
1221
dependencies:
1222
csstype: 3.1.3
1223
seroval: 1.3.2
1224
-
seroval-plugins: 1.3.2(seroval@1.3.2)
1225
1226
-
solid-refresh@0.6.3(solid-js@1.9.7):
1227
dependencies:
1228
-
'@babel/generator': 7.28.0
1229
'@babel/helper-module-imports': 7.27.1
1230
-
'@babel/types': 7.28.2
1231
-
solid-js: 1.9.7
1232
transitivePeerDependencies:
1233
- supports-color
1234
1235
source-map-js@1.2.1: {}
1236
1237
-
tinyglobby@0.2.14:
1238
dependencies:
1239
-
fdir: 6.4.6(picomatch@4.0.3)
1240
picomatch: 4.0.3
1241
1242
typescript@5.6.3: {}
1243
1244
-
update-browserslist-db@1.1.3(browserslist@4.25.1):
1245
dependencies:
1246
-
browserslist: 4.25.1
1247
escalade: 3.2.0
1248
picocolors: 1.1.1
1249
1250
-
validate-html-nesting@1.2.3: {}
1251
-
1252
-
vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@6.3.5):
1253
dependencies:
1254
-
'@babel/core': 7.28.0
1255
'@types/babel__core': 7.20.5
1256
-
babel-preset-solid: 1.9.6(@babel/core@7.28.0)
1257
merge-anything: 5.1.7
1258
-
solid-js: 1.9.7
1259
-
solid-refresh: 0.6.3(solid-js@1.9.7)
1260
-
vite: 6.3.5
1261
-
vitefu: 1.1.1(vite@6.3.5)
1262
transitivePeerDependencies:
1263
- supports-color
1264
1265
-
vite@6.3.5:
1266
dependencies:
1267
-
esbuild: 0.25.8
1268
-
fdir: 6.4.6(picomatch@4.0.3)
1269
picomatch: 4.0.3
1270
postcss: 8.5.6
1271
-
rollup: 4.46.1
1272
-
tinyglobby: 0.2.14
1273
optionalDependencies:
1274
fsevents: 2.3.3
1275
1276
-
vitefu@1.1.1(vite@6.3.5):
1277
optionalDependencies:
1278
-
vite: 6.3.5
1279
1280
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-clipboard-manager':
15
+
specifier: ~2
16
+
version: 2.3.2
17
+
'@tauri-apps/plugin-dialog':
18
+
specifier: ~2.4.2
19
+
version: 2.4.2
20
'@tauri-apps/plugin-opener':
21
+
specifier: ^2.5.2
22
+
version: 2.5.2
23
+
'@tauri-apps/plugin-os':
24
+
specifier: ~2
25
+
version: 2.3.2
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.6.3
41
version: 5.6.3
42
vite:
43
+
specifier: ^6.4.1
44
+
version: 6.4.1
45
vite-plugin-solid:
46
+
specifier: ^2.11.10
47
+
version: 2.11.10(solid-js@1.9.10)(vite@6.4.1)
48
49
packages:
50
51
'@babel/code-frame@7.27.1':
52
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
53
engines: {node: '>=6.9.0'}
54
55
+
'@babel/compat-data@7.28.5':
56
+
resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
57
engines: {node: '>=6.9.0'}
58
59
+
'@babel/core@7.28.5':
60
+
resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
61
engines: {node: '>=6.9.0'}
62
63
+
'@babel/generator@7.28.5':
64
+
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
65
engines: {node: '>=6.9.0'}
66
67
'@babel/helper-compilation-targets@7.27.2':
···
80
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
81
engines: {node: '>=6.9.0'}
82
83
+
'@babel/helper-module-transforms@7.28.3':
84
+
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
85
engines: {node: '>=6.9.0'}
86
peerDependencies:
87
'@babel/core': ^7.0.0
···
94
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
95
engines: {node: '>=6.9.0'}
96
97
+
'@babel/helper-validator-identifier@7.28.5':
98
+
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
99
engines: {node: '>=6.9.0'}
100
101
'@babel/helper-validator-option@7.27.1':
102
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
103
engines: {node: '>=6.9.0'}
104
105
+
'@babel/helpers@7.28.4':
106
+
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
107
engines: {node: '>=6.9.0'}
108
109
+
'@babel/parser@7.28.5':
110
+
resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
111
engines: {node: '>=6.0.0'}
112
hasBin: true
113
···
121
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
122
engines: {node: '>=6.9.0'}
123
124
+
'@babel/traverse@7.28.5':
125
+
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
126
engines: {node: '>=6.9.0'}
127
128
+
'@babel/types@7.28.5':
129
+
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
130
engines: {node: '>=6.9.0'}
131
132
+
'@esbuild/aix-ppc64@0.25.12':
133
+
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
134
engines: {node: '>=18'}
135
cpu: [ppc64]
136
os: [aix]
137
138
+
'@esbuild/android-arm64@0.25.12':
139
+
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
140
engines: {node: '>=18'}
141
cpu: [arm64]
142
os: [android]
143
144
+
'@esbuild/android-arm@0.25.12':
145
+
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
146
engines: {node: '>=18'}
147
cpu: [arm]
148
os: [android]
149
150
+
'@esbuild/android-x64@0.25.12':
151
+
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
152
engines: {node: '>=18'}
153
cpu: [x64]
154
os: [android]
155
156
+
'@esbuild/darwin-arm64@0.25.12':
157
+
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
158
engines: {node: '>=18'}
159
cpu: [arm64]
160
os: [darwin]
161
162
+
'@esbuild/darwin-x64@0.25.12':
163
+
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
164
engines: {node: '>=18'}
165
cpu: [x64]
166
os: [darwin]
167
168
+
'@esbuild/freebsd-arm64@0.25.12':
169
+
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
170
engines: {node: '>=18'}
171
cpu: [arm64]
172
os: [freebsd]
173
174
+
'@esbuild/freebsd-x64@0.25.12':
175
+
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
176
engines: {node: '>=18'}
177
cpu: [x64]
178
os: [freebsd]
179
180
+
'@esbuild/linux-arm64@0.25.12':
181
+
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
182
engines: {node: '>=18'}
183
cpu: [arm64]
184
os: [linux]
185
186
+
'@esbuild/linux-arm@0.25.12':
187
+
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
188
engines: {node: '>=18'}
189
cpu: [arm]
190
os: [linux]
191
192
+
'@esbuild/linux-ia32@0.25.12':
193
+
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
194
engines: {node: '>=18'}
195
cpu: [ia32]
196
os: [linux]
197
198
+
'@esbuild/linux-loong64@0.25.12':
199
+
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
200
engines: {node: '>=18'}
201
cpu: [loong64]
202
os: [linux]
203
204
+
'@esbuild/linux-mips64el@0.25.12':
205
+
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
206
engines: {node: '>=18'}
207
cpu: [mips64el]
208
os: [linux]
209
210
+
'@esbuild/linux-ppc64@0.25.12':
211
+
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
212
engines: {node: '>=18'}
213
cpu: [ppc64]
214
os: [linux]
215
216
+
'@esbuild/linux-riscv64@0.25.12':
217
+
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
218
engines: {node: '>=18'}
219
cpu: [riscv64]
220
os: [linux]
221
222
+
'@esbuild/linux-s390x@0.25.12':
223
+
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
224
engines: {node: '>=18'}
225
cpu: [s390x]
226
os: [linux]
227
228
+
'@esbuild/linux-x64@0.25.12':
229
+
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
230
engines: {node: '>=18'}
231
cpu: [x64]
232
os: [linux]
233
234
+
'@esbuild/netbsd-arm64@0.25.12':
235
+
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
236
engines: {node: '>=18'}
237
cpu: [arm64]
238
os: [netbsd]
239
240
+
'@esbuild/netbsd-x64@0.25.12':
241
+
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
242
engines: {node: '>=18'}
243
cpu: [x64]
244
os: [netbsd]
245
246
+
'@esbuild/openbsd-arm64@0.25.12':
247
+
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
248
engines: {node: '>=18'}
249
cpu: [arm64]
250
os: [openbsd]
251
252
+
'@esbuild/openbsd-x64@0.25.12':
253
+
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
254
engines: {node: '>=18'}
255
cpu: [x64]
256
os: [openbsd]
257
258
+
'@esbuild/openharmony-arm64@0.25.12':
259
+
resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
260
engines: {node: '>=18'}
261
cpu: [arm64]
262
os: [openharmony]
263
264
+
'@esbuild/sunos-x64@0.25.12':
265
+
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
266
engines: {node: '>=18'}
267
cpu: [x64]
268
os: [sunos]
269
270
+
'@esbuild/win32-arm64@0.25.12':
271
+
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
272
engines: {node: '>=18'}
273
cpu: [arm64]
274
os: [win32]
275
276
+
'@esbuild/win32-ia32@0.25.12':
277
+
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
278
engines: {node: '>=18'}
279
cpu: [ia32]
280
os: [win32]
281
282
+
'@esbuild/win32-x64@0.25.12':
283
+
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
284
engines: {node: '>=18'}
285
cpu: [x64]
286
os: [win32]
287
288
+
'@jridgewell/gen-mapping@0.3.13':
289
+
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
290
+
291
+
'@jridgewell/remapping@2.3.5':
292
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
293
294
'@jridgewell/resolve-uri@3.1.2':
295
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
296
engines: {node: '>=6.0.0'}
297
298
+
'@jridgewell/sourcemap-codec@1.5.5':
299
+
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
300
301
+
'@jridgewell/trace-mapping@0.3.31':
302
+
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
303
304
+
'@rollup/rollup-android-arm-eabi@4.53.0':
305
+
resolution: {integrity: sha512-MX3DD/o2W36nlgQb8KA5QtUw/bK5aR9YDzNmX1PRHZAa6LF/MQCWMN477CgBMg8gH1vEiEZsjWRIZeL/7ttUVA==}
306
cpu: [arm]
307
os: [android]
308
309
+
'@rollup/rollup-android-arm64@4.53.0':
310
+
resolution: {integrity: sha512-U4/R8ZvikDYLkl+hyAGP23SRHp3LwYSRy9SvJqsnva7TYLhVMy39RTVCYn1DdRNxXl1CyCQgE/mXKm9jaQT4ig==}
311
cpu: [arm64]
312
os: [android]
313
314
+
'@rollup/rollup-darwin-arm64@4.53.0':
315
+
resolution: {integrity: sha512-nBG2BXRU3ifdK0HdqBKaT5VI6ScoIpABYZ+dWwQkIOYd8Suo4iykgPikjhsTd7NeHgJJ3OqlKYCcNkZtB1iLVQ==}
316
cpu: [arm64]
317
os: [darwin]
318
319
+
'@rollup/rollup-darwin-x64@4.53.0':
320
+
resolution: {integrity: sha512-QuZ5hYStB/vW7b8zQYtdIPpIfNNlUXtGk8zVTkoTMKzMhE2/6tVvcCWqdWqCVhx6eguJJjKjtZ9lAAG/D3yNeA==}
321
cpu: [x64]
322
os: [darwin]
323
324
+
'@rollup/rollup-freebsd-arm64@4.53.0':
325
+
resolution: {integrity: sha512-4yYPm1PJwK/HKI4FzElAPj2EAAFaaLUWzXV3S3edKy71JcEVzBCpgaXyEcDh3blBIjLml+aMkj6HEVGSuzpz+g==}
326
cpu: [arm64]
327
os: [freebsd]
328
329
+
'@rollup/rollup-freebsd-x64@4.53.0':
330
+
resolution: {integrity: sha512-1SvE5euwWV8JqFc4zEAqHbJbf2yJl00EoHVcnlFqLzjrIExYttLxfZeMDIXY6Yx+bskphrQakpChZKzE2JECEg==}
331
cpu: [x64]
332
os: [freebsd]
333
334
+
'@rollup/rollup-linux-arm-gnueabihf@4.53.0':
335
+
resolution: {integrity: sha512-9tS4QyfU5NF5CdUugEi7kWbcGD7pbu6Fm8SunuePH6beeQgtcRZ9K9KVwKHEgfBHeeyrr5OvfV1qWs7PMDOf5w==}
336
cpu: [arm]
337
os: [linux]
338
339
+
'@rollup/rollup-linux-arm-musleabihf@4.53.0':
340
+
resolution: {integrity: sha512-U+0ovxGU9bVJIHfW+oALpHd0ho1YDwhj0yHASDzIj+bOeo+VzEpNtHxcjhFab0YcHUorIMoqyxckC98+81oTJw==}
341
cpu: [arm]
342
os: [linux]
343
344
+
'@rollup/rollup-linux-arm64-gnu@4.53.0':
345
+
resolution: {integrity: sha512-Cp/TQ+wLjRTqTuiVwLz4XPZMo3ROl7EJYMF8HhMp8Uf+9kOOATB3/p4gGZPpuQ4BP7qEXG29ET24u9+F0ERYkQ==}
346
cpu: [arm64]
347
os: [linux]
348
349
+
'@rollup/rollup-linux-arm64-musl@4.53.0':
350
+
resolution: {integrity: sha512-SuGoAwhsSonrSTEZTiQOGC3+XZfq7rc/qAdAOBrYYIp8pu+Wh4EFFXl6+QYYNbNrHL3DnVoWACLwnfwlTa0neA==}
351
cpu: [arm64]
352
os: [linux]
353
354
+
'@rollup/rollup-linux-loong64-gnu@4.53.0':
355
+
resolution: {integrity: sha512-EOKej1x0WoePnJWfg7ZbnUqiuiQunshzsKZSIfTHFDiCY9pnsr3Weit1GjcpGnun7H5HuRREqkT2c9CcKxNwSg==}
356
cpu: [loong64]
357
os: [linux]
358
359
+
'@rollup/rollup-linux-ppc64-gnu@4.53.0':
360
+
resolution: {integrity: sha512-YAvv2aMFlfiawJ97lutomuehG2Yowd4YgsAqI85XNiMK9eBA1vEMZHt3BShg8cUvak71BM+VFRHddqc+OrRdVA==}
361
cpu: [ppc64]
362
os: [linux]
363
364
+
'@rollup/rollup-linux-riscv64-gnu@4.53.0':
365
+
resolution: {integrity: sha512-DxZe/sMVaqN+s5kVk3Iq619Rgyl1JCTob7xOLSNC84mbzg3NYTSheqqrtVllYjLYo4wm9YyqjVS57miuzNyXbQ==}
366
cpu: [riscv64]
367
os: [linux]
368
369
+
'@rollup/rollup-linux-riscv64-musl@4.53.0':
370
+
resolution: {integrity: sha512-N7+iZ0jEhwLY1FEsjbCR9lAxIZP0k+3Cghx9vSQWn+rcW8SgN8VcCmwJDoPDaGKTzWWB791U1s79BSLnEhUa0Q==}
371
cpu: [riscv64]
372
os: [linux]
373
374
+
'@rollup/rollup-linux-s390x-gnu@4.53.0':
375
+
resolution: {integrity: sha512-MA/NVneZyIskjvXdh2NR9YcPi7eHWBlQOWP2X8OymzyeUEB0JfUpmbKQZngHmOlyleV2IoR5nHIgMSRjLskOnA==}
376
cpu: [s390x]
377
os: [linux]
378
379
+
'@rollup/rollup-linux-x64-gnu@4.53.0':
380
+
resolution: {integrity: sha512-iYEYzYpfaSCkunVD0LOYrD9OMc357be7+rBuCxW1qvsjCGl+95iWnYAFfyEoxAm6koasNN3tFxFYze5MKl5S3A==}
381
cpu: [x64]
382
os: [linux]
383
384
+
'@rollup/rollup-linux-x64-musl@4.53.0':
385
+
resolution: {integrity: sha512-FoRekOqhRUKbJMsB5LvhQchDeFeNlS6UGUwi0p3860sxE4zE+lp07FnkuR+yQH0rSn6iLXsnr44jnorgl8mGlQ==}
386
cpu: [x64]
387
os: [linux]
388
389
+
'@rollup/rollup-openharmony-arm64@4.53.0':
390
+
resolution: {integrity: sha512-mEN2k1zKO5PUzW8W15hKpLh+zZI2by1onX2GfI93OekGbKN5aTjWGo7yAjwRZLjhAgs2UQcXmEWbIw0R5B4RnQ==}
391
+
cpu: [arm64]
392
+
os: [openharmony]
393
+
394
+
'@rollup/rollup-win32-arm64-msvc@4.53.0':
395
+
resolution: {integrity: sha512-V1dEKUXqevG0wxo6ysGrL7g2T6tndmo6Uqw5vzOqCXv+DHc8m0RRgcCm+96iigDniwpvV6o4HZtkRUnuTz9XiA==}
396
cpu: [arm64]
397
os: [win32]
398
399
+
'@rollup/rollup-win32-ia32-msvc@4.53.0':
400
+
resolution: {integrity: sha512-93mJ8Hm9+vbhtu+A1VtmwptSqCYojtMQkBGDjLytCWC8muxmZLGo/MA/4CMAWf6+QpKlxTTMDAHdTC+kxn9ZcQ==}
401
cpu: [ia32]
402
os: [win32]
403
404
+
'@rollup/rollup-win32-x64-gnu@4.53.0':
405
+
resolution: {integrity: sha512-1OrYs0p/deXEFLUW1gvyjIabmsJKY3I/9fCUA1K6demaNc4iEhXDW6RnyPv/BWqb7NRmQ9+i+SKoi1HgJxWcwg==}
406
cpu: [x64]
407
os: [win32]
408
409
+
'@rollup/rollup-win32-x64-msvc@4.53.0':
410
+
resolution: {integrity: sha512-xtSei8paPcLy3GzeeOjoRrllJn6EN8PB+/bXnhZ4R0AaviJsRwtKxFZRVnfFXNZTTp0nLeDo+BcEuIfdZS14/A==}
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-clipboard-manager@2.3.2':
489
+
resolution: {integrity: sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==}
490
+
491
+
'@tauri-apps/plugin-dialog@2.4.2':
492
+
resolution: {integrity: sha512-lNIn5CZuw8WZOn8zHzmFmDSzg5zfohWoa3mdULP0YFh/VogVdMVWZPcWSHlydsiJhRQYaTNSYKN7RmZKE2lCYQ==}
493
+
494
+
'@tauri-apps/plugin-opener@2.5.2':
495
+
resolution: {integrity: sha512-ei/yRRoCklWHImwpCcDK3VhNXx+QXM9793aQ64YxpqVF0BDuuIlXhZgiAkc15wnPVav+IbkYhmDJIv5R326Mew==}
496
+
497
+
'@tauri-apps/plugin-os@2.3.2':
498
+
resolution: {integrity: sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==}
499
500
'@types/animejs@3.1.13':
501
resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==}
···
509
'@types/babel__template@7.4.4':
510
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
511
512
+
'@types/babel__traverse@7.28.0':
513
+
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
514
515
'@types/estree@1.0.8':
516
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
517
518
+
animejs@4.2.2:
519
+
resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==}
520
521
+
babel-plugin-jsx-dom-expressions@0.40.3:
522
+
resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==}
523
peerDependencies:
524
'@babel/core': ^7.20.12
525
526
+
babel-preset-solid@1.9.10:
527
+
resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==}
528
peerDependencies:
529
'@babel/core': ^7.0.0
530
+
solid-js: ^1.9.10
531
+
peerDependenciesMeta:
532
+
solid-js:
533
+
optional: true
534
535
+
baseline-browser-mapping@2.8.25:
536
+
resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
537
+
hasBin: true
538
+
539
+
browserslist@4.27.0:
540
+
resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
541
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
542
hasBin: true
543
544
+
caniuse-lite@1.0.30001754:
545
+
resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==}
546
547
convert-source-map@2.0.0:
548
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
···
550
csstype@3.1.3:
551
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
552
553
+
debug@4.4.3:
554
+
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
555
engines: {node: '>=6.0'}
556
peerDependencies:
557
supports-color: '*'
···
559
supports-color:
560
optional: true
561
562
+
electron-to-chromium@1.5.248:
563
+
resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==}
564
565
entities@6.0.1:
566
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
567
engines: {node: '>=0.12'}
568
569
+
esbuild@0.25.12:
570
+
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
571
engines: {node: '>=18'}
572
hasBin: true
573
···
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:
···
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==}
···
645
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
646
engines: {node: ^10 || ^12 || >=14}
647
648
+
rollup@4.53.0:
649
+
resolution: {integrity: sha512-43Z5T+4YTdfYkkA6CStU2DUYh7Ha9dLtvK+K3n0yEE/QS+4i28vSxrQsM59KqpvmT4tbOwJsFnRGMj/tvmQwWw==}
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.6.3:
···
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@6.4.1:
705
+
resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
706
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
707
hasBin: true
708
peerDependencies:
···
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.53.0':
966
optional: true
967
968
+
'@rollup/rollup-android-arm64@4.53.0':
969
optional: true
970
971
+
'@rollup/rollup-darwin-arm64@4.53.0':
972
optional: true
973
974
+
'@rollup/rollup-darwin-x64@4.53.0':
975
optional: true
976
977
+
'@rollup/rollup-freebsd-arm64@4.53.0':
978
optional: true
979
980
+
'@rollup/rollup-freebsd-x64@4.53.0':
981
optional: true
982
983
+
'@rollup/rollup-linux-arm-gnueabihf@4.53.0':
984
optional: true
985
986
+
'@rollup/rollup-linux-arm-musleabihf@4.53.0':
987
optional: true
988
989
+
'@rollup/rollup-linux-arm64-gnu@4.53.0':
990
optional: true
991
992
+
'@rollup/rollup-linux-arm64-musl@4.53.0':
993
optional: true
994
995
+
'@rollup/rollup-linux-loong64-gnu@4.53.0':
996
optional: true
997
998
+
'@rollup/rollup-linux-ppc64-gnu@4.53.0':
999
optional: true
1000
1001
+
'@rollup/rollup-linux-riscv64-gnu@4.53.0':
1002
optional: true
1003
1004
+
'@rollup/rollup-linux-riscv64-musl@4.53.0':
1005
optional: true
1006
1007
+
'@rollup/rollup-linux-s390x-gnu@4.53.0':
1008
optional: true
1009
1010
+
'@rollup/rollup-linux-x64-gnu@4.53.0':
1011
optional: true
1012
1013
+
'@rollup/rollup-linux-x64-musl@4.53.0':
1014
optional: true
1015
1016
+
'@rollup/rollup-openharmony-arm64@4.53.0':
1017
+
optional: true
1018
+
1019
+
'@rollup/rollup-win32-arm64-msvc@4.53.0':
1020
+
optional: true
1021
+
1022
+
'@rollup/rollup-win32-ia32-msvc@4.53.0':
1023
optional: true
1024
1025
+
'@rollup/rollup-win32-x64-gnu@4.53.0':
1026
optional: true
1027
1028
+
'@rollup/rollup-win32-x64-msvc@4.53.0':
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-clipboard-manager@2.3.2':
1081
+
dependencies:
1082
+
'@tauri-apps/api': 2.9.0
1083
+
1084
+
'@tauri-apps/plugin-dialog@2.4.2':
1085
+
dependencies:
1086
+
'@tauri-apps/api': 2.9.0
1087
+
1088
+
'@tauri-apps/plugin-opener@2.5.2':
1089
+
dependencies:
1090
+
'@tauri-apps/api': 2.9.0
1091
1092
+
'@tauri-apps/plugin-os@2.3.2':
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
···
1222
1223
nanoid@3.3.11: {}
1224
1225
+
node-releases@2.0.27: {}
1226
1227
parse5@7.3.0:
1228
dependencies:
···
1238
picocolors: 1.1.1
1239
source-map-js: 1.2.1
1240
1241
+
rollup@4.53.0:
1242
dependencies:
1243
'@types/estree': 1.0.8
1244
optionalDependencies:
1245
+
'@rollup/rollup-android-arm-eabi': 4.53.0
1246
+
'@rollup/rollup-android-arm64': 4.53.0
1247
+
'@rollup/rollup-darwin-arm64': 4.53.0
1248
+
'@rollup/rollup-darwin-x64': 4.53.0
1249
+
'@rollup/rollup-freebsd-arm64': 4.53.0
1250
+
'@rollup/rollup-freebsd-x64': 4.53.0
1251
+
'@rollup/rollup-linux-arm-gnueabihf': 4.53.0
1252
+
'@rollup/rollup-linux-arm-musleabihf': 4.53.0
1253
+
'@rollup/rollup-linux-arm64-gnu': 4.53.0
1254
+
'@rollup/rollup-linux-arm64-musl': 4.53.0
1255
+
'@rollup/rollup-linux-loong64-gnu': 4.53.0
1256
+
'@rollup/rollup-linux-ppc64-gnu': 4.53.0
1257
+
'@rollup/rollup-linux-riscv64-gnu': 4.53.0
1258
+
'@rollup/rollup-linux-riscv64-musl': 4.53.0
1259
+
'@rollup/rollup-linux-s390x-gnu': 4.53.0
1260
+
'@rollup/rollup-linux-x64-gnu': 4.53.0
1261
+
'@rollup/rollup-linux-x64-musl': 4.53.0
1262
+
'@rollup/rollup-openharmony-arm64': 4.53.0
1263
+
'@rollup/rollup-win32-arm64-msvc': 4.53.0
1264
+
'@rollup/rollup-win32-ia32-msvc': 4.53.0
1265
+
'@rollup/rollup-win32-x64-gnu': 4.53.0
1266
+
'@rollup/rollup-win32-x64-msvc': 4.53.0
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.6.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@6.4.1):
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: 6.4.1
1316
+
vitefu: 1.1.1(vite@6.4.1)
1317
transitivePeerDependencies:
1318
- supports-color
1319
1320
+
vite@6.4.1:
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.53.0
1327
+
tinyglobby: 0.2.15
1328
optionalDependencies:
1329
fsevents: 2.3.3
1330
1331
+
vitefu@1.1.1(vite@6.4.1):
1332
optionalDependencies:
1333
+
vite: 6.4.1
1334
1335
yallist@3.1.1: {}
+1
pnpm-workspace.yaml
+1
pnpm-workspace.yaml
-1
public/assets/icons/arrow-right-solid-full.svg
-1
public/assets/icons/arrow-right-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="#ffffff" d="M566.6 342.6C579.1 330.1 579.1 309.8 566.6 297.3L406.6 137.3C394.1 124.8 373.8 124.8 361.3 137.3C348.8 149.8 348.8 170.1 361.3 182.6L466.7 288L96 288C78.3 288 64 302.3 64 320C64 337.7 78.3 352 96 352L466.7 352L361.3 457.4C348.8 469.9 348.8 490.2 361.3 502.7C373.8 515.2 394.1 515.2 406.6 502.7L566.6 342.7z"/></svg>
···
+1
public/assets/icons/circle-info-solid-full.svg
+1
public/assets/icons/circle-info-solid-full.svg
···
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM288 224C288 206.3 302.3 192 320 192C337.7 192 352 206.3 352 224C352 241.7 337.7 256 320 256C302.3 256 288 241.7 288 224zM280 288L328 288C341.3 288 352 298.7 352 312L352 400L360 400C373.3 400 384 410.7 384 424C384 437.3 373.3 448 360 448L280 448C266.7 448 256 437.3 256 424C256 410.7 266.7 400 280 400L304 400L304 336L280 336C266.7 336 256 325.3 256 312C256 298.7 266.7 288 280 288z"/></svg>
+1
public/assets/icons/floppy-disk-solid-full.svg
+1
public/assets/icons/floppy-disk-solid-full.svg
···
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M160 96C124.7 96 96 124.7 96 160L96 480C96 515.3 124.7 544 160 544L480 544C515.3 544 544 515.3 544 480L544 237.3C544 220.3 537.3 204 525.3 192L448 114.7C436 102.7 419.7 96 402.7 96L160 96zM192 192C192 174.3 206.3 160 224 160L384 160C401.7 160 416 174.3 416 192L416 256C416 273.7 401.7 288 384 288L224 288C206.3 288 192 273.7 192 256L192 192zM320 352C355.3 352 384 380.7 384 416C384 451.3 355.3 480 320 480C284.7 480 256 451.3 256 416C256 380.7 284.7 352 320 352z"/></svg>
+1
public/assets/icons/gear-solid-full.svg
+1
public/assets/icons/gear-solid-full.svg
···
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.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/assets/icons/pen-to-square-regular-full.svg
+1
public/assets/icons/pen-to-square-regular-full.svg
···
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#cfcfcf" d="M505 122.9L517.1 135C526.5 144.4 526.5 159.6 517.1 168.9L488 198.1L441.9 152L471 122.9C480.4 113.5 495.6 113.5 504.9 122.9zM273.8 320.2L408 185.9L454.1 232L319.8 366.2C316.9 369.1 313.3 371.2 309.4 372.3L250.9 389L267.6 330.5C268.7 326.6 270.8 323 273.7 320.1zM437.1 89L239.8 286.2C231.1 294.9 224.8 305.6 221.5 317.3L192.9 417.3C190.5 425.7 192.8 434.7 199 440.9C205.2 447.1 214.2 449.4 222.6 447L322.6 418.4C334.4 415 345.1 408.7 353.7 400.1L551 202.9C579.1 174.8 579.1 129.2 551 101.1L538.9 89C510.8 60.9 465.2 60.9 437.1 89zM152 128C103.4 128 64 167.4 64 216L64 488C64 536.6 103.4 576 152 576L424 576C472.6 576 512 536.6 512 488L512 376C512 362.7 501.3 352 488 352C474.7 352 464 362.7 464 376L464 488C464 510.1 446.1 528 424 528L152 528C129.9 528 112 510.1 112 488L112 216C112 193.9 129.9 176 152 176L264 176C277.3 176 288 165.3 288 152C288 138.7 277.3 128 264 128L152 128z"/></svg>
+1
public/assets/icons/plus-solid-full.svg
+1
public/assets/icons/plus-solid-full.svg
···
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#cfcfcf" d="M352 128C352 110.3 337.7 96 320 96C302.3 96 288 110.3 288 128L288 288L128 288C110.3 288 96 302.3 96 320C96 337.7 110.3 352 128 352L288 352L288 512C288 529.7 302.3 544 320 544C337.7 544 352 529.7 352 512L352 352L512 352C529.7 352 544 337.7 544 320C544 302.3 529.7 288 512 288L352 288L352 128z"/></svg>
+1
public/assets/icons/trash-can-solid-full.svg
+1
public/assets/icons/trash-can-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="#ffffff" d="M232.7 69.9C237.1 56.8 249.3 48 263.1 48L377 48C390.8 48 403 56.8 407.4 69.9L416 96L512 96C529.7 96 544 110.3 544 128C544 145.7 529.7 160 512 160L128 160C110.3 160 96 145.7 96 128C96 110.3 110.3 96 128 96L224 96L232.7 69.9zM128 208L512 208L512 512C512 547.3 483.3 576 448 576L192 576C156.7 576 128 547.3 128 512L128 208zM216 272C202.7 272 192 282.7 192 296L192 488C192 501.3 202.7 512 216 512C229.3 512 240 501.3 240 488L240 296C240 282.7 229.3 272 216 272zM320 272C306.7 272 296 282.7 296 296L296 488C296 501.3 306.7 512 320 512C333.3 512 344 501.3 344 488L344 296C344 282.7 333.3 272 320 272zM424 272C410.7 272 400 282.7 400 296L400 488C400 501.3 410.7 512 424 512C437.3 512 448 501.3 448 488L448 296C448 282.7 437.3 272 424 272z"/></svg>
+1
public/assets/icons/xmark-solid-full.svg
+1
public/assets/icons/xmark-solid-full.svg
···
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M183.1 137.4C170.6 124.9 150.3 124.9 137.8 137.4C125.3 149.9 125.3 170.2 137.8 182.7L275.2 320L137.9 457.4C125.4 469.9 125.4 490.2 137.9 502.7C150.4 515.2 170.7 515.2 183.2 502.7L320.5 365.3L457.9 502.6C470.4 515.1 490.7 515.1 503.2 502.6C515.7 490.1 515.7 469.8 503.2 457.3L365.8 320L503.1 182.6C515.6 170.1 515.6 149.8 503.1 137.3C490.6 124.8 470.3 124.8 457.8 137.3L320.5 274.7L183.1 137.4z"/></svg>
+11
-57
src/App.css
+11
-57
src/App.css
···
1
-
@font-face {
2
font-family: Rubik;
3
-
src: url('/assets/fonts/Rubik-VariableFont_wght.ttf');
4
-
}
5
-
6
-
* {
7
-
box-sizing: border-box;
8
}
9
10
body{
11
-
background: linear-gradient(-45deg,
12
-
#12141a 0%, #12141a 10%,
13
-
#22262e 10%, #22262e 20%,
14
-
#272e44 20%, #272e44 22%,
15
-
#1f2129 22%
16
-
);
17
background-attachment: fixed;
18
color: #fff;
19
font-family: Rubik, 'Courier New';
20
margin: 0;
21
}
22
23
-
h1, h2, h3, h4, h5, h6, p{
24
-
margin: 0;
25
-
}
26
-
27
-
div[app-centre]{
28
-
position: fixed;
29
-
top: 50%;
30
-
left: 50%;
31
-
transform: translate(-50%, -50%);
32
-
text-align: center;
33
-
}
34
-
35
-
div[app-button]{
36
-
display: inline-block;
37
-
background: #2a3452;
38
-
padding: 10px 25px;
39
-
cursor: pointer;
40
-
user-select: none;
41
-
border-radius: 5px;
42
-
transition: 0.25s;
43
-
min-width: 100px;
44
-
text-align: center;
45
-
}
46
-
47
-
div[app-button]:hover{
48
-
background: #151a29;
49
-
}
50
-
51
-
div[app-button-minimal]{
52
-
display: inline-block;
53
-
background: #424242;
54
-
padding: 10px 25px;
55
-
cursor: pointer;
56
-
user-select: none;
57
-
border-radius: 5px;
58
-
transition: 0.25s;
59
-
min-width: 100px;
60
-
text-align: center;
61
-
opacity: 0.5;
62
}
63
64
-
div[app-button-minimal]:hover{
65
-
background: #525252;
66
}
67
68
-
div[app-col]{
69
-
display: flex;
70
-
justify-content: center;
71
-
align-items: center;
72
}
···
1
+
@font-face{
2
font-family: Rubik;
3
+
src: url("/assets/fonts/Rubik-VariableFont_wght.ttf");
4
}
5
6
body{
7
+
background: #1f2129;
8
background-attachment: fixed;
9
color: #fff;
10
font-family: Rubik, 'Courier New';
11
margin: 0;
12
}
13
14
+
* {
15
+
box-sizing: border-box;
16
}
17
18
+
p, h1, h2, h3, h4, h5, h6{
19
+
margin: 0;
20
}
21
22
+
canvas{
23
+
position: fixed;
24
+
top: 0;
25
+
left: 0;
26
}
+460
-3
src/App.tsx
+460
-3
src/App.tsx
···
1
+
import { createEffect, createSignal, onCleanup, onMount } from "solid-js";
2
import "./App.css";
3
+
import { renderBackgroundGrid, renderContextMenu, renderNodes, renderNullTab, renderTempDrawing } from "./renderer";
4
+
import { lerp } from "./utils/lerp";
5
+
import { Node, NodeIO, NodeIOCanCast, NodeIOResolveAnyTypes } from "./structs/node";
6
+
import { isPointInRect, isPointInRectApplyOffset, screenToWorldSpace } from "./utils/interections";
7
+
import { ControlBar } from "./components/ControlBar";
8
+
import { CanvasContextMenu } from "./ContextMenu/Canvas";
9
+
import { NodeContextMenu } from "./ContextMenu/Node";
10
+
import { ContextMenu } from "./structs/ContextMenu";
11
+
import { NodeManager } from "./Mangers/NodeManager";
12
+
import { TabMenu } from "./components/TabMenu";
13
+
import { ConfirmationPopup } from "./components/ConfirmationPopup";
14
+
15
+
import * as keybinds from './keybinds';
16
+
import { listen } from "@tauri-apps/api/event";
17
+
18
+
// TODO: Only allow one node to input on non-flow inputs
19
20
let App = () => {
21
+
let [ selectedNodes, setSelectedNodes ] = createSignal<Node[]>([], { equals: false });
22
+
let [ mousePos, setMousePos ] = createSignal<[ number, number ]>([ 0, 0 ]);
23
+
24
+
let canvas!: HTMLCanvasElement;
25
+
let ctx: CanvasRenderingContext2D;
26
+
27
+
let stopRender = false;
28
+
29
+
let scale = 0.25;
30
+
let targetScale = 1;
31
+
32
+
let offset = [ 0, 0 ];
33
+
let offsetTarget = [ 0, 0 ];
34
+
35
+
let movingNode: Node | null = null;
36
+
37
+
let isDrawing = false;
38
+
let drawingFrom: NodeIO | null = null;
39
+
let drawingTo: [ number, number ] = [ 0, 0 ];
40
+
41
+
let lockMovement = false;
42
+
43
+
{
44
+
let loadedScale = localStorage.getItem('scale');
45
+
if(loadedScale)targetScale = parseFloat(loadedScale);
46
+
47
+
let loadedOffsetX = localStorage.getItem('offsetX');
48
+
if(loadedOffsetX)offsetTarget[0] = parseFloat(loadedOffsetX);
49
+
50
+
let loadedOffsetY = localStorage.getItem('offsetY');
51
+
if(loadedOffsetY)offsetTarget[1] = parseFloat(loadedOffsetY);
52
+
};
53
+
54
+
let screenMoved = false;
55
+
56
+
let contextMenu: ContextMenu = {
57
+
items: [],
58
+
position: [ 0, 0 ],
59
+
size: [ 0, 0 ],
60
+
visible: false
61
+
}
62
+
63
+
createEffect(() => {
64
+
let snodes = selectedNodes();
65
+
66
+
let anodes = NodeManager.Instance.GetNodes();
67
+
if(!anodes)return;
68
+
69
+
for(let node of anodes)node.selected = false;
70
+
for(let node of snodes)node.selected = true;
71
+
})
72
+
73
+
onMount(async () => {
74
+
NodeManager.Instance.HookTabChange(() => setSelectedNodes([]));
75
+
76
+
ctx = canvas.getContext('2d')!;
77
+
78
+
canvas.width = window.innerWidth;
79
+
canvas.height = window.innerHeight;
80
+
ctx.translate(canvas.width / 2, canvas.height / 2);
81
+
82
+
window.onresize = () => {
83
+
canvas.width = window.innerWidth;
84
+
canvas.height = window.innerHeight;
85
+
86
+
ctx.translate(canvas.width / 2, canvas.height / 2);
87
+
}
88
+
89
+
canvas.onwheel = ( e ) => {
90
+
targetScale += e.deltaY * -(Math.sqrt(targetScale) * 0.001);
91
+
92
+
if(targetScale < 0.25)targetScale = 0.25
93
+
else if(targetScale > 5)targetScale = 5;
94
+
95
+
screenMoved = true;
96
+
}
97
+
98
+
canvas.oncontextmenu = ( e ) => {
99
+
e.preventDefault();
100
+
101
+
let clickedNode: Node | null = null
102
+
let nodes = NodeManager.Instance.GetNodes();
103
+
104
+
if(nodes){
105
+
nodes.map(node => {
106
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
107
+
e.clientX, e.clientY,
108
+
node.x, node.y, node.w, node.h
109
+
)){
110
+
clickedNode = node;
111
+
return;
112
+
}
113
+
})
114
+
}
115
+
116
+
if(clickedNode){
117
+
contextMenu.items = NodeContextMenu(clickedNode, selectedNodes, setSelectedNodes);
118
+
} else{
119
+
contextMenu.items = CanvasContextMenu;
120
+
}
121
+
122
+
contextMenu.position = [ e.clientX - 10 - canvas.width / 2, e.clientY - 10 - canvas.height / 2 ];
123
+
contextMenu.visible = true;
124
+
}
125
+
126
+
let isShiftClick = false;
127
+
canvas.onmousedown = ( e ) => {
128
+
isShiftClick = e.shiftKey;
129
+
130
+
if(
131
+
e.clientY < 60 ||
132
+
e.clientX < 220 ||
133
+
lockMovement
134
+
)return;
135
+
136
+
if(e.button !== 0){
137
+
contextMenu.visible = false;
138
+
return;
139
+
}
140
+
141
+
if(contextMenu.visible){
142
+
let submenus: ContextMenu[] = [];
143
+
contextMenu.items.map(x => x.menu ? submenus.push(x.menu): null);
144
+
145
+
submenus.map(x => {
146
+
if(!x.visible)return;
147
+
if(isPointInRect(canvas, e.clientX, e.clientY,
148
+
x.position[0], x.position[1],
149
+
x.size[0], x.size[1]
150
+
)){
151
+
let item = x.items.filter(x => x.hovered)[0];
152
+
if(item && item.clicked)item.clicked(e, canvas, { x: offset[0], y: offset[1], scale });
153
+
}
154
+
});
155
+
156
+
if(isPointInRect(canvas, e.clientX, e.clientY,
157
+
contextMenu.position[0], contextMenu.position[1],
158
+
contextMenu.size[0], contextMenu.size[1]
159
+
)){
160
+
let item = contextMenu.items.filter(x => x.hovered)[0];
161
+
if(item && item.clicked)item.clicked(e, canvas, { x: offset[0], y: offset[1], scale });
162
+
}
163
+
}
164
+
165
+
contextMenu.visible = false;
166
+
167
+
let clickedNode: any = null;
168
+
isDrawing = false;
169
+
170
+
let clickedInput: any = null;
171
+
let nodes = NodeManager.Instance.GetNodes();
172
+
173
+
if(nodes){
174
+
nodes.map(node => {
175
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
176
+
e.clientX, e.clientY,
177
+
node.x - 20, node.y, node.w + 40, node.h
178
+
)){
179
+
node.outputs.map(( output, i ) => {
180
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
181
+
e.clientX, e.clientY,
182
+
node.x + (node.w - 10),
183
+
node.y + 50 + (30 * i),
184
+
20, 20
185
+
)){
186
+
output.index = i;
187
+
188
+
drawingTo = [
189
+
node.x + (node.w - 10),
190
+
node.y + 50 + (30 * i)
191
+
];
192
+
drawingFrom = output;
193
+
194
+
isDrawing = true;
195
+
return;
196
+
}
197
+
})
198
+
199
+
node.inputs.map(( input, i ) => {
200
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
201
+
e.clientX, e.clientY,
202
+
node.x - 10,
203
+
node.y + 50 + (30 * i),
204
+
20, 20
205
+
)){
206
+
clickedInput = input;
207
+
}
208
+
})
209
+
210
+
clickedNode = node;
211
+
return;
212
+
}
213
+
})
214
+
}
215
+
216
+
if(clickedInput){
217
+
let partner = clickedInput.connections.pop();
218
+
if(!partner)return;
219
+
220
+
partner.connections = partner.connections.filter(( x: any ) => x !== clickedInput);
221
+
222
+
isDrawing = true;
223
+
isMouseDown = true;
224
+
225
+
drawingFrom = partner;
226
+
drawingTo = screenToWorldSpace(canvas, { x: offset[0], y: offset[1], scale }, e.clientX - 10 * scale, e.clientY - 10 * scale) as [ number, number ];;
227
+
228
+
return;
229
+
}
230
+
231
+
movingNode = clickedNode;
232
+
233
+
isMouseDown = true;
234
+
mouseStartPos = [ e.clientX, e.clientY ];
235
+
mouseMovePos = [ e.clientX, e.clientY ];
236
+
}
237
+
238
+
canvas.onmousemove = ( e ) => {
239
+
setMousePos([ e.clientX, e.clientY ]);
240
+
241
+
if(e.shiftKey && isMouseDown){
242
+
let nodes = NodeManager.Instance.GetNodes();
243
+
let hoveredNode: Node | null = null;
244
+
245
+
if(nodes){
246
+
nodes.map(node => {
247
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
248
+
e.clientX, e.clientY,
249
+
node.x - 20, node.y, node.w + 40, node.h
250
+
)){
251
+
hoveredNode = node;
252
+
return;
253
+
}
254
+
})
255
+
}
256
+
257
+
if(hoveredNode !== null){
258
+
let snodes = selectedNodes();
259
+
if(!snodes.find(x => x.id === hoveredNode!.id)){
260
+
snodes.push(hoveredNode);
261
+
262
+
// @ts-ignore
263
+
hoveredNode.x = Math.round(hoveredNode.x / 10) * 10;
264
+
// @ts-ignore
265
+
hoveredNode.y = Math.round(hoveredNode.y / 10) * 10;
266
+
267
+
setSelectedNodes(snodes);
268
+
}
269
+
}
270
+
271
+
return;
272
+
} else if(isShiftClick)return;
273
+
274
+
if(isMouseDown){
275
+
if(isDrawing){
276
+
drawingTo = screenToWorldSpace(canvas, { x: offset[0], y: offset[1], scale }, e.clientX - 10 * scale, e.clientY - 10 * scale) as [ number, number ];
277
+
} else if(movingNode){
278
+
let nodes = selectedNodes();
279
+
280
+
for(let node of nodes){
281
+
node.x = node.x - (mouseMovePos[0] - e.clientX) / scale;
282
+
node.y = node.y - (mouseMovePos[1] - e.clientY) / scale;
283
+
}
284
+
285
+
mouseMovePos = [ e.clientX, e.clientY ];
286
+
NodeManager.Instance.UpdateConfig();
287
+
} else{
288
+
offsetTarget = [ offsetTarget[0] - (mouseMovePos[0] - e.clientX) / scale, offsetTarget[1] - (mouseMovePos[1] - e.clientY) / scale ];
289
+
mouseMovePos = [ e.clientX, e.clientY ];
290
+
291
+
screenMoved = true;
292
+
}
293
+
}
294
+
295
+
// TODO: Fix this shit lmao please
296
+
if(contextMenu.visible){
297
+
let submenus: ContextMenu[] = [];
298
+
contextMenu.items.map(x => x.menu ? submenus.push(x.menu): null);
299
+
300
+
submenus.map(x => {
301
+
if(!x.visible)return;
302
+
if(isPointInRect(canvas, e.clientX, e.clientY,
303
+
x.position[0], x.position[1],
304
+
x.size[0], x.size[1]
305
+
)){
306
+
x.items.map((y, i) => {
307
+
y.hovered = isPointInRect(canvas, e.clientX, e.clientY,
308
+
x.position[0], x.position[1] + 10 + 25 * i,
309
+
x.size[0], 25
310
+
)
311
+
});
312
+
}
313
+
});
314
+
315
+
if(isPointInRect(canvas, e.clientX, e.clientY,
316
+
contextMenu.position[0], contextMenu.position[1],
317
+
contextMenu.size[0], contextMenu.size[1]
318
+
)){
319
+
contextMenu.items.map((x, i) => {
320
+
x.hovered = isPointInRect(canvas, e.clientX, e.clientY,
321
+
contextMenu.position[0], contextMenu.position[1] + 10 + 25 * i,
322
+
contextMenu.size[0], 25
323
+
)
324
+
325
+
if(x.menu)x.menu.visible = x.hovered;
326
+
});
327
+
}
328
+
}
329
+
}
330
+
331
+
canvas.onmouseup = ( e ) => {
332
+
let nodes = NodeManager.Instance.GetNodes();
333
+
let clickedNode;
334
+
335
+
if(nodes){
336
+
nodes.map(node => {
337
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
338
+
e.clientX, e.clientY,
339
+
node.x - 20, node.y, node.w + 40, node.h
340
+
)){
341
+
clickedNode = node;
342
+
343
+
node.inputs.map(( input, i ) => {
344
+
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
345
+
e.clientX, e.clientY,
346
+
node.x - 10,
347
+
node.y + 50 + (30 * i),
348
+
20, 20
349
+
)){
350
+
if(isDrawing){
351
+
let fromType = NodeIOResolveAnyTypes(drawingFrom!);
352
+
let toType = NodeIOResolveAnyTypes(input);
353
+
354
+
if(
355
+
drawingFrom!.connections.indexOf(input) === -1 &&
356
+
(
357
+
toType === null ||
358
+
NodeIOCanCast(fromType, toType)
359
+
)
360
+
){
361
+
drawingFrom!.connections.push(input);
362
+
input.connections.push(drawingFrom!);
363
+
364
+
NodeManager.Instance.UpdateConfig();
365
+
}
366
+
}
367
+
}
368
+
})
369
+
}
370
+
})
371
+
}
372
+
373
+
let diffX = mouseStartPos[0] - e.clientX;
374
+
let diffY = mouseStartPos[1] - e.clientY;
375
+
376
+
let dist = Math.sqrt(diffX * diffX + diffY * diffY);
377
+
378
+
if(dist < 10){
379
+
if(clickedNode){
380
+
if(e.shiftKey){
381
+
let snodes = selectedNodes();
382
+
if(snodes.indexOf(clickedNode) === -1)snodes.push(clickedNode);
383
+
384
+
// @ts-ignore
385
+
clickedNode.x = Math.round(clickedNode.x / 10) * 10;
386
+
// @ts-ignore
387
+
clickedNode.y = Math.round(clickedNode.y / 10) * 10;
388
+
389
+
setSelectedNodes(snodes);
390
+
} else{
391
+
// @ts-ignore
392
+
clickedNode.x = Math.round(clickedNode.x / 10) * 10;
393
+
// @ts-ignore
394
+
clickedNode.y = Math.round(clickedNode.y / 10) * 10;
395
+
396
+
setSelectedNodes([ clickedNode ]);
397
+
}
398
+
} else {
399
+
setSelectedNodes([]);
400
+
}
401
+
}
402
+
403
+
isDrawing = false;
404
+
isMouseDown = false;
405
+
}
406
+
407
+
keybinds.load(canvas, mousePos, selectedNodes, setSelectedNodes);
408
+
requestAnimationFrame(update);
409
+
410
+
let unlisten_0 = await listen('hide-window', () => {
411
+
stopRender = true;
412
+
})
413
+
414
+
let unlisten_1 = await listen('show-window', () => {
415
+
if(stopRender)window.location.reload();
416
+
})
417
+
418
+
onCleanup(() => {
419
+
stopRender = true;
420
+
window.clearInterval(interval);
421
422
+
unlisten_0();
423
+
unlisten_1();
424
+
});
425
});
426
427
+
let update = () => {
428
+
if(stopRender)return;
429
+
scale = lerp(scale, targetScale, 0.25);
430
+
431
+
offset[0] = lerp(offset[0], offsetTarget[0], 0.5);
432
+
offset[1] = lerp(offset[1], offsetTarget[1], 0.5);
433
+
434
+
ctx.clearRect(canvas.width / -2, canvas.height / -2, canvas.width, canvas.height);
435
+
436
+
let nodes = NodeManager.Instance.GetNodes();
437
+
438
+
renderBackgroundGrid(canvas, ctx, { x: offset[0], y: offset[1], scale });
439
+
440
+
if(nodes)
441
+
renderNodes(canvas, ctx, nodes, { x: offset[0], y: offset[1], scale });
442
+
else
443
+
renderNullTab(canvas, ctx);
444
+
445
+
if(isDrawing)renderTempDrawing(canvas, ctx, drawingTo, drawingFrom!, { x: offset[0], y: offset[1], scale });
446
+
renderContextMenu(ctx, contextMenu);
447
+
448
+
requestAnimationFrame(update);
449
+
}
450
+
451
+
let isMouseDown = false;
452
+
let mouseStartPos = [ 0, 0 ];
453
+
let mouseMovePos = [ 0, 0 ];
454
+
455
+
let interval = setInterval(() => {
456
+
if(screenMoved){
457
+
localStorage.setItem('scale', targetScale.toFixed(4));
458
+
localStorage.setItem('offsetX', offset[0].toFixed(4));
459
+
localStorage.setItem('offsetY', offset[1].toFixed(4));
460
+
}
461
+
}, 1000);
462
+
463
return (
464
<>
465
+
<ConfirmationPopup />
466
+
<TabMenu />
467
+
<ControlBar node={selectedNodes} lockMovement={( lock ) => lockMovement = lock} />
468
+
<canvas ref={canvas}/>
469
</>
470
);
471
}
+43
src/ContextMenu/Canvas.tsx
+43
src/ContextMenu/Canvas.tsx
···
···
1
+
import { PositionInfo } from "../renderer";
2
+
import { Node } from "../structs/node";
3
+
import { screenToWorldSpace } from "../utils/interections";
4
+
import { NodeManager } from "../Mangers/NodeManager";
5
+
import { ContextMenuItem } from "../structs/ContextMenu";
6
+
import { Nodes } from "../Nodes/Nodes";
7
+
8
+
export let CanvasContextMenu: ContextMenuItem[] = Nodes.map(( node ) => {
9
+
if(node.isSingle){
10
+
return {
11
+
text: node.name,
12
+
clicked: async ( e: MouseEvent, canvas: HTMLCanvasElement, position: PositionInfo ) => {
13
+
let pos = screenToWorldSpace(canvas, position, e.clientX, e.clientY);
14
+
let id = await NodeManager.Instance.GetNewNodeId();
15
+
16
+
NodeManager.Instance.AddNode(new Node(pos, node, id));
17
+
},
18
+
hovered: false
19
+
}
20
+
} else{
21
+
return {
22
+
text: node.name,
23
+
menu: {
24
+
items: node.items!.map(x => {
25
+
return {
26
+
text: x.name,
27
+
clicked: async ( e: MouseEvent, canvas: HTMLCanvasElement, position: PositionInfo ) => {
28
+
let pos = screenToWorldSpace(canvas, position, e.clientX, e.clientY);
29
+
let id = await NodeManager.Instance.GetNewNodeId();
30
+
31
+
NodeManager.Instance.AddNode(new Node(pos, x, id));
32
+
},
33
+
hovered: false
34
+
}
35
+
}),
36
+
position: [ 0, 0 ],
37
+
size: [ 0, 0 ],
38
+
visible: true
39
+
},
40
+
hovered: false
41
+
}
42
+
}
43
+
});
+38
src/ContextMenu/Node.tsx
+38
src/ContextMenu/Node.tsx
···
···
1
+
import { Accessor, Setter } from "solid-js";
2
+
import { NodeManager } from "../Mangers/NodeManager";
3
+
import { PositionInfo } from "../renderer";
4
+
import { Node } from "../structs/node";
5
+
6
+
export let NodeContextMenu = ( clickedNode: Node, selectedNode: Accessor<Node[]>, setSelectedNode: Setter<Node[]> ) => [
7
+
{
8
+
text: "Delete Node",
9
+
clicked: ( _e: MouseEvent, _canvas: HTMLCanvasElement, _position: PositionInfo ) => {
10
+
clickedNode!.inputs.map(input => {
11
+
input.connections.map(partner => {
12
+
partner.connections = partner.connections.filter(x => x != input);
13
+
})
14
+
})
15
+
16
+
clickedNode!.outputs.map(output => {
17
+
output.connections.map(partner => {
18
+
partner.connections = partner.connections.filter(x => x != output);
19
+
})
20
+
})
21
+
22
+
let selected = selectedNode();
23
+
for (let i = 0; i < selected.length; i++) {
24
+
let node = selected[i];
25
+
26
+
if(node.id === clickedNode.id){
27
+
selected.splice(i, 1);
28
+
setSelectedNode(selected);
29
+
30
+
break;
31
+
}
32
+
}
33
+
34
+
NodeManager.Instance.RemoveNode(clickedNode!)
35
+
},
36
+
hovered: false
37
+
}
38
+
]
+47
src/Mangers/ConfirmationManager.tsx
+47
src/Mangers/ConfirmationManager.tsx
···
···
1
+
import { Accessor, createSignal, Setter } from "solid-js";
2
+
3
+
export interface ConfirmationPopupButton{
4
+
text: string,
5
+
callback: () => void
6
+
}
7
+
8
+
export class ConfirmationManager{
9
+
public static Instance: ConfirmationManager;
10
+
11
+
private _setText: Setter<string>;
12
+
public Text: Accessor<string>;
13
+
14
+
private _setBody: Setter<string>;
15
+
public Body: Accessor<string>;
16
+
17
+
private _setButtons: Setter<ConfirmationPopupButton[]>;
18
+
public Buttons: Accessor<ConfirmationPopupButton[]>;
19
+
20
+
private _setShown: Setter<boolean>;
21
+
public Shown: Accessor<boolean>;
22
+
23
+
constructor(){
24
+
ConfirmationManager.Instance = this;
25
+
26
+
[ this.Text, this._setText ] = createSignal('');
27
+
[ this.Body, this._setBody ] = createSignal('');
28
+
[ this.Buttons, this._setButtons ] = createSignal<ConfirmationPopupButton[]>([]);
29
+
[ this.Shown, this._setShown ] = createSignal(false);
30
+
}
31
+
32
+
public ShowConfirmation( text: string, body: string, buttons: ConfirmationPopupButton[] ): boolean{
33
+
if(this.Shown())return false;
34
+
35
+
this._setShown(true);
36
+
37
+
this._setText(text);
38
+
this._setBody(body);
39
+
this._setButtons(buttons);
40
+
41
+
return true;
42
+
}
43
+
44
+
public CancelConfirmation(){
45
+
this._setShown(false);
46
+
}
47
+
}
+423
src/Mangers/NodeManager.tsx
+423
src/Mangers/NodeManager.tsx
···
···
1
+
import { invoke } from "@tauri-apps/api/core";
2
+
import { Node } from "../structs/node";
3
+
import { Tab } from "../structs/Tab";
4
+
import { createSignal } from "solid-js";
5
+
import { listen } from "@tauri-apps/api/event";
6
+
import { getVersion } from "@tauri-apps/api/app";
7
+
import { NodesByID } from "../Nodes/Nodes";
8
+
import { save } from "@tauri-apps/plugin-dialog";
9
+
import { ConfirmationManager } from "./ConfirmationManager";
10
+
import { platform } from "@tauri-apps/plugin-os";
11
+
12
+
export interface TabHashMap {
13
+
[details: string] : Tab;
14
+
}
15
+
16
+
export class NodeManager{
17
+
public static Instance: NodeManager;
18
+
19
+
private _selectedTab: string | null = null;
20
+
private _tabs: TabHashMap = {};
21
+
22
+
private _nodes: Node[] = [];
23
+
24
+
constructor(){
25
+
NodeManager.Instance = this;
26
+
27
+
setInterval(() => {
28
+
let tabs = Object.values(this._tabs).filter(x => x.needSync);
29
+
for(let tab of tabs){
30
+
invoke('sync_tab', {
31
+
graph: this._generateTabGraph(tab.id)[0],
32
+
id: tab.id,
33
+
name: tab.name,
34
+
location: tab.saveLocation,
35
+
saveState: tab.needsSave()
36
+
});
37
+
38
+
tab.needSync = false;
39
+
}
40
+
}, 1000);
41
+
42
+
listen('load_new_tab', ( ev: any ) => {
43
+
this._loadFromConfig(ev.payload.path, null, ev.payload.graph);
44
+
});
45
+
46
+
invoke('load_previous_tabs').then(async ( tabs: any ) => {
47
+
let version = await getVersion();
48
+
49
+
for(let tab of Object.entries<any>(tabs)){
50
+
let loaded_tab = await this._loadFromConfig(tab[1][2], tab[0], JSON.stringify({
51
+
tab_name: tab[1][1],
52
+
version,
53
+
graph: tab[1][0]
54
+
}));
55
+
56
+
if(loaded_tab)
57
+
loaded_tab.setNeedsSave(tab[1][3]);
58
+
};
59
+
60
+
this.UpdateConfig();
61
+
});
62
+
63
+
listen('prompt_to_close', async _ => {
64
+
let tabs = Object.values(this._tabs);
65
+
let tabsNeedingSaving = tabs.filter(x => x.needsSave());
66
+
67
+
for(let tab of tabsNeedingSaving){
68
+
await new Promise<void>(res => {
69
+
ConfirmationManager.Instance.ShowConfirmation(
70
+
`Discard Changes in ${tab.name}?`,
71
+
'If you close this tab without saving you will lose all changes.',
72
+
[
73
+
{
74
+
text: 'Save',
75
+
callback: async () => {
76
+
await this.SaveTab(tab);
77
+
res();
78
+
}
79
+
},
80
+
{
81
+
text: 'Don\'t Save',
82
+
callback: async () => {
83
+
res();
84
+
}
85
+
}
86
+
]
87
+
)
88
+
});
89
+
}
90
+
91
+
invoke('close_app');
92
+
});
93
+
}
94
+
95
+
96
+
private _tabUpdateHook: ( tabs: TabHashMap ) => void = () => {};
97
+
private _tabChangeHook: () => void = () => {};
98
+
99
+
public CurrentTab(): Tab | null{
100
+
if(!this._selectedTab)return null
101
+
return this._tabs[this._selectedTab] || null;
102
+
}
103
+
104
+
public async AddTab( name: string, id: string | null = null ): Promise<Tab>{
105
+
let [ selected, setSelected ] = createSignal(false);
106
+
let [ needsSave, setNeedsSave ] = createSignal(false);
107
+
108
+
let tab: Tab = {
109
+
name: name,
110
+
id: id || await NodeManager.Instance.GetNewNodeId(),
111
+
nodes: [],
112
+
saveLocation: null,
113
+
114
+
selected,
115
+
setSelected,
116
+
117
+
needsSave,
118
+
setNeedsSave,
119
+
120
+
needSync: false
121
+
};
122
+
123
+
this._tabs[tab.id] = tab;
124
+
125
+
this.SelectTab(tab.id);
126
+
this._tabUpdateHook(this._tabs);
127
+
128
+
return tab;
129
+
}
130
+
131
+
public CloseTab( id: string ){
132
+
let tab = this._tabs[id];
133
+
134
+
let closeCB = () => {
135
+
if(this._selectedTab === id){
136
+
let tabs = Object.values(this._tabs);
137
+
138
+
if(tabs.length === 1){
139
+
this.SelectTab(null);
140
+
} else{
141
+
let index = tabs.indexOf(tab);
142
+
let nextTab = tabs[index + 1];
143
+
144
+
if(nextTab)
145
+
this.SelectTab(nextTab.id);
146
+
else
147
+
this.SelectTab(tabs[0].id);
148
+
}
149
+
}
150
+
151
+
invoke('discard_tab', { id: id });
152
+
153
+
delete this._tabs[id];
154
+
this._tabUpdateHook(this._tabs);
155
+
}
156
+
157
+
if(tab.needsSave()){
158
+
ConfirmationManager.Instance.ShowConfirmation(
159
+
'Discard Changes?',
160
+
'If you close this tab without saving you will lose all changes.',
161
+
[
162
+
{
163
+
text: 'Save',
164
+
callback: async () => {
165
+
await this.SaveTab(tab);
166
+
closeCB();
167
+
}
168
+
},
169
+
{
170
+
text: 'Don\'t Save',
171
+
callback: () => {
172
+
closeCB();
173
+
}
174
+
}
175
+
]
176
+
)
177
+
} else{
178
+
closeCB();
179
+
}
180
+
}
181
+
182
+
public RenameTab( id: string, name: string ){
183
+
let tab = this._tabs[id];
184
+
if(!tab)return;
185
+
186
+
tab.name = name;
187
+
this._tabUpdateHook(this._tabs);
188
+
}
189
+
190
+
public SelectTab( id: string | null ){
191
+
if(this._selectedTab && this._tabs[this._selectedTab]){
192
+
let tab = this._tabs[this._selectedTab];
193
+
194
+
tab.setSelected(false);
195
+
tab.nodes = this._nodes;
196
+
}
197
+
198
+
this._selectedTab = id;
199
+
this._tabChangeHook();
200
+
201
+
if(this._selectedTab){
202
+
let tab = this._tabs[this._selectedTab];
203
+
if(!tab){
204
+
this._selectedTab = null;
205
+
return this._nodes = [];
206
+
}
207
+
208
+
tab.setSelected(true);
209
+
this._nodes = tab.nodes;
210
+
} else{
211
+
this._nodes = [];
212
+
}
213
+
}
214
+
215
+
public async SaveTab( tab: Tab, ignoreSaveLocation: boolean = false ){
216
+
let path =
217
+
tab.saveLocation && !ignoreSaveLocation ?
218
+
tab.saveLocation :
219
+
await save({ defaultPath: tab.name + '.macro', filters: [ { name: 'Macro Files', extensions: [ 'macro' ] } ] });
220
+
221
+
if(!path)throw new Error("Cannot save");
222
+
223
+
tab.saveLocation = path;
224
+
tab.setNeedsSave(false);
225
+
226
+
this._saveConfigToDisk(path, tab.id);
227
+
}
228
+
229
+
public HookTabUpdate( cb: ( tabs: TabHashMap ) => void ){
230
+
this._tabUpdateHook = cb;
231
+
}
232
+
233
+
public HookTabChange( cb: () => void ){
234
+
this._tabChangeHook = cb;
235
+
}
236
+
237
+
238
+
public AddNode( node: Node ){
239
+
if(!this._selectedTab)return;
240
+
241
+
this._nodes.push(node);
242
+
this.UpdateConfig();
243
+
}
244
+
245
+
public RemoveNode( node: Node ){
246
+
if(!this._selectedTab)return;
247
+
248
+
this._nodes = this._nodes.filter(x => x !== node);
249
+
this.UpdateConfig();
250
+
}
251
+
252
+
public GetNodes(): Node[] | null{
253
+
if(this._selectedTab)
254
+
return this._nodes;
255
+
else
256
+
return null;
257
+
}
258
+
259
+
public async GetNewNodeId(){
260
+
let encoder = new TextEncoder();
261
+
let data = encoder.encode(Date.now().toString() + Math.random().toString());
262
+
let hash = await window.crypto.subtle.digest("SHA-256", data); // Probably should get a better ID implementation
263
+
264
+
return btoa(String.fromCharCode(...new Uint8Array(hash)));
265
+
}
266
+
267
+
268
+
public UpdateConfig( needsSave = true ){
269
+
if(!this._selectedTab)return;
270
+
let tab = this._tabs[this._selectedTab];
271
+
if(!tab)return;
272
+
273
+
tab.nodes = this._nodes;
274
+
tab.needSync = true;
275
+
276
+
if(needsSave)tab.setNeedsSave(true);
277
+
}
278
+
279
+
private async _loadFromConfig( path: string | null, id: string | null, config: string ){
280
+
let json = JSON.parse(config);
281
+
282
+
if(
283
+
!json.tab_name ||
284
+
!json.version ||
285
+
!json.graph
286
+
)return;
287
+
288
+
let tab = await this.AddTab(json.tab_name, id);
289
+
tab.needSync = false;
290
+
tab.saveLocation = path;
291
+
292
+
this._nodes = [];
293
+
294
+
let graph = json.graph;
295
+
296
+
// Populate nodes
297
+
for (let i = 0; i < graph.length; i++) {
298
+
let node = graph[i];
299
+
300
+
let nod = new Node(node.pos, NodesByID[node.typeId], node.id);
301
+
302
+
nod.statics = node.statics;
303
+
await nod.onStaticsUpdate(nod);
304
+
305
+
this._nodes.push(nod);
306
+
}
307
+
308
+
// Populate node inputs
309
+
for (let i = 0; i < graph.length; i++) {
310
+
let configNode = graph[i];
311
+
let outputParentNode = this._nodes[i];
312
+
313
+
for (let j = 0; j < configNode.outputs.length; j++) {
314
+
let output = configNode.outputs[j];
315
+
316
+
for (let k = 0; k < output.connections.length; k++) {
317
+
let input = output.connections[k];
318
+
let node = this._nodes.find(x => x.id === input.node)!;
319
+
320
+
if(!node)continue;
321
+
322
+
let realInput = node.inputs.find(x => x.index === input.index);
323
+
let realOutput = outputParentNode.outputs[j];
324
+
325
+
if(realInput){
326
+
realInput.connections.push(realOutput);
327
+
realOutput.connections.push(realInput);
328
+
} else{
329
+
let realInput = {
330
+
name: input.name,
331
+
type: input.type,
332
+
parent: node,
333
+
connections: [ realOutput ],
334
+
index: input.index
335
+
};
336
+
337
+
node.inputs.push(realInput);
338
+
realOutput.connections.push(realInput);
339
+
}
340
+
}
341
+
}
342
+
}
343
+
344
+
tab.setNeedsSave(false);
345
+
tab.nodes = this._nodes;
346
+
347
+
tab.needSync = false;
348
+
if(!id)this.UpdateConfig(false);
349
+
350
+
return tab;
351
+
}
352
+
353
+
private _generateTabGraph( tabId: string | null ): [ any, Tab | null ]{
354
+
// Convert it into a structure we can actually save...
355
+
356
+
if(!tabId)return [ null, null ];
357
+
let tab = this._tabs[tabId];
358
+
if(!tab)return [ null, null ];
359
+
360
+
let nodesToSave = [];
361
+
362
+
for (let i = 0; i < tab.nodes.length; i++) {
363
+
let node = tab.nodes[i];
364
+
365
+
let nodeOutputs = [];
366
+
let nodeInputs = [];
367
+
368
+
for (let j = 0; j < node.outputs.length; j++) {
369
+
let output = node.outputs[j];
370
+
371
+
nodeOutputs.push({
372
+
name: output.name,
373
+
type: output.type,
374
+
connections: output.connections.map(x => { return {
375
+
name: x.name,
376
+
node: x.parent.id,
377
+
index: x.index,
378
+
type: x.type
379
+
}})
380
+
})
381
+
}
382
+
383
+
for (let j = 0; j < node.inputs.length; j++) {
384
+
let input = node.inputs[j];
385
+
386
+
nodeInputs.push({
387
+
name: input.name,
388
+
type: input.type,
389
+
connections: input.connections.map(x => { return {
390
+
name: x.name,
391
+
node: x.parent.id,
392
+
index: x.index,
393
+
type: x.type
394
+
}})
395
+
})
396
+
}
397
+
398
+
nodesToSave.push({
399
+
name: node.name,
400
+
id: node.id,
401
+
typeId: node.typeId,
402
+
pos: [ node.x, node.y ],
403
+
outputs: nodeOutputs,
404
+
inputs: nodeInputs,
405
+
statics: node.statics
406
+
})
407
+
}
408
+
409
+
return [ nodesToSave, tab ];
410
+
}
411
+
412
+
private async _saveConfigToDisk( path: string, tabId: string | null ){
413
+
let [ nodesToSave, tab ] = this._generateTabGraph(tabId);
414
+
if(!tab)return;
415
+
416
+
invoke('save_graph', { graph: JSON.stringify({
417
+
tab_name: tab.name,
418
+
version: await getVersion(),
419
+
platform: platform(),
420
+
graph: nodesToSave
421
+
}), path });
422
+
}
423
+
}
+31
src/Nodes/Conditional/IfEqual.tsx
+31
src/Nodes/Conditional/IfEqual.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeConditionalIfEqual: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'If Equal',
9
+
typeId: 'ifequal',
10
+
11
+
w: 220,
12
+
13
+
statics: [{
14
+
type: NodeType.Label,
15
+
name: 'If Equal',
16
+
value: null
17
+
}],
18
+
19
+
inputs: [
20
+
{ name: "Flow", type: NodeType.Flow },
21
+
{ name: "Input 1", type: NodeType.AnyTypeA },
22
+
{ name: "Input 2", type: NodeType.AnyTypeA },
23
+
],
24
+
25
+
outputs: [
26
+
{ name: "Equal", type: NodeType.Flow },
27
+
{ name: "Not Equal", type: NodeType.Flow },
28
+
],
29
+
30
+
onStaticsUpdate: async ( _node: Node ) => {}
31
+
}
+30
src/Nodes/Conditional/IfFalse.tsx
+30
src/Nodes/Conditional/IfFalse.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeConditionalIfFalse: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'If False',
9
+
typeId: 'iffalse',
10
+
11
+
w: 220,
12
+
13
+
statics: [{
14
+
type: NodeType.Label,
15
+
name: 'If False',
16
+
value: null
17
+
}],
18
+
19
+
inputs: [
20
+
{ name: "Flow", type: NodeType.Flow },
21
+
{ name: "Input", type: NodeType.Boolean },
22
+
],
23
+
24
+
outputs: [
25
+
{ name: "Is False", type: NodeType.Flow },
26
+
{ name: "Not False", type: NodeType.Flow },
27
+
],
28
+
29
+
onStaticsUpdate: async ( _node: Node ) => {}
30
+
}
+30
src/Nodes/Conditional/IfTrue.tsx
+30
src/Nodes/Conditional/IfTrue.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeConditionalIfTrue: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'If True',
9
+
typeId: 'iftrue',
10
+
11
+
w: 220,
12
+
13
+
statics: [{
14
+
type: NodeType.Label,
15
+
name: 'If True',
16
+
value: null
17
+
}],
18
+
19
+
inputs: [
20
+
{ name: "Flow", type: NodeType.Flow },
21
+
{ name: "Input", type: NodeType.Boolean },
22
+
],
23
+
24
+
outputs: [
25
+
{ name: "Is True", type: NodeType.Flow },
26
+
{ name: "Not True", type: NodeType.Flow },
27
+
],
28
+
29
+
onStaticsUpdate: async ( _node: Node ) => { }
30
+
}
+17
src/Nodes/Conditional.tsx
+17
src/Nodes/Conditional.tsx
···
···
1
+
import { NodeDefinition } from "./Nodes";
2
+
3
+
import { NodeConditionalIfEqual } from "./Conditional/IfEqual";
4
+
import { NodeConditionalIfTrue } from "./Conditional/IfTrue";
5
+
import { NodeConditionalIfFalse } from "./Conditional/IfFalse";
6
+
7
+
export let NodeConditional: NodeDefinition = {
8
+
os: 'any',
9
+
10
+
isSingle: false,
11
+
name: 'Conditional',
12
+
items: [
13
+
NodeConditionalIfEqual,
14
+
NodeConditionalIfTrue,
15
+
NodeConditionalIfFalse
16
+
]
17
+
}
+33
src/Nodes/Debug.tsx
+33
src/Nodes/Debug.tsx
···
···
1
+
import { Node, NodeType } from "../structs/node";
2
+
import { NodeDefinition } from "./Nodes";
3
+
4
+
export let NodeDebug: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'Debug',
9
+
typeId: 'debug',
10
+
11
+
w: 200,
12
+
13
+
statics: [
14
+
{
15
+
name: "Debug",
16
+
type: NodeType.Label,
17
+
value: null
18
+
}
19
+
],
20
+
21
+
inputs: [
22
+
{
23
+
name: "Flow",
24
+
type: NodeType.Flow,
25
+
},
26
+
{
27
+
name: "Value",
28
+
type: NodeType.AnyTypeA,
29
+
}
30
+
],
31
+
32
+
onStaticsUpdate: async ( _node: Node ) => {}
33
+
};
+69
src/Nodes/Nodes.tsx
+69
src/Nodes/Nodes.tsx
···
···
1
+
import { Node, NodeStatic, NodeType } from "../structs/node";
2
+
import { platform } from '@tauri-apps/plugin-os';
3
+
4
+
import { NodeConditional } from "./Conditional";
5
+
import { NodeDebug } from "./Debug";
6
+
import { NodeOSCActions } from "./OSCActions";
7
+
import { NodeOSCTrigger } from "./OSCTrigger";
8
+
import { NodePressKey } from "./PressKey";
9
+
import { NodeStatics } from "./Statics";
10
+
import { NodeShellCommand } from "./Shell";
11
+
12
+
export interface NodeDefinition{
13
+
os: string,
14
+
isSingle: boolean,
15
+
name: string,
16
+
typeId?: string,
17
+
onStaticsUpdate?: ( node: Node ) => Promise<void>,
18
+
// build?: ( pos: [ number, number ], onStaticsUpdate: ( node: Node ) => void ) => Promise<Node>,
19
+
w?: number,
20
+
statics?: NodeStatic[],
21
+
inputs?: { name: string, type: NodeType }[],
22
+
outputs?: { name: string, type: NodeType }[],
23
+
24
+
items?: NodeDefinition[]
25
+
}
26
+
27
+
export interface NodeDefinitionHashMap {
28
+
[details: string] : NodeDefinition;
29
+
}
30
+
31
+
// TODO: (Node Additions) Pressing keyboard keys (like to do linux, but has extra steps)
32
+
// TODO: (Node Additions) Getting media state from os
33
+
// TODO: (Node Additions) Sending custom OSC messages
34
+
// TODO: (Node Additions) Sending HTTP requests?
35
+
// TODO: (Node Additions) Voicemeeter integrations (win only)
36
+
// TODO: (Node Additions) Voicemod integrations (win only)
37
+
// TODO: (Node Additions) Executing shell commands? (probably need some kinda popup warning when these are imported about dangerous usage)
38
+
39
+
export let Nodes: NodeDefinition[] = [];
40
+
let nodes = [
41
+
NodeOSCTrigger,
42
+
NodeConditional,
43
+
NodeStatics,
44
+
NodeOSCActions,
45
+
NodeDebug,
46
+
NodePressKey,
47
+
NodeShellCommand
48
+
]
49
+
50
+
let os = platform();
51
+
52
+
for (let i = 0; i < nodes.length; i++) {
53
+
let node = nodes[i];
54
+
if(node.os === 'any' || node.os === os)Nodes.push(node);
55
+
}
56
+
57
+
export let NodesByID: NodeDefinitionHashMap = {}
58
+
59
+
Nodes.forEach(node => {
60
+
if(node.isSingle){
61
+
NodesByID[node.typeId!] = node;
62
+
} else{
63
+
node.items!.forEach(node => {
64
+
NodesByID[node.typeId!] = node;
65
+
})
66
+
}
67
+
})
68
+
69
+
console.log(NodesByID);
+25
src/Nodes/OSCActions/Send Chatbox.tsx
+25
src/Nodes/OSCActions/Send Chatbox.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeOSCActionsSendChatbox: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'Send Chatbox',
9
+
typeId: 'oscsendchatbox',
10
+
11
+
w: 200,
12
+
13
+
statics: [{
14
+
type: NodeType.Label,
15
+
name: 'Send Chatbox',
16
+
value: null
17
+
}],
18
+
19
+
inputs: [
20
+
{ name: "Flow", type: NodeType.Flow },
21
+
{ name: "Value", type: NodeType.String }
22
+
],
23
+
24
+
onStaticsUpdate: async ( _node: Node ) => {}
25
+
}
+12
src/Nodes/OSCActions.tsx
+12
src/Nodes/OSCActions.tsx
···
···
1
+
import { NodeDefinition } from "./Nodes";
2
+
import { NodeOSCActionsSendChatbox } from "./OSCActions/Send Chatbox";
3
+
4
+
export let NodeOSCActions: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: false,
8
+
name: 'OSC Actions',
9
+
items: [
10
+
NodeOSCActionsSendChatbox
11
+
]
12
+
}
+106
src/Nodes/OSCTrigger.tsx
+106
src/Nodes/OSCTrigger.tsx
···
···
1
+
import { invoke } from "@tauri-apps/api/core";
2
+
import { Node, NodeType } from "../structs/node";
3
+
import { OSCMessage } from "../structs/OscMessage";
4
+
import { NodeManager } from "../Mangers/NodeManager";
5
+
import { NodeDefinition } from "./Nodes";
6
+
7
+
export let NodeOSCTrigger: NodeDefinition = {
8
+
os: 'any',
9
+
10
+
isSingle: true,
11
+
name: 'OSC Trigger',
12
+
typeId: 'osctrigger',
13
+
14
+
w: 200,
15
+
16
+
statics: [
17
+
{
18
+
name: "OSC Trigger",
19
+
type: NodeType.OSCAddress,
20
+
value: null
21
+
},
22
+
{
23
+
name: "Parameter List",
24
+
type: NodeType.ParameterList,
25
+
value: []
26
+
}
27
+
],
28
+
29
+
onStaticsUpdate: async ( node: Node ) => {
30
+
let address = node.statics[0].value;
31
+
let parameters = node.statics[1].value;
32
+
33
+
if(address){
34
+
let addresses = await invoke<OSCMessage[]>('get_addresses');
35
+
let msgDat = addresses.find(x => x.address == address);
36
+
37
+
if(msgDat){
38
+
parameters = msgDat.values.map(x => { return { type: x.key, desc: '' }});
39
+
node.statics[1].value = parameters;
40
+
}
41
+
}
42
+
43
+
let tempOutputs = [];
44
+
45
+
tempOutputs.push({
46
+
name: 'Flow',
47
+
type: NodeType.Flow,
48
+
connections: [],
49
+
parent: node,
50
+
index: 0
51
+
})
52
+
53
+
parameters.forEach(( dat: any, indx: number ) => {
54
+
let type: NodeType | null = null;
55
+
56
+
switch(dat.type){
57
+
case 'Int':
58
+
type = NodeType.Int;
59
+
break;
60
+
case 'Float':
61
+
type = NodeType.Float;
62
+
break;
63
+
case 'String':
64
+
type = NodeType.String;
65
+
break;
66
+
case 'Boolean':
67
+
type = NodeType.Boolean;
68
+
break;
69
+
}
70
+
71
+
if(type){
72
+
tempOutputs.push({
73
+
name: dat.desc === '' ? dat.type : dat.desc,
74
+
type: type,
75
+
connections: [],
76
+
parent: node,
77
+
index: indx + 1
78
+
})
79
+
}
80
+
});
81
+
82
+
let hasChanged = false;
83
+
84
+
for(let i in tempOutputs){
85
+
if(
86
+
node.outputs[i] === undefined ||
87
+
tempOutputs[i].type != node.outputs[i].type
88
+
){
89
+
hasChanged = true;
90
+
}
91
+
}
92
+
93
+
if(hasChanged){
94
+
node.outputs.map(output => {
95
+
output.connections.map(partner => {
96
+
partner.connections = partner.connections.filter(x => x != output);
97
+
})
98
+
})
99
+
100
+
node.outputs = tempOutputs;
101
+
node.updateSize();
102
+
}
103
+
104
+
NodeManager.Instance.UpdateConfig();
105
+
}
106
+
};
+29
src/Nodes/PressKey.tsx
+29
src/Nodes/PressKey.tsx
···
···
1
+
import { Node, NodeType } from "../structs/node";
2
+
import { NodeDefinition } from "./Nodes";
3
+
4
+
export let NodePressKey: NodeDefinition = {
5
+
os: 'windows',
6
+
7
+
isSingle: true,
8
+
name: 'Press Key',
9
+
typeId: 'presskey',
10
+
11
+
w: 200,
12
+
13
+
statics: [
14
+
{
15
+
name: "Key",
16
+
type: NodeType.String,
17
+
value: ""
18
+
}
19
+
],
20
+
21
+
inputs: [
22
+
{
23
+
name: "Flow",
24
+
type: NodeType.Flow,
25
+
}
26
+
],
27
+
28
+
onStaticsUpdate: async ( _node: Node ) => {}
29
+
};
+38
src/Nodes/Shell.tsx
+38
src/Nodes/Shell.tsx
···
···
1
+
import { Node, NodeType } from "../structs/node";
2
+
import { NodeDefinition } from "./Nodes";
3
+
4
+
export let NodeShellCommand: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'Shell Command',
9
+
typeId: 'shellcommand',
10
+
11
+
w: 200,
12
+
13
+
statics: [],
14
+
15
+
inputs: [
16
+
{
17
+
name: "Flow",
18
+
type: NodeType.Flow,
19
+
},
20
+
{
21
+
name: "Command",
22
+
type: NodeType.String,
23
+
},
24
+
],
25
+
26
+
outputs: [
27
+
{
28
+
name: "Flow",
29
+
type: NodeType.Flow,
30
+
},
31
+
{
32
+
name: "Output",
33
+
type: NodeType.String,
34
+
},
35
+
],
36
+
37
+
onStaticsUpdate: async ( _node: Node ) => {}
38
+
};
+22
src/Nodes/Statics/Float.tsx
+22
src/Nodes/Statics/Float.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeStaticsFloat: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'Float',
9
+
typeId: 'staticfloat',
10
+
11
+
w: 200,
12
+
13
+
statics: [{
14
+
type: NodeType.Float,
15
+
name: 'Value',
16
+
value: 0.0
17
+
}],
18
+
19
+
outputs: [{ name: "Float", type: NodeType.Float }],
20
+
21
+
onStaticsUpdate: async ( _node: Node ) => {}
22
+
}
+22
src/Nodes/Statics/Int.tsx
+22
src/Nodes/Statics/Int.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeStaticsInt: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'Int',
9
+
typeId: 'staticint',
10
+
11
+
w: 200,
12
+
13
+
statics: [{
14
+
type: NodeType.Int,
15
+
name: 'Value',
16
+
value: 0
17
+
}],
18
+
19
+
outputs: [{ name: "Int", type: NodeType.Int }],
20
+
21
+
onStaticsUpdate: async ( _node: Node ) => {}
22
+
}
+22
src/Nodes/Statics/String.tsx
+22
src/Nodes/Statics/String.tsx
···
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeStaticsString: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'String',
9
+
typeId: 'staticstring',
10
+
11
+
w: 200,
12
+
13
+
statics: [{
14
+
type: NodeType.String,
15
+
name: 'Value',
16
+
value: 'Hello World!'
17
+
}],
18
+
19
+
outputs: [{ name: "String", type: NodeType.String }],
20
+
21
+
onStaticsUpdate: async ( _node: Node ) => {}
22
+
}
+17
src/Nodes/Statics.tsx
+17
src/Nodes/Statics.tsx
···
···
1
+
import { NodeDefinition } from "./Nodes";
2
+
import { NodeStaticsFloat } from "./Statics/Float";
3
+
4
+
import { NodeStaticsInt } from "./Statics/Int";
5
+
import { NodeStaticsString } from "./Statics/String";
6
+
7
+
export let NodeStatics: NodeDefinition = {
8
+
os: 'any',
9
+
10
+
isSingle: false,
11
+
name: 'Statics',
12
+
items: [
13
+
NodeStaticsInt,
14
+
NodeStaticsString,
15
+
NodeStaticsFloat
16
+
]
17
+
}
+42
src/components/ConfirmationPopup.css
+42
src/components/ConfirmationPopup.css
···
···
1
+
.confirmation-blackout{
2
+
position: fixed;
3
+
top: 0;
4
+
left: 0;
5
+
width: 100vw;
6
+
height: 100vh;
7
+
z-index: 150;
8
+
background: #000A;
9
+
}
10
+
11
+
.confirmation-popup{
12
+
position: fixed;
13
+
top: 50%;
14
+
left: 50%;
15
+
transform: translate(-50%, -50%);
16
+
background: #272e44;
17
+
border-radius: 20px;
18
+
padding: 10px 20px;
19
+
text-align: center;
20
+
}
21
+
22
+
.confirmation-buttons{
23
+
display: flex;
24
+
margin-top: 30px;
25
+
}
26
+
27
+
.confirmation-button{
28
+
cursor: pointer;
29
+
user-select: none;
30
+
-webkit-user-select: none;
31
+
32
+
width: 100%;
33
+
padding: 2px 10px;
34
+
border: 1px solid #fff;
35
+
border-radius: 5px;
36
+
transition: 0.1s;
37
+
margin: 0 5px;
38
+
}
39
+
40
+
.confirmation-button:hover{
41
+
background: #fff2;
42
+
}
+41
src/components/ConfirmationPopup.tsx
+41
src/components/ConfirmationPopup.tsx
···
···
1
+
import { For, Show } from 'solid-js';
2
+
import './ConfirmationPopup.css';
3
+
import { ConfirmationManager } from '../Mangers/ConfirmationManager';
4
+
5
+
export let ConfirmationPopup = () => {
6
+
return (
7
+
<>
8
+
<Show when={ConfirmationManager.Instance.Shown()}>
9
+
<div class="confirmation-blackout">
10
+
<div class="confirmation-popup">
11
+
<h2>{ConfirmationManager.Instance.Text()}</h2>
12
+
<p>{ConfirmationManager.Instance.Body()}</p>
13
+
14
+
<div class="confirmation-buttons">
15
+
<For each={ConfirmationManager.Instance.Buttons()}>
16
+
{ item =>
17
+
<div
18
+
class="confirmation-button"
19
+
onClick={() => {
20
+
ConfirmationManager.Instance.CancelConfirmation();
21
+
item.callback();
22
+
}}
23
+
>
24
+
{ item.text }
25
+
</div>
26
+
}
27
+
</For>
28
+
29
+
<div
30
+
class="confirmation-button"
31
+
onClick={() => ConfirmationManager.Instance.CancelConfirmation()}
32
+
>
33
+
Cancel
34
+
</div>
35
+
</div>
36
+
</div>
37
+
</div>
38
+
</Show>
39
+
</>
40
+
)
41
+
}
+29
src/components/ControlBar.css
+29
src/components/ControlBar.css
···
···
1
+
.control-bar{
2
+
position: fixed;
3
+
top: 20px;
4
+
left: 20px;
5
+
height: 40px;
6
+
z-index: 100;
7
+
width: calc(100vw - 40px);
8
+
background: #272e44;
9
+
border-radius: 20px;
10
+
display: flex;
11
+
padding: 10px 20px;
12
+
align-items: center;
13
+
}
14
+
15
+
.button{
16
+
padding: 5px 10px;
17
+
margin: 0 10px;
18
+
background: #445077;
19
+
border-radius: 5px;
20
+
transition: 0.1s;
21
+
cursor: pointer;
22
+
user-select: none;
23
+
-webkit-user-select: none;
24
+
width: fit-content;
25
+
}
26
+
27
+
.button:hover{
28
+
background: #363f5e;
29
+
}
+133
src/components/ControlBar.tsx
+133
src/components/ControlBar.tsx
···
···
1
+
import './ControlBar.css';
2
+
3
+
import { Accessor, createSignal, For, Match, Show, Switch } from 'solid-js';
4
+
import { Node, NodeType } from '../structs/node';
5
+
import { TextInput } from './TextInput';
6
+
import { invoke } from '@tauri-apps/api/core';
7
+
import { OSCMessage } from '../structs/OscMessage';
8
+
import { ParameterList } from './ParameterList';
9
+
import { NodeManager } from '../Mangers/NodeManager';
10
+
11
+
export interface ControlBarProps{
12
+
node: Accessor<Node[]>,
13
+
lockMovement: ( lock: boolean ) => void
14
+
}
15
+
16
+
export let ControlBar = ( props: ControlBarProps ) => {
17
+
return (
18
+
<div class="control-bar">
19
+
<For each={props.node()[0]?.statics}>
20
+
{ ( item ) => {
21
+
let [ popupOpen, setPopupOpen ] = createSignal(false);
22
+
23
+
return (
24
+
<div>
25
+
<Switch>
26
+
<Match when={item.type == NodeType.String}>
27
+
{ item.name }
28
+
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
29
+
<input
30
+
type="text"
31
+
placeholder='Enter Value...'
32
+
value={item.value || ''}
33
+
onChange={( el ) => {
34
+
let value = el.target.value;
35
+
let node = props.node()[0]!;
36
+
37
+
item.value = value;
38
+
node.onStaticsUpdate(node);
39
+
40
+
NodeManager.Instance.UpdateConfig();
41
+
}} />
42
+
</div>
43
+
</Match>
44
+
<Match when={item.type == NodeType.Int}>
45
+
{ item.name }
46
+
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
47
+
<input
48
+
type="number"
49
+
placeholder='Enter Value...'
50
+
value={item.value !== undefined ? item.value : ''}
51
+
onChange={( el ) => {
52
+
let value = el.target.value;
53
+
let node = props.node()[0]!;
54
+
55
+
item.value = parseInt(value);
56
+
node.onStaticsUpdate(node);
57
+
58
+
NodeManager.Instance.UpdateConfig();
59
+
}} />
60
+
</div>
61
+
</Match>
62
+
<Match when={item.type == NodeType.Float}>
63
+
{ item.name }
64
+
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
65
+
<input
66
+
type="number"
67
+
placeholder='Enter Value...'
68
+
value={item.value !== undefined ? item.value : ''}
69
+
onChange={( el ) => {
70
+
let value = el.target.value;
71
+
let node = props.node()[0]!;
72
+
73
+
item.value = parseFloat(value);
74
+
node.onStaticsUpdate(node);
75
+
76
+
NodeManager.Instance.UpdateConfig();
77
+
}} />
78
+
</div>
79
+
</Match>
80
+
<Match when={item.type == NodeType.OSCAddress}>
81
+
{ item.name }
82
+
<div style={{ display: 'inline-block', 'margin-left': '10px', width: '300px' }}>
83
+
<TextInput
84
+
placeholder='Enter OSC Address...'
85
+
value={item.value || ''}
86
+
requestSuggestions={async ( text: string ): Promise<string[]> => {
87
+
let addresses = await invoke<OSCMessage[]>('get_addresses');
88
+
return addresses.map(x => x.address).filter(x => x.toLowerCase().includes(text.toLowerCase()));
89
+
}}
90
+
change={( text ) => {
91
+
let node = props.node()[0]!;
92
+
93
+
item.value = text;
94
+
node.onStaticsUpdate(node);
95
+
96
+
NodeManager.Instance.UpdateConfig();
97
+
}} />
98
+
</div>
99
+
</Match>
100
+
<Match when={item.type == NodeType.ParameterList}>
101
+
<div class="button" onClick={() => {
102
+
let popup = !popupOpen();
103
+
104
+
props.lockMovement(popup);
105
+
setPopupOpen(popup);
106
+
}}>
107
+
{ item.name }
108
+
</div>
109
+
<Show when={popupOpen()}>
110
+
<ParameterList
111
+
setPopupOpen={( open: boolean ) => {
112
+
setPopupOpen(open);
113
+
props.lockMovement(open);
114
+
}}
115
+
value={item.value}
116
+
changed={( value ) => {
117
+
let node = props.node()[0]!;
118
+
119
+
item.value = value;
120
+
node.onStaticsUpdate(node);
121
+
122
+
NodeManager.Instance.UpdateConfig();
123
+
}} />
124
+
</Show>
125
+
</Match>
126
+
</Switch>
127
+
</div>
128
+
)
129
+
}}
130
+
</For>
131
+
</div>
132
+
)
133
+
}
+85
src/components/ParameterList.css
+85
src/components/ParameterList.css
···
···
1
+
.parameter-list{
2
+
position: fixed;
3
+
z-index: 100;
4
+
top: 0;
5
+
left: 0;
6
+
width: 100vw;
7
+
height: 100vh;
8
+
background: rgba(0, 0, 0, 0.75);
9
+
}
10
+
11
+
.parameter-list-inner{
12
+
position: fixed;
13
+
top: 50%;
14
+
left: 50%;
15
+
transform: translate(-50%, -50%);
16
+
padding: 10px;
17
+
background: #373738;
18
+
border-radius: 10px;
19
+
width: 40%;
20
+
height: 80%;
21
+
}
22
+
23
+
.parameter-list-close{
24
+
width: 25px;
25
+
height: 43px;
26
+
display: flex;
27
+
justify-content: center;
28
+
align-items: center;
29
+
}
30
+
31
+
.parameter-list-header{
32
+
width: 100%;
33
+
height: 50px;
34
+
}
35
+
36
+
.parameter-list-content{
37
+
width: 100%;
38
+
height: calc(100% - 50px);
39
+
overflow-x: hidden;
40
+
overflow-y: auto;
41
+
}
42
+
43
+
.parameter-list-button-dropdown{
44
+
position: fixed;
45
+
padding: 5px 10px;
46
+
margin: 0 10px;
47
+
background: #445077;
48
+
border-radius: 5px;
49
+
transition: 0.1s;
50
+
cursor: pointer;
51
+
user-select: none;
52
+
transform: translate(0, 5px);
53
+
-webkit-user-select: none;
54
+
}
55
+
56
+
.parameter-list-button-dropdown > div{
57
+
transition: 0.1s;
58
+
}
59
+
60
+
.parameter-list-button-dropdown > div:hover{
61
+
color: #aaa;
62
+
}
63
+
64
+
.parameter-list-parameter{
65
+
display: inline-block;
66
+
padding: 5px 10px;
67
+
margin: 5px 0px 5px 10px;
68
+
background: #445077;
69
+
border-radius: 5px;
70
+
transition: 0.1s;
71
+
cursor: pointer;
72
+
user-select: none;
73
+
-webkit-user-select: none;
74
+
}
75
+
76
+
.parameter-list-parameter:hover{
77
+
background: #363f5e;
78
+
}
79
+
80
+
.parameter-list-parameter-delete{
81
+
padding: 0px 5px;
82
+
display: flex;
83
+
justify-content: center;
84
+
align-items: center;
85
+
}
+74
src/components/ParameterList.tsx
+74
src/components/ParameterList.tsx
···
···
1
+
import { createSignal, For, Show } from 'solid-js';
2
+
import './ParameterList.css';
3
+
4
+
export interface ParameterListProps{
5
+
setPopupOpen: ( open: boolean ) => void
6
+
value: { type: string, desc: string }[],
7
+
changed: ( value: { type: string, desc: string }[] ) => void
8
+
}
9
+
10
+
export let ParameterList = ( props: ParameterListProps ) => {
11
+
let [ parameters, setParameters ] = createSignal<{ type: string, desc: string }[]>(props.value, { equals: false });
12
+
let [ addParametersOpen, setAddParametersOpen ] = createSignal(false);
13
+
14
+
return (
15
+
<div class="parameter-list">
16
+
<div class="parameter-list-inner">
17
+
<div class="parameter-list-header">
18
+
<h1 style={{ float: 'left' }}>Parameter List</h1>
19
+
<div style={{ float: 'right' }} class="parameter-list-close">
20
+
<div style={{ background: 'red', width: '25px', height: '25px', cursor: 'pointer' }} onClick={() => props.setPopupOpen(false)}></div>
21
+
</div>
22
+
</div>
23
+
<div class="parameter-list-content">
24
+
<For each={parameters()}>
25
+
{ ( i, index ) => <div style={{ display: 'flex' }}>
26
+
<div class="parameter-list-parameter">{ i.desc === "" ? i.type : i.desc + ` ${i.type}` }</div>
27
+
<div class="parameter-list-parameter parameter-list-parameter-delete" onClick={() => {
28
+
let params = parameters();
29
+
params.splice(index(), 1);
30
+
31
+
setParameters(params);
32
+
props.changed(params);
33
+
}}>
34
+
<img src="/assets/icons/trash-can-solid-full.svg" width="20" />
35
+
</div>
36
+
</div>}
37
+
</For>
38
+
<div class="button" onClick={() => { setAddParametersOpen(!addParametersOpen()) }}>Add Parameter + </div>
39
+
<Show when={addParametersOpen()}>
40
+
<div class="parameter-list-button-dropdown">
41
+
<div onClick={() => {
42
+
setAddParametersOpen(false);
43
+
44
+
let params = parameters();
45
+
params.push({ type: 'Float', desc: '' });
46
+
47
+
setParameters(params);
48
+
props.changed(params);
49
+
}}>Float Parameter</div>
50
+
<div onClick={() => {
51
+
setAddParametersOpen(false);
52
+
53
+
let params = parameters();
54
+
params.push({ type: 'Int', desc: '' });
55
+
56
+
setParameters(params);
57
+
props.changed(params);
58
+
}}>Integer Parameter</div>
59
+
<div onClick={() => {
60
+
setAddParametersOpen(false);
61
+
62
+
let params = parameters();
63
+
params.push({ type: 'Boolean', desc: '' });
64
+
65
+
setParameters(params);
66
+
props.changed(params);
67
+
}}>Boolean Parameter</div>
68
+
</div>
69
+
</Show>
70
+
</div>
71
+
</div>
72
+
</div>
73
+
)
74
+
}
+41
src/components/SettingsMenu.css
+41
src/components/SettingsMenu.css
···
···
1
+
.settings-menu{
2
+
position: fixed;
3
+
z-index: 110;
4
+
top: 0;
5
+
left: 0;
6
+
width: 100vw;
7
+
height: 100vh;
8
+
background: rgba(0, 0, 0, 0.75);
9
+
}
10
+
11
+
.settings-menu-inner{
12
+
position: fixed;
13
+
top: 50%;
14
+
left: 50%;
15
+
transform: translate(-50%, -50%);
16
+
padding: 10px;
17
+
background: #373738;
18
+
border-radius: 10px;
19
+
width: 40%;
20
+
height: 80%;
21
+
}
22
+
23
+
.settings-menu-close{
24
+
width: 25px;
25
+
height: 43px;
26
+
display: flex;
27
+
justify-content: center;
28
+
align-items: center;
29
+
}
30
+
31
+
.settings-menu-header{
32
+
width: 100%;
33
+
height: 50px;
34
+
}
35
+
36
+
.settings-menu-content{
37
+
width: 100%;
38
+
height: calc(100% - 50px);
39
+
overflow-x: hidden;
40
+
overflow-y: auto;
41
+
}
+35
src/components/SettingsMenu.tsx
+35
src/components/SettingsMenu.tsx
···
···
1
+
import { invoke } from '@tauri-apps/api/core';
2
+
import './SettingsMenu.css';
3
+
4
+
export interface SettingsMenuProps{
5
+
close: () => void
6
+
}
7
+
8
+
export let SettingsMenu = ( props: SettingsMenuProps ) => {
9
+
// TODO: Changable OSC Ports
10
+
// TODO: Changable keybinds
11
+
12
+
return (
13
+
<>
14
+
<div class="settings-menu">
15
+
<div class="settings-menu-inner">
16
+
<div class="settings-menu-header">
17
+
<h1 style={{ float: 'left' }}>Options</h1>
18
+
<div style={{ float: 'right' }} class="settings-menu-close">
19
+
<div style={{ background: 'red', width: '25px', height: '25px', cursor: 'pointer' }} onClick={() => props.close()}></div>
20
+
</div>
21
+
</div>
22
+
23
+
<div class="settings-menu-content">
24
+
Hide editor on app start:
25
+
<input
26
+
ref={async ( el ) => el.checked = await invoke('get_hide_editor_on_app_start')}
27
+
onChange={( el ) => invoke('set_hide_editor_on_app_start', { value: el.target.checked })}
28
+
type="checkbox"
29
+
style={{ width: '15px', height: '15px' }} />
30
+
</div>
31
+
</div>
32
+
</div>
33
+
</>
34
+
)
35
+
}
+127
src/components/TabMenu.css
+127
src/components/TabMenu.css
···
···
1
+
.tab-menu{
2
+
position: fixed;
3
+
top: 70px;
4
+
left: 20px;
5
+
width: 200px;
6
+
z-index: 100;
7
+
height: calc(100vh - 100px);
8
+
background: #272e44;
9
+
border-radius: 20px;
10
+
padding: 5px;
11
+
overflow-x: hidden;
12
+
overflow-y: auto;
13
+
}
14
+
15
+
.tab-container{
16
+
height: calc(100% - 35px);
17
+
overflow: auto;
18
+
mask-image: linear-gradient(to bottom, #000 90%, #0000);
19
+
padding-bottom: 25px;
20
+
}
21
+
22
+
.tab{
23
+
border-radius: 10px;
24
+
padding: 8px 10px;
25
+
background: #fff0;
26
+
margin: 5px;
27
+
font-size: 14px;
28
+
transition: 0.5s;
29
+
user-select: none;
30
+
-webkit-user-select: none;
31
+
display: flex;
32
+
color: #cfcfcf;
33
+
}
34
+
35
+
.tab:hover{
36
+
background: #fff1;
37
+
}
38
+
39
+
.tab-selected{
40
+
border-radius: 10px;
41
+
padding: 8px 10px;
42
+
margin: 5px;
43
+
font-size: 14px;
44
+
transition: 0.5s;
45
+
user-select: none;
46
+
-webkit-user-select: none;
47
+
display: flex;
48
+
color: #cfcfcf;
49
+
background: #fff4;
50
+
}
51
+
52
+
.tab-selected > .tab-close{
53
+
opacity: 1;
54
+
}
55
+
56
+
.tab:hover > .tab-close{
57
+
opacity: 1;
58
+
}
59
+
60
+
.tab-meta{
61
+
width: calc(100% - 40px);
62
+
transform: translateY(1px);
63
+
display: flex;
64
+
align-items: center;
65
+
}
66
+
67
+
.tab-meta-input{
68
+
color: #cfcfcf;
69
+
font-size: 14px;
70
+
width: 120px;
71
+
background: none;
72
+
outline: none;
73
+
border: none;
74
+
transform: translateY(-1px);
75
+
}
76
+
77
+
.tab-close{
78
+
opacity: 0;
79
+
width: 20px;
80
+
height: 20px;
81
+
display: flex;
82
+
align-items: center;
83
+
justify-content: center;
84
+
border-radius: 5px;
85
+
}
86
+
87
+
.tab-close:hover{
88
+
background: #fff3;
89
+
}
90
+
91
+
.tab-icon{
92
+
width: 20px;
93
+
height: 20px;
94
+
display: flex;
95
+
align-items: center;
96
+
justify-content: left;
97
+
}
98
+
99
+
.tab-new-dropdown{
100
+
position: absolute;
101
+
width: 180px;
102
+
transform: translate(-10px, 35px);
103
+
border-radius: 10px;
104
+
background: #fff1;
105
+
}
106
+
107
+
.tab-icon-bar{
108
+
height: 30px;
109
+
margin: 0 5px;
110
+
display: flex;
111
+
justify-content: left;
112
+
align-items: center;
113
+
}
114
+
115
+
.tab-icon-bar img{
116
+
padding: 3px;
117
+
border-radius: 5px;
118
+
transition: 0.1s;
119
+
background: transparent;
120
+
cursor: pointer;
121
+
user-select: none;
122
+
-webkit-user-select: none;
123
+
}
124
+
125
+
.tab-icon-bar img:hover{
126
+
background: #fff2;
127
+
}
+96
src/components/TabMenu.tsx
+96
src/components/TabMenu.tsx
···
···
1
+
import './TabMenu.css';
2
+
3
+
import { createSignal, For, onMount, Show } from 'solid-js';
4
+
import { NodeManager } from '../Mangers/NodeManager';
5
+
import { Tab } from '../structs/Tab';
6
+
import { SettingsMenu } from './SettingsMenu';
7
+
import { openUrl } from '@tauri-apps/plugin-opener';
8
+
9
+
export let TabMenu = () => {
10
+
let [ tabImportOpen, setTabImportOpen ] = createSignal(false);
11
+
let [ tabs, setTabs ] = createSignal<Tab[]>([], { equals: false });
12
+
13
+
let [ settingsOpen, setSettingsOpen ] = createSignal(false);
14
+
15
+
let closeTabImportMenu = () => {
16
+
window.removeEventListener('click', closeTabImportMenu);
17
+
setTabImportOpen(false);
18
+
}
19
+
20
+
onMount(() => {
21
+
NodeManager.Instance.HookTabUpdate(setTabs);
22
+
});
23
+
24
+
return (
25
+
<>
26
+
<Show when={settingsOpen()}>
27
+
<SettingsMenu close={() => setSettingsOpen(false)} />
28
+
</Show>
29
+
30
+
<div class="tab-menu">
31
+
<div class="tab-container">
32
+
<For each={Object.values(tabs())}>
33
+
{
34
+
tab =>
35
+
<div class={ tab.selected() ? 'tab-selected ' : 'tab' } onClick={() => {
36
+
NodeManager.Instance.SelectTab(tab.id);
37
+
}}>
38
+
<div class="tab-icon" onClick={async () => {
39
+
if(tab.selected()){
40
+
NodeManager.Instance.SaveTab(tab);
41
+
}
42
+
}}>
43
+
<Show when={tab.selected() && tab.needsSave()} fallback={
44
+
<img src="/assets/icons/pen-to-square-regular-full.svg" width="15" />
45
+
}>
46
+
<img src="/assets/icons/floppy-disk-solid-full.svg" width="15" />
47
+
</Show>
48
+
49
+
</div>
50
+
<div class="tab-meta" onDblClick={( e ) => {
51
+
let input = <input class="tab-meta-input" value={ e.target.innerHTML } /> as HTMLInputElement;
52
+
53
+
e.target.innerHTML = '';
54
+
e.target.appendChild(input);
55
+
56
+
input.select();
57
+
input.onchange = () => {
58
+
NodeManager.Instance.RenameTab(tab.id, input.value);
59
+
e.target.innerHTML = input.value;
60
+
}
61
+
}}>{ tab.name }</div>
62
+
<div class="tab-close" onClick={() => {
63
+
setTimeout(() => {
64
+
NodeManager.Instance.CloseTab(tab.id);
65
+
}, 50)
66
+
}}><img src="/assets/icons/xmark-solid-full.svg" width="12" /></div>
67
+
</div>
68
+
}
69
+
</For>
70
+
71
+
<div class="tab" onClick={() => {
72
+
NodeManager.Instance.AddTab("Untitled");
73
+
}} onContextMenu={( e ) => {
74
+
e.preventDefault();
75
+
setTabImportOpen(true);
76
+
77
+
window.addEventListener('click', closeTabImportMenu);
78
+
}}>
79
+
<div class="tab-new-dropdown" style={{ display: tabImportOpen() ? 'block' : 'none' }}>
80
+
<div class="tab">Import from file</div>
81
+
<div class="tab">Import from URL</div>
82
+
</div>
83
+
<div class="tab-icon"><img src="/assets/icons/plus-solid-full.svg" width="15" /></div>
84
+
<div class="tab-meta">New Tab</div>
85
+
</div>
86
+
</div>
87
+
88
+
<div class="tab-icon-bar">
89
+
<img src="/assets/icons/gear-solid-full.svg" width="25" onClick={() => setSettingsOpen(true)} />
90
+
<div style={{ width: 'calc(100% - 50px)' }}></div>
91
+
<img src="/assets/icons/circle-info-solid-full.svg" width="25" onClick={() => openUrl('https://github.com/phaze-the-dumb/VRCMacros/wiki')} />
92
+
</div>
93
+
</div>
94
+
</>
95
+
)
96
+
}
+49
src/components/TextInput.css
+49
src/components/TextInput.css
···
···
1
+
input[type="text"]{
2
+
outline: none;
3
+
background: none;
4
+
border: none;
5
+
border-bottom: 2px solid #525252;
6
+
font-size: 15px;
7
+
font-family: Rubik, 'Courier New';
8
+
color: #fff;
9
+
width: 400px;
10
+
}
11
+
12
+
input[type="number"]{
13
+
outline: none;
14
+
background: none;
15
+
border: none;
16
+
border-bottom: 2px solid #525252;
17
+
font-size: 15px;
18
+
font-family: Rubik, 'Courier New';
19
+
color: #fff;
20
+
width: 400px;
21
+
}
22
+
23
+
div[input-dropdown]{
24
+
position: absolute;
25
+
width: fit-content;
26
+
27
+
margin-top: 5px;
28
+
padding: 10px;
29
+
float: left;
30
+
border-radius: 5px;
31
+
32
+
max-height: 300px;
33
+
overflow-y: auto;
34
+
35
+
background: #525252;
36
+
z-index: 50;
37
+
}
38
+
39
+
div[input-dropdown] > div{
40
+
transition: 0.25s;
41
+
}
42
+
43
+
div[input-dropdown] > div:hover{
44
+
color: #aaa;
45
+
}
46
+
47
+
.suggestion-selected{
48
+
color: #aaa;
49
+
}
+110
src/components/TextInput.tsx
+110
src/components/TextInput.tsx
···
···
1
+
import './TextInput.css';
2
+
3
+
import { createSignal, For, Show } from "solid-js"
4
+
5
+
export interface TextInputProps{
6
+
placeholder: string,
7
+
value?: string,
8
+
requestSuggestions?: ( text: string ) => Promise<string[]>,
9
+
change?: ( text: string ) => void
10
+
}
11
+
12
+
export let TextInput = ( props: TextInputProps ) => {
13
+
let [ suggestionsOpen, setSuggestionsOpen ] = createSignal(false);
14
+
let [ suggestions, setSuggestions ] = createSignal<string[]>([])
15
+
16
+
let input!: HTMLInputElement;
17
+
18
+
let suggestionsContainer!: HTMLDivElement;
19
+
let suggestionsIndex = 0;
20
+
21
+
let onInput = async () => {
22
+
let s = null;
23
+
24
+
if(props.requestSuggestions){
25
+
s = await props.requestSuggestions(input.value);
26
+
27
+
if(s != suggestions()){
28
+
setSuggestions(s);
29
+
30
+
let open = s !== null && s.length > 0 && input.value.length > 0;
31
+
32
+
setSuggestionsOpen(open);
33
+
if(open)changeSelection(() => { suggestionsIndex = 0; });
34
+
}
35
+
}
36
+
}
37
+
38
+
let onKeyDown = ( ev: KeyboardEvent ) => {
39
+
switch(ev.key){
40
+
case 'ArrowDown':
41
+
changeSelection(() => {
42
+
suggestionsIndex++;
43
+
if(suggestionsIndex >= suggestionsContainer.children.length)suggestionsIndex = suggestionsContainer.children.length - 1;
44
+
});
45
+
break;
46
+
case 'ArrowUp':
47
+
changeSelection(() => {
48
+
suggestionsIndex--;
49
+
if(suggestionsIndex < 0)suggestionsIndex = 0;
50
+
});
51
+
break;
52
+
case 'Enter':
53
+
let currentDiv = suggestionsContainer.children[suggestionsIndex];
54
+
if(currentDiv)input.value = currentDiv.innerHTML;
55
+
56
+
props.change ? props.change(input.value) : null
57
+
setSuggestionsOpen(false);
58
+
break;
59
+
}
60
+
}
61
+
62
+
let changeSelection = ( cb: () => void ) => {
63
+
for(let child of suggestionsContainer.children)
64
+
child.classList.remove('suggestion-selected');
65
+
66
+
cb();
67
+
68
+
let height = suggestionsIndex * 19;
69
+
suggestionsContainer.scrollTo(0, height - 150);
70
+
71
+
let currentDiv = suggestionsContainer.children[suggestionsIndex];
72
+
if(currentDiv)currentDiv.classList.add('suggestion-selected');
73
+
}
74
+
75
+
return (
76
+
<>
77
+
<div style={{ width: '100%' }}>
78
+
<input
79
+
style={{ width: '100%' }}
80
+
type="text"
81
+
placeholder={ props.placeholder }
82
+
value={ props.value || "" }
83
+
onChange={() => props.change ? props.change(input.value) : null}
84
+
onInput={onInput}
85
+
onKeyDown={onKeyDown}
86
+
onFocusOut={() => setTimeout(() => {
87
+
setSuggestionsOpen(false);
88
+
suggestionsIndex = -1;
89
+
}, 100)}
90
+
ref={input} />
91
+
92
+
<Show when={suggestionsOpen()}>
93
+
<div input-dropdown ref={suggestionsContainer}>
94
+
<For each={suggestions()}>
95
+
{ item => <div onClick={( el ) => {
96
+
let thisEl = el.target;
97
+
98
+
input.value = thisEl.innerHTML;
99
+
setSuggestionsOpen(false);
100
+
101
+
props.change ? props.change(input.value) : null
102
+
suggestionsIndex = -1;
103
+
}}>{ item }</div> }
104
+
</For>
105
+
</div>
106
+
</Show>
107
+
</div>
108
+
</>
109
+
)
110
+
}
+7
-1
src/index.tsx
+7
-1
src/index.tsx
···
2
import { render } from "solid-js/web";
3
import App from "./App";
4
5
+
import { NodeManager } from "./Mangers/NodeManager";
6
+
import { ConfirmationManager } from "./Mangers/ConfirmationManager";
7
+
8
+
new NodeManager();
9
+
new ConfirmationManager();
10
+
11
+
render(() => <App />, document.getElementById("root") as HTMLElement);
+94
src/keybinds.ts
+94
src/keybinds.ts
···
···
1
+
import { Accessor, Setter } from "solid-js";
2
+
import { NodeManager } from "./Mangers/NodeManager";
3
+
import { Node } from "./structs/node";
4
+
import { readText, writeText } from "@tauri-apps/plugin-clipboard-manager";
5
+
import { decodeNodeList, encodeNodeList } from "./utils/clipboard";
6
+
7
+
let isKeyDown: any = {};
8
+
9
+
export let load = ( canvas: HTMLCanvasElement, mousePos: Accessor<[ number, number ]>, selectedNode: Accessor<Node[]>, setSelectedNode: Setter<Node[]> ) => {
10
+
// TODO: Add undo / redo -ing
11
+
12
+
canvas.onkeydown = async ( e ) => {
13
+
switch(e.key){
14
+
case 'Delete':
15
+
let nodes = selectedNode();
16
+
for(let node of nodes){
17
+
node.inputs.map(input => {
18
+
input.connections.map(partner => {
19
+
partner.connections = partner.connections.filter(x => x != input);
20
+
})
21
+
})
22
+
23
+
node.outputs.map(output => {
24
+
output.connections.map(partner => {
25
+
partner.connections = partner.connections.filter(x => x != output);
26
+
})
27
+
})
28
+
29
+
NodeManager.Instance.RemoveNode(node);
30
+
}
31
+
32
+
setSelectedNode([]);
33
+
break;
34
+
}
35
+
}
36
+
37
+
window.onkeydown = async ( e ) => {
38
+
isKeyDown[e.key] = true;
39
+
40
+
switch(e.key){
41
+
case 's':
42
+
if(e.ctrlKey){
43
+
let currentTab = NodeManager.Instance.CurrentTab();
44
+
if(!currentTab)return;
45
+
46
+
// Save
47
+
NodeManager.Instance.SaveTab(currentTab);
48
+
}
49
+
break;
50
+
case 'S':
51
+
if(e.ctrlKey){
52
+
let currentTab = NodeManager.Instance.CurrentTab();
53
+
if(!currentTab)return;
54
+
55
+
// Save
56
+
NodeManager.Instance.SaveTab(currentTab, true);
57
+
}
58
+
break;
59
+
case 'c':
60
+
if(e.ctrlKey){
61
+
let nodes = selectedNode();
62
+
await writeText(encodeNodeList(nodes, mousePos()));
63
+
}
64
+
break;
65
+
case 'v':
66
+
if(e.ctrlKey){
67
+
let text = await readText();
68
+
69
+
let nodes = await decodeNodeList(text, mousePos());
70
+
if(!nodes)return;
71
+
72
+
for(let node of nodes)
73
+
NodeManager.Instance.AddNode(node);
74
+
75
+
setSelectedNode(nodes);
76
+
}
77
+
break;
78
+
case 'z':
79
+
if(e.ctrlKey){
80
+
console.log('undo');
81
+
}
82
+
break;
83
+
case 'y':
84
+
if(e.ctrlKey){
85
+
console.log('redo');
86
+
}
87
+
break;
88
+
}
89
+
}
90
+
91
+
window.onkeyup = ( e ) => {
92
+
isKeyDown[e.key] = false;
93
+
}
94
+
}
+295
src/renderer.ts
+295
src/renderer.ts
···
···
1
+
import { ContextMenu } from "./structs/ContextMenu";
2
+
import { Node, NodeIO, NodeIOLinkColours } from "./structs/node";
3
+
import { lerp } from "./utils/lerp";
4
+
5
+
export interface PositionInfo{
6
+
x: number,
7
+
y: number,
8
+
scale: number
9
+
}
10
+
11
+
const GRID_SIZE = 50;
12
+
13
+
export let renderBackgroundGrid = (
14
+
canvas: HTMLCanvasElement,
15
+
ctx: CanvasRenderingContext2D,
16
+
position: PositionInfo
17
+
) => {
18
+
let offsetX = position.x % 50;
19
+
let offsetY = position.y % 50;
20
+
21
+
let gridAmountX = canvas.width / (GRID_SIZE * position.scale);
22
+
let gridAmountY = canvas.height / (GRID_SIZE * position.scale);
23
+
24
+
ctx.fillStyle = '#fff1';
25
+
26
+
for (let x = 0; x < gridAmountX / 2; x++) {
27
+
for (let y = 0; y < gridAmountY / 2; y++) {
28
+
ctx.fillRect(
29
+
((x * GRID_SIZE) + offsetX) * position.scale,
30
+
((y * GRID_SIZE) + offsetY) * position.scale,
31
+
5 * position.scale, 5 * position.scale);
32
+
33
+
ctx.fillRect(
34
+
(((x + 1) * GRID_SIZE) - offsetX) * -position.scale,
35
+
((y * GRID_SIZE) + offsetY) * position.scale,
36
+
5 * position.scale, 5 * position.scale);
37
+
38
+
ctx.fillRect(
39
+
((x * GRID_SIZE) + offsetX) * position.scale,
40
+
(((y + 1) * GRID_SIZE) - offsetY) * -position.scale,
41
+
5 * position.scale, 5 * position.scale);
42
+
43
+
ctx.fillRect(
44
+
(((x + 1) * GRID_SIZE) - offsetX) * -position.scale,
45
+
(((y + 1) * GRID_SIZE) - offsetY) * -position.scale,
46
+
5 * position.scale, 5 * position.scale);
47
+
}
48
+
}
49
+
}
50
+
51
+
export let renderNodes = (
52
+
canvas: HTMLCanvasElement,
53
+
ctx: CanvasRenderingContext2D,
54
+
nodes: Node[],
55
+
position: PositionInfo
56
+
) => {
57
+
let startX = canvas.width / -2;
58
+
let startY = canvas.height / -2;
59
+
60
+
ctx.textBaseline = 'top';
61
+
62
+
nodes.map(node => {
63
+
let nodeX = Math.round(node.x / 10) * 10;
64
+
let nodeY = Math.round(node.y / 10) * 10;
65
+
66
+
ctx.fillStyle = '#343742ff';
67
+
ctx.strokeStyle = node.selected ? '#004696ff' : '#fff0';
68
+
ctx.lineWidth = 5 * position.scale;
69
+
70
+
// Draw Node Box
71
+
drawRoundedRect(ctx,
72
+
(nodeX + startX + position.x) * position.scale,
73
+
(nodeY + startY + position.y) * position.scale,
74
+
node.w * position.scale,
75
+
node.h * position.scale,
76
+
10 * position.scale);
77
+
78
+
ctx.shadowColor = '#0005';
79
+
ctx.shadowBlur = 10;
80
+
81
+
ctx.stroke();
82
+
ctx.fill();
83
+
84
+
ctx.shadowBlur = 0;
85
+
86
+
// Draw Node Name
87
+
ctx.fillStyle = '#fff';
88
+
ctx.font = (25 * position.scale) + 'px Rubik';
89
+
ctx.textAlign = 'center';
90
+
91
+
ctx.fillText(node.name,
92
+
(nodeX + (node.w * 0.5) + startX + position.x) * position.scale,
93
+
(nodeY + 10 + startY + position.y) * position.scale
94
+
);
95
+
96
+
// Draw Inputs
97
+
ctx.font = (15 * position.scale) + 'px Rubik';
98
+
ctx.textAlign = 'left';
99
+
100
+
node.inputs.map(( input, i ) => {
101
+
ctx.fillStyle = NodeIOLinkColours(input);
102
+
103
+
ctx.beginPath();
104
+
ctx.arc(
105
+
(nodeX - 10 + startX + 10 + position.x) * position.scale,
106
+
(nodeY + 50 + (30 * i) + startY + 10 + position.y) * position.scale,
107
+
7 * position.scale,
108
+
0,
109
+
Math.PI * 2,
110
+
);
111
+
ctx.fill();
112
+
113
+
ctx.fillText(input.name,
114
+
(nodeX + 15 + startX + position.x) * position.scale,
115
+
(nodeY + 53 + (30 * i) + startY + position.y) * position.scale,
116
+
)
117
+
})
118
+
119
+
// Draw Outputs
120
+
ctx.textAlign = 'right';
121
+
122
+
node.outputs.map(( output, i ) => {
123
+
ctx.fillStyle = NodeIOLinkColours(output);
124
+
125
+
ctx.beginPath();
126
+
ctx.arc(
127
+
(nodeX + (node.w - 10) + startX + 10 + position.x) * position.scale,
128
+
(nodeY + 50 + (30 * i) + startY + 10 + position.y) * position.scale,
129
+
7 * position.scale,
130
+
0,
131
+
Math.PI * 2,
132
+
);
133
+
ctx.fill();
134
+
135
+
ctx.fillText(output.name,
136
+
(nodeX + (node.w - 15) + startX + position.x) * position.scale,
137
+
(nodeY + 53 + (30 * i) + startY + position.y) * position.scale,
138
+
)
139
+
})
140
+
})
141
+
142
+
nodes.map(node => {
143
+
let nodeX = Math.round(node.x / 10) * 10;
144
+
let nodeY = Math.round(node.y / 10) * 10;
145
+
146
+
node.outputs.map(( output, i ) => {
147
+
output.connections.map(partner => {
148
+
let x0 = (nodeX + (node.w - 10) + 10 + startX + position.x) * position.scale;
149
+
let y0 = (nodeY + 50 + (30 * i) + 10 + startY + position.y) * position.scale;
150
+
let x1 = ((Math.round(partner.parent.x / 10) * 10) + startX + position.x) * position.scale;
151
+
let y1 = ((Math.round(partner.parent.y / 10) * 10) + 60 + (30 * partner.index) + startY + position.y) * position.scale;
152
+
153
+
let colours = NodeIOLinkColours(output, partner);
154
+
let grad = ctx.createLinearGradient(x0, y0, x1, y1);
155
+
156
+
grad.addColorStop(0, colours[0]);
157
+
grad.addColorStop(1, colours[1]);
158
+
159
+
ctx.strokeStyle = grad;
160
+
ctx.lineWidth = 3 * position.scale;
161
+
162
+
drawCurve(ctx, x0, y0, x1, y1);
163
+
ctx.stroke();
164
+
})
165
+
})
166
+
})
167
+
}
168
+
169
+
export let renderContextMenu = (
170
+
ctx: CanvasRenderingContext2D,
171
+
contextMenu: ContextMenu
172
+
) => {
173
+
if(contextMenu.visible){
174
+
ctx.font = '20px Rubik';
175
+
ctx.textBaseline = 'top';
176
+
ctx.textAlign = 'left';
177
+
178
+
let widestItem = 0;
179
+
contextMenu.items.map(x => {
180
+
let width = ctx.measureText(x.text).width;
181
+
if(widestItem < width)widestItem = width;
182
+
});
183
+
184
+
contextMenu.size = [ widestItem + 20, 25 * contextMenu.items.length + 20 ]
185
+
186
+
drawRoundedRect(ctx, contextMenu.position[0], contextMenu.position[1], contextMenu.size[0], contextMenu.size[1], 10);
187
+
ctx.fillStyle = '#444';
188
+
ctx.fill();
189
+
190
+
let submenuToRender: any = null;
191
+
192
+
contextMenu.items.map((x, i) => {
193
+
ctx.fillStyle = x.hovered ? '#aaa' : '#fff';
194
+
ctx.fillText(x.text, contextMenu.position[0] + 10, contextMenu.position[1] + 10 + 25 * i);
195
+
196
+
if(x.hovered && x.menu){
197
+
submenuToRender = x.menu;
198
+
submenuToRender.position = [ contextMenu.position[0] + contextMenu.size[0] + 5, contextMenu.position[1] + 25 * i ];
199
+
}
200
+
});
201
+
202
+
if(submenuToRender){
203
+
renderContextMenu(ctx, submenuToRender);
204
+
}
205
+
}
206
+
}
207
+
208
+
export let renderTempDrawing = (
209
+
canvas: HTMLCanvasElement,
210
+
ctx: CanvasRenderingContext2D,
211
+
drawingTo: [ number, number ],
212
+
drawingFrom: NodeIO,
213
+
position: PositionInfo
214
+
) => {
215
+
let startX = canvas.width / -2;
216
+
let startY = canvas.height / -2;
217
+
218
+
// DEBUG STUFF
219
+
// ctx.fillStyle = '#f00';
220
+
221
+
// ctx.fillRect(
222
+
// (drawingTo[0] + 10 + startX + position.x) * position.scale,
223
+
// (drawingTo[1] + 10 + startY + position.y) * position.scale,
224
+
// 10, 10
225
+
// );
226
+
227
+
// ctx.fillRect(
228
+
// (drawingFrom.parent.x + (drawingFrom.parent.w - 10) + 10 + startX + position.x) * position.scale,
229
+
// (drawingFrom.parent.y + 50 + (30 * drawingFrom.index) + 10 + startY + position.y) * position.scale,
230
+
// 10, 10
231
+
// );
232
+
233
+
ctx.strokeStyle = NodeIOLinkColours(drawingFrom);
234
+
ctx.lineWidth = 3 * position.scale;
235
+
236
+
let nodeX = Math.round(drawingFrom.parent.x / 10) * 10;
237
+
let nodeY = Math.round(drawingFrom.parent.y / 10) * 10;
238
+
239
+
drawCurve(ctx,
240
+
(nodeX + (drawingFrom.parent.w - 10) + 10 + startX + position.x) * position.scale,
241
+
(nodeY + 50 + (30 * drawingFrom.index) + 10 + startY + position.y) * position.scale,
242
+
(drawingTo[0] + 10 + startX + position.x) * position.scale,
243
+
(drawingTo[1] + 10 + startY + position.y) * position.scale,
244
+
);
245
+
ctx.stroke();
246
+
}
247
+
248
+
let drawCurve = ( ctx: CanvasRenderingContext2D, fromX: number, fromY: number, toX: number, toY: number ) => {
249
+
ctx.beginPath();
250
+
251
+
let bias = Math.sqrt(( fromX - toX ) * ( fromX - toX ) + ( fromY - toY ) * ( fromY - toY )) / 3;
252
+
253
+
let start = [ fromX + bias, fromY ];
254
+
let end = [ toX - bias, toY ];
255
+
256
+
let midpoint = [
257
+
lerp(start[0], end[0], 0.5),
258
+
lerp(start[1], end[1], 0.5)
259
+
];
260
+
261
+
ctx.bezierCurveTo(fromX, fromY, start[0], start[1], midpoint[0], midpoint[1]);
262
+
ctx.bezierCurveTo(midpoint[0], midpoint[1], end[0], end[1], toX, toY);
263
+
}
264
+
265
+
export let renderNullTab = (
266
+
canvas: HTMLCanvasElement,
267
+
ctx: CanvasRenderingContext2D,
268
+
) => {
269
+
ctx.fillStyle = '#fff';
270
+
271
+
ctx.font = '20px Rubik';
272
+
ctx.textBaseline = 'middle';
273
+
ctx.textAlign = 'center';
274
+
275
+
let textX = lerp((canvas.width / -2) + 200, canvas.width / 2, 0.5);
276
+
let textY = lerp((canvas.height / -2) + 40, canvas.height / 2, 0.5);
277
+
278
+
ctx.font = '40px Rubik';
279
+
ctx.fillText('Welcome to VRCMacros', textX, textY);
280
+
281
+
ctx.font = '20px Rubik';
282
+
ctx.fillText('Create a new tab to get started!', textX, textY + 40);
283
+
}
284
+
285
+
let drawRoundedRect = ( ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, radius: number ) => {
286
+
ctx.beginPath();
287
+
ctx.arc(x + radius, y + radius, radius, Math.PI, Math.PI * 1.5);
288
+
ctx.lineTo(x + w - radius, y);
289
+
ctx.arc(x + w - radius, y + radius, radius, Math.PI * 1.5, 0);
290
+
ctx.lineTo(x + w, y + h - radius);
291
+
ctx.arc(x + w - radius, y + h - radius, radius, 0, Math.PI * 0.5);
292
+
ctx.lineTo(x + radius, y + h);
293
+
ctx.arc(x + radius, y + h - radius, radius, Math.PI * 0.5, Math.PI);
294
+
ctx.closePath();
295
+
}
+16
src/structs/ContextMenu.ts
+16
src/structs/ContextMenu.ts
···
···
1
+
import { PositionInfo } from "../renderer";
2
+
import { Node } from "./node";
3
+
4
+
export interface ContextMenuItem{
5
+
text: string,
6
+
hovered: boolean,
7
+
clicked?: ( e: MouseEvent, canvas: HTMLCanvasElement, pos: PositionInfo, clickedNode?: Node ) => void,
8
+
menu?: ContextMenu
9
+
}
10
+
11
+
export interface ContextMenu{
12
+
items: ContextMenuItem[];
13
+
position: [ number, number ];
14
+
size: [ number, number ];
15
+
visible: boolean;
16
+
}
+9
src/structs/OscMessage.ts
+9
src/structs/OscMessage.ts
+17
src/structs/Tab.ts
+17
src/structs/Tab.ts
···
···
1
+
import { Accessor, Setter } from "solid-js";
2
+
import { Node } from "./node";
3
+
4
+
export interface Tab{
5
+
name: string,
6
+
id: string,
7
+
nodes: Node[],
8
+
saveLocation: string | null,
9
+
10
+
selected: Accessor<boolean>,
11
+
setSelected: Setter<boolean>
12
+
13
+
needsSave: Accessor<boolean>,
14
+
setNeedsSave: Setter<boolean>,
15
+
16
+
needSync: boolean
17
+
}
+163
src/structs/node.ts
+163
src/structs/node.ts
···
···
1
+
import { NodeDefinition } from "../Nodes/Nodes";
2
+
3
+
export class Node{
4
+
name: string;
5
+
id: string;
6
+
typeId: string;
7
+
x: number;
8
+
y: number;
9
+
w: number;
10
+
h: number;
11
+
inputs: NodeIO[];
12
+
outputs: NodeIO[];
13
+
selected: boolean;
14
+
statics: NodeStatic[];
15
+
onStaticsUpdate: ( node: Node ) => Promise<void>;
16
+
17
+
constructor( pos: [ number, number ], node: NodeDefinition, id: string ){
18
+
this.name = node.name;
19
+
this.id = id;
20
+
this.typeId = node.typeId!;
21
+
this.x = pos[0];
22
+
this.y = pos[1];
23
+
24
+
this.inputs = node.inputs ? node.inputs.map(( x, indx ) => {
25
+
return {
26
+
name: x.name,
27
+
type: x.type,
28
+
connections: [],
29
+
parent: this,
30
+
index: indx
31
+
}
32
+
}) : [];
33
+
34
+
this.outputs = node.outputs ? node.outputs.map(( x, indx ) => {
35
+
return {
36
+
name: x.name,
37
+
type: x.type,
38
+
connections: [],
39
+
parent: this,
40
+
index: indx
41
+
}
42
+
}) : [];
43
+
44
+
this.w = node.w || 200;
45
+
this.h = 50 + Math.max(this.outputs.length, this.inputs.length) * 30;
46
+
47
+
this.selected = false;
48
+
this.statics = node.statics!,
49
+
this.onStaticsUpdate = node.onStaticsUpdate!;
50
+
}
51
+
52
+
updateSize(){
53
+
this.h = 50 + Math.max(this.outputs.length, this.inputs.length) * 30;
54
+
}
55
+
}
56
+
57
+
export interface NodeIO{
58
+
name: string,
59
+
type: NodeType,
60
+
connections: NodeIO[],
61
+
parent: Node,
62
+
index: number
63
+
}
64
+
65
+
export enum NodeType{
66
+
Label = 0,
67
+
68
+
String = 1,
69
+
Float = 2,
70
+
Int = 3,
71
+
Boolean = 4,
72
+
Flow = 5,
73
+
74
+
AnyTypeA = 6,
75
+
AnyTypeB = 7,
76
+
AnyTypeC = 8,
77
+
78
+
OSCAddress = 9,
79
+
ParameterList = 10
80
+
}
81
+
82
+
let NodeIOCastTable: any = {
83
+
1: { 2: true, 3: true, 4: true }, // Strings -> Floats, Ints, Bools
84
+
2: { 1: true, 3: true }, // Floats -> Strings, Ints
85
+
3: { 1: true, 2: true, 4: true }, // Ints -> Strings, Floats, Bools
86
+
4: { 1: true, 2: true, 3: true } // Bools -> Strings, Ints, Floats
87
+
};
88
+
89
+
export let NodeIOCanCast = ( input: NodeType | null, output: NodeType | null ): boolean => {
90
+
if(input === output)return true;
91
+
if(!input || !output)return false;
92
+
93
+
let CastFrom = NodeIOCastTable[input];
94
+
if(!CastFrom)return false;
95
+
96
+
let CastTo = CastFrom[output];
97
+
if(!CastTo)return false;
98
+
99
+
return true;
100
+
}
101
+
102
+
export let NodeIOResolveAnyTypes = ( nodeio: NodeIO ): NodeType | null => {
103
+
if(nodeio.type > 0 && nodeio.type < 6){
104
+
// It's a base type
105
+
return nodeio.type;
106
+
}
107
+
108
+
// It's an "AnyType" value and we should resolve it,
109
+
// it also means it's an input as "AnyType" is not valid on outputs
110
+
let type = nodeio.type;
111
+
112
+
// Check if we have any connections
113
+
if(nodeio.connections.length > 0){
114
+
// We do, lets copy the type of the first input
115
+
return nodeio.connections[0].type;
116
+
}
117
+
118
+
// Check if there are any others of the same "AnyType"
119
+
let other = nodeio.parent.inputs.filter(x => x !== nodeio).find(x => x.type === type);
120
+
if(other){
121
+
// There are others with the same type, lets copy that type
122
+
// Does other have any connections
123
+
124
+
if(other.connections.length > 0){
125
+
return other.connections[0].type;
126
+
}
127
+
}
128
+
129
+
// We can't resolve it yet
130
+
return null;
131
+
}
132
+
133
+
export let NodeIOLinkColours = ( nodeio: NodeIO, output?: NodeIO ) => {
134
+
let cols: any = {
135
+
1: '#ffff9f',
136
+
2: '#cda0cb',
137
+
3: '#7ecaca',
138
+
4: '#8bc0a2',
139
+
5: '#edeae3'
140
+
}
141
+
142
+
let type = NodeIOResolveAnyTypes(nodeio);
143
+
if(output){
144
+
let outputType = NodeIOResolveAnyTypes(output);
145
+
let startType = type ? cols[type] : '#fff5';
146
+
147
+
if(type !== outputType){
148
+
let endType = outputType ? cols[outputType] : '#fff5';
149
+
150
+
return [ startType, endType ];
151
+
} else{
152
+
return [ startType, startType ];
153
+
}
154
+
}
155
+
156
+
return type ? cols[type] : '#fff5';
157
+
}
158
+
159
+
export interface NodeStatic{
160
+
name: string,
161
+
type: NodeType,
162
+
value: any
163
+
}
+80
src/utils/clipboard.ts
+80
src/utils/clipboard.ts
···
···
1
+
import { NodeManager } from "../Mangers/NodeManager";
2
+
import { NodesByID } from "../Nodes/Nodes";
3
+
import { Node } from "../structs/node";
4
+
5
+
export let encodeNodeList = ( selectedNodes: Node[], mousePos: [ number, number ] ): string => {
6
+
let arr: any[] = [];
7
+
8
+
for(let node of selectedNodes){
9
+
arr.push({
10
+
id: node.id,
11
+
type_id: node.typeId,
12
+
statics: node.statics,
13
+
x: node.x - mousePos[0],
14
+
y: node.y - mousePos[1],
15
+
outputs: node.outputs.map(x => {
16
+
return x.connections.map(x => {
17
+
return { node: x.parent.id, index: x.index } }) })
18
+
})
19
+
}
20
+
21
+
for(let node of arr){
22
+
for(let output of node.outputs){
23
+
for(let i in output){
24
+
let indx = arr.findIndex(x => x.id === output[i].node);
25
+
if(indx === -1)
26
+
delete output[i];
27
+
else
28
+
output[i].node = indx;
29
+
}
30
+
}
31
+
}
32
+
33
+
for(let node of arr)delete node.id;
34
+
35
+
console.log(arr);
36
+
return 'VRCMACRO' + btoa(JSON.stringify(arr));
37
+
}
38
+
39
+
export let decodeNodeList = async ( text: string, mousePos: [ number, number ] ): Promise<Node[] | null> => {
40
+
if(!text.startsWith("VRCMACRO"))return null;
41
+
42
+
let data = text.slice(8);
43
+
let json = JSON.parse(atob(data));
44
+
45
+
let nodes: Node[] = [];
46
+
for(let node of json){
47
+
let n = new Node(
48
+
[ node.x + mousePos[0] + 10, node.y + mousePos[1] + 10 ],
49
+
NodesByID[node.type_id],
50
+
await NodeManager.Instance.GetNewNodeId()
51
+
);
52
+
53
+
n.statics = node.statics;
54
+
await n.onStaticsUpdate(n);
55
+
56
+
nodes.push(n);
57
+
}
58
+
59
+
for(let i in nodes){
60
+
let outputs: { node: number, index: number }[][] = json[i].outputs;
61
+
let node = nodes[i];
62
+
63
+
for(let j in outputs){
64
+
let output = node.outputs[j];
65
+
66
+
for(let k in outputs[j]){
67
+
let connection = outputs[j][k];
68
+
if(!connection)continue;
69
+
70
+
let peerNode = nodes[connection.node];
71
+
let input = peerNode.inputs[connection.index];
72
+
73
+
output.connections.push(input);
74
+
input.connections.push(output);
75
+
}
76
+
}
77
+
}
78
+
79
+
return nodes;
80
+
}
+40
src/utils/interections.ts
+40
src/utils/interections.ts
···
···
1
+
import { PositionInfo } from "../renderer";
2
+
3
+
export let screenToWorldSpace = ( canvas: HTMLCanvasElement, position: PositionInfo, pointX: number, pointY: number ): [ number, number ] => {
4
+
let startX = canvas.width / -2;
5
+
let startY = canvas.height / -2;
6
+
7
+
let worldX = ((pointX + startX) / position.scale) - position.x - startX;
8
+
let worldY = ((pointY + startY) / position.scale) - position.y - startY;
9
+
10
+
return [ worldX, worldY ];
11
+
}
12
+
13
+
export let isPointInRectApplyOffset = ( canvas: HTMLCanvasElement, position: PositionInfo, pointX: number, pointY: number, rectX: number, rectY: number, rectW: number, rectH: number ): boolean => {
14
+
let startX = canvas.width / -2;
15
+
let startY = canvas.height / -2;
16
+
17
+
let screenPointX = (pointX + startX);
18
+
let screenPointY = (pointY + startY);
19
+
20
+
let rectScreenX = (rectX + startX + position.x) * position.scale;
21
+
let rectScreenY = (rectY + startY + position.y) * position.scale;
22
+
let rectScreenW = rectW * position.scale;
23
+
let rectScreenH = rectH * position.scale;
24
+
25
+
return (
26
+
screenPointX > rectScreenX &&
27
+
screenPointX < rectScreenX + rectScreenW &&
28
+
screenPointY > rectScreenY &&
29
+
screenPointY < rectScreenY + rectScreenH
30
+
)
31
+
}
32
+
33
+
export let isPointInRect = ( canvas: HTMLCanvasElement, pointX: number, pointY: number, rectX: number, rectY: number, rectW: number, rectH: number ): boolean => {
34
+
return (
35
+
pointX > canvas.width / 2 + rectX &&
36
+
pointX < canvas.width / 2 + rectX + rectW &&
37
+
pointY > canvas.height / 2 + rectY &&
38
+
pointY < canvas.height / 2 + rectY + rectH
39
+
)
40
+
}
+1
src/utils/lerp.ts
+1
src/utils/lerp.ts
···
···
1
+
export let lerp = ( a: number, b: number, t: number ): number => a + ( b - a ) * t;
+1372
-1309
src-tauri/Cargo.lock
+1372
-1309
src-tauri/Cargo.lock
···
6
name = "VRCMacros"
7
version = "0.1.0"
8
dependencies = [
9
"dirs",
10
"serde",
11
"serde_json",
12
-
"sqlx",
13
"tauri",
14
"tauri-build",
15
"tauri-plugin-opener",
16
"tokio",
17
]
18
19
[[package]]
20
-
name = "addr2line"
21
-
version = "0.24.2"
22
-
source = "registry+https://github.com/rust-lang/crates.io-index"
23
-
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
24
-
dependencies = [
25
-
"gimli",
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.3"
37
source = "registry+https://github.com/rust-lang/crates.io-index"
38
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
39
dependencies = [
40
"memchr",
41
]
···
56
]
57
58
[[package]]
59
-
name = "allocator-api2"
60
-
version = "0.2.21"
61
source = "registry+https://github.com/rust-lang/crates.io-index"
62
-
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
63
64
[[package]]
65
-
name = "android-tzdata"
66
-
version = "0.1.1"
67
source = "registry+https://github.com/rust-lang/crates.io-index"
68
-
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
69
70
[[package]]
71
-
name = "android_system_properties"
72
-
version = "0.1.5"
73
source = "registry+https://github.com/rust-lang/crates.io-index"
74
-
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
75
dependencies = [
76
-
"libc",
77
]
78
79
[[package]]
80
-
name = "anyhow"
81
-
version = "1.0.98"
82
source = "registry+https://github.com/rust-lang/crates.io-index"
83
-
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
84
85
[[package]]
86
name = "async-broadcast"
···
108
109
[[package]]
110
name = "async-executor"
111
-
version = "1.13.2"
112
source = "registry+https://github.com/rust-lang/crates.io-index"
113
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
114
dependencies = [
115
"async-task",
116
"concurrent-queue",
···
122
123
[[package]]
124
name = "async-io"
125
-
version = "2.5.0"
126
source = "registry+https://github.com/rust-lang/crates.io-index"
127
-
checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
128
dependencies = [
129
-
"async-lock",
130
"cfg-if",
131
"concurrent-queue",
132
"futures-io",
133
"futures-lite",
134
"parking",
135
"polling",
136
-
"rustix",
137
"slab",
138
-
"windows-sys 0.60.2",
139
]
140
141
[[package]]
142
name = "async-lock"
143
-
version = "3.4.0"
144
source = "registry+https://github.com/rust-lang/crates.io-index"
145
-
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
146
dependencies = [
147
"event-listener",
148
"event-listener-strategy",
···
151
152
[[package]]
153
name = "async-process"
154
-
version = "2.4.0"
155
source = "registry+https://github.com/rust-lang/crates.io-index"
156
-
checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
157
dependencies = [
158
"async-channel",
159
"async-io",
···
164
"cfg-if",
165
"event-listener",
166
"futures-lite",
167
-
"rustix",
168
]
169
170
[[package]]
···
175
dependencies = [
176
"proc-macro2",
177
"quote",
178
-
"syn 2.0.104",
179
]
180
181
[[package]]
182
name = "async-signal"
183
-
version = "0.2.12"
184
source = "registry+https://github.com/rust-lang/crates.io-index"
185
-
checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
186
dependencies = [
187
"async-io",
188
"async-lock",
···
190
"cfg-if",
191
"futures-core",
192
"futures-io",
193
-
"rustix",
194
"signal-hook-registry",
195
"slab",
196
-
"windows-sys 0.60.2",
197
]
198
199
[[package]]
···
204
205
[[package]]
206
name = "async-trait"
207
-
version = "0.1.88"
208
source = "registry+https://github.com/rust-lang/crates.io-index"
209
-
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
210
dependencies = [
211
"proc-macro2",
212
"quote",
213
-
"syn 2.0.104",
214
]
215
216
[[package]]
···
237
]
238
239
[[package]]
240
-
name = "atoi"
241
-
version = "2.0.0"
242
-
source = "registry+https://github.com/rust-lang/crates.io-index"
243
-
checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
244
-
dependencies = [
245
-
"num-traits",
246
-
]
247
-
248
-
[[package]]
249
name = "atomic-waker"
250
version = "1.1.2"
251
source = "registry+https://github.com/rust-lang/crates.io-index"
···
258
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
259
260
[[package]]
261
-
name = "backtrace"
262
-
version = "0.3.75"
263
-
source = "registry+https://github.com/rust-lang/crates.io-index"
264
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
265
-
dependencies = [
266
-
"addr2line",
267
-
"cfg-if",
268
-
"libc",
269
-
"miniz_oxide",
270
-
"object",
271
-
"rustc-demangle",
272
-
"windows-targets 0.52.6",
273
-
]
274
-
275
-
[[package]]
276
name = "base64"
277
version = "0.21.7"
278
source = "registry+https://github.com/rust-lang/crates.io-index"
···
285
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
286
287
[[package]]
288
-
name = "base64ct"
289
-
version = "1.8.0"
290
-
source = "registry+https://github.com/rust-lang/crates.io-index"
291
-
checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
292
-
293
-
[[package]]
294
name = "bitflags"
295
version = "1.3.2"
296
source = "registry+https://github.com/rust-lang/crates.io-index"
···
298
299
[[package]]
300
name = "bitflags"
301
-
version = "2.9.1"
302
source = "registry+https://github.com/rust-lang/crates.io-index"
303
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
304
dependencies = [
305
-
"serde",
306
]
307
308
[[package]]
···
325
326
[[package]]
327
name = "block2"
328
-
version = "0.6.1"
329
source = "registry+https://github.com/rust-lang/crates.io-index"
330
-
checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
331
dependencies = [
332
-
"objc2 0.6.1",
333
]
334
335
[[package]]
···
347
348
[[package]]
349
name = "brotli"
350
-
version = "8.0.1"
351
source = "registry+https://github.com/rust-lang/crates.io-index"
352
-
checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
353
dependencies = [
354
"alloc-no-stdlib",
355
"alloc-stdlib",
···
374
375
[[package]]
376
name = "bytemuck"
377
-
version = "1.23.1"
378
source = "registry+https://github.com/rust-lang/crates.io-index"
379
-
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
380
381
[[package]]
382
name = "byteorder"
···
385
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
386
387
[[package]]
388
name = "bytes"
389
version = "1.10.1"
390
source = "registry+https://github.com/rust-lang/crates.io-index"
···
399
source = "registry+https://github.com/rust-lang/crates.io-index"
400
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
401
dependencies = [
402
-
"bitflags 2.9.1",
403
"cairo-sys-rs",
404
"glib",
405
"libc",
···
420
421
[[package]]
422
name = "camino"
423
-
version = "1.1.10"
424
source = "registry+https://github.com/rust-lang/crates.io-index"
425
-
checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
426
dependencies = [
427
-
"serde",
428
]
429
430
[[package]]
···
447
"semver",
448
"serde",
449
"serde_json",
450
-
"thiserror 2.0.12",
451
]
452
453
[[package]]
···
457
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
458
dependencies = [
459
"serde",
460
-
"toml 0.9.3",
461
]
462
463
[[package]]
464
name = "cc"
465
-
version = "1.2.30"
466
source = "registry+https://github.com/rust-lang/crates.io-index"
467
-
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
468
dependencies = [
469
"shlex",
470
]
471
···
498
499
[[package]]
500
name = "cfg-if"
501
-
version = "1.0.1"
502
source = "registry+https://github.com/rust-lang/crates.io-index"
503
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
504
505
[[package]]
506
name = "cfg_aliases"
···
510
511
[[package]]
512
name = "chrono"
513
-
version = "0.4.41"
514
source = "registry+https://github.com/rust-lang/crates.io-index"
515
-
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
516
dependencies = [
517
-
"android-tzdata",
518
"iana-time-zone",
519
"num-traits",
520
"serde",
521
-
"windows-link",
522
]
523
524
[[package]]
···
539
dependencies = [
540
"crossbeam-utils",
541
]
542
-
543
-
[[package]]
544
-
name = "const-oid"
545
-
version = "0.9.6"
546
-
source = "registry+https://github.com/rust-lang/crates.io-index"
547
-
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
548
549
[[package]]
550
name = "convert_case"
···
584
source = "registry+https://github.com/rust-lang/crates.io-index"
585
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
586
dependencies = [
587
-
"bitflags 2.9.1",
588
"core-foundation",
589
"core-graphics-types",
590
"foreign-types",
···
597
source = "registry+https://github.com/rust-lang/crates.io-index"
598
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
599
dependencies = [
600
-
"bitflags 2.9.1",
601
"core-foundation",
602
"libc",
603
]
···
612
]
613
614
[[package]]
615
-
name = "crc"
616
-
version = "3.3.0"
617
-
source = "registry+https://github.com/rust-lang/crates.io-index"
618
-
checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675"
619
-
dependencies = [
620
-
"crc-catalog",
621
-
]
622
-
623
-
[[package]]
624
-
name = "crc-catalog"
625
-
version = "2.4.0"
626
-
source = "registry+https://github.com/rust-lang/crates.io-index"
627
-
checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
628
-
629
-
[[package]]
630
name = "crc32fast"
631
version = "1.5.0"
632
source = "registry+https://github.com/rust-lang/crates.io-index"
···
645
]
646
647
[[package]]
648
-
name = "crossbeam-queue"
649
-
version = "0.3.12"
650
-
source = "registry+https://github.com/rust-lang/crates.io-index"
651
-
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
652
-
dependencies = [
653
-
"crossbeam-utils",
654
-
]
655
-
656
-
[[package]]
657
name = "crossbeam-utils"
658
version = "0.8.21"
659
source = "registry+https://github.com/rust-lang/crates.io-index"
660
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
661
662
[[package]]
663
name = "crypto-common"
···
693
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
694
dependencies = [
695
"quote",
696
-
"syn 2.0.104",
697
]
698
699
[[package]]
···
703
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
704
dependencies = [
705
"quote",
706
-
"syn 2.0.104",
707
]
708
709
[[package]]
710
name = "darling"
711
-
version = "0.20.11"
712
source = "registry+https://github.com/rust-lang/crates.io-index"
713
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
714
dependencies = [
715
"darling_core",
716
"darling_macro",
···
718
719
[[package]]
720
name = "darling_core"
721
-
version = "0.20.11"
722
source = "registry+https://github.com/rust-lang/crates.io-index"
723
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
724
dependencies = [
725
"fnv",
726
"ident_case",
727
"proc-macro2",
728
"quote",
729
"strsim",
730
-
"syn 2.0.104",
731
]
732
733
[[package]]
734
name = "darling_macro"
735
-
version = "0.20.11"
736
source = "registry+https://github.com/rust-lang/crates.io-index"
737
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
738
dependencies = [
739
"darling_core",
740
"quote",
741
-
"syn 2.0.104",
742
-
]
743
-
744
-
[[package]]
745
-
name = "der"
746
-
version = "0.7.10"
747
-
source = "registry+https://github.com/rust-lang/crates.io-index"
748
-
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
749
-
dependencies = [
750
-
"const-oid",
751
-
"pem-rfc7468",
752
-
"zeroize",
753
]
754
755
[[package]]
756
name = "deranged"
757
-
version = "0.4.0"
758
source = "registry+https://github.com/rust-lang/crates.io-index"
759
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
760
dependencies = [
761
"powerfmt",
762
-
"serde",
763
]
764
765
[[package]]
···
772
"proc-macro2",
773
"quote",
774
"rustc_version",
775
-
"syn 2.0.104",
776
]
777
778
[[package]]
···
782
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
783
dependencies = [
784
"block-buffer",
785
-
"const-oid",
786
"crypto-common",
787
-
"subtle",
788
]
789
790
[[package]]
···
805
"libc",
806
"option-ext",
807
"redox_users",
808
-
"windows-sys 0.60.2",
809
]
810
811
[[package]]
···
820
source = "registry+https://github.com/rust-lang/crates.io-index"
821
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
822
dependencies = [
823
-
"bitflags 2.9.1",
824
-
"objc2 0.6.1",
825
]
826
827
[[package]]
···
832
dependencies = [
833
"proc-macro2",
834
"quote",
835
-
"syn 2.0.104",
836
]
837
838
[[package]]
839
name = "dlopen2"
840
-
version = "0.7.0"
841
source = "registry+https://github.com/rust-lang/crates.io-index"
842
-
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
843
dependencies = [
844
"dlopen2_derive",
845
"libc",
···
855
dependencies = [
856
"proc-macro2",
857
"quote",
858
-
"syn 2.0.104",
859
]
860
861
[[package]]
862
-
name = "dotenvy"
863
-
version = "0.15.7"
864
source = "registry+https://github.com/rust-lang/crates.io-index"
865
-
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
866
867
[[package]]
868
name = "dpi"
···
901
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
902
903
[[package]]
904
-
name = "either"
905
-
version = "1.15.0"
906
-
source = "registry+https://github.com/rust-lang/crates.io-index"
907
-
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
908
-
dependencies = [
909
-
"serde",
910
-
]
911
-
912
-
[[package]]
913
name = "embed-resource"
914
-
version = "3.0.5"
915
source = "registry+https://github.com/rust-lang/crates.io-index"
916
-
checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38"
917
dependencies = [
918
"cc",
919
"memchr",
920
"rustc_version",
921
-
"toml 0.9.3",
922
"vswhom",
923
"winreg",
924
]
···
936
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
937
938
[[package]]
939
name = "enumflags2"
940
version = "0.7.12"
941
source = "registry+https://github.com/rust-lang/crates.io-index"
···
953
dependencies = [
954
"proc-macro2",
955
"quote",
956
-
"syn 2.0.104",
957
]
958
959
[[package]]
···
964
965
[[package]]
966
name = "erased-serde"
967
-
version = "0.4.6"
968
source = "registry+https://github.com/rust-lang/crates.io-index"
969
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
970
dependencies = [
971
"serde",
972
"typeid",
973
]
974
975
[[package]]
976
name = "errno"
977
-
version = "0.3.13"
978
source = "registry+https://github.com/rust-lang/crates.io-index"
979
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
980
dependencies = [
981
"libc",
982
-
"windows-sys 0.60.2",
983
]
984
985
[[package]]
986
-
name = "etcetera"
987
-
version = "0.8.0"
988
source = "registry+https://github.com/rust-lang/crates.io-index"
989
-
checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
990
-
dependencies = [
991
-
"cfg-if",
992
-
"home",
993
-
"windows-sys 0.48.0",
994
-
]
995
996
[[package]]
997
name = "event-listener"
998
-
version = "5.4.0"
999
source = "registry+https://github.com/rust-lang/crates.io-index"
1000
-
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
1001
dependencies = [
1002
"concurrent-queue",
1003
"parking",
···
1021
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1022
1023
[[package]]
1024
name = "fdeflate"
1025
version = "0.3.7"
1026
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1040
]
1041
1042
[[package]]
1043
-
name = "flate2"
1044
-
version = "1.1.2"
1045
source = "registry+https://github.com/rust-lang/crates.io-index"
1046
-
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
1047
-
dependencies = [
1048
-
"crc32fast",
1049
-
"miniz_oxide",
1050
-
]
1051
1052
[[package]]
1053
-
name = "flume"
1054
-
version = "0.11.1"
1055
source = "registry+https://github.com/rust-lang/crates.io-index"
1056
-
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
1057
dependencies = [
1058
-
"futures-core",
1059
-
"futures-sink",
1060
-
"spin",
1061
]
1062
1063
[[package]]
···
1090
dependencies = [
1091
"proc-macro2",
1092
"quote",
1093
-
"syn 2.0.104",
1094
]
1095
1096
[[package]]
···
1101
1102
[[package]]
1103
name = "form_urlencoded"
1104
-
version = "1.2.1"
1105
source = "registry+https://github.com/rust-lang/crates.io-index"
1106
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
1107
dependencies = [
1108
"percent-encoding",
1109
]
···
1125
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
1126
dependencies = [
1127
"futures-core",
1128
-
"futures-sink",
1129
]
1130
1131
[[package]]
···
1146
]
1147
1148
[[package]]
1149
-
name = "futures-intrusive"
1150
-
version = "0.5.0"
1151
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1152
-
checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
1153
-
dependencies = [
1154
-
"futures-core",
1155
-
"lock_api",
1156
-
"parking_lot",
1157
-
]
1158
-
1159
-
[[package]]
1160
name = "futures-io"
1161
version = "0.3.31"
1162
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1164
1165
[[package]]
1166
name = "futures-lite"
1167
-
version = "2.6.0"
1168
source = "registry+https://github.com/rust-lang/crates.io-index"
1169
-
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
1170
dependencies = [
1171
"fastrand",
1172
"futures-core",
···
1183
dependencies = [
1184
"proc-macro2",
1185
"quote",
1186
-
"syn 2.0.104",
1187
]
1188
1189
[[package]]
···
1325
1326
[[package]]
1327
name = "generic-array"
1328
-
version = "0.14.7"
1329
source = "registry+https://github.com/rust-lang/crates.io-index"
1330
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1331
dependencies = [
1332
"typenum",
1333
"version_check",
1334
]
1335
1336
[[package]]
1337
name = "getrandom"
1338
version = "0.1.16"
1339
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1357
1358
[[package]]
1359
name = "getrandom"
1360
-
version = "0.3.3"
1361
source = "registry+https://github.com/rust-lang/crates.io-index"
1362
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1363
dependencies = [
1364
"cfg-if",
1365
"libc",
1366
"r-efi",
1367
-
"wasi 0.14.2+wasi-0.2.4",
1368
]
1369
1370
[[package]]
1371
-
name = "gimli"
1372
-
version = "0.31.1"
1373
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1374
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1375
-
1376
-
[[package]]
1377
name = "gio"
1378
version = "0.18.4"
1379
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1411
source = "registry+https://github.com/rust-lang/crates.io-index"
1412
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1413
dependencies = [
1414
-
"bitflags 2.9.1",
1415
"futures-channel",
1416
"futures-core",
1417
"futures-executor",
···
1435
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1436
dependencies = [
1437
"heck 0.4.1",
1438
-
"proc-macro-crate 2.0.0",
1439
"proc-macro-error",
1440
"proc-macro2",
1441
"quote",
1442
-
"syn 2.0.104",
1443
]
1444
1445
[[package]]
···
1454
1455
[[package]]
1456
name = "glob"
1457
-
version = "0.3.2"
1458
source = "registry+https://github.com/rust-lang/crates.io-index"
1459
-
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
1460
1461
[[package]]
1462
name = "gobject-sys"
···
1518
"proc-macro-error",
1519
"proc-macro2",
1520
"quote",
1521
-
"syn 2.0.104",
1522
]
1523
1524
[[package]]
···
1529
1530
[[package]]
1531
name = "hashbrown"
1532
-
version = "0.15.4"
1533
source = "registry+https://github.com/rust-lang/crates.io-index"
1534
-
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
1535
dependencies = [
1536
-
"allocator-api2",
1537
-
"equivalent",
1538
"foldhash",
1539
]
1540
1541
[[package]]
1542
-
name = "hashlink"
1543
-
version = "0.10.0"
1544
source = "registry+https://github.com/rust-lang/crates.io-index"
1545
-
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
1546
-
dependencies = [
1547
-
"hashbrown 0.15.4",
1548
-
]
1549
1550
[[package]]
1551
name = "heck"
···
1572
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1573
1574
[[package]]
1575
-
name = "hkdf"
1576
-
version = "0.12.4"
1577
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1578
-
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
1579
-
dependencies = [
1580
-
"hmac",
1581
-
]
1582
-
1583
-
[[package]]
1584
-
name = "hmac"
1585
-
version = "0.12.1"
1586
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1587
-
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
1588
-
dependencies = [
1589
-
"digest",
1590
-
]
1591
-
1592
-
[[package]]
1593
-
name = "home"
1594
-
version = "0.5.11"
1595
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1596
-
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
1597
-
dependencies = [
1598
-
"windows-sys 0.59.0",
1599
-
]
1600
-
1601
-
[[package]]
1602
name = "html5ever"
1603
version = "0.29.1"
1604
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1652
1653
[[package]]
1654
name = "hyper"
1655
-
version = "1.6.0"
1656
source = "registry+https://github.com/rust-lang/crates.io-index"
1657
-
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1658
dependencies = [
1659
"bytes",
1660
"futures-channel",
1661
-
"futures-util",
1662
"http",
1663
"http-body",
1664
"httparse",
1665
"itoa",
1666
"pin-project-lite",
1667
"smallvec",
1668
"tokio",
1669
"want",
···
1671
1672
[[package]]
1673
name = "hyper-util"
1674
-
version = "0.1.16"
1675
source = "registry+https://github.com/rust-lang/crates.io-index"
1676
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1677
dependencies = [
1678
"base64 0.22.1",
1679
"bytes",
···
1695
1696
[[package]]
1697
name = "iana-time-zone"
1698
-
version = "0.1.63"
1699
source = "registry+https://github.com/rust-lang/crates.io-index"
1700
-
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1701
dependencies = [
1702
"android_system_properties",
1703
"core-foundation-sys",
···
1705
"js-sys",
1706
"log",
1707
"wasm-bindgen",
1708
-
"windows-core",
1709
]
1710
1711
[[package]]
···
1724
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1725
dependencies = [
1726
"byteorder",
1727
-
"png",
1728
]
1729
1730
[[package]]
1731
name = "icu_collections"
1732
-
version = "2.0.0"
1733
source = "registry+https://github.com/rust-lang/crates.io-index"
1734
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1735
dependencies = [
1736
"displaydoc",
1737
"potential_utf",
···
1742
1743
[[package]]
1744
name = "icu_locale_core"
1745
-
version = "2.0.0"
1746
source = "registry+https://github.com/rust-lang/crates.io-index"
1747
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1748
dependencies = [
1749
"displaydoc",
1750
"litemap",
···
1755
1756
[[package]]
1757
name = "icu_normalizer"
1758
-
version = "2.0.0"
1759
source = "registry+https://github.com/rust-lang/crates.io-index"
1760
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1761
dependencies = [
1762
-
"displaydoc",
1763
"icu_collections",
1764
"icu_normalizer_data",
1765
"icu_properties",
···
1770
1771
[[package]]
1772
name = "icu_normalizer_data"
1773
-
version = "2.0.0"
1774
source = "registry+https://github.com/rust-lang/crates.io-index"
1775
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1776
1777
[[package]]
1778
name = "icu_properties"
1779
-
version = "2.0.1"
1780
source = "registry+https://github.com/rust-lang/crates.io-index"
1781
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1782
dependencies = [
1783
-
"displaydoc",
1784
"icu_collections",
1785
"icu_locale_core",
1786
"icu_properties_data",
1787
"icu_provider",
1788
-
"potential_utf",
1789
"zerotrie",
1790
"zerovec",
1791
]
1792
1793
[[package]]
1794
name = "icu_properties_data"
1795
-
version = "2.0.1"
1796
source = "registry+https://github.com/rust-lang/crates.io-index"
1797
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1798
1799
[[package]]
1800
name = "icu_provider"
1801
-
version = "2.0.0"
1802
source = "registry+https://github.com/rust-lang/crates.io-index"
1803
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1804
dependencies = [
1805
"displaydoc",
1806
"icu_locale_core",
1807
-
"stable_deref_trait",
1808
-
"tinystr",
1809
"writeable",
1810
"yoke",
1811
"zerofrom",
···
1821
1822
[[package]]
1823
name = "idna"
1824
-
version = "1.0.3"
1825
source = "registry+https://github.com/rust-lang/crates.io-index"
1826
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
1827
dependencies = [
1828
"idna_adapter",
1829
"smallvec",
···
1841
]
1842
1843
[[package]]
1844
name = "indexmap"
1845
version = "1.9.3"
1846
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1853
1854
[[package]]
1855
name = "indexmap"
1856
-
version = "2.10.0"
1857
source = "registry+https://github.com/rust-lang/crates.io-index"
1858
-
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
1859
dependencies = [
1860
"equivalent",
1861
-
"hashbrown 0.15.4",
1862
"serde",
1863
]
1864
1865
[[package]]
···
1872
]
1873
1874
[[package]]
1875
-
name = "io-uring"
1876
-
version = "0.7.9"
1877
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1878
-
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
1879
-
dependencies = [
1880
-
"bitflags 2.9.1",
1881
-
"cfg-if",
1882
-
"libc",
1883
-
]
1884
-
1885
-
[[package]]
1886
name = "ipnet"
1887
version = "2.11.0"
1888
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1890
1891
[[package]]
1892
name = "iri-string"
1893
-
version = "0.7.8"
1894
source = "registry+https://github.com/rust-lang/crates.io-index"
1895
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1896
dependencies = [
1897
"memchr",
1898
"serde",
···
1970
1971
[[package]]
1972
name = "js-sys"
1973
-
version = "0.3.77"
1974
source = "registry+https://github.com/rust-lang/crates.io-index"
1975
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1976
dependencies = [
1977
"once_cell",
1978
"wasm-bindgen",
···
2006
source = "registry+https://github.com/rust-lang/crates.io-index"
2007
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
2008
dependencies = [
2009
-
"bitflags 2.9.1",
2010
"serde",
2011
"unicode-segmentation",
2012
]
···
2019
dependencies = [
2020
"cssparser",
2021
"html5ever",
2022
-
"indexmap 2.10.0",
2023
"selectors",
2024
]
2025
···
2028
version = "1.5.0"
2029
source = "registry+https://github.com/rust-lang/crates.io-index"
2030
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2031
-
dependencies = [
2032
-
"spin",
2033
-
]
2034
2035
[[package]]
2036
name = "libappindicator"
···
2052
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
2053
dependencies = [
2054
"gtk-sys",
2055
-
"libloading",
2056
"once_cell",
2057
]
2058
2059
[[package]]
2060
name = "libc"
2061
-
version = "0.2.174"
2062
source = "registry+https://github.com/rust-lang/crates.io-index"
2063
-
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
2064
2065
[[package]]
2066
name = "libloading"
···
2073
]
2074
2075
[[package]]
2076
-
name = "libm"
2077
-
version = "0.2.15"
2078
source = "registry+https://github.com/rust-lang/crates.io-index"
2079
-
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
2080
2081
[[package]]
2082
name = "libredox"
2083
-
version = "0.1.8"
2084
source = "registry+https://github.com/rust-lang/crates.io-index"
2085
-
checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7"
2086
dependencies = [
2087
-
"bitflags 2.9.1",
2088
"libc",
2089
]
2090
2091
[[package]]
2092
-
name = "libsqlite3-sys"
2093
-
version = "0.30.1"
2094
source = "registry+https://github.com/rust-lang/crates.io-index"
2095
-
checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
2096
-
dependencies = [
2097
-
"cc",
2098
-
"pkg-config",
2099
-
"vcpkg",
2100
-
]
2101
2102
[[package]]
2103
name = "linux-raw-sys"
2104
-
version = "0.9.4"
2105
source = "registry+https://github.com/rust-lang/crates.io-index"
2106
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
2107
2108
[[package]]
2109
name = "litemap"
2110
-
version = "0.8.0"
2111
source = "registry+https://github.com/rust-lang/crates.io-index"
2112
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
2113
2114
[[package]]
2115
name = "lock_api"
2116
-
version = "0.4.13"
2117
source = "registry+https://github.com/rust-lang/crates.io-index"
2118
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
2119
dependencies = [
2120
-
"autocfg",
2121
"scopeguard",
2122
]
2123
2124
[[package]]
2125
name = "log"
2126
-
version = "0.4.27"
2127
source = "registry+https://github.com/rust-lang/crates.io-index"
2128
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
2129
2130
[[package]]
2131
name = "mac"
···
2155
dependencies = [
2156
"proc-macro2",
2157
"quote",
2158
-
"syn 2.0.104",
2159
]
2160
2161
[[package]]
···
2165
checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
2166
2167
[[package]]
2168
-
name = "md-5"
2169
-
version = "0.10.6"
2170
source = "registry+https://github.com/rust-lang/crates.io-index"
2171
-
checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
2172
-
dependencies = [
2173
-
"cfg-if",
2174
-
"digest",
2175
-
]
2176
2177
[[package]]
2178
-
name = "memchr"
2179
-
version = "2.7.5"
2180
source = "registry+https://github.com/rust-lang/crates.io-index"
2181
-
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
2182
2183
[[package]]
2184
name = "memoffset"
···
2194
version = "0.3.17"
2195
source = "registry+https://github.com/rust-lang/crates.io-index"
2196
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2197
2198
[[package]]
2199
name = "miniz_oxide"
···
2207
2208
[[package]]
2209
name = "mio"
2210
-
version = "1.0.4"
2211
source = "registry+https://github.com/rust-lang/crates.io-index"
2212
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2213
dependencies = [
2214
"libc",
2215
"wasi 0.11.1+wasi-snapshot-preview1",
2216
-
"windows-sys 0.59.0",
2217
]
2218
2219
[[package]]
2220
name = "muda"
2221
-
version = "0.17.0"
2222
source = "registry+https://github.com/rust-lang/crates.io-index"
2223
-
checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988"
2224
dependencies = [
2225
"crossbeam-channel",
2226
"dpi",
2227
"gtk",
2228
"keyboard-types",
2229
-
"objc2 0.6.1",
2230
"objc2-app-kit",
2231
"objc2-core-foundation",
2232
-
"objc2-foundation 0.3.1",
2233
"once_cell",
2234
-
"png",
2235
"serde",
2236
-
"thiserror 2.0.12",
2237
-
"windows-sys 0.59.0",
2238
]
2239
2240
[[package]]
···
2243
source = "registry+https://github.com/rust-lang/crates.io-index"
2244
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2245
dependencies = [
2246
-
"bitflags 2.9.1",
2247
"jni-sys",
2248
"log",
2249
"ndk-sys",
···
2279
source = "registry+https://github.com/rust-lang/crates.io-index"
2280
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2281
dependencies = [
2282
-
"bitflags 2.9.1",
2283
"cfg-if",
2284
"cfg_aliases",
2285
"libc",
···
2293
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2294
2295
[[package]]
2296
-
name = "num-bigint-dig"
2297
-
version = "0.8.4"
2298
source = "registry+https://github.com/rust-lang/crates.io-index"
2299
-
checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
2300
dependencies = [
2301
-
"byteorder",
2302
-
"lazy_static",
2303
-
"libm",
2304
-
"num-integer",
2305
-
"num-iter",
2306
-
"num-traits",
2307
-
"rand 0.8.5",
2308
-
"smallvec",
2309
-
"zeroize",
2310
]
2311
2312
[[package]]
2313
-
name = "num-conv"
2314
-
version = "0.1.0"
2315
source = "registry+https://github.com/rust-lang/crates.io-index"
2316
-
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
2317
-
2318
-
[[package]]
2319
-
name = "num-integer"
2320
-
version = "0.1.46"
2321
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2322
-
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
2323
dependencies = [
2324
-
"num-traits",
2325
]
2326
2327
[[package]]
2328
-
name = "num-iter"
2329
-
version = "0.1.45"
2330
source = "registry+https://github.com/rust-lang/crates.io-index"
2331
-
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
2332
-
dependencies = [
2333
-
"autocfg",
2334
-
"num-integer",
2335
-
"num-traits",
2336
-
]
2337
2338
[[package]]
2339
name = "num-traits"
···
2342
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
2343
dependencies = [
2344
"autocfg",
2345
-
"libm",
2346
]
2347
2348
[[package]]
2349
name = "num_enum"
2350
-
version = "0.7.4"
2351
source = "registry+https://github.com/rust-lang/crates.io-index"
2352
-
checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2353
dependencies = [
2354
"num_enum_derive",
2355
"rustversion",
···
2357
2358
[[package]]
2359
name = "num_enum_derive"
2360
-
version = "0.7.4"
2361
source = "registry+https://github.com/rust-lang/crates.io-index"
2362
-
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2363
dependencies = [
2364
-
"proc-macro-crate 3.3.0",
2365
"proc-macro2",
2366
"quote",
2367
-
"syn 2.0.104",
2368
]
2369
2370
[[package]]
···
2385
2386
[[package]]
2387
name = "objc2"
2388
-
version = "0.6.1"
2389
source = "registry+https://github.com/rust-lang/crates.io-index"
2390
-
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
2391
dependencies = [
2392
"objc2-encode",
2393
"objc2-exception-helper",
···
2395
2396
[[package]]
2397
name = "objc2-app-kit"
2398
-
version = "0.3.1"
2399
source = "registry+https://github.com/rust-lang/crates.io-index"
2400
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2401
dependencies = [
2402
-
"bitflags 2.9.1",
2403
-
"block2 0.6.1",
2404
"libc",
2405
-
"objc2 0.6.1",
2406
"objc2-cloud-kit",
2407
"objc2-core-data",
2408
"objc2-core-foundation",
2409
"objc2-core-graphics",
2410
"objc2-core-image",
2411
-
"objc2-foundation 0.3.1",
2412
-
"objc2-quartz-core 0.3.1",
2413
]
2414
2415
[[package]]
2416
name = "objc2-cloud-kit"
2417
-
version = "0.3.1"
2418
source = "registry+https://github.com/rust-lang/crates.io-index"
2419
-
checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d"
2420
dependencies = [
2421
-
"bitflags 2.9.1",
2422
-
"objc2 0.6.1",
2423
-
"objc2-foundation 0.3.1",
2424
]
2425
2426
[[package]]
2427
name = "objc2-core-data"
2428
-
version = "0.3.1"
2429
source = "registry+https://github.com/rust-lang/crates.io-index"
2430
-
checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d"
2431
dependencies = [
2432
-
"bitflags 2.9.1",
2433
-
"objc2 0.6.1",
2434
-
"objc2-foundation 0.3.1",
2435
]
2436
2437
[[package]]
2438
name = "objc2-core-foundation"
2439
-
version = "0.3.1"
2440
source = "registry+https://github.com/rust-lang/crates.io-index"
2441
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2442
dependencies = [
2443
-
"bitflags 2.9.1",
2444
"dispatch2",
2445
-
"objc2 0.6.1",
2446
]
2447
2448
[[package]]
2449
name = "objc2-core-graphics"
2450
-
version = "0.3.1"
2451
source = "registry+https://github.com/rust-lang/crates.io-index"
2452
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2453
dependencies = [
2454
-
"bitflags 2.9.1",
2455
"dispatch2",
2456
-
"objc2 0.6.1",
2457
"objc2-core-foundation",
2458
"objc2-io-surface",
2459
]
2460
2461
[[package]]
2462
name = "objc2-core-image"
2463
-
version = "0.3.1"
2464
source = "registry+https://github.com/rust-lang/crates.io-index"
2465
-
checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e"
2466
dependencies = [
2467
-
"objc2 0.6.1",
2468
-
"objc2-foundation 0.3.1",
2469
]
2470
2471
[[package]]
···
2489
source = "registry+https://github.com/rust-lang/crates.io-index"
2490
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2491
dependencies = [
2492
-
"bitflags 2.9.1",
2493
"block2 0.5.1",
2494
"libc",
2495
"objc2 0.5.2",
···
2497
2498
[[package]]
2499
name = "objc2-foundation"
2500
-
version = "0.3.1"
2501
source = "registry+https://github.com/rust-lang/crates.io-index"
2502
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
2503
dependencies = [
2504
-
"bitflags 2.9.1",
2505
-
"block2 0.6.1",
2506
"libc",
2507
-
"objc2 0.6.1",
2508
"objc2-core-foundation",
2509
]
2510
2511
[[package]]
2512
name = "objc2-io-surface"
2513
-
version = "0.3.1"
2514
source = "registry+https://github.com/rust-lang/crates.io-index"
2515
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
2516
dependencies = [
2517
-
"bitflags 2.9.1",
2518
-
"objc2 0.6.1",
2519
"objc2-core-foundation",
2520
]
2521
···
2525
source = "registry+https://github.com/rust-lang/crates.io-index"
2526
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2527
dependencies = [
2528
-
"bitflags 2.9.1",
2529
"block2 0.5.1",
2530
"objc2 0.5.2",
2531
"objc2-foundation 0.2.2",
···
2537
source = "registry+https://github.com/rust-lang/crates.io-index"
2538
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2539
dependencies = [
2540
-
"bitflags 2.9.1",
2541
"block2 0.5.1",
2542
"objc2 0.5.2",
2543
"objc2-foundation 0.2.2",
···
2546
2547
[[package]]
2548
name = "objc2-quartz-core"
2549
-
version = "0.3.1"
2550
source = "registry+https://github.com/rust-lang/crates.io-index"
2551
-
checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5"
2552
dependencies = [
2553
-
"bitflags 2.9.1",
2554
-
"objc2 0.6.1",
2555
-
"objc2-foundation 0.3.1",
2556
]
2557
2558
[[package]]
2559
-
name = "objc2-ui-kit"
2560
-
version = "0.3.1"
2561
source = "registry+https://github.com/rust-lang/crates.io-index"
2562
-
checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed"
2563
dependencies = [
2564
-
"bitflags 2.9.1",
2565
-
"objc2 0.6.1",
2566
"objc2-core-foundation",
2567
-
"objc2-foundation 0.3.1",
2568
]
2569
2570
[[package]]
2571
-
name = "objc2-web-kit"
2572
-
version = "0.3.1"
2573
source = "registry+https://github.com/rust-lang/crates.io-index"
2574
-
checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad"
2575
dependencies = [
2576
-
"bitflags 2.9.1",
2577
-
"block2 0.6.1",
2578
-
"objc2 0.6.1",
2579
-
"objc2-app-kit",
2580
"objc2-core-foundation",
2581
-
"objc2-foundation 0.3.1",
2582
]
2583
2584
[[package]]
2585
-
name = "object"
2586
-
version = "0.36.7"
2587
source = "registry+https://github.com/rust-lang/crates.io-index"
2588
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
2589
dependencies = [
2590
-
"memchr",
2591
]
2592
2593
[[package]]
···
2625
]
2626
2627
[[package]]
2628
name = "pango"
2629
version = "0.18.3"
2630
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2657
2658
[[package]]
2659
name = "parking_lot"
2660
-
version = "0.12.4"
2661
source = "registry+https://github.com/rust-lang/crates.io-index"
2662
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
2663
dependencies = [
2664
"lock_api",
2665
"parking_lot_core",
···
2667
2668
[[package]]
2669
name = "parking_lot_core"
2670
-
version = "0.9.11"
2671
source = "registry+https://github.com/rust-lang/crates.io-index"
2672
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2673
dependencies = [
2674
"cfg-if",
2675
"libc",
2676
"redox_syscall",
2677
"smallvec",
2678
-
"windows-targets 0.52.6",
2679
]
2680
2681
[[package]]
···
2685
checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
2686
2687
[[package]]
2688
-
name = "pem-rfc7468"
2689
-
version = "0.7.0"
2690
source = "registry+https://github.com/rust-lang/crates.io-index"
2691
-
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
2692
-
dependencies = [
2693
-
"base64ct",
2694
-
]
2695
2696
[[package]]
2697
-
name = "percent-encoding"
2698
-
version = "2.3.1"
2699
source = "registry+https://github.com/rust-lang/crates.io-index"
2700
-
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
2701
2702
[[package]]
2703
name = "phf"
···
2803
"phf_shared 0.11.3",
2804
"proc-macro2",
2805
"quote",
2806
-
"syn 2.0.104",
2807
]
2808
2809
[[package]]
···
2857
]
2858
2859
[[package]]
2860
-
name = "pkcs1"
2861
-
version = "0.7.5"
2862
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2863
-
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
2864
-
dependencies = [
2865
-
"der",
2866
-
"pkcs8",
2867
-
"spki",
2868
-
]
2869
-
2870
-
[[package]]
2871
-
name = "pkcs8"
2872
-
version = "0.10.2"
2873
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2874
-
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
2875
-
dependencies = [
2876
-
"der",
2877
-
"spki",
2878
-
]
2879
-
2880
-
[[package]]
2881
name = "pkg-config"
2882
version = "0.3.32"
2883
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2885
2886
[[package]]
2887
name = "plist"
2888
-
version = "1.7.4"
2889
source = "registry+https://github.com/rust-lang/crates.io-index"
2890
-
checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1"
2891
dependencies = [
2892
"base64 0.22.1",
2893
-
"indexmap 2.10.0",
2894
-
"quick-xml",
2895
"serde",
2896
"time",
2897
]
···
2910
]
2911
2912
[[package]]
2913
name = "polling"
2914
-
version = "3.9.0"
2915
source = "registry+https://github.com/rust-lang/crates.io-index"
2916
-
checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7"
2917
dependencies = [
2918
"cfg-if",
2919
"concurrent-queue",
2920
"hermit-abi",
2921
"pin-project-lite",
2922
-
"rustix",
2923
-
"windows-sys 0.60.2",
2924
]
2925
2926
[[package]]
2927
name = "potential_utf"
2928
-
version = "0.1.2"
2929
source = "registry+https://github.com/rust-lang/crates.io-index"
2930
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
2931
dependencies = [
2932
"zerovec",
2933
]
···
2965
2966
[[package]]
2967
name = "proc-macro-crate"
2968
-
version = "2.0.0"
2969
source = "registry+https://github.com/rust-lang/crates.io-index"
2970
-
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
2971
dependencies = [
2972
-
"toml_edit 0.20.7",
2973
]
2974
2975
[[package]]
2976
name = "proc-macro-crate"
2977
-
version = "3.3.0"
2978
source = "registry+https://github.com/rust-lang/crates.io-index"
2979
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
2980
dependencies = [
2981
-
"toml_edit 0.22.27",
2982
]
2983
2984
[[package]]
···
3013
3014
[[package]]
3015
name = "proc-macro2"
3016
-
version = "1.0.95"
3017
source = "registry+https://github.com/rust-lang/crates.io-index"
3018
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
3019
dependencies = [
3020
"unicode-ident",
3021
]
3022
3023
[[package]]
3024
name = "quick-xml"
3025
-
version = "0.38.0"
3026
source = "registry+https://github.com/rust-lang/crates.io-index"
3027
-
checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b"
3028
dependencies = [
3029
"memchr",
3030
]
3031
3032
[[package]]
3033
name = "quote"
3034
-
version = "1.0.40"
3035
source = "registry+https://github.com/rust-lang/crates.io-index"
3036
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
3037
dependencies = [
3038
"proc-macro2",
3039
]
···
3070
]
3071
3072
[[package]]
3073
name = "rand_chacha"
3074
version = "0.2.2"
3075
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3090
]
3091
3092
[[package]]
3093
name = "rand_core"
3094
version = "0.5.1"
3095
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3105
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
3106
dependencies = [
3107
"getrandom 0.2.16",
3108
]
3109
3110
[[package]]
···
3133
3134
[[package]]
3135
name = "redox_syscall"
3136
-
version = "0.5.17"
3137
source = "registry+https://github.com/rust-lang/crates.io-index"
3138
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
3139
dependencies = [
3140
-
"bitflags 2.9.1",
3141
]
3142
3143
[[package]]
3144
name = "redox_users"
3145
-
version = "0.5.0"
3146
source = "registry+https://github.com/rust-lang/crates.io-index"
3147
-
checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
3148
dependencies = [
3149
"getrandom 0.2.16",
3150
"libredox",
3151
-
"thiserror 2.0.12",
3152
]
3153
3154
[[package]]
3155
name = "ref-cast"
3156
-
version = "1.0.24"
3157
source = "registry+https://github.com/rust-lang/crates.io-index"
3158
-
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
3159
dependencies = [
3160
"ref-cast-impl",
3161
]
3162
3163
[[package]]
3164
name = "ref-cast-impl"
3165
-
version = "1.0.24"
3166
source = "registry+https://github.com/rust-lang/crates.io-index"
3167
-
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
3168
dependencies = [
3169
"proc-macro2",
3170
"quote",
3171
-
"syn 2.0.104",
3172
]
3173
3174
[[package]]
3175
name = "regex"
3176
-
version = "1.11.1"
3177
source = "registry+https://github.com/rust-lang/crates.io-index"
3178
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
3179
dependencies = [
3180
"aho-corasick",
3181
"memchr",
···
3185
3186
[[package]]
3187
name = "regex-automata"
3188
-
version = "0.4.9"
3189
source = "registry+https://github.com/rust-lang/crates.io-index"
3190
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
3191
dependencies = [
3192
"aho-corasick",
3193
"memchr",
···
3196
3197
[[package]]
3198
name = "regex-syntax"
3199
-
version = "0.8.5"
3200
source = "registry+https://github.com/rust-lang/crates.io-index"
3201
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
3202
3203
[[package]]
3204
name = "reqwest"
3205
-
version = "0.12.22"
3206
source = "registry+https://github.com/rust-lang/crates.io-index"
3207
-
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
3208
dependencies = [
3209
"base64 0.22.1",
3210
"bytes",
···
3236
]
3237
3238
[[package]]
3239
-
name = "rsa"
3240
-
version = "0.9.8"
3241
source = "registry+https://github.com/rust-lang/crates.io-index"
3242
-
checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
3243
dependencies = [
3244
-
"const-oid",
3245
-
"digest",
3246
-
"num-bigint-dig",
3247
-
"num-integer",
3248
-
"num-traits",
3249
-
"pkcs1",
3250
-
"pkcs8",
3251
-
"rand_core 0.6.4",
3252
-
"signature",
3253
-
"spki",
3254
-
"subtle",
3255
-
"zeroize",
3256
]
3257
3258
[[package]]
3259
-
name = "rustc-demangle"
3260
-
version = "0.1.26"
3261
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3262
-
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
3263
-
3264
-
[[package]]
3265
name = "rustc_version"
3266
version = "0.4.1"
3267
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3272
3273
[[package]]
3274
name = "rustix"
3275
-
version = "1.0.8"
3276
source = "registry+https://github.com/rust-lang/crates.io-index"
3277
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
3278
dependencies = [
3279
-
"bitflags 2.9.1",
3280
"errno",
3281
"libc",
3282
-
"linux-raw-sys",
3283
-
"windows-sys 0.60.2",
3284
]
3285
3286
[[package]]
3287
name = "rustversion"
3288
-
version = "1.0.21"
3289
source = "registry+https://github.com/rust-lang/crates.io-index"
3290
-
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
3291
3292
[[package]]
3293
name = "ryu"
···
3333
3334
[[package]]
3335
name = "schemars"
3336
-
version = "1.0.4"
3337
source = "registry+https://github.com/rust-lang/crates.io-index"
3338
-
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
3339
dependencies = [
3340
"dyn-clone",
3341
"ref-cast",
···
3352
"proc-macro2",
3353
"quote",
3354
"serde_derive_internals",
3355
-
"syn 2.0.104",
3356
]
3357
3358
[[package]]
3359
name = "scopeguard"
3360
version = "1.2.0"
3361
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3381
3382
[[package]]
3383
name = "semver"
3384
-
version = "1.0.26"
3385
source = "registry+https://github.com/rust-lang/crates.io-index"
3386
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
3387
dependencies = [
3388
"serde",
3389
]
3390
3391
[[package]]
3392
name = "serde"
3393
-
version = "1.0.219"
3394
source = "registry+https://github.com/rust-lang/crates.io-index"
3395
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
3396
dependencies = [
3397
"serde_derive",
3398
]
3399
3400
[[package]]
3401
name = "serde-untagged"
3402
-
version = "0.1.7"
3403
source = "registry+https://github.com/rust-lang/crates.io-index"
3404
-
checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
3405
dependencies = [
3406
"erased-serde",
3407
"serde",
3408
"typeid",
3409
]
3410
3411
[[package]]
3412
name = "serde_derive"
3413
-
version = "1.0.219"
3414
source = "registry+https://github.com/rust-lang/crates.io-index"
3415
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
3416
dependencies = [
3417
"proc-macro2",
3418
"quote",
3419
-
"syn 2.0.104",
3420
]
3421
3422
[[package]]
···
3427
dependencies = [
3428
"proc-macro2",
3429
"quote",
3430
-
"syn 2.0.104",
3431
]
3432
3433
[[package]]
3434
name = "serde_json"
3435
-
version = "1.0.141"
3436
source = "registry+https://github.com/rust-lang/crates.io-index"
3437
-
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
3438
dependencies = [
3439
"itoa",
3440
"memchr",
3441
"ryu",
3442
"serde",
3443
]
3444
3445
[[package]]
···
3450
dependencies = [
3451
"proc-macro2",
3452
"quote",
3453
-
"syn 2.0.104",
3454
]
3455
3456
[[package]]
···
3464
3465
[[package]]
3466
name = "serde_spanned"
3467
-
version = "1.0.0"
3468
source = "registry+https://github.com/rust-lang/crates.io-index"
3469
-
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
3470
dependencies = [
3471
-
"serde",
3472
]
3473
3474
[[package]]
···
3485
3486
[[package]]
3487
name = "serde_with"
3488
-
version = "3.14.0"
3489
source = "registry+https://github.com/rust-lang/crates.io-index"
3490
-
checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
3491
dependencies = [
3492
"base64 0.22.1",
3493
"chrono",
3494
"hex",
3495
"indexmap 1.9.3",
3496
-
"indexmap 2.10.0",
3497
"schemars 0.9.0",
3498
-
"schemars 1.0.4",
3499
-
"serde",
3500
-
"serde_derive",
3501
"serde_json",
3502
"serde_with_macros",
3503
"time",
···
3505
3506
[[package]]
3507
name = "serde_with_macros"
3508
-
version = "3.14.0"
3509
source = "registry+https://github.com/rust-lang/crates.io-index"
3510
-
checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
3511
dependencies = [
3512
"darling",
3513
"proc-macro2",
3514
"quote",
3515
-
"syn 2.0.104",
3516
]
3517
3518
[[package]]
3519
name = "serialize-to-javascript"
3520
-
version = "0.1.1"
3521
source = "registry+https://github.com/rust-lang/crates.io-index"
3522
-
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
3523
dependencies = [
3524
"serde",
3525
"serde_json",
···
3528
3529
[[package]]
3530
name = "serialize-to-javascript-impl"
3531
-
version = "0.1.1"
3532
source = "registry+https://github.com/rust-lang/crates.io-index"
3533
-
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
3534
dependencies = [
3535
"proc-macro2",
3536
"quote",
3537
-
"syn 1.0.109",
3538
]
3539
3540
[[package]]
···
3548
]
3549
3550
[[package]]
3551
-
name = "sha1"
3552
-
version = "0.10.6"
3553
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3554
-
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
3555
-
dependencies = [
3556
-
"cfg-if",
3557
-
"cpufeatures",
3558
-
"digest",
3559
-
]
3560
-
3561
-
[[package]]
3562
name = "sha2"
3563
version = "0.10.9"
3564
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3577
3578
[[package]]
3579
name = "signal-hook-registry"
3580
-
version = "1.4.5"
3581
source = "registry+https://github.com/rust-lang/crates.io-index"
3582
-
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
3583
dependencies = [
3584
"libc",
3585
]
3586
3587
[[package]]
3588
-
name = "signature"
3589
-
version = "2.2.0"
3590
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3591
-
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
3592
-
dependencies = [
3593
-
"digest",
3594
-
"rand_core 0.6.4",
3595
-
]
3596
-
3597
-
[[package]]
3598
name = "simd-adler32"
3599
version = "0.3.7"
3600
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3614
3615
[[package]]
3616
name = "slab"
3617
-
version = "0.4.10"
3618
source = "registry+https://github.com/rust-lang/crates.io-index"
3619
-
checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
3620
3621
[[package]]
3622
name = "smallvec"
3623
version = "1.15.1"
3624
source = "registry+https://github.com/rust-lang/crates.io-index"
3625
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
3626
-
dependencies = [
3627
-
"serde",
3628
-
]
3629
3630
[[package]]
3631
name = "socket2"
3632
-
version = "0.6.0"
3633
source = "registry+https://github.com/rust-lang/crates.io-index"
3634
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
3635
dependencies = [
3636
"libc",
3637
-
"windows-sys 0.59.0",
3638
]
3639
3640
[[package]]
···
3645
dependencies = [
3646
"bytemuck",
3647
"cfg_aliases",
3648
-
"core-graphics",
3649
"foreign-types",
3650
"js-sys",
3651
"log",
···
3686
]
3687
3688
[[package]]
3689
-
name = "spin"
3690
-
version = "0.9.8"
3691
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3692
-
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
3693
-
dependencies = [
3694
-
"lock_api",
3695
-
]
3696
-
3697
-
[[package]]
3698
-
name = "spki"
3699
-
version = "0.7.3"
3700
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3701
-
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
3702
-
dependencies = [
3703
-
"base64ct",
3704
-
"der",
3705
-
]
3706
-
3707
-
[[package]]
3708
-
name = "sqlx"
3709
-
version = "0.8.6"
3710
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3711
-
checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc"
3712
-
dependencies = [
3713
-
"sqlx-core",
3714
-
"sqlx-macros",
3715
-
"sqlx-mysql",
3716
-
"sqlx-postgres",
3717
-
"sqlx-sqlite",
3718
-
]
3719
-
3720
-
[[package]]
3721
-
name = "sqlx-core"
3722
-
version = "0.8.6"
3723
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3724
-
checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6"
3725
-
dependencies = [
3726
-
"base64 0.22.1",
3727
-
"bytes",
3728
-
"crc",
3729
-
"crossbeam-queue",
3730
-
"either",
3731
-
"event-listener",
3732
-
"futures-core",
3733
-
"futures-intrusive",
3734
-
"futures-io",
3735
-
"futures-util",
3736
-
"hashbrown 0.15.4",
3737
-
"hashlink",
3738
-
"indexmap 2.10.0",
3739
-
"log",
3740
-
"memchr",
3741
-
"once_cell",
3742
-
"percent-encoding",
3743
-
"serde",
3744
-
"serde_json",
3745
-
"sha2",
3746
-
"smallvec",
3747
-
"thiserror 2.0.12",
3748
-
"tokio",
3749
-
"tokio-stream",
3750
-
"tracing",
3751
-
"url",
3752
-
]
3753
-
3754
-
[[package]]
3755
-
name = "sqlx-macros"
3756
-
version = "0.8.6"
3757
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3758
-
checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d"
3759
-
dependencies = [
3760
-
"proc-macro2",
3761
-
"quote",
3762
-
"sqlx-core",
3763
-
"sqlx-macros-core",
3764
-
"syn 2.0.104",
3765
-
]
3766
-
3767
-
[[package]]
3768
-
name = "sqlx-macros-core"
3769
-
version = "0.8.6"
3770
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3771
-
checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b"
3772
-
dependencies = [
3773
-
"dotenvy",
3774
-
"either",
3775
-
"heck 0.5.0",
3776
-
"hex",
3777
-
"once_cell",
3778
-
"proc-macro2",
3779
-
"quote",
3780
-
"serde",
3781
-
"serde_json",
3782
-
"sha2",
3783
-
"sqlx-core",
3784
-
"sqlx-mysql",
3785
-
"sqlx-postgres",
3786
-
"sqlx-sqlite",
3787
-
"syn 2.0.104",
3788
-
"tokio",
3789
-
"url",
3790
-
]
3791
-
3792
-
[[package]]
3793
-
name = "sqlx-mysql"
3794
-
version = "0.8.6"
3795
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3796
-
checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526"
3797
-
dependencies = [
3798
-
"atoi",
3799
-
"base64 0.22.1",
3800
-
"bitflags 2.9.1",
3801
-
"byteorder",
3802
-
"bytes",
3803
-
"crc",
3804
-
"digest",
3805
-
"dotenvy",
3806
-
"either",
3807
-
"futures-channel",
3808
-
"futures-core",
3809
-
"futures-io",
3810
-
"futures-util",
3811
-
"generic-array",
3812
-
"hex",
3813
-
"hkdf",
3814
-
"hmac",
3815
-
"itoa",
3816
-
"log",
3817
-
"md-5",
3818
-
"memchr",
3819
-
"once_cell",
3820
-
"percent-encoding",
3821
-
"rand 0.8.5",
3822
-
"rsa",
3823
-
"serde",
3824
-
"sha1",
3825
-
"sha2",
3826
-
"smallvec",
3827
-
"sqlx-core",
3828
-
"stringprep",
3829
-
"thiserror 2.0.12",
3830
-
"tracing",
3831
-
"whoami",
3832
-
]
3833
-
3834
-
[[package]]
3835
-
name = "sqlx-postgres"
3836
-
version = "0.8.6"
3837
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3838
-
checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46"
3839
-
dependencies = [
3840
-
"atoi",
3841
-
"base64 0.22.1",
3842
-
"bitflags 2.9.1",
3843
-
"byteorder",
3844
-
"crc",
3845
-
"dotenvy",
3846
-
"etcetera",
3847
-
"futures-channel",
3848
-
"futures-core",
3849
-
"futures-util",
3850
-
"hex",
3851
-
"hkdf",
3852
-
"hmac",
3853
-
"home",
3854
-
"itoa",
3855
-
"log",
3856
-
"md-5",
3857
-
"memchr",
3858
-
"once_cell",
3859
-
"rand 0.8.5",
3860
-
"serde",
3861
-
"serde_json",
3862
-
"sha2",
3863
-
"smallvec",
3864
-
"sqlx-core",
3865
-
"stringprep",
3866
-
"thiserror 2.0.12",
3867
-
"tracing",
3868
-
"whoami",
3869
-
]
3870
-
3871
-
[[package]]
3872
-
name = "sqlx-sqlite"
3873
-
version = "0.8.6"
3874
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3875
-
checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea"
3876
-
dependencies = [
3877
-
"atoi",
3878
-
"flume",
3879
-
"futures-channel",
3880
-
"futures-core",
3881
-
"futures-executor",
3882
-
"futures-intrusive",
3883
-
"futures-util",
3884
-
"libsqlite3-sys",
3885
-
"log",
3886
-
"percent-encoding",
3887
-
"serde",
3888
-
"serde_urlencoded",
3889
-
"sqlx-core",
3890
-
"thiserror 2.0.12",
3891
-
"tracing",
3892
-
"url",
3893
-
]
3894
-
3895
-
[[package]]
3896
name = "stable_deref_trait"
3897
-
version = "1.2.0"
3898
source = "registry+https://github.com/rust-lang/crates.io-index"
3899
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
3900
3901
[[package]]
3902
name = "static_assertions"
···
3930
]
3931
3932
[[package]]
3933
-
name = "stringprep"
3934
-
version = "0.1.5"
3935
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3936
-
checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1"
3937
-
dependencies = [
3938
-
"unicode-bidi",
3939
-
"unicode-normalization",
3940
-
"unicode-properties",
3941
-
]
3942
-
3943
-
[[package]]
3944
name = "strsim"
3945
version = "0.11.1"
3946
source = "registry+https://github.com/rust-lang/crates.io-index"
3947
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
3948
-
3949
-
[[package]]
3950
-
name = "subtle"
3951
-
version = "2.6.1"
3952
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3953
-
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
3954
3955
[[package]]
3956
name = "swift-rs"
···
3976
3977
[[package]]
3978
name = "syn"
3979
-
version = "2.0.104"
3980
source = "registry+https://github.com/rust-lang/crates.io-index"
3981
-
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
3982
dependencies = [
3983
"proc-macro2",
3984
"quote",
···
4002
dependencies = [
4003
"proc-macro2",
4004
"quote",
4005
-
"syn 2.0.104",
4006
]
4007
4008
[[package]]
···
4014
"cfg-expr",
4015
"heck 0.5.0",
4016
"pkg-config",
4017
-
"toml 0.8.23",
4018
"version-compare",
4019
]
4020
4021
[[package]]
4022
name = "tao"
4023
-
version = "0.34.0"
4024
source = "registry+https://github.com/rust-lang/crates.io-index"
4025
-
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
4026
dependencies = [
4027
-
"bitflags 2.9.1",
4028
"core-foundation",
4029
-
"core-graphics",
4030
"crossbeam-channel",
4031
"dispatch",
4032
"dlopen2",
···
4041
"ndk",
4042
"ndk-context",
4043
"ndk-sys",
4044
-
"objc2 0.6.1",
4045
"objc2-app-kit",
4046
-
"objc2-foundation 0.3.1",
4047
"once_cell",
4048
"parking_lot",
4049
"raw-window-handle",
···
4052
"unicode-segmentation",
4053
"url",
4054
"windows",
4055
-
"windows-core",
4056
"windows-version",
4057
"x11-dl",
4058
]
···
4065
dependencies = [
4066
"proc-macro2",
4067
"quote",
4068
-
"syn 2.0.104",
4069
]
4070
4071
[[package]]
···
4076
4077
[[package]]
4078
name = "tauri"
4079
-
version = "2.7.0"
4080
source = "registry+https://github.com/rust-lang/crates.io-index"
4081
-
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
4082
dependencies = [
4083
"anyhow",
4084
"bytes",
4085
"dirs",
4086
"dunce",
4087
"embed_plist",
4088
-
"getrandom 0.3.3",
4089
"glob",
4090
"gtk",
4091
"heck 0.5.0",
4092
"http",
4093
"jni",
4094
"libc",
4095
"log",
4096
"mime",
4097
"muda",
4098
-
"objc2 0.6.1",
4099
"objc2-app-kit",
4100
-
"objc2-foundation 0.3.1",
4101
"objc2-ui-kit",
4102
"percent-encoding",
4103
"plist",
4104
"raw-window-handle",
···
4113
"tauri-runtime",
4114
"tauri-runtime-wry",
4115
"tauri-utils",
4116
-
"thiserror 2.0.12",
4117
"tokio",
4118
"tray-icon",
4119
"url",
4120
-
"urlpattern",
4121
"webkit2gtk",
4122
"webview2-com",
4123
"window-vibrancy",
···
4126
4127
[[package]]
4128
name = "tauri-build"
4129
-
version = "2.3.1"
4130
source = "registry+https://github.com/rust-lang/crates.io-index"
4131
-
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
4132
dependencies = [
4133
"anyhow",
4134
"cargo_toml",
···
4142
"serde_json",
4143
"tauri-utils",
4144
"tauri-winres",
4145
-
"toml 0.8.23",
4146
"walkdir",
4147
]
4148
4149
[[package]]
4150
name = "tauri-codegen"
4151
-
version = "2.3.1"
4152
source = "registry+https://github.com/rust-lang/crates.io-index"
4153
-
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
4154
dependencies = [
4155
"base64 0.22.1",
4156
"brotli",
4157
"ico",
4158
"json-patch",
4159
"plist",
4160
-
"png",
4161
"proc-macro2",
4162
"quote",
4163
"semver",
4164
"serde",
4165
"serde_json",
4166
"sha2",
4167
-
"syn 2.0.104",
4168
"tauri-utils",
4169
-
"thiserror 2.0.12",
4170
"time",
4171
"url",
4172
"uuid",
···
4175
4176
[[package]]
4177
name = "tauri-macros"
4178
-
version = "2.3.2"
4179
source = "registry+https://github.com/rust-lang/crates.io-index"
4180
-
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
4181
dependencies = [
4182
"heck 0.5.0",
4183
"proc-macro2",
4184
"quote",
4185
-
"syn 2.0.104",
4186
"tauri-codegen",
4187
"tauri-utils",
4188
]
4189
4190
[[package]]
4191
name = "tauri-plugin"
4192
-
version = "2.3.1"
4193
source = "registry+https://github.com/rust-lang/crates.io-index"
4194
-
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
4195
dependencies = [
4196
"anyhow",
4197
"glob",
···
4200
"serde",
4201
"serde_json",
4202
"tauri-utils",
4203
-
"toml 0.8.23",
4204
"walkdir",
4205
]
4206
4207
[[package]]
4208
name = "tauri-plugin-opener"
4209
-
version = "2.4.0"
4210
source = "registry+https://github.com/rust-lang/crates.io-index"
4211
-
checksum = "ecee219f11cdac713ab32959db5d0cceec4810ba4f4458da992292ecf9660321"
4212
dependencies = [
4213
"dunce",
4214
"glob",
4215
"objc2-app-kit",
4216
-
"objc2-foundation 0.3.1",
4217
"open",
4218
"schemars 0.8.22",
4219
"serde",
4220
"serde_json",
4221
"tauri",
4222
"tauri-plugin",
4223
-
"thiserror 2.0.12",
4224
"url",
4225
"windows",
4226
"zbus",
4227
]
4228
4229
[[package]]
4230
name = "tauri-runtime"
4231
-
version = "2.7.1"
4232
source = "registry+https://github.com/rust-lang/crates.io-index"
4233
-
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
4234
dependencies = [
4235
"cookie",
4236
"dpi",
4237
"gtk",
4238
"http",
4239
"jni",
4240
-
"objc2 0.6.1",
4241
"objc2-ui-kit",
4242
"raw-window-handle",
4243
"serde",
4244
"serde_json",
4245
"tauri-utils",
4246
-
"thiserror 2.0.12",
4247
"url",
4248
"windows",
4249
]
4250
4251
[[package]]
4252
name = "tauri-runtime-wry"
4253
-
version = "2.7.2"
4254
source = "registry+https://github.com/rust-lang/crates.io-index"
4255
-
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
4256
dependencies = [
4257
"gtk",
4258
"http",
4259
"jni",
4260
"log",
4261
-
"objc2 0.6.1",
4262
"objc2-app-kit",
4263
-
"objc2-foundation 0.3.1",
4264
"once_cell",
4265
"percent-encoding",
4266
"raw-window-handle",
···
4277
4278
[[package]]
4279
name = "tauri-utils"
4280
-
version = "2.6.0"
4281
source = "registry+https://github.com/rust-lang/crates.io-index"
4282
-
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
4283
dependencies = [
4284
"anyhow",
4285
"brotli",
···
4305
"serde_json",
4306
"serde_with",
4307
"swift-rs",
4308
-
"thiserror 2.0.12",
4309
-
"toml 0.8.23",
4310
"url",
4311
"urlpattern",
4312
"uuid",
···
4315
4316
[[package]]
4317
name = "tauri-winres"
4318
-
version = "0.3.1"
4319
source = "registry+https://github.com/rust-lang/crates.io-index"
4320
-
checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4"
4321
dependencies = [
4322
"embed-resource",
4323
-
"indexmap 2.10.0",
4324
-
"toml 0.8.23",
4325
]
4326
4327
[[package]]
4328
name = "tempfile"
4329
-
version = "3.20.0"
4330
source = "registry+https://github.com/rust-lang/crates.io-index"
4331
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
4332
dependencies = [
4333
"fastrand",
4334
-
"getrandom 0.3.3",
4335
"once_cell",
4336
-
"rustix",
4337
-
"windows-sys 0.59.0",
4338
]
4339
4340
[[package]]
···
4359
4360
[[package]]
4361
name = "thiserror"
4362
-
version = "2.0.12"
4363
source = "registry+https://github.com/rust-lang/crates.io-index"
4364
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
4365
dependencies = [
4366
-
"thiserror-impl 2.0.12",
4367
]
4368
4369
[[package]]
···
4374
dependencies = [
4375
"proc-macro2",
4376
"quote",
4377
-
"syn 2.0.104",
4378
]
4379
4380
[[package]]
4381
name = "thiserror-impl"
4382
-
version = "2.0.12"
4383
source = "registry+https://github.com/rust-lang/crates.io-index"
4384
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4385
dependencies = [
4386
"proc-macro2",
4387
"quote",
4388
-
"syn 2.0.104",
4389
]
4390
4391
[[package]]
4392
name = "time"
4393
-
version = "0.3.41"
4394
source = "registry+https://github.com/rust-lang/crates.io-index"
4395
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
4396
dependencies = [
4397
"deranged",
4398
"itoa",
···
4405
4406
[[package]]
4407
name = "time-core"
4408
-
version = "0.1.4"
4409
source = "registry+https://github.com/rust-lang/crates.io-index"
4410
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
4411
4412
[[package]]
4413
name = "time-macros"
4414
-
version = "0.2.22"
4415
source = "registry+https://github.com/rust-lang/crates.io-index"
4416
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
4417
dependencies = [
4418
"num-conv",
4419
"time-core",
···
4421
4422
[[package]]
4423
name = "tinystr"
4424
-
version = "0.8.1"
4425
source = "registry+https://github.com/rust-lang/crates.io-index"
4426
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
4427
dependencies = [
4428
"displaydoc",
4429
"zerovec",
4430
]
4431
4432
[[package]]
4433
-
name = "tinyvec"
4434
-
version = "1.9.0"
4435
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4436
-
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
4437
-
dependencies = [
4438
-
"tinyvec_macros",
4439
-
]
4440
-
4441
-
[[package]]
4442
-
name = "tinyvec_macros"
4443
-
version = "0.1.1"
4444
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4445
-
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
4446
-
4447
-
[[package]]
4448
name = "tokio"
4449
-
version = "1.47.0"
4450
source = "registry+https://github.com/rust-lang/crates.io-index"
4451
-
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
4452
dependencies = [
4453
-
"backtrace",
4454
"bytes",
4455
-
"io-uring",
4456
"libc",
4457
"mio",
4458
"pin-project-lite",
4459
-
"slab",
4460
"socket2",
4461
"tokio-macros",
4462
-
"windows-sys 0.59.0",
4463
]
4464
4465
[[package]]
4466
name = "tokio-macros"
4467
-
version = "2.5.0"
4468
source = "registry+https://github.com/rust-lang/crates.io-index"
4469
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
4470
dependencies = [
4471
"proc-macro2",
4472
"quote",
4473
-
"syn 2.0.104",
4474
-
]
4475
-
4476
-
[[package]]
4477
-
name = "tokio-stream"
4478
-
version = "0.1.17"
4479
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4480
-
checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
4481
-
dependencies = [
4482
-
"futures-core",
4483
-
"pin-project-lite",
4484
-
"tokio",
4485
]
4486
4487
[[package]]
4488
name = "tokio-util"
4489
-
version = "0.7.15"
4490
source = "registry+https://github.com/rust-lang/crates.io-index"
4491
-
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
4492
dependencies = [
4493
"bytes",
4494
"futures-core",
···
4499
4500
[[package]]
4501
name = "toml"
4502
-
version = "0.8.23"
4503
source = "registry+https://github.com/rust-lang/crates.io-index"
4504
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
4505
dependencies = [
4506
"serde",
4507
"serde_spanned 0.6.9",
4508
-
"toml_datetime 0.6.11",
4509
-
"toml_edit 0.22.27",
4510
]
4511
4512
[[package]]
4513
name = "toml"
4514
-
version = "0.9.3"
4515
source = "registry+https://github.com/rust-lang/crates.io-index"
4516
-
checksum = "e06723639aaded957e5a80be250c1f82f274b9d23ebb4d94163668470623461c"
4517
dependencies = [
4518
-
"indexmap 2.10.0",
4519
-
"serde",
4520
-
"serde_spanned 1.0.0",
4521
-
"toml_datetime 0.7.0",
4522
"toml_parser",
4523
"toml_writer",
4524
-
"winnow 0.7.12",
4525
]
4526
4527
[[package]]
4528
name = "toml_datetime"
4529
-
version = "0.6.11"
4530
source = "registry+https://github.com/rust-lang/crates.io-index"
4531
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
4532
dependencies = [
4533
"serde",
4534
]
4535
4536
[[package]]
4537
name = "toml_datetime"
4538
-
version = "0.7.0"
4539
source = "registry+https://github.com/rust-lang/crates.io-index"
4540
-
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
4541
dependencies = [
4542
-
"serde",
4543
]
4544
4545
[[package]]
···
4548
source = "registry+https://github.com/rust-lang/crates.io-index"
4549
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4550
dependencies = [
4551
-
"indexmap 2.10.0",
4552
-
"toml_datetime 0.6.11",
4553
"winnow 0.5.40",
4554
]
4555
4556
[[package]]
4557
name = "toml_edit"
4558
-
version = "0.20.7"
4559
source = "registry+https://github.com/rust-lang/crates.io-index"
4560
-
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
4561
dependencies = [
4562
-
"indexmap 2.10.0",
4563
-
"toml_datetime 0.6.11",
4564
"winnow 0.5.40",
4565
]
4566
4567
[[package]]
4568
name = "toml_edit"
4569
-
version = "0.22.27"
4570
source = "registry+https://github.com/rust-lang/crates.io-index"
4571
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
4572
dependencies = [
4573
-
"indexmap 2.10.0",
4574
-
"serde",
4575
-
"serde_spanned 0.6.9",
4576
-
"toml_datetime 0.6.11",
4577
-
"toml_write",
4578
-
"winnow 0.7.12",
4579
]
4580
4581
[[package]]
4582
name = "toml_parser"
4583
-
version = "1.0.1"
4584
source = "registry+https://github.com/rust-lang/crates.io-index"
4585
-
checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30"
4586
dependencies = [
4587
-
"winnow 0.7.12",
4588
]
4589
4590
[[package]]
4591
-
name = "toml_write"
4592
-
version = "0.1.2"
4593
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4594
-
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
4595
-
4596
-
[[package]]
4597
name = "toml_writer"
4598
-
version = "1.0.2"
4599
source = "registry+https://github.com/rust-lang/crates.io-index"
4600
-
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
4601
4602
[[package]]
4603
name = "tower"
···
4620
source = "registry+https://github.com/rust-lang/crates.io-index"
4621
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4622
dependencies = [
4623
-
"bitflags 2.9.1",
4624
"bytes",
4625
"futures-util",
4626
"http",
···
4650
source = "registry+https://github.com/rust-lang/crates.io-index"
4651
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
4652
dependencies = [
4653
-
"log",
4654
"pin-project-lite",
4655
"tracing-attributes",
4656
"tracing-core",
···
4664
dependencies = [
4665
"proc-macro2",
4666
"quote",
4667
-
"syn 2.0.104",
4668
]
4669
4670
[[package]]
···
4678
4679
[[package]]
4680
name = "tray-icon"
4681
-
version = "0.21.0"
4682
source = "registry+https://github.com/rust-lang/crates.io-index"
4683
-
checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a"
4684
dependencies = [
4685
"crossbeam-channel",
4686
"dirs",
4687
"libappindicator",
4688
"muda",
4689
-
"objc2 0.6.1",
4690
"objc2-app-kit",
4691
"objc2-core-foundation",
4692
"objc2-core-graphics",
4693
-
"objc2-foundation 0.3.1",
4694
"once_cell",
4695
-
"png",
4696
"serde",
4697
-
"thiserror 2.0.12",
4698
-
"windows-sys 0.59.0",
4699
]
4700
4701
[[package]]
···
4712
4713
[[package]]
4714
name = "typenum"
4715
-
version = "1.18.0"
4716
source = "registry+https://github.com/rust-lang/crates.io-index"
4717
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
4718
4719
[[package]]
4720
name = "uds_windows"
···
4767
dependencies = [
4768
"unic-common",
4769
]
4770
-
4771
-
[[package]]
4772
-
name = "unicode-bidi"
4773
-
version = "0.3.18"
4774
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4775
-
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
4776
4777
[[package]]
4778
name = "unicode-ident"
4779
-
version = "1.0.18"
4780
source = "registry+https://github.com/rust-lang/crates.io-index"
4781
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
4782
-
4783
-
[[package]]
4784
-
name = "unicode-normalization"
4785
-
version = "0.1.24"
4786
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4787
-
checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
4788
-
dependencies = [
4789
-
"tinyvec",
4790
-
]
4791
-
4792
-
[[package]]
4793
-
name = "unicode-properties"
4794
-
version = "0.1.3"
4795
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4796
-
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
4797
4798
[[package]]
4799
name = "unicode-segmentation"
···
4803
4804
[[package]]
4805
name = "url"
4806
-
version = "2.5.4"
4807
source = "registry+https://github.com/rust-lang/crates.io-index"
4808
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
4809
dependencies = [
4810
"form_urlencoded",
4811
"idna",
···
4839
4840
[[package]]
4841
name = "uuid"
4842
-
version = "1.17.0"
4843
source = "registry+https://github.com/rust-lang/crates.io-index"
4844
-
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
4845
dependencies = [
4846
-
"getrandom 0.3.3",
4847
"js-sys",
4848
"serde",
4849
"wasm-bindgen",
4850
]
4851
4852
[[package]]
4853
-
name = "vcpkg"
4854
-
version = "0.2.15"
4855
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4856
-
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
4857
-
4858
-
[[package]]
4859
name = "version-compare"
4860
-
version = "0.2.0"
4861
source = "registry+https://github.com/rust-lang/crates.io-index"
4862
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
4863
4864
[[package]]
4865
name = "version_check"
···
4919
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4920
4921
[[package]]
4922
-
name = "wasi"
4923
-
version = "0.14.2+wasi-0.2.4"
4924
source = "registry+https://github.com/rust-lang/crates.io-index"
4925
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
4926
dependencies = [
4927
-
"wit-bindgen-rt",
4928
]
4929
-
4930
-
[[package]]
4931
-
name = "wasite"
4932
-
version = "0.1.0"
4933
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4934
-
checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
4935
4936
[[package]]
4937
name = "wasm-bindgen"
4938
-
version = "0.2.100"
4939
source = "registry+https://github.com/rust-lang/crates.io-index"
4940
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
4941
dependencies = [
4942
"cfg-if",
4943
"once_cell",
4944
"rustversion",
4945
"wasm-bindgen-macro",
4946
-
]
4947
-
4948
-
[[package]]
4949
-
name = "wasm-bindgen-backend"
4950
-
version = "0.2.100"
4951
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4952
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
4953
-
dependencies = [
4954
-
"bumpalo",
4955
-
"log",
4956
-
"proc-macro2",
4957
-
"quote",
4958
-
"syn 2.0.104",
4959
"wasm-bindgen-shared",
4960
]
4961
4962
[[package]]
4963
name = "wasm-bindgen-futures"
4964
-
version = "0.4.50"
4965
source = "registry+https://github.com/rust-lang/crates.io-index"
4966
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
4967
dependencies = [
4968
"cfg-if",
4969
"js-sys",
···
4974
4975
[[package]]
4976
name = "wasm-bindgen-macro"
4977
-
version = "0.2.100"
4978
source = "registry+https://github.com/rust-lang/crates.io-index"
4979
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
4980
dependencies = [
4981
"quote",
4982
"wasm-bindgen-macro-support",
···
4984
4985
[[package]]
4986
name = "wasm-bindgen-macro-support"
4987
-
version = "0.2.100"
4988
source = "registry+https://github.com/rust-lang/crates.io-index"
4989
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
4990
dependencies = [
4991
"proc-macro2",
4992
"quote",
4993
-
"syn 2.0.104",
4994
-
"wasm-bindgen-backend",
4995
"wasm-bindgen-shared",
4996
]
4997
4998
[[package]]
4999
name = "wasm-bindgen-shared"
5000
-
version = "0.2.100"
5001
source = "registry+https://github.com/rust-lang/crates.io-index"
5002
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
5003
dependencies = [
5004
"unicode-ident",
5005
]
···
5018
]
5019
5020
[[package]]
5021
name = "web-sys"
5022
-
version = "0.3.77"
5023
source = "registry+https://github.com/rust-lang/crates.io-index"
5024
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
5025
dependencies = [
5026
"js-sys",
5027
"wasm-bindgen",
···
5080
"webview2-com-macros",
5081
"webview2-com-sys",
5082
"windows",
5083
-
"windows-core",
5084
"windows-implement",
5085
"windows-interface",
5086
]
···
5093
dependencies = [
5094
"proc-macro2",
5095
"quote",
5096
-
"syn 2.0.104",
5097
]
5098
5099
[[package]]
···
5102
source = "registry+https://github.com/rust-lang/crates.io-index"
5103
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
5104
dependencies = [
5105
-
"thiserror 2.0.12",
5106
"windows",
5107
-
"windows-core",
5108
]
5109
5110
[[package]]
5111
-
name = "whoami"
5112
-
version = "1.6.0"
5113
source = "registry+https://github.com/rust-lang/crates.io-index"
5114
-
checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
5115
-
dependencies = [
5116
-
"redox_syscall",
5117
-
"wasite",
5118
-
]
5119
5120
[[package]]
5121
name = "winapi"
···
5135
5136
[[package]]
5137
name = "winapi-util"
5138
-
version = "0.1.9"
5139
source = "registry+https://github.com/rust-lang/crates.io-index"
5140
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
5141
dependencies = [
5142
-
"windows-sys 0.59.0",
5143
]
5144
5145
[[package]]
···
5154
source = "registry+https://github.com/rust-lang/crates.io-index"
5155
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
5156
dependencies = [
5157
-
"objc2 0.6.1",
5158
"objc2-app-kit",
5159
"objc2-core-foundation",
5160
-
"objc2-foundation 0.3.1",
5161
"raw-window-handle",
5162
"windows-sys 0.59.0",
5163
"windows-version",
···
5170
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
5171
dependencies = [
5172
"windows-collections",
5173
-
"windows-core",
5174
"windows-future",
5175
-
"windows-link",
5176
"windows-numerics",
5177
]
5178
···
5182
source = "registry+https://github.com/rust-lang/crates.io-index"
5183
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
5184
dependencies = [
5185
-
"windows-core",
5186
]
5187
5188
[[package]]
···
5193
dependencies = [
5194
"windows-implement",
5195
"windows-interface",
5196
-
"windows-link",
5197
-
"windows-result",
5198
-
"windows-strings",
5199
]
5200
5201
[[package]]
···
5204
source = "registry+https://github.com/rust-lang/crates.io-index"
5205
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
5206
dependencies = [
5207
-
"windows-core",
5208
-
"windows-link",
5209
"windows-threading",
5210
]
5211
5212
[[package]]
5213
name = "windows-implement"
5214
-
version = "0.60.0"
5215
source = "registry+https://github.com/rust-lang/crates.io-index"
5216
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
5217
dependencies = [
5218
"proc-macro2",
5219
"quote",
5220
-
"syn 2.0.104",
5221
]
5222
5223
[[package]]
5224
name = "windows-interface"
5225
-
version = "0.59.1"
5226
source = "registry+https://github.com/rust-lang/crates.io-index"
5227
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
5228
dependencies = [
5229
"proc-macro2",
5230
"quote",
5231
-
"syn 2.0.104",
5232
]
5233
5234
[[package]]
···
5238
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
5239
5240
[[package]]
5241
name = "windows-numerics"
5242
version = "0.2.0"
5243
source = "registry+https://github.com/rust-lang/crates.io-index"
5244
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
5245
dependencies = [
5246
-
"windows-core",
5247
-
"windows-link",
5248
]
5249
5250
[[package]]
···
5253
source = "registry+https://github.com/rust-lang/crates.io-index"
5254
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
5255
dependencies = [
5256
-
"windows-link",
5257
]
5258
5259
[[package]]
···
5262
source = "registry+https://github.com/rust-lang/crates.io-index"
5263
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
5264
dependencies = [
5265
-
"windows-link",
5266
]
5267
5268
[[package]]
5269
-
name = "windows-sys"
5270
-
version = "0.45.0"
5271
source = "registry+https://github.com/rust-lang/crates.io-index"
5272
-
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
5273
dependencies = [
5274
-
"windows-targets 0.42.2",
5275
]
5276
5277
[[package]]
5278
name = "windows-sys"
5279
-
version = "0.48.0"
5280
source = "registry+https://github.com/rust-lang/crates.io-index"
5281
-
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
5282
dependencies = [
5283
-
"windows-targets 0.48.5",
5284
]
5285
5286
[[package]]
···
5298
source = "registry+https://github.com/rust-lang/crates.io-index"
5299
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
5300
dependencies = [
5301
-
"windows-targets 0.53.3",
5302
]
5303
5304
[[package]]
···
5318
5319
[[package]]
5320
name = "windows-targets"
5321
-
version = "0.48.5"
5322
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5323
-
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
5324
-
dependencies = [
5325
-
"windows_aarch64_gnullvm 0.48.5",
5326
-
"windows_aarch64_msvc 0.48.5",
5327
-
"windows_i686_gnu 0.48.5",
5328
-
"windows_i686_msvc 0.48.5",
5329
-
"windows_x86_64_gnu 0.48.5",
5330
-
"windows_x86_64_gnullvm 0.48.5",
5331
-
"windows_x86_64_msvc 0.48.5",
5332
-
]
5333
-
5334
-
[[package]]
5335
-
name = "windows-targets"
5336
version = "0.52.6"
5337
source = "registry+https://github.com/rust-lang/crates.io-index"
5338
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
···
5349
5350
[[package]]
5351
name = "windows-targets"
5352
-
version = "0.53.3"
5353
source = "registry+https://github.com/rust-lang/crates.io-index"
5354
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
5355
dependencies = [
5356
-
"windows-link",
5357
-
"windows_aarch64_gnullvm 0.53.0",
5358
-
"windows_aarch64_msvc 0.53.0",
5359
-
"windows_i686_gnu 0.53.0",
5360
-
"windows_i686_gnullvm 0.53.0",
5361
-
"windows_i686_msvc 0.53.0",
5362
-
"windows_x86_64_gnu 0.53.0",
5363
-
"windows_x86_64_gnullvm 0.53.0",
5364
-
"windows_x86_64_msvc 0.53.0",
5365
]
5366
5367
[[package]]
···
5370
source = "registry+https://github.com/rust-lang/crates.io-index"
5371
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
5372
dependencies = [
5373
-
"windows-link",
5374
]
5375
5376
[[package]]
5377
name = "windows-version"
5378
-
version = "0.1.4"
5379
source = "registry+https://github.com/rust-lang/crates.io-index"
5380
-
checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
5381
dependencies = [
5382
-
"windows-link",
5383
]
5384
5385
[[package]]
···
5387
version = "0.42.2"
5388
source = "registry+https://github.com/rust-lang/crates.io-index"
5389
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
5390
-
5391
-
[[package]]
5392
-
name = "windows_aarch64_gnullvm"
5393
-
version = "0.48.5"
5394
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5395
-
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
5396
5397
[[package]]
5398
name = "windows_aarch64_gnullvm"
···
5402
5403
[[package]]
5404
name = "windows_aarch64_gnullvm"
5405
-
version = "0.53.0"
5406
source = "registry+https://github.com/rust-lang/crates.io-index"
5407
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
5408
5409
[[package]]
5410
name = "windows_aarch64_msvc"
···
5414
5415
[[package]]
5416
name = "windows_aarch64_msvc"
5417
-
version = "0.48.5"
5418
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5419
-
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
5420
-
5421
-
[[package]]
5422
-
name = "windows_aarch64_msvc"
5423
version = "0.52.6"
5424
source = "registry+https://github.com/rust-lang/crates.io-index"
5425
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
5426
5427
[[package]]
5428
name = "windows_aarch64_msvc"
5429
-
version = "0.53.0"
5430
source = "registry+https://github.com/rust-lang/crates.io-index"
5431
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
5432
5433
[[package]]
5434
name = "windows_i686_gnu"
···
5438
5439
[[package]]
5440
name = "windows_i686_gnu"
5441
-
version = "0.48.5"
5442
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5443
-
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
5444
-
5445
-
[[package]]
5446
-
name = "windows_i686_gnu"
5447
version = "0.52.6"
5448
source = "registry+https://github.com/rust-lang/crates.io-index"
5449
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
5450
5451
[[package]]
5452
name = "windows_i686_gnu"
5453
-
version = "0.53.0"
5454
source = "registry+https://github.com/rust-lang/crates.io-index"
5455
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
5456
5457
[[package]]
5458
name = "windows_i686_gnullvm"
···
5462
5463
[[package]]
5464
name = "windows_i686_gnullvm"
5465
-
version = "0.53.0"
5466
source = "registry+https://github.com/rust-lang/crates.io-index"
5467
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
5468
5469
[[package]]
5470
name = "windows_i686_msvc"
···
5474
5475
[[package]]
5476
name = "windows_i686_msvc"
5477
-
version = "0.48.5"
5478
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5479
-
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
5480
-
5481
-
[[package]]
5482
-
name = "windows_i686_msvc"
5483
version = "0.52.6"
5484
source = "registry+https://github.com/rust-lang/crates.io-index"
5485
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
5486
5487
[[package]]
5488
name = "windows_i686_msvc"
5489
-
version = "0.53.0"
5490
source = "registry+https://github.com/rust-lang/crates.io-index"
5491
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
5492
5493
[[package]]
5494
name = "windows_x86_64_gnu"
···
5498
5499
[[package]]
5500
name = "windows_x86_64_gnu"
5501
-
version = "0.48.5"
5502
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5503
-
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
5504
-
5505
-
[[package]]
5506
-
name = "windows_x86_64_gnu"
5507
version = "0.52.6"
5508
source = "registry+https://github.com/rust-lang/crates.io-index"
5509
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
5510
5511
[[package]]
5512
name = "windows_x86_64_gnu"
5513
-
version = "0.53.0"
5514
source = "registry+https://github.com/rust-lang/crates.io-index"
5515
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
5516
5517
[[package]]
5518
name = "windows_x86_64_gnullvm"
···
5522
5523
[[package]]
5524
name = "windows_x86_64_gnullvm"
5525
-
version = "0.48.5"
5526
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5527
-
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
5528
-
5529
-
[[package]]
5530
-
name = "windows_x86_64_gnullvm"
5531
version = "0.52.6"
5532
source = "registry+https://github.com/rust-lang/crates.io-index"
5533
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
5534
5535
[[package]]
5536
name = "windows_x86_64_gnullvm"
5537
-
version = "0.53.0"
5538
source = "registry+https://github.com/rust-lang/crates.io-index"
5539
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
5540
5541
[[package]]
5542
name = "windows_x86_64_msvc"
···
5546
5547
[[package]]
5548
name = "windows_x86_64_msvc"
5549
-
version = "0.48.5"
5550
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5551
-
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
5552
-
5553
-
[[package]]
5554
-
name = "windows_x86_64_msvc"
5555
version = "0.52.6"
5556
source = "registry+https://github.com/rust-lang/crates.io-index"
5557
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
5558
5559
[[package]]
5560
name = "windows_x86_64_msvc"
5561
-
version = "0.53.0"
5562
source = "registry+https://github.com/rust-lang/crates.io-index"
5563
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
5564
5565
[[package]]
5566
name = "winnow"
···
5573
5574
[[package]]
5575
name = "winnow"
5576
-
version = "0.7.12"
5577
source = "registry+https://github.com/rust-lang/crates.io-index"
5578
-
checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
5579
dependencies = [
5580
"memchr",
5581
]
···
5591
]
5592
5593
[[package]]
5594
-
name = "wit-bindgen-rt"
5595
-
version = "0.39.0"
5596
source = "registry+https://github.com/rust-lang/crates.io-index"
5597
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
5598
dependencies = [
5599
-
"bitflags 2.9.1",
5600
]
5601
5602
[[package]]
5603
name = "writeable"
5604
-
version = "0.6.1"
5605
source = "registry+https://github.com/rust-lang/crates.io-index"
5606
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
5607
5608
[[package]]
5609
name = "wry"
5610
-
version = "0.52.1"
5611
source = "registry+https://github.com/rust-lang/crates.io-index"
5612
-
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
5613
dependencies = [
5614
"base64 0.22.1",
5615
-
"block2 0.6.1",
5616
"cookie",
5617
"crossbeam-channel",
5618
"dpi",
5619
"dunce",
5620
"gdkx11",
···
5626
"kuchikiki",
5627
"libc",
5628
"ndk",
5629
-
"objc2 0.6.1",
5630
"objc2-app-kit",
5631
"objc2-core-foundation",
5632
-
"objc2-foundation 0.3.1",
5633
"objc2-ui-kit",
5634
"objc2-web-kit",
5635
"once_cell",
···
5638
"sha2",
5639
"soup3",
5640
"tao-macros",
5641
-
"thiserror 2.0.12",
5642
"url",
5643
"webkit2gtk",
5644
"webkit2gtk-sys",
5645
"webview2-com",
5646
"windows",
5647
-
"windows-core",
5648
"windows-version",
5649
"x11-dl",
5650
]
···
5671
]
5672
5673
[[package]]
5674
name = "yoke"
5675
-
version = "0.8.0"
5676
source = "registry+https://github.com/rust-lang/crates.io-index"
5677
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
5678
dependencies = [
5679
-
"serde",
5680
"stable_deref_trait",
5681
"yoke-derive",
5682
"zerofrom",
···
5684
5685
[[package]]
5686
name = "yoke-derive"
5687
-
version = "0.8.0"
5688
source = "registry+https://github.com/rust-lang/crates.io-index"
5689
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
5690
dependencies = [
5691
"proc-macro2",
5692
"quote",
5693
-
"syn 2.0.104",
5694
"synstructure",
5695
]
5696
5697
[[package]]
5698
name = "zbus"
5699
-
version = "5.9.0"
5700
source = "registry+https://github.com/rust-lang/crates.io-index"
5701
-
checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
5702
dependencies = [
5703
"async-broadcast",
5704
"async-executor",
···
5718
"ordered-stream",
5719
"serde",
5720
"serde_repr",
5721
"tracing",
5722
"uds_windows",
5723
-
"windows-sys 0.59.0",
5724
-
"winnow 0.7.12",
5725
"zbus_macros",
5726
"zbus_names",
5727
"zvariant",
···
5729
5730
[[package]]
5731
name = "zbus_macros"
5732
-
version = "5.9.0"
5733
source = "registry+https://github.com/rust-lang/crates.io-index"
5734
-
checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
5735
dependencies = [
5736
-
"proc-macro-crate 3.3.0",
5737
"proc-macro2",
5738
"quote",
5739
-
"syn 2.0.104",
5740
"zbus_names",
5741
"zvariant",
5742
"zvariant_utils",
···
5750
dependencies = [
5751
"serde",
5752
"static_assertions",
5753
-
"winnow 0.7.12",
5754
"zvariant",
5755
]
5756
5757
[[package]]
5758
name = "zerocopy"
5759
-
version = "0.8.26"
5760
source = "registry+https://github.com/rust-lang/crates.io-index"
5761
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
5762
dependencies = [
5763
"zerocopy-derive",
5764
]
5765
5766
[[package]]
5767
name = "zerocopy-derive"
5768
-
version = "0.8.26"
5769
source = "registry+https://github.com/rust-lang/crates.io-index"
5770
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
5771
dependencies = [
5772
"proc-macro2",
5773
"quote",
5774
-
"syn 2.0.104",
5775
]
5776
5777
[[package]]
···
5791
dependencies = [
5792
"proc-macro2",
5793
"quote",
5794
-
"syn 2.0.104",
5795
"synstructure",
5796
]
5797
5798
[[package]]
5799
-
name = "zeroize"
5800
-
version = "1.8.1"
5801
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5802
-
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
5803
-
5804
-
[[package]]
5805
name = "zerotrie"
5806
-
version = "0.2.2"
5807
source = "registry+https://github.com/rust-lang/crates.io-index"
5808
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
5809
dependencies = [
5810
"displaydoc",
5811
"yoke",
···
5814
5815
[[package]]
5816
name = "zerovec"
5817
-
version = "0.11.2"
5818
source = "registry+https://github.com/rust-lang/crates.io-index"
5819
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
5820
dependencies = [
5821
"yoke",
5822
"zerofrom",
···
5825
5826
[[package]]
5827
name = "zerovec-derive"
5828
-
version = "0.11.1"
5829
source = "registry+https://github.com/rust-lang/crates.io-index"
5830
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
5831
dependencies = [
5832
"proc-macro2",
5833
"quote",
5834
-
"syn 2.0.104",
5835
]
5836
5837
[[package]]
5838
name = "zvariant"
5839
-
version = "5.6.0"
5840
source = "registry+https://github.com/rust-lang/crates.io-index"
5841
-
checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
5842
dependencies = [
5843
"endi",
5844
"enumflags2",
5845
"serde",
5846
-
"winnow 0.7.12",
5847
"zvariant_derive",
5848
"zvariant_utils",
5849
]
5850
5851
[[package]]
5852
name = "zvariant_derive"
5853
-
version = "5.6.0"
5854
source = "registry+https://github.com/rust-lang/crates.io-index"
5855
-
checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
5856
dependencies = [
5857
-
"proc-macro-crate 3.3.0",
5858
"proc-macro2",
5859
"quote",
5860
-
"syn 2.0.104",
5861
"zvariant_utils",
5862
]
5863
5864
[[package]]
5865
name = "zvariant_utils"
5866
-
version = "3.2.0"
5867
source = "registry+https://github.com/rust-lang/crates.io-index"
5868
-
checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
5869
dependencies = [
5870
"proc-macro2",
5871
"quote",
5872
"serde",
5873
-
"static_assertions",
5874
-
"syn 2.0.104",
5875
-
"winnow 0.7.12",
5876
]
···
6
name = "VRCMacros"
7
version = "0.1.0"
8
dependencies = [
9
+
"anyhow",
10
+
"chrono",
11
+
"crossbeam-channel",
12
"dirs",
13
+
"enigo",
14
+
"flate2",
15
"serde",
16
"serde_json",
17
"tauri",
18
"tauri-build",
19
+
"tauri-plugin-clipboard-manager",
20
+
"tauri-plugin-dialog",
21
"tauri-plugin-opener",
22
+
"tauri-plugin-os",
23
"tokio",
24
]
25
26
[[package]]
27
name = "adler2"
28
version = "2.0.1"
29
source = "registry+https://github.com/rust-lang/crates.io-index"
···
31
32
[[package]]
33
name = "aho-corasick"
34
+
version = "1.1.4"
35
source = "registry+https://github.com/rust-lang/crates.io-index"
36
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
37
dependencies = [
38
"memchr",
39
]
···
54
]
55
56
[[package]]
57
+
name = "android_system_properties"
58
+
version = "0.1.5"
59
source = "registry+https://github.com/rust-lang/crates.io-index"
60
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
61
+
dependencies = [
62
+
"libc",
63
+
]
64
65
[[package]]
66
+
name = "anyhow"
67
+
version = "1.0.100"
68
source = "registry+https://github.com/rust-lang/crates.io-index"
69
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
70
71
[[package]]
72
+
name = "arboard"
73
+
version = "3.6.1"
74
source = "registry+https://github.com/rust-lang/crates.io-index"
75
+
checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf"
76
dependencies = [
77
+
"clipboard-win",
78
+
"image",
79
+
"log",
80
+
"objc2 0.6.3",
81
+
"objc2-app-kit",
82
+
"objc2-core-foundation",
83
+
"objc2-core-graphics",
84
+
"objc2-foundation 0.3.2",
85
+
"parking_lot",
86
+
"percent-encoding",
87
+
"windows-sys 0.60.2",
88
+
"wl-clipboard-rs",
89
+
"x11rb",
90
]
91
92
[[package]]
93
+
name = "ashpd"
94
+
version = "0.11.0"
95
source = "registry+https://github.com/rust-lang/crates.io-index"
96
+
checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df"
97
+
dependencies = [
98
+
"enumflags2",
99
+
"futures-channel",
100
+
"futures-util",
101
+
"rand 0.9.2",
102
+
"raw-window-handle",
103
+
"serde",
104
+
"serde_repr",
105
+
"tokio",
106
+
"url",
107
+
"wayland-backend",
108
+
"wayland-client",
109
+
"wayland-protocols",
110
+
"zbus",
111
+
]
112
113
[[package]]
114
name = "async-broadcast"
···
136
137
[[package]]
138
name = "async-executor"
139
+
version = "1.13.3"
140
source = "registry+https://github.com/rust-lang/crates.io-index"
141
+
checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
142
dependencies = [
143
"async-task",
144
"concurrent-queue",
···
150
151
[[package]]
152
name = "async-io"
153
+
version = "2.6.0"
154
source = "registry+https://github.com/rust-lang/crates.io-index"
155
+
checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
156
dependencies = [
157
+
"autocfg",
158
"cfg-if",
159
"concurrent-queue",
160
"futures-io",
161
"futures-lite",
162
"parking",
163
"polling",
164
+
"rustix 1.1.2",
165
"slab",
166
+
"windows-sys 0.61.2",
167
]
168
169
[[package]]
170
name = "async-lock"
171
+
version = "3.4.1"
172
source = "registry+https://github.com/rust-lang/crates.io-index"
173
+
checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
174
dependencies = [
175
"event-listener",
176
"event-listener-strategy",
···
179
180
[[package]]
181
name = "async-process"
182
+
version = "2.5.0"
183
source = "registry+https://github.com/rust-lang/crates.io-index"
184
+
checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
185
dependencies = [
186
"async-channel",
187
"async-io",
···
192
"cfg-if",
193
"event-listener",
194
"futures-lite",
195
+
"rustix 1.1.2",
196
]
197
198
[[package]]
···
203
dependencies = [
204
"proc-macro2",
205
"quote",
206
+
"syn 2.0.109",
207
]
208
209
[[package]]
210
name = "async-signal"
211
+
version = "0.2.13"
212
source = "registry+https://github.com/rust-lang/crates.io-index"
213
+
checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
214
dependencies = [
215
"async-io",
216
"async-lock",
···
218
"cfg-if",
219
"futures-core",
220
"futures-io",
221
+
"rustix 1.1.2",
222
"signal-hook-registry",
223
"slab",
224
+
"windows-sys 0.61.2",
225
]
226
227
[[package]]
···
232
233
[[package]]
234
name = "async-trait"
235
+
version = "0.1.89"
236
source = "registry+https://github.com/rust-lang/crates.io-index"
237
+
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
238
dependencies = [
239
"proc-macro2",
240
"quote",
241
+
"syn 2.0.109",
242
]
243
244
[[package]]
···
265
]
266
267
[[package]]
268
name = "atomic-waker"
269
version = "1.1.2"
270
source = "registry+https://github.com/rust-lang/crates.io-index"
···
277
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
278
279
[[package]]
280
name = "base64"
281
version = "0.21.7"
282
source = "registry+https://github.com/rust-lang/crates.io-index"
···
289
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
290
291
[[package]]
292
name = "bitflags"
293
version = "1.3.2"
294
source = "registry+https://github.com/rust-lang/crates.io-index"
···
296
297
[[package]]
298
name = "bitflags"
299
+
version = "2.10.0"
300
source = "registry+https://github.com/rust-lang/crates.io-index"
301
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
302
dependencies = [
303
+
"serde_core",
304
]
305
306
[[package]]
···
323
324
[[package]]
325
name = "block2"
326
+
version = "0.6.2"
327
source = "registry+https://github.com/rust-lang/crates.io-index"
328
+
checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
329
dependencies = [
330
+
"objc2 0.6.3",
331
]
332
333
[[package]]
···
345
346
[[package]]
347
name = "brotli"
348
+
version = "8.0.2"
349
source = "registry+https://github.com/rust-lang/crates.io-index"
350
+
checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
351
dependencies = [
352
"alloc-no-stdlib",
353
"alloc-stdlib",
···
372
373
[[package]]
374
name = "bytemuck"
375
+
version = "1.24.0"
376
source = "registry+https://github.com/rust-lang/crates.io-index"
377
+
checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
378
379
[[package]]
380
name = "byteorder"
···
383
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
384
385
[[package]]
386
+
name = "byteorder-lite"
387
+
version = "0.1.0"
388
+
source = "registry+https://github.com/rust-lang/crates.io-index"
389
+
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
390
+
391
+
[[package]]
392
name = "bytes"
393
version = "1.10.1"
394
source = "registry+https://github.com/rust-lang/crates.io-index"
···
403
source = "registry+https://github.com/rust-lang/crates.io-index"
404
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
405
dependencies = [
406
+
"bitflags 2.10.0",
407
"cairo-sys-rs",
408
"glib",
409
"libc",
···
424
425
[[package]]
426
name = "camino"
427
+
version = "1.2.1"
428
source = "registry+https://github.com/rust-lang/crates.io-index"
429
+
checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609"
430
dependencies = [
431
+
"serde_core",
432
]
433
434
[[package]]
···
451
"semver",
452
"serde",
453
"serde_json",
454
+
"thiserror 2.0.17",
455
]
456
457
[[package]]
···
461
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
462
dependencies = [
463
"serde",
464
+
"toml 0.9.8",
465
]
466
467
[[package]]
468
name = "cc"
469
+
version = "1.2.45"
470
source = "registry+https://github.com/rust-lang/crates.io-index"
471
+
checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe"
472
dependencies = [
473
+
"find-msvc-tools",
474
"shlex",
475
]
476
···
503
504
[[package]]
505
name = "cfg-if"
506
+
version = "1.0.4"
507
source = "registry+https://github.com/rust-lang/crates.io-index"
508
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
509
510
[[package]]
511
name = "cfg_aliases"
···
515
516
[[package]]
517
name = "chrono"
518
+
version = "0.4.42"
519
source = "registry+https://github.com/rust-lang/crates.io-index"
520
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
521
dependencies = [
522
"iana-time-zone",
523
+
"js-sys",
524
"num-traits",
525
"serde",
526
+
"wasm-bindgen",
527
+
"windows-link 0.2.1",
528
+
]
529
+
530
+
[[package]]
531
+
name = "clipboard-win"
532
+
version = "5.4.1"
533
+
source = "registry+https://github.com/rust-lang/crates.io-index"
534
+
checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4"
535
+
dependencies = [
536
+
"error-code",
537
]
538
539
[[package]]
···
554
dependencies = [
555
"crossbeam-utils",
556
]
557
558
[[package]]
559
name = "convert_case"
···
593
source = "registry+https://github.com/rust-lang/crates.io-index"
594
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
595
dependencies = [
596
+
"bitflags 2.10.0",
597
+
"core-foundation",
598
+
"core-graphics-types",
599
+
"foreign-types",
600
+
"libc",
601
+
]
602
+
603
+
[[package]]
604
+
name = "core-graphics"
605
+
version = "0.25.0"
606
+
source = "registry+https://github.com/rust-lang/crates.io-index"
607
+
checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97"
608
+
dependencies = [
609
+
"bitflags 2.10.0",
610
"core-foundation",
611
"core-graphics-types",
612
"foreign-types",
···
619
source = "registry+https://github.com/rust-lang/crates.io-index"
620
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
621
dependencies = [
622
+
"bitflags 2.10.0",
623
"core-foundation",
624
"libc",
625
]
···
634
]
635
636
[[package]]
637
name = "crc32fast"
638
version = "1.5.0"
639
source = "registry+https://github.com/rust-lang/crates.io-index"
···
652
]
653
654
[[package]]
655
name = "crossbeam-utils"
656
version = "0.8.21"
657
source = "registry+https://github.com/rust-lang/crates.io-index"
658
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
659
+
660
+
[[package]]
661
+
name = "crunchy"
662
+
version = "0.2.4"
663
+
source = "registry+https://github.com/rust-lang/crates.io-index"
664
+
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
665
666
[[package]]
667
name = "crypto-common"
···
697
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
698
dependencies = [
699
"quote",
700
+
"syn 2.0.109",
701
]
702
703
[[package]]
···
707
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
708
dependencies = [
709
"quote",
710
+
"syn 2.0.109",
711
]
712
713
[[package]]
714
name = "darling"
715
+
version = "0.21.3"
716
source = "registry+https://github.com/rust-lang/crates.io-index"
717
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
718
dependencies = [
719
"darling_core",
720
"darling_macro",
···
722
723
[[package]]
724
name = "darling_core"
725
+
version = "0.21.3"
726
source = "registry+https://github.com/rust-lang/crates.io-index"
727
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
728
dependencies = [
729
"fnv",
730
"ident_case",
731
"proc-macro2",
732
"quote",
733
"strsim",
734
+
"syn 2.0.109",
735
]
736
737
[[package]]
738
name = "darling_macro"
739
+
version = "0.21.3"
740
source = "registry+https://github.com/rust-lang/crates.io-index"
741
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
742
dependencies = [
743
"darling_core",
744
"quote",
745
+
"syn 2.0.109",
746
]
747
748
[[package]]
749
name = "deranged"
750
+
version = "0.5.5"
751
source = "registry+https://github.com/rust-lang/crates.io-index"
752
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
753
dependencies = [
754
"powerfmt",
755
+
"serde_core",
756
]
757
758
[[package]]
···
765
"proc-macro2",
766
"quote",
767
"rustc_version",
768
+
"syn 2.0.109",
769
]
770
771
[[package]]
···
775
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
776
dependencies = [
777
"block-buffer",
778
"crypto-common",
779
]
780
781
[[package]]
···
796
"libc",
797
"option-ext",
798
"redox_users",
799
+
"windows-sys 0.61.2",
800
]
801
802
[[package]]
···
811
source = "registry+https://github.com/rust-lang/crates.io-index"
812
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
813
dependencies = [
814
+
"bitflags 2.10.0",
815
+
"block2 0.6.2",
816
+
"libc",
817
+
"objc2 0.6.3",
818
]
819
820
[[package]]
···
825
dependencies = [
826
"proc-macro2",
827
"quote",
828
+
"syn 2.0.109",
829
+
]
830
+
831
+
[[package]]
832
+
name = "dlib"
833
+
version = "0.5.2"
834
+
source = "registry+https://github.com/rust-lang/crates.io-index"
835
+
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
836
+
dependencies = [
837
+
"libloading 0.8.9",
838
]
839
840
[[package]]
841
name = "dlopen2"
842
+
version = "0.8.0"
843
source = "registry+https://github.com/rust-lang/crates.io-index"
844
+
checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff"
845
dependencies = [
846
"dlopen2_derive",
847
"libc",
···
857
dependencies = [
858
"proc-macro2",
859
"quote",
860
+
"syn 2.0.109",
861
]
862
863
[[package]]
864
+
name = "downcast-rs"
865
+
version = "1.2.1"
866
source = "registry+https://github.com/rust-lang/crates.io-index"
867
+
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
868
869
[[package]]
870
name = "dpi"
···
903
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
904
905
[[package]]
906
name = "embed-resource"
907
+
version = "3.0.6"
908
source = "registry+https://github.com/rust-lang/crates.io-index"
909
+
checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e"
910
dependencies = [
911
"cc",
912
"memchr",
913
"rustc_version",
914
+
"toml 0.9.8",
915
"vswhom",
916
"winreg",
917
]
···
929
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
930
931
[[package]]
932
+
name = "enigo"
933
+
version = "0.6.1"
934
+
source = "registry+https://github.com/rust-lang/crates.io-index"
935
+
checksum = "71c6c56e50f7acae2906a0dcbb34529ca647e40421119ad5d12e7f8ba6e50010"
936
+
dependencies = [
937
+
"core-foundation",
938
+
"core-graphics 0.25.0",
939
+
"foreign-types-shared",
940
+
"libc",
941
+
"log",
942
+
"nom 8.0.0",
943
+
"objc2 0.6.3",
944
+
"objc2-app-kit",
945
+
"objc2-foundation 0.3.2",
946
+
"windows",
947
+
"x11rb",
948
+
"xkbcommon",
949
+
"xkeysym",
950
+
]
951
+
952
+
[[package]]
953
name = "enumflags2"
954
version = "0.7.12"
955
source = "registry+https://github.com/rust-lang/crates.io-index"
···
967
dependencies = [
968
"proc-macro2",
969
"quote",
970
+
"syn 2.0.109",
971
]
972
973
[[package]]
···
978
979
[[package]]
980
name = "erased-serde"
981
+
version = "0.4.9"
982
source = "registry+https://github.com/rust-lang/crates.io-index"
983
+
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
984
dependencies = [
985
"serde",
986
+
"serde_core",
987
"typeid",
988
]
989
990
[[package]]
991
name = "errno"
992
+
version = "0.3.14"
993
source = "registry+https://github.com/rust-lang/crates.io-index"
994
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
995
dependencies = [
996
"libc",
997
+
"windows-sys 0.61.2",
998
]
999
1000
[[package]]
1001
+
name = "error-code"
1002
+
version = "3.3.2"
1003
source = "registry+https://github.com/rust-lang/crates.io-index"
1004
+
checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
1005
1006
[[package]]
1007
name = "event-listener"
1008
+
version = "5.4.1"
1009
source = "registry+https://github.com/rust-lang/crates.io-index"
1010
+
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
1011
dependencies = [
1012
"concurrent-queue",
1013
"parking",
···
1031
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1032
1033
[[package]]
1034
+
name = "fax"
1035
+
version = "0.2.6"
1036
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1037
+
checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
1038
+
dependencies = [
1039
+
"fax_derive",
1040
+
]
1041
+
1042
+
[[package]]
1043
+
name = "fax_derive"
1044
+
version = "0.2.0"
1045
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1046
+
checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
1047
+
dependencies = [
1048
+
"proc-macro2",
1049
+
"quote",
1050
+
"syn 2.0.109",
1051
+
]
1052
+
1053
+
[[package]]
1054
name = "fdeflate"
1055
version = "0.3.7"
1056
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1070
]
1071
1072
[[package]]
1073
+
name = "find-msvc-tools"
1074
+
version = "0.1.4"
1075
source = "registry+https://github.com/rust-lang/crates.io-index"
1076
+
checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
1077
1078
[[package]]
1079
+
name = "fixedbitset"
1080
+
version = "0.5.7"
1081
source = "registry+https://github.com/rust-lang/crates.io-index"
1082
+
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
1083
+
1084
+
[[package]]
1085
+
name = "flate2"
1086
+
version = "1.1.5"
1087
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1088
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
1089
dependencies = [
1090
+
"crc32fast",
1091
+
"miniz_oxide",
1092
]
1093
1094
[[package]]
···
1121
dependencies = [
1122
"proc-macro2",
1123
"quote",
1124
+
"syn 2.0.109",
1125
]
1126
1127
[[package]]
···
1132
1133
[[package]]
1134
name = "form_urlencoded"
1135
+
version = "1.2.2"
1136
source = "registry+https://github.com/rust-lang/crates.io-index"
1137
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1138
dependencies = [
1139
"percent-encoding",
1140
]
···
1156
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
1157
dependencies = [
1158
"futures-core",
1159
]
1160
1161
[[package]]
···
1176
]
1177
1178
[[package]]
1179
name = "futures-io"
1180
version = "0.3.31"
1181
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1183
1184
[[package]]
1185
name = "futures-lite"
1186
+
version = "2.6.1"
1187
source = "registry+https://github.com/rust-lang/crates.io-index"
1188
+
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1189
dependencies = [
1190
"fastrand",
1191
"futures-core",
···
1202
dependencies = [
1203
"proc-macro2",
1204
"quote",
1205
+
"syn 2.0.109",
1206
]
1207
1208
[[package]]
···
1344
1345
[[package]]
1346
name = "generic-array"
1347
+
version = "0.14.9"
1348
source = "registry+https://github.com/rust-lang/crates.io-index"
1349
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
1350
dependencies = [
1351
"typenum",
1352
"version_check",
1353
]
1354
1355
[[package]]
1356
+
name = "gethostname"
1357
+
version = "1.1.0"
1358
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1359
+
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
1360
+
dependencies = [
1361
+
"rustix 1.1.2",
1362
+
"windows-link 0.2.1",
1363
+
]
1364
+
1365
+
[[package]]
1366
name = "getrandom"
1367
version = "0.1.16"
1368
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1386
1387
[[package]]
1388
name = "getrandom"
1389
+
version = "0.3.4"
1390
source = "registry+https://github.com/rust-lang/crates.io-index"
1391
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1392
dependencies = [
1393
"cfg-if",
1394
"libc",
1395
"r-efi",
1396
+
"wasip2",
1397
]
1398
1399
[[package]]
1400
name = "gio"
1401
version = "0.18.4"
1402
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1434
source = "registry+https://github.com/rust-lang/crates.io-index"
1435
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1436
dependencies = [
1437
+
"bitflags 2.10.0",
1438
"futures-channel",
1439
"futures-core",
1440
"futures-executor",
···
1458
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1459
dependencies = [
1460
"heck 0.4.1",
1461
+
"proc-macro-crate 2.0.2",
1462
"proc-macro-error",
1463
"proc-macro2",
1464
"quote",
1465
+
"syn 2.0.109",
1466
]
1467
1468
[[package]]
···
1477
1478
[[package]]
1479
name = "glob"
1480
+
version = "0.3.3"
1481
source = "registry+https://github.com/rust-lang/crates.io-index"
1482
+
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
1483
1484
[[package]]
1485
name = "gobject-sys"
···
1541
"proc-macro-error",
1542
"proc-macro2",
1543
"quote",
1544
+
"syn 2.0.109",
1545
+
]
1546
+
1547
+
[[package]]
1548
+
name = "half"
1549
+
version = "2.7.1"
1550
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1551
+
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
1552
+
dependencies = [
1553
+
"cfg-if",
1554
+
"crunchy",
1555
+
"zerocopy",
1556
]
1557
1558
[[package]]
···
1563
1564
[[package]]
1565
name = "hashbrown"
1566
+
version = "0.15.5"
1567
source = "registry+https://github.com/rust-lang/crates.io-index"
1568
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1569
dependencies = [
1570
"foldhash",
1571
]
1572
1573
[[package]]
1574
+
name = "hashbrown"
1575
+
version = "0.16.0"
1576
source = "registry+https://github.com/rust-lang/crates.io-index"
1577
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1578
1579
[[package]]
1580
name = "heck"
···
1601
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1602
1603
[[package]]
1604
name = "html5ever"
1605
version = "0.29.1"
1606
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1654
1655
[[package]]
1656
name = "hyper"
1657
+
version = "1.7.0"
1658
source = "registry+https://github.com/rust-lang/crates.io-index"
1659
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
1660
dependencies = [
1661
+
"atomic-waker",
1662
"bytes",
1663
"futures-channel",
1664
+
"futures-core",
1665
"http",
1666
"http-body",
1667
"httparse",
1668
"itoa",
1669
"pin-project-lite",
1670
+
"pin-utils",
1671
"smallvec",
1672
"tokio",
1673
"want",
···
1675
1676
[[package]]
1677
name = "hyper-util"
1678
+
version = "0.1.17"
1679
source = "registry+https://github.com/rust-lang/crates.io-index"
1680
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
1681
dependencies = [
1682
"base64 0.22.1",
1683
"bytes",
···
1699
1700
[[package]]
1701
name = "iana-time-zone"
1702
+
version = "0.1.64"
1703
source = "registry+https://github.com/rust-lang/crates.io-index"
1704
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1705
dependencies = [
1706
"android_system_properties",
1707
"core-foundation-sys",
···
1709
"js-sys",
1710
"log",
1711
"wasm-bindgen",
1712
+
"windows-core 0.62.2",
1713
]
1714
1715
[[package]]
···
1728
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1729
dependencies = [
1730
"byteorder",
1731
+
"png 0.17.16",
1732
]
1733
1734
[[package]]
1735
name = "icu_collections"
1736
+
version = "2.1.1"
1737
source = "registry+https://github.com/rust-lang/crates.io-index"
1738
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
1739
dependencies = [
1740
"displaydoc",
1741
"potential_utf",
···
1746
1747
[[package]]
1748
name = "icu_locale_core"
1749
+
version = "2.1.1"
1750
source = "registry+https://github.com/rust-lang/crates.io-index"
1751
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
1752
dependencies = [
1753
"displaydoc",
1754
"litemap",
···
1759
1760
[[package]]
1761
name = "icu_normalizer"
1762
+
version = "2.1.1"
1763
source = "registry+https://github.com/rust-lang/crates.io-index"
1764
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
1765
dependencies = [
1766
"icu_collections",
1767
"icu_normalizer_data",
1768
"icu_properties",
···
1773
1774
[[package]]
1775
name = "icu_normalizer_data"
1776
+
version = "2.1.1"
1777
source = "registry+https://github.com/rust-lang/crates.io-index"
1778
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
1779
1780
[[package]]
1781
name = "icu_properties"
1782
+
version = "2.1.1"
1783
source = "registry+https://github.com/rust-lang/crates.io-index"
1784
+
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
1785
dependencies = [
1786
"icu_collections",
1787
"icu_locale_core",
1788
"icu_properties_data",
1789
"icu_provider",
1790
"zerotrie",
1791
"zerovec",
1792
]
1793
1794
[[package]]
1795
name = "icu_properties_data"
1796
+
version = "2.1.1"
1797
source = "registry+https://github.com/rust-lang/crates.io-index"
1798
+
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
1799
1800
[[package]]
1801
name = "icu_provider"
1802
+
version = "2.1.1"
1803
source = "registry+https://github.com/rust-lang/crates.io-index"
1804
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
1805
dependencies = [
1806
"displaydoc",
1807
"icu_locale_core",
1808
"writeable",
1809
"yoke",
1810
"zerofrom",
···
1820
1821
[[package]]
1822
name = "idna"
1823
+
version = "1.1.0"
1824
source = "registry+https://github.com/rust-lang/crates.io-index"
1825
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1826
dependencies = [
1827
"idna_adapter",
1828
"smallvec",
···
1840
]
1841
1842
[[package]]
1843
+
name = "image"
1844
+
version = "0.25.8"
1845
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1846
+
checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7"
1847
+
dependencies = [
1848
+
"bytemuck",
1849
+
"byteorder-lite",
1850
+
"moxcms",
1851
+
"num-traits",
1852
+
"png 0.18.0",
1853
+
"tiff",
1854
+
]
1855
+
1856
+
[[package]]
1857
name = "indexmap"
1858
version = "1.9.3"
1859
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1866
1867
[[package]]
1868
name = "indexmap"
1869
+
version = "2.12.0"
1870
source = "registry+https://github.com/rust-lang/crates.io-index"
1871
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
1872
dependencies = [
1873
"equivalent",
1874
+
"hashbrown 0.16.0",
1875
"serde",
1876
+
"serde_core",
1877
]
1878
1879
[[package]]
···
1886
]
1887
1888
[[package]]
1889
name = "ipnet"
1890
version = "2.11.0"
1891
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1893
1894
[[package]]
1895
name = "iri-string"
1896
+
version = "0.7.9"
1897
source = "registry+https://github.com/rust-lang/crates.io-index"
1898
+
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
1899
dependencies = [
1900
"memchr",
1901
"serde",
···
1973
1974
[[package]]
1975
name = "js-sys"
1976
+
version = "0.3.82"
1977
source = "registry+https://github.com/rust-lang/crates.io-index"
1978
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
1979
dependencies = [
1980
"once_cell",
1981
"wasm-bindgen",
···
2009
source = "registry+https://github.com/rust-lang/crates.io-index"
2010
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
2011
dependencies = [
2012
+
"bitflags 2.10.0",
2013
"serde",
2014
"unicode-segmentation",
2015
]
···
2022
dependencies = [
2023
"cssparser",
2024
"html5ever",
2025
+
"indexmap 2.12.0",
2026
"selectors",
2027
]
2028
···
2031
version = "1.5.0"
2032
source = "registry+https://github.com/rust-lang/crates.io-index"
2033
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2034
2035
[[package]]
2036
name = "libappindicator"
···
2052
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
2053
dependencies = [
2054
"gtk-sys",
2055
+
"libloading 0.7.4",
2056
"once_cell",
2057
]
2058
2059
[[package]]
2060
name = "libc"
2061
+
version = "0.2.177"
2062
source = "registry+https://github.com/rust-lang/crates.io-index"
2063
+
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
2064
2065
[[package]]
2066
name = "libloading"
···
2073
]
2074
2075
[[package]]
2076
+
name = "libloading"
2077
+
version = "0.8.9"
2078
source = "registry+https://github.com/rust-lang/crates.io-index"
2079
+
checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
2080
+
dependencies = [
2081
+
"cfg-if",
2082
+
"windows-link 0.2.1",
2083
+
]
2084
2085
[[package]]
2086
name = "libredox"
2087
+
version = "0.1.10"
2088
source = "registry+https://github.com/rust-lang/crates.io-index"
2089
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
2090
dependencies = [
2091
+
"bitflags 2.10.0",
2092
"libc",
2093
]
2094
2095
[[package]]
2096
+
name = "linux-raw-sys"
2097
+
version = "0.4.15"
2098
source = "registry+https://github.com/rust-lang/crates.io-index"
2099
+
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
2100
2101
[[package]]
2102
name = "linux-raw-sys"
2103
+
version = "0.11.0"
2104
source = "registry+https://github.com/rust-lang/crates.io-index"
2105
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
2106
2107
[[package]]
2108
name = "litemap"
2109
+
version = "0.8.1"
2110
source = "registry+https://github.com/rust-lang/crates.io-index"
2111
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
2112
2113
[[package]]
2114
name = "lock_api"
2115
+
version = "0.4.14"
2116
source = "registry+https://github.com/rust-lang/crates.io-index"
2117
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
2118
dependencies = [
2119
"scopeguard",
2120
]
2121
2122
[[package]]
2123
name = "log"
2124
+
version = "0.4.28"
2125
source = "registry+https://github.com/rust-lang/crates.io-index"
2126
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
2127
2128
[[package]]
2129
name = "mac"
···
2153
dependencies = [
2154
"proc-macro2",
2155
"quote",
2156
+
"syn 2.0.109",
2157
]
2158
2159
[[package]]
···
2163
checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
2164
2165
[[package]]
2166
+
name = "memchr"
2167
+
version = "2.7.6"
2168
source = "registry+https://github.com/rust-lang/crates.io-index"
2169
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
2170
2171
[[package]]
2172
+
name = "memmap2"
2173
+
version = "0.9.9"
2174
source = "registry+https://github.com/rust-lang/crates.io-index"
2175
+
checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490"
2176
+
dependencies = [
2177
+
"libc",
2178
+
]
2179
2180
[[package]]
2181
name = "memoffset"
···
2191
version = "0.3.17"
2192
source = "registry+https://github.com/rust-lang/crates.io-index"
2193
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2194
+
2195
+
[[package]]
2196
+
name = "minimal-lexical"
2197
+
version = "0.2.1"
2198
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2199
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
2200
2201
[[package]]
2202
name = "miniz_oxide"
···
2210
2211
[[package]]
2212
name = "mio"
2213
+
version = "1.1.0"
2214
source = "registry+https://github.com/rust-lang/crates.io-index"
2215
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
2216
dependencies = [
2217
"libc",
2218
"wasi 0.11.1+wasi-snapshot-preview1",
2219
+
"windows-sys 0.61.2",
2220
+
]
2221
+
2222
+
[[package]]
2223
+
name = "moxcms"
2224
+
version = "0.7.9"
2225
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2226
+
checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6"
2227
+
dependencies = [
2228
+
"num-traits",
2229
+
"pxfm",
2230
]
2231
2232
[[package]]
2233
name = "muda"
2234
+
version = "0.17.1"
2235
source = "registry+https://github.com/rust-lang/crates.io-index"
2236
+
checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a"
2237
dependencies = [
2238
"crossbeam-channel",
2239
"dpi",
2240
"gtk",
2241
"keyboard-types",
2242
+
"objc2 0.6.3",
2243
"objc2-app-kit",
2244
"objc2-core-foundation",
2245
+
"objc2-foundation 0.3.2",
2246
"once_cell",
2247
+
"png 0.17.16",
2248
"serde",
2249
+
"thiserror 2.0.17",
2250
+
"windows-sys 0.60.2",
2251
]
2252
2253
[[package]]
···
2256
source = "registry+https://github.com/rust-lang/crates.io-index"
2257
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2258
dependencies = [
2259
+
"bitflags 2.10.0",
2260
"jni-sys",
2261
"log",
2262
"ndk-sys",
···
2292
source = "registry+https://github.com/rust-lang/crates.io-index"
2293
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2294
dependencies = [
2295
+
"bitflags 2.10.0",
2296
"cfg-if",
2297
"cfg_aliases",
2298
"libc",
···
2306
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2307
2308
[[package]]
2309
+
name = "nom"
2310
+
version = "7.1.3"
2311
source = "registry+https://github.com/rust-lang/crates.io-index"
2312
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
2313
dependencies = [
2314
+
"memchr",
2315
+
"minimal-lexical",
2316
]
2317
2318
[[package]]
2319
+
name = "nom"
2320
+
version = "8.0.0"
2321
source = "registry+https://github.com/rust-lang/crates.io-index"
2322
+
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
2323
dependencies = [
2324
+
"memchr",
2325
]
2326
2327
[[package]]
2328
+
name = "num-conv"
2329
+
version = "0.1.0"
2330
source = "registry+https://github.com/rust-lang/crates.io-index"
2331
+
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
2332
2333
[[package]]
2334
name = "num-traits"
···
2337
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
2338
dependencies = [
2339
"autocfg",
2340
]
2341
2342
[[package]]
2343
name = "num_enum"
2344
+
version = "0.7.5"
2345
source = "registry+https://github.com/rust-lang/crates.io-index"
2346
+
checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
2347
dependencies = [
2348
"num_enum_derive",
2349
"rustversion",
···
2351
2352
[[package]]
2353
name = "num_enum_derive"
2354
+
version = "0.7.5"
2355
source = "registry+https://github.com/rust-lang/crates.io-index"
2356
+
checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
2357
dependencies = [
2358
+
"proc-macro-crate 3.4.0",
2359
"proc-macro2",
2360
"quote",
2361
+
"syn 2.0.109",
2362
]
2363
2364
[[package]]
···
2379
2380
[[package]]
2381
name = "objc2"
2382
+
version = "0.6.3"
2383
source = "registry+https://github.com/rust-lang/crates.io-index"
2384
+
checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
2385
dependencies = [
2386
"objc2-encode",
2387
"objc2-exception-helper",
···
2389
2390
[[package]]
2391
name = "objc2-app-kit"
2392
+
version = "0.3.2"
2393
source = "registry+https://github.com/rust-lang/crates.io-index"
2394
+
checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
2395
dependencies = [
2396
+
"bitflags 2.10.0",
2397
+
"block2 0.6.2",
2398
"libc",
2399
+
"objc2 0.6.3",
2400
"objc2-cloud-kit",
2401
"objc2-core-data",
2402
"objc2-core-foundation",
2403
"objc2-core-graphics",
2404
"objc2-core-image",
2405
+
"objc2-core-text",
2406
+
"objc2-core-video",
2407
+
"objc2-foundation 0.3.2",
2408
+
"objc2-quartz-core 0.3.2",
2409
]
2410
2411
[[package]]
2412
name = "objc2-cloud-kit"
2413
+
version = "0.3.2"
2414
source = "registry+https://github.com/rust-lang/crates.io-index"
2415
+
checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
2416
dependencies = [
2417
+
"bitflags 2.10.0",
2418
+
"objc2 0.6.3",
2419
+
"objc2-foundation 0.3.2",
2420
]
2421
2422
[[package]]
2423
name = "objc2-core-data"
2424
+
version = "0.3.2"
2425
source = "registry+https://github.com/rust-lang/crates.io-index"
2426
+
checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
2427
dependencies = [
2428
+
"bitflags 2.10.0",
2429
+
"objc2 0.6.3",
2430
+
"objc2-foundation 0.3.2",
2431
]
2432
2433
[[package]]
2434
name = "objc2-core-foundation"
2435
+
version = "0.3.2"
2436
source = "registry+https://github.com/rust-lang/crates.io-index"
2437
+
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
2438
dependencies = [
2439
+
"bitflags 2.10.0",
2440
"dispatch2",
2441
+
"objc2 0.6.3",
2442
]
2443
2444
[[package]]
2445
name = "objc2-core-graphics"
2446
+
version = "0.3.2"
2447
source = "registry+https://github.com/rust-lang/crates.io-index"
2448
+
checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
2449
dependencies = [
2450
+
"bitflags 2.10.0",
2451
"dispatch2",
2452
+
"objc2 0.6.3",
2453
"objc2-core-foundation",
2454
"objc2-io-surface",
2455
]
2456
2457
[[package]]
2458
name = "objc2-core-image"
2459
+
version = "0.3.2"
2460
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2461
+
checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006"
2462
+
dependencies = [
2463
+
"objc2 0.6.3",
2464
+
"objc2-foundation 0.3.2",
2465
+
]
2466
+
2467
+
[[package]]
2468
+
name = "objc2-core-location"
2469
+
version = "0.3.2"
2470
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2471
+
checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009"
2472
+
dependencies = [
2473
+
"objc2 0.6.3",
2474
+
"objc2-foundation 0.3.2",
2475
+
]
2476
+
2477
+
[[package]]
2478
+
name = "objc2-core-text"
2479
+
version = "0.3.2"
2480
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2481
+
checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
2482
+
dependencies = [
2483
+
"bitflags 2.10.0",
2484
+
"objc2 0.6.3",
2485
+
"objc2-core-foundation",
2486
+
"objc2-core-graphics",
2487
+
]
2488
+
2489
+
[[package]]
2490
+
name = "objc2-core-video"
2491
+
version = "0.3.2"
2492
source = "registry+https://github.com/rust-lang/crates.io-index"
2493
+
checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
2494
dependencies = [
2495
+
"bitflags 2.10.0",
2496
+
"objc2 0.6.3",
2497
+
"objc2-core-foundation",
2498
+
"objc2-core-graphics",
2499
+
"objc2-io-surface",
2500
]
2501
2502
[[package]]
···
2520
source = "registry+https://github.com/rust-lang/crates.io-index"
2521
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2522
dependencies = [
2523
+
"bitflags 2.10.0",
2524
"block2 0.5.1",
2525
"libc",
2526
"objc2 0.5.2",
···
2528
2529
[[package]]
2530
name = "objc2-foundation"
2531
+
version = "0.3.2"
2532
source = "registry+https://github.com/rust-lang/crates.io-index"
2533
+
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2534
dependencies = [
2535
+
"bitflags 2.10.0",
2536
+
"block2 0.6.2",
2537
"libc",
2538
+
"objc2 0.6.3",
2539
"objc2-core-foundation",
2540
]
2541
2542
[[package]]
2543
name = "objc2-io-surface"
2544
+
version = "0.3.2"
2545
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2546
+
checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2547
+
dependencies = [
2548
+
"bitflags 2.10.0",
2549
+
"objc2 0.6.3",
2550
+
"objc2-core-foundation",
2551
+
]
2552
+
2553
+
[[package]]
2554
+
name = "objc2-javascript-core"
2555
+
version = "0.3.2"
2556
source = "registry+https://github.com/rust-lang/crates.io-index"
2557
+
checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586"
2558
dependencies = [
2559
+
"objc2 0.6.3",
2560
"objc2-core-foundation",
2561
]
2562
···
2566
source = "registry+https://github.com/rust-lang/crates.io-index"
2567
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2568
dependencies = [
2569
+
"bitflags 2.10.0",
2570
"block2 0.5.1",
2571
"objc2 0.5.2",
2572
"objc2-foundation 0.2.2",
···
2578
source = "registry+https://github.com/rust-lang/crates.io-index"
2579
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2580
dependencies = [
2581
+
"bitflags 2.10.0",
2582
"block2 0.5.1",
2583
"objc2 0.5.2",
2584
"objc2-foundation 0.2.2",
···
2587
2588
[[package]]
2589
name = "objc2-quartz-core"
2590
+
version = "0.3.2"
2591
source = "registry+https://github.com/rust-lang/crates.io-index"
2592
+
checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
2593
dependencies = [
2594
+
"bitflags 2.10.0",
2595
+
"objc2 0.6.3",
2596
+
"objc2-core-foundation",
2597
+
"objc2-foundation 0.3.2",
2598
]
2599
2600
[[package]]
2601
+
name = "objc2-security"
2602
+
version = "0.3.2"
2603
source = "registry+https://github.com/rust-lang/crates.io-index"
2604
+
checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a"
2605
dependencies = [
2606
+
"bitflags 2.10.0",
2607
+
"objc2 0.6.3",
2608
"objc2-core-foundation",
2609
]
2610
2611
[[package]]
2612
+
name = "objc2-ui-kit"
2613
+
version = "0.3.2"
2614
source = "registry+https://github.com/rust-lang/crates.io-index"
2615
+
checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
2616
dependencies = [
2617
+
"bitflags 2.10.0",
2618
+
"block2 0.6.2",
2619
+
"objc2 0.6.3",
2620
+
"objc2-cloud-kit",
2621
+
"objc2-core-data",
2622
"objc2-core-foundation",
2623
+
"objc2-core-graphics",
2624
+
"objc2-core-image",
2625
+
"objc2-core-location",
2626
+
"objc2-core-text",
2627
+
"objc2-foundation 0.3.2",
2628
+
"objc2-quartz-core 0.3.2",
2629
+
"objc2-user-notifications",
2630
]
2631
2632
[[package]]
2633
+
name = "objc2-user-notifications"
2634
+
version = "0.3.2"
2635
source = "registry+https://github.com/rust-lang/crates.io-index"
2636
+
checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e"
2637
dependencies = [
2638
+
"objc2 0.6.3",
2639
+
"objc2-foundation 0.3.2",
2640
+
]
2641
+
2642
+
[[package]]
2643
+
name = "objc2-web-kit"
2644
+
version = "0.3.2"
2645
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2646
+
checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f"
2647
+
dependencies = [
2648
+
"bitflags 2.10.0",
2649
+
"block2 0.6.2",
2650
+
"objc2 0.6.3",
2651
+
"objc2-app-kit",
2652
+
"objc2-core-foundation",
2653
+
"objc2-foundation 0.3.2",
2654
+
"objc2-javascript-core",
2655
+
"objc2-security",
2656
]
2657
2658
[[package]]
···
2690
]
2691
2692
[[package]]
2693
+
name = "os_info"
2694
+
version = "3.13.0"
2695
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2696
+
checksum = "7c39b5918402d564846d5aba164c09a66cc88d232179dfd3e3c619a25a268392"
2697
+
dependencies = [
2698
+
"android_system_properties",
2699
+
"log",
2700
+
"nix",
2701
+
"objc2 0.6.3",
2702
+
"objc2-foundation 0.3.2",
2703
+
"objc2-ui-kit",
2704
+
"serde",
2705
+
"windows-sys 0.61.2",
2706
+
]
2707
+
2708
+
[[package]]
2709
+
name = "os_pipe"
2710
+
version = "1.2.3"
2711
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2712
+
checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967"
2713
+
dependencies = [
2714
+
"libc",
2715
+
"windows-sys 0.61.2",
2716
+
]
2717
+
2718
+
[[package]]
2719
name = "pango"
2720
version = "0.18.3"
2721
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2748
2749
[[package]]
2750
name = "parking_lot"
2751
+
version = "0.12.5"
2752
source = "registry+https://github.com/rust-lang/crates.io-index"
2753
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
2754
dependencies = [
2755
"lock_api",
2756
"parking_lot_core",
···
2758
2759
[[package]]
2760
name = "parking_lot_core"
2761
+
version = "0.9.12"
2762
source = "registry+https://github.com/rust-lang/crates.io-index"
2763
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
2764
dependencies = [
2765
"cfg-if",
2766
"libc",
2767
"redox_syscall",
2768
"smallvec",
2769
+
"windows-link 0.2.1",
2770
]
2771
2772
[[package]]
···
2776
checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
2777
2778
[[package]]
2779
+
name = "percent-encoding"
2780
+
version = "2.3.2"
2781
source = "registry+https://github.com/rust-lang/crates.io-index"
2782
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
2783
2784
[[package]]
2785
+
name = "petgraph"
2786
+
version = "0.8.3"
2787
source = "registry+https://github.com/rust-lang/crates.io-index"
2788
+
checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
2789
+
dependencies = [
2790
+
"fixedbitset",
2791
+
"hashbrown 0.15.5",
2792
+
"indexmap 2.12.0",
2793
+
]
2794
2795
[[package]]
2796
name = "phf"
···
2896
"phf_shared 0.11.3",
2897
"proc-macro2",
2898
"quote",
2899
+
"syn 2.0.109",
2900
]
2901
2902
[[package]]
···
2950
]
2951
2952
[[package]]
2953
name = "pkg-config"
2954
version = "0.3.32"
2955
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2957
2958
[[package]]
2959
name = "plist"
2960
+
version = "1.8.0"
2961
source = "registry+https://github.com/rust-lang/crates.io-index"
2962
+
checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
2963
dependencies = [
2964
"base64 0.22.1",
2965
+
"indexmap 2.12.0",
2966
+
"quick-xml 0.38.3",
2967
"serde",
2968
"time",
2969
]
···
2982
]
2983
2984
[[package]]
2985
+
name = "png"
2986
+
version = "0.18.0"
2987
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2988
+
checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
2989
+
dependencies = [
2990
+
"bitflags 2.10.0",
2991
+
"crc32fast",
2992
+
"fdeflate",
2993
+
"flate2",
2994
+
"miniz_oxide",
2995
+
]
2996
+
2997
+
[[package]]
2998
name = "polling"
2999
+
version = "3.11.0"
3000
source = "registry+https://github.com/rust-lang/crates.io-index"
3001
+
checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
3002
dependencies = [
3003
"cfg-if",
3004
"concurrent-queue",
3005
"hermit-abi",
3006
"pin-project-lite",
3007
+
"rustix 1.1.2",
3008
+
"windows-sys 0.61.2",
3009
]
3010
3011
[[package]]
3012
name = "potential_utf"
3013
+
version = "0.1.4"
3014
source = "registry+https://github.com/rust-lang/crates.io-index"
3015
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
3016
dependencies = [
3017
"zerovec",
3018
]
···
3050
3051
[[package]]
3052
name = "proc-macro-crate"
3053
+
version = "2.0.2"
3054
source = "registry+https://github.com/rust-lang/crates.io-index"
3055
+
checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
3056
dependencies = [
3057
+
"toml_datetime 0.6.3",
3058
+
"toml_edit 0.20.2",
3059
]
3060
3061
[[package]]
3062
name = "proc-macro-crate"
3063
+
version = "3.4.0"
3064
source = "registry+https://github.com/rust-lang/crates.io-index"
3065
+
checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
3066
dependencies = [
3067
+
"toml_edit 0.23.7",
3068
]
3069
3070
[[package]]
···
3099
3100
[[package]]
3101
name = "proc-macro2"
3102
+
version = "1.0.103"
3103
source = "registry+https://github.com/rust-lang/crates.io-index"
3104
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
3105
dependencies = [
3106
"unicode-ident",
3107
]
3108
3109
[[package]]
3110
+
name = "pxfm"
3111
+
version = "0.1.25"
3112
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3113
+
checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84"
3114
+
dependencies = [
3115
+
"num-traits",
3116
+
]
3117
+
3118
+
[[package]]
3119
+
name = "quick-error"
3120
+
version = "2.0.1"
3121
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3122
+
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
3123
+
3124
+
[[package]]
3125
name = "quick-xml"
3126
+
version = "0.37.5"
3127
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3128
+
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
3129
+
dependencies = [
3130
+
"memchr",
3131
+
]
3132
+
3133
+
[[package]]
3134
+
name = "quick-xml"
3135
+
version = "0.38.3"
3136
source = "registry+https://github.com/rust-lang/crates.io-index"
3137
+
checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89"
3138
dependencies = [
3139
"memchr",
3140
]
3141
3142
[[package]]
3143
name = "quote"
3144
+
version = "1.0.42"
3145
source = "registry+https://github.com/rust-lang/crates.io-index"
3146
+
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
3147
dependencies = [
3148
"proc-macro2",
3149
]
···
3180
]
3181
3182
[[package]]
3183
+
name = "rand"
3184
+
version = "0.9.2"
3185
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3186
+
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
3187
+
dependencies = [
3188
+
"rand_chacha 0.9.0",
3189
+
"rand_core 0.9.3",
3190
+
]
3191
+
3192
+
[[package]]
3193
name = "rand_chacha"
3194
version = "0.2.2"
3195
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3210
]
3211
3212
[[package]]
3213
+
name = "rand_chacha"
3214
+
version = "0.9.0"
3215
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3216
+
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
3217
+
dependencies = [
3218
+
"ppv-lite86",
3219
+
"rand_core 0.9.3",
3220
+
]
3221
+
3222
+
[[package]]
3223
name = "rand_core"
3224
version = "0.5.1"
3225
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3235
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
3236
dependencies = [
3237
"getrandom 0.2.16",
3238
+
]
3239
+
3240
+
[[package]]
3241
+
name = "rand_core"
3242
+
version = "0.9.3"
3243
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3244
+
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
3245
+
dependencies = [
3246
+
"getrandom 0.3.4",
3247
]
3248
3249
[[package]]
···
3272
3273
[[package]]
3274
name = "redox_syscall"
3275
+
version = "0.5.18"
3276
source = "registry+https://github.com/rust-lang/crates.io-index"
3277
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
3278
dependencies = [
3279
+
"bitflags 2.10.0",
3280
]
3281
3282
[[package]]
3283
name = "redox_users"
3284
+
version = "0.5.2"
3285
source = "registry+https://github.com/rust-lang/crates.io-index"
3286
+
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
3287
dependencies = [
3288
"getrandom 0.2.16",
3289
"libredox",
3290
+
"thiserror 2.0.17",
3291
]
3292
3293
[[package]]
3294
name = "ref-cast"
3295
+
version = "1.0.25"
3296
source = "registry+https://github.com/rust-lang/crates.io-index"
3297
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
3298
dependencies = [
3299
"ref-cast-impl",
3300
]
3301
3302
[[package]]
3303
name = "ref-cast-impl"
3304
+
version = "1.0.25"
3305
source = "registry+https://github.com/rust-lang/crates.io-index"
3306
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
3307
dependencies = [
3308
"proc-macro2",
3309
"quote",
3310
+
"syn 2.0.109",
3311
]
3312
3313
[[package]]
3314
name = "regex"
3315
+
version = "1.12.2"
3316
source = "registry+https://github.com/rust-lang/crates.io-index"
3317
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
3318
dependencies = [
3319
"aho-corasick",
3320
"memchr",
···
3324
3325
[[package]]
3326
name = "regex-automata"
3327
+
version = "0.4.13"
3328
source = "registry+https://github.com/rust-lang/crates.io-index"
3329
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
3330
dependencies = [
3331
"aho-corasick",
3332
"memchr",
···
3335
3336
[[package]]
3337
name = "regex-syntax"
3338
+
version = "0.8.8"
3339
source = "registry+https://github.com/rust-lang/crates.io-index"
3340
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
3341
3342
[[package]]
3343
name = "reqwest"
3344
+
version = "0.12.24"
3345
source = "registry+https://github.com/rust-lang/crates.io-index"
3346
+
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
3347
dependencies = [
3348
"base64 0.22.1",
3349
"bytes",
···
3375
]
3376
3377
[[package]]
3378
+
name = "rfd"
3379
+
version = "0.15.4"
3380
source = "registry+https://github.com/rust-lang/crates.io-index"
3381
+
checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed"
3382
dependencies = [
3383
+
"ashpd",
3384
+
"block2 0.6.2",
3385
+
"dispatch2",
3386
+
"glib-sys",
3387
+
"gobject-sys",
3388
+
"gtk-sys",
3389
+
"js-sys",
3390
+
"log",
3391
+
"objc2 0.6.3",
3392
+
"objc2-app-kit",
3393
+
"objc2-core-foundation",
3394
+
"objc2-foundation 0.3.2",
3395
+
"raw-window-handle",
3396
+
"wasm-bindgen",
3397
+
"wasm-bindgen-futures",
3398
+
"web-sys",
3399
+
"windows-sys 0.59.0",
3400
]
3401
3402
[[package]]
3403
name = "rustc_version"
3404
version = "0.4.1"
3405
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3410
3411
[[package]]
3412
name = "rustix"
3413
+
version = "0.38.44"
3414
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3415
+
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
3416
+
dependencies = [
3417
+
"bitflags 2.10.0",
3418
+
"errno",
3419
+
"libc",
3420
+
"linux-raw-sys 0.4.15",
3421
+
"windows-sys 0.59.0",
3422
+
]
3423
+
3424
+
[[package]]
3425
+
name = "rustix"
3426
+
version = "1.1.2"
3427
source = "registry+https://github.com/rust-lang/crates.io-index"
3428
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3429
dependencies = [
3430
+
"bitflags 2.10.0",
3431
"errno",
3432
"libc",
3433
+
"linux-raw-sys 0.11.0",
3434
+
"windows-sys 0.61.2",
3435
]
3436
3437
[[package]]
3438
name = "rustversion"
3439
+
version = "1.0.22"
3440
source = "registry+https://github.com/rust-lang/crates.io-index"
3441
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3442
3443
[[package]]
3444
name = "ryu"
···
3484
3485
[[package]]
3486
name = "schemars"
3487
+
version = "1.1.0"
3488
source = "registry+https://github.com/rust-lang/crates.io-index"
3489
+
checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
3490
dependencies = [
3491
"dyn-clone",
3492
"ref-cast",
···
3503
"proc-macro2",
3504
"quote",
3505
"serde_derive_internals",
3506
+
"syn 2.0.109",
3507
]
3508
3509
[[package]]
3510
+
name = "scoped-tls"
3511
+
version = "1.0.1"
3512
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3513
+
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
3514
+
3515
+
[[package]]
3516
name = "scopeguard"
3517
version = "1.2.0"
3518
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3538
3539
[[package]]
3540
name = "semver"
3541
+
version = "1.0.27"
3542
source = "registry+https://github.com/rust-lang/crates.io-index"
3543
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
3544
dependencies = [
3545
"serde",
3546
+
"serde_core",
3547
]
3548
3549
[[package]]
3550
name = "serde"
3551
+
version = "1.0.228"
3552
source = "registry+https://github.com/rust-lang/crates.io-index"
3553
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
3554
dependencies = [
3555
+
"serde_core",
3556
"serde_derive",
3557
]
3558
3559
[[package]]
3560
name = "serde-untagged"
3561
+
version = "0.1.9"
3562
source = "registry+https://github.com/rust-lang/crates.io-index"
3563
+
checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
3564
dependencies = [
3565
"erased-serde",
3566
"serde",
3567
+
"serde_core",
3568
"typeid",
3569
]
3570
3571
[[package]]
3572
+
name = "serde_core"
3573
+
version = "1.0.228"
3574
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3575
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
3576
+
dependencies = [
3577
+
"serde_derive",
3578
+
]
3579
+
3580
+
[[package]]
3581
name = "serde_derive"
3582
+
version = "1.0.228"
3583
source = "registry+https://github.com/rust-lang/crates.io-index"
3584
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
3585
dependencies = [
3586
"proc-macro2",
3587
"quote",
3588
+
"syn 2.0.109",
3589
]
3590
3591
[[package]]
···
3596
dependencies = [
3597
"proc-macro2",
3598
"quote",
3599
+
"syn 2.0.109",
3600
]
3601
3602
[[package]]
3603
name = "serde_json"
3604
+
version = "1.0.145"
3605
source = "registry+https://github.com/rust-lang/crates.io-index"
3606
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3607
dependencies = [
3608
"itoa",
3609
"memchr",
3610
"ryu",
3611
"serde",
3612
+
"serde_core",
3613
]
3614
3615
[[package]]
···
3620
dependencies = [
3621
"proc-macro2",
3622
"quote",
3623
+
"syn 2.0.109",
3624
]
3625
3626
[[package]]
···
3634
3635
[[package]]
3636
name = "serde_spanned"
3637
+
version = "1.0.3"
3638
source = "registry+https://github.com/rust-lang/crates.io-index"
3639
+
checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
3640
dependencies = [
3641
+
"serde_core",
3642
]
3643
3644
[[package]]
···
3655
3656
[[package]]
3657
name = "serde_with"
3658
+
version = "3.15.1"
3659
source = "registry+https://github.com/rust-lang/crates.io-index"
3660
+
checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04"
3661
dependencies = [
3662
"base64 0.22.1",
3663
"chrono",
3664
"hex",
3665
"indexmap 1.9.3",
3666
+
"indexmap 2.12.0",
3667
"schemars 0.9.0",
3668
+
"schemars 1.1.0",
3669
+
"serde_core",
3670
"serde_json",
3671
"serde_with_macros",
3672
"time",
···
3674
3675
[[package]]
3676
name = "serde_with_macros"
3677
+
version = "3.15.1"
3678
source = "registry+https://github.com/rust-lang/crates.io-index"
3679
+
checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955"
3680
dependencies = [
3681
"darling",
3682
"proc-macro2",
3683
"quote",
3684
+
"syn 2.0.109",
3685
]
3686
3687
[[package]]
3688
name = "serialize-to-javascript"
3689
+
version = "0.1.2"
3690
source = "registry+https://github.com/rust-lang/crates.io-index"
3691
+
checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
3692
dependencies = [
3693
"serde",
3694
"serde_json",
···
3697
3698
[[package]]
3699
name = "serialize-to-javascript-impl"
3700
+
version = "0.1.2"
3701
source = "registry+https://github.com/rust-lang/crates.io-index"
3702
+
checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
3703
dependencies = [
3704
"proc-macro2",
3705
"quote",
3706
+
"syn 2.0.109",
3707
]
3708
3709
[[package]]
···
3717
]
3718
3719
[[package]]
3720
name = "sha2"
3721
version = "0.10.9"
3722
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3735
3736
[[package]]
3737
name = "signal-hook-registry"
3738
+
version = "1.4.6"
3739
source = "registry+https://github.com/rust-lang/crates.io-index"
3740
+
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
3741
dependencies = [
3742
"libc",
3743
]
3744
3745
[[package]]
3746
name = "simd-adler32"
3747
version = "0.3.7"
3748
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3762
3763
[[package]]
3764
name = "slab"
3765
+
version = "0.4.11"
3766
source = "registry+https://github.com/rust-lang/crates.io-index"
3767
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
3768
3769
[[package]]
3770
name = "smallvec"
3771
version = "1.15.1"
3772
source = "registry+https://github.com/rust-lang/crates.io-index"
3773
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
3774
3775
[[package]]
3776
name = "socket2"
3777
+
version = "0.6.1"
3778
source = "registry+https://github.com/rust-lang/crates.io-index"
3779
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
3780
dependencies = [
3781
"libc",
3782
+
"windows-sys 0.60.2",
3783
]
3784
3785
[[package]]
···
3790
dependencies = [
3791
"bytemuck",
3792
"cfg_aliases",
3793
+
"core-graphics 0.24.0",
3794
"foreign-types",
3795
"js-sys",
3796
"log",
···
3831
]
3832
3833
[[package]]
3834
name = "stable_deref_trait"
3835
+
version = "1.2.1"
3836
source = "registry+https://github.com/rust-lang/crates.io-index"
3837
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
3838
3839
[[package]]
3840
name = "static_assertions"
···
3868
]
3869
3870
[[package]]
3871
name = "strsim"
3872
version = "0.11.1"
3873
source = "registry+https://github.com/rust-lang/crates.io-index"
3874
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
3875
3876
[[package]]
3877
name = "swift-rs"
···
3897
3898
[[package]]
3899
name = "syn"
3900
+
version = "2.0.109"
3901
source = "registry+https://github.com/rust-lang/crates.io-index"
3902
+
checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f"
3903
dependencies = [
3904
"proc-macro2",
3905
"quote",
···
3923
dependencies = [
3924
"proc-macro2",
3925
"quote",
3926
+
"syn 2.0.109",
3927
+
]
3928
+
3929
+
[[package]]
3930
+
name = "sys-locale"
3931
+
version = "0.3.2"
3932
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3933
+
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
3934
+
dependencies = [
3935
+
"libc",
3936
]
3937
3938
[[package]]
···
3944
"cfg-expr",
3945
"heck 0.5.0",
3946
"pkg-config",
3947
+
"toml 0.8.2",
3948
"version-compare",
3949
]
3950
3951
[[package]]
3952
name = "tao"
3953
+
version = "0.34.5"
3954
source = "registry+https://github.com/rust-lang/crates.io-index"
3955
+
checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7"
3956
dependencies = [
3957
+
"bitflags 2.10.0",
3958
+
"block2 0.6.2",
3959
"core-foundation",
3960
+
"core-graphics 0.24.0",
3961
"crossbeam-channel",
3962
"dispatch",
3963
"dlopen2",
···
3972
"ndk",
3973
"ndk-context",
3974
"ndk-sys",
3975
+
"objc2 0.6.3",
3976
"objc2-app-kit",
3977
+
"objc2-foundation 0.3.2",
3978
"once_cell",
3979
"parking_lot",
3980
"raw-window-handle",
···
3983
"unicode-segmentation",
3984
"url",
3985
"windows",
3986
+
"windows-core 0.61.2",
3987
"windows-version",
3988
"x11-dl",
3989
]
···
3996
dependencies = [
3997
"proc-macro2",
3998
"quote",
3999
+
"syn 2.0.109",
4000
]
4001
4002
[[package]]
···
4007
4008
[[package]]
4009
name = "tauri"
4010
+
version = "2.9.2"
4011
source = "registry+https://github.com/rust-lang/crates.io-index"
4012
+
checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5"
4013
dependencies = [
4014
"anyhow",
4015
"bytes",
4016
+
"cookie",
4017
"dirs",
4018
"dunce",
4019
"embed_plist",
4020
+
"getrandom 0.3.4",
4021
"glob",
4022
"gtk",
4023
"heck 0.5.0",
4024
"http",
4025
+
"image",
4026
"jni",
4027
"libc",
4028
"log",
4029
"mime",
4030
"muda",
4031
+
"objc2 0.6.3",
4032
"objc2-app-kit",
4033
+
"objc2-foundation 0.3.2",
4034
"objc2-ui-kit",
4035
+
"objc2-web-kit",
4036
"percent-encoding",
4037
"plist",
4038
"raw-window-handle",
···
4047
"tauri-runtime",
4048
"tauri-runtime-wry",
4049
"tauri-utils",
4050
+
"thiserror 2.0.17",
4051
"tokio",
4052
"tray-icon",
4053
"url",
4054
"webkit2gtk",
4055
"webview2-com",
4056
"window-vibrancy",
···
4059
4060
[[package]]
4061
name = "tauri-build"
4062
+
version = "2.5.1"
4063
source = "registry+https://github.com/rust-lang/crates.io-index"
4064
+
checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38"
4065
dependencies = [
4066
"anyhow",
4067
"cargo_toml",
···
4075
"serde_json",
4076
"tauri-utils",
4077
"tauri-winres",
4078
+
"toml 0.9.8",
4079
"walkdir",
4080
]
4081
4082
[[package]]
4083
name = "tauri-codegen"
4084
+
version = "2.5.0"
4085
source = "registry+https://github.com/rust-lang/crates.io-index"
4086
+
checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190"
4087
dependencies = [
4088
"base64 0.22.1",
4089
"brotli",
4090
"ico",
4091
"json-patch",
4092
"plist",
4093
+
"png 0.17.16",
4094
"proc-macro2",
4095
"quote",
4096
"semver",
4097
"serde",
4098
"serde_json",
4099
"sha2",
4100
+
"syn 2.0.109",
4101
"tauri-utils",
4102
+
"thiserror 2.0.17",
4103
"time",
4104
"url",
4105
"uuid",
···
4108
4109
[[package]]
4110
name = "tauri-macros"
4111
+
version = "2.5.0"
4112
source = "registry+https://github.com/rust-lang/crates.io-index"
4113
+
checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f"
4114
dependencies = [
4115
"heck 0.5.0",
4116
"proc-macro2",
4117
"quote",
4118
+
"syn 2.0.109",
4119
"tauri-codegen",
4120
"tauri-utils",
4121
]
4122
4123
[[package]]
4124
name = "tauri-plugin"
4125
+
version = "2.5.1"
4126
source = "registry+https://github.com/rust-lang/crates.io-index"
4127
+
checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d"
4128
dependencies = [
4129
"anyhow",
4130
"glob",
···
4133
"serde",
4134
"serde_json",
4135
"tauri-utils",
4136
+
"toml 0.9.8",
4137
"walkdir",
4138
]
4139
4140
[[package]]
4141
+
name = "tauri-plugin-clipboard-manager"
4142
+
version = "2.3.2"
4143
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4144
+
checksum = "206dc20af4ed210748ba945c2774e60fd0acd52b9a73a028402caf809e9b6ecf"
4145
+
dependencies = [
4146
+
"arboard",
4147
+
"log",
4148
+
"serde",
4149
+
"serde_json",
4150
+
"tauri",
4151
+
"tauri-plugin",
4152
+
"thiserror 2.0.17",
4153
+
]
4154
+
4155
+
[[package]]
4156
+
name = "tauri-plugin-dialog"
4157
+
version = "2.4.2"
4158
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4159
+
checksum = "313f8138692ddc4a2127c4c9607d616a46f5c042e77b3722450866da0aad2f19"
4160
+
dependencies = [
4161
+
"log",
4162
+
"raw-window-handle",
4163
+
"rfd",
4164
+
"serde",
4165
+
"serde_json",
4166
+
"tauri",
4167
+
"tauri-plugin",
4168
+
"tauri-plugin-fs",
4169
+
"thiserror 2.0.17",
4170
+
"url",
4171
+
]
4172
+
4173
+
[[package]]
4174
+
name = "tauri-plugin-fs"
4175
+
version = "2.4.4"
4176
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4177
+
checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9"
4178
+
dependencies = [
4179
+
"anyhow",
4180
+
"dunce",
4181
+
"glob",
4182
+
"percent-encoding",
4183
+
"schemars 0.8.22",
4184
+
"serde",
4185
+
"serde_json",
4186
+
"serde_repr",
4187
+
"tauri",
4188
+
"tauri-plugin",
4189
+
"tauri-utils",
4190
+
"thiserror 2.0.17",
4191
+
"toml 0.9.8",
4192
+
"url",
4193
+
]
4194
+
4195
+
[[package]]
4196
name = "tauri-plugin-opener"
4197
+
version = "2.5.2"
4198
source = "registry+https://github.com/rust-lang/crates.io-index"
4199
+
checksum = "c26b72571d25dee25667940027114e60f569fc3974f8cefbe50c2cbc5fd65e3b"
4200
dependencies = [
4201
"dunce",
4202
"glob",
4203
"objc2-app-kit",
4204
+
"objc2-foundation 0.3.2",
4205
"open",
4206
"schemars 0.8.22",
4207
"serde",
4208
"serde_json",
4209
"tauri",
4210
"tauri-plugin",
4211
+
"thiserror 2.0.17",
4212
"url",
4213
"windows",
4214
"zbus",
4215
+
]
4216
+
4217
+
[[package]]
4218
+
name = "tauri-plugin-os"
4219
+
version = "2.3.2"
4220
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4221
+
checksum = "d8f08346c8deb39e96f86973da0e2d76cbb933d7ac9b750f6dc4daf955a6f997"
4222
+
dependencies = [
4223
+
"gethostname",
4224
+
"log",
4225
+
"os_info",
4226
+
"serde",
4227
+
"serde_json",
4228
+
"serialize-to-javascript",
4229
+
"sys-locale",
4230
+
"tauri",
4231
+
"tauri-plugin",
4232
+
"thiserror 2.0.17",
4233
]
4234
4235
[[package]]
4236
name = "tauri-runtime"
4237
+
version = "2.9.1"
4238
source = "registry+https://github.com/rust-lang/crates.io-index"
4239
+
checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926"
4240
dependencies = [
4241
"cookie",
4242
"dpi",
4243
"gtk",
4244
"http",
4245
"jni",
4246
+
"objc2 0.6.3",
4247
"objc2-ui-kit",
4248
+
"objc2-web-kit",
4249
"raw-window-handle",
4250
"serde",
4251
"serde_json",
4252
"tauri-utils",
4253
+
"thiserror 2.0.17",
4254
"url",
4255
+
"webkit2gtk",
4256
+
"webview2-com",
4257
"windows",
4258
]
4259
4260
[[package]]
4261
name = "tauri-runtime-wry"
4262
+
version = "2.9.1"
4263
source = "registry+https://github.com/rust-lang/crates.io-index"
4264
+
checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93"
4265
dependencies = [
4266
"gtk",
4267
"http",
4268
"jni",
4269
"log",
4270
+
"objc2 0.6.3",
4271
"objc2-app-kit",
4272
+
"objc2-foundation 0.3.2",
4273
"once_cell",
4274
"percent-encoding",
4275
"raw-window-handle",
···
4286
4287
[[package]]
4288
name = "tauri-utils"
4289
+
version = "2.8.0"
4290
source = "registry+https://github.com/rust-lang/crates.io-index"
4291
+
checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673"
4292
dependencies = [
4293
"anyhow",
4294
"brotli",
···
4314
"serde_json",
4315
"serde_with",
4316
"swift-rs",
4317
+
"thiserror 2.0.17",
4318
+
"toml 0.9.8",
4319
"url",
4320
"urlpattern",
4321
"uuid",
···
4324
4325
[[package]]
4326
name = "tauri-winres"
4327
+
version = "0.3.3"
4328
source = "registry+https://github.com/rust-lang/crates.io-index"
4329
+
checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074"
4330
dependencies = [
4331
"embed-resource",
4332
+
"toml 0.9.8",
4333
]
4334
4335
[[package]]
4336
name = "tempfile"
4337
+
version = "3.23.0"
4338
source = "registry+https://github.com/rust-lang/crates.io-index"
4339
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
4340
dependencies = [
4341
"fastrand",
4342
+
"getrandom 0.3.4",
4343
"once_cell",
4344
+
"rustix 1.1.2",
4345
+
"windows-sys 0.61.2",
4346
]
4347
4348
[[package]]
···
4367
4368
[[package]]
4369
name = "thiserror"
4370
+
version = "2.0.17"
4371
source = "registry+https://github.com/rust-lang/crates.io-index"
4372
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
4373
dependencies = [
4374
+
"thiserror-impl 2.0.17",
4375
]
4376
4377
[[package]]
···
4382
dependencies = [
4383
"proc-macro2",
4384
"quote",
4385
+
"syn 2.0.109",
4386
]
4387
4388
[[package]]
4389
name = "thiserror-impl"
4390
+
version = "2.0.17"
4391
source = "registry+https://github.com/rust-lang/crates.io-index"
4392
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
4393
dependencies = [
4394
"proc-macro2",
4395
"quote",
4396
+
"syn 2.0.109",
4397
+
]
4398
+
4399
+
[[package]]
4400
+
name = "tiff"
4401
+
version = "0.10.3"
4402
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4403
+
checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f"
4404
+
dependencies = [
4405
+
"fax",
4406
+
"flate2",
4407
+
"half",
4408
+
"quick-error",
4409
+
"weezl",
4410
+
"zune-jpeg",
4411
]
4412
4413
[[package]]
4414
name = "time"
4415
+
version = "0.3.44"
4416
source = "registry+https://github.com/rust-lang/crates.io-index"
4417
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
4418
dependencies = [
4419
"deranged",
4420
"itoa",
···
4427
4428
[[package]]
4429
name = "time-core"
4430
+
version = "0.1.6"
4431
source = "registry+https://github.com/rust-lang/crates.io-index"
4432
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
4433
4434
[[package]]
4435
name = "time-macros"
4436
+
version = "0.2.24"
4437
source = "registry+https://github.com/rust-lang/crates.io-index"
4438
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
4439
dependencies = [
4440
"num-conv",
4441
"time-core",
···
4443
4444
[[package]]
4445
name = "tinystr"
4446
+
version = "0.8.2"
4447
source = "registry+https://github.com/rust-lang/crates.io-index"
4448
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
4449
dependencies = [
4450
"displaydoc",
4451
"zerovec",
4452
]
4453
4454
[[package]]
4455
name = "tokio"
4456
+
version = "1.48.0"
4457
source = "registry+https://github.com/rust-lang/crates.io-index"
4458
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
4459
dependencies = [
4460
"bytes",
4461
"libc",
4462
"mio",
4463
"pin-project-lite",
4464
+
"signal-hook-registry",
4465
"socket2",
4466
"tokio-macros",
4467
+
"tracing",
4468
+
"windows-sys 0.61.2",
4469
]
4470
4471
[[package]]
4472
name = "tokio-macros"
4473
+
version = "2.6.0"
4474
source = "registry+https://github.com/rust-lang/crates.io-index"
4475
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
4476
dependencies = [
4477
"proc-macro2",
4478
"quote",
4479
+
"syn 2.0.109",
4480
]
4481
4482
[[package]]
4483
name = "tokio-util"
4484
+
version = "0.7.17"
4485
source = "registry+https://github.com/rust-lang/crates.io-index"
4486
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
4487
dependencies = [
4488
"bytes",
4489
"futures-core",
···
4494
4495
[[package]]
4496
name = "toml"
4497
+
version = "0.8.2"
4498
source = "registry+https://github.com/rust-lang/crates.io-index"
4499
+
checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
4500
dependencies = [
4501
"serde",
4502
"serde_spanned 0.6.9",
4503
+
"toml_datetime 0.6.3",
4504
+
"toml_edit 0.20.2",
4505
]
4506
4507
[[package]]
4508
name = "toml"
4509
+
version = "0.9.8"
4510
source = "registry+https://github.com/rust-lang/crates.io-index"
4511
+
checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
4512
dependencies = [
4513
+
"indexmap 2.12.0",
4514
+
"serde_core",
4515
+
"serde_spanned 1.0.3",
4516
+
"toml_datetime 0.7.3",
4517
"toml_parser",
4518
"toml_writer",
4519
+
"winnow 0.7.13",
4520
]
4521
4522
[[package]]
4523
name = "toml_datetime"
4524
+
version = "0.6.3"
4525
source = "registry+https://github.com/rust-lang/crates.io-index"
4526
+
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
4527
dependencies = [
4528
"serde",
4529
]
4530
4531
[[package]]
4532
name = "toml_datetime"
4533
+
version = "0.7.3"
4534
source = "registry+https://github.com/rust-lang/crates.io-index"
4535
+
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
4536
dependencies = [
4537
+
"serde_core",
4538
]
4539
4540
[[package]]
···
4543
source = "registry+https://github.com/rust-lang/crates.io-index"
4544
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4545
dependencies = [
4546
+
"indexmap 2.12.0",
4547
+
"toml_datetime 0.6.3",
4548
"winnow 0.5.40",
4549
]
4550
4551
[[package]]
4552
name = "toml_edit"
4553
+
version = "0.20.2"
4554
source = "registry+https://github.com/rust-lang/crates.io-index"
4555
+
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
4556
dependencies = [
4557
+
"indexmap 2.12.0",
4558
+
"serde",
4559
+
"serde_spanned 0.6.9",
4560
+
"toml_datetime 0.6.3",
4561
"winnow 0.5.40",
4562
]
4563
4564
[[package]]
4565
name = "toml_edit"
4566
+
version = "0.23.7"
4567
source = "registry+https://github.com/rust-lang/crates.io-index"
4568
+
checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d"
4569
dependencies = [
4570
+
"indexmap 2.12.0",
4571
+
"toml_datetime 0.7.3",
4572
+
"toml_parser",
4573
+
"winnow 0.7.13",
4574
]
4575
4576
[[package]]
4577
name = "toml_parser"
4578
+
version = "1.0.4"
4579
source = "registry+https://github.com/rust-lang/crates.io-index"
4580
+
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
4581
dependencies = [
4582
+
"winnow 0.7.13",
4583
]
4584
4585
[[package]]
4586
name = "toml_writer"
4587
+
version = "1.0.4"
4588
source = "registry+https://github.com/rust-lang/crates.io-index"
4589
+
checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
4590
4591
[[package]]
4592
name = "tower"
···
4609
source = "registry+https://github.com/rust-lang/crates.io-index"
4610
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4611
dependencies = [
4612
+
"bitflags 2.10.0",
4613
"bytes",
4614
"futures-util",
4615
"http",
···
4639
source = "registry+https://github.com/rust-lang/crates.io-index"
4640
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
4641
dependencies = [
4642
"pin-project-lite",
4643
"tracing-attributes",
4644
"tracing-core",
···
4652
dependencies = [
4653
"proc-macro2",
4654
"quote",
4655
+
"syn 2.0.109",
4656
]
4657
4658
[[package]]
···
4666
4667
[[package]]
4668
name = "tray-icon"
4669
+
version = "0.21.2"
4670
source = "registry+https://github.com/rust-lang/crates.io-index"
4671
+
checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b"
4672
dependencies = [
4673
"crossbeam-channel",
4674
"dirs",
4675
"libappindicator",
4676
"muda",
4677
+
"objc2 0.6.3",
4678
"objc2-app-kit",
4679
"objc2-core-foundation",
4680
"objc2-core-graphics",
4681
+
"objc2-foundation 0.3.2",
4682
"once_cell",
4683
+
"png 0.17.16",
4684
"serde",
4685
+
"thiserror 2.0.17",
4686
+
"windows-sys 0.60.2",
4687
+
]
4688
+
4689
+
[[package]]
4690
+
name = "tree_magic_mini"
4691
+
version = "3.2.1"
4692
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4693
+
checksum = "52fac5f7d176f7f7f7e827299ead28ef98de642c5d93a97e0cd0816d17557f19"
4694
+
dependencies = [
4695
+
"memchr",
4696
+
"nom 7.1.3",
4697
+
"petgraph",
4698
]
4699
4700
[[package]]
···
4711
4712
[[package]]
4713
name = "typenum"
4714
+
version = "1.19.0"
4715
source = "registry+https://github.com/rust-lang/crates.io-index"
4716
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
4717
4718
[[package]]
4719
name = "uds_windows"
···
4766
dependencies = [
4767
"unic-common",
4768
]
4769
4770
[[package]]
4771
name = "unicode-ident"
4772
+
version = "1.0.22"
4773
source = "registry+https://github.com/rust-lang/crates.io-index"
4774
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
4775
4776
[[package]]
4777
name = "unicode-segmentation"
···
4781
4782
[[package]]
4783
name = "url"
4784
+
version = "2.5.7"
4785
source = "registry+https://github.com/rust-lang/crates.io-index"
4786
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
4787
dependencies = [
4788
"form_urlencoded",
4789
"idna",
···
4817
4818
[[package]]
4819
name = "uuid"
4820
+
version = "1.18.1"
4821
source = "registry+https://github.com/rust-lang/crates.io-index"
4822
+
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
4823
dependencies = [
4824
+
"getrandom 0.3.4",
4825
"js-sys",
4826
"serde",
4827
"wasm-bindgen",
4828
]
4829
4830
[[package]]
4831
name = "version-compare"
4832
+
version = "0.2.1"
4833
source = "registry+https://github.com/rust-lang/crates.io-index"
4834
+
checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
4835
4836
[[package]]
4837
name = "version_check"
···
4891
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4892
4893
[[package]]
4894
+
name = "wasip2"
4895
+
version = "1.0.1+wasi-0.2.4"
4896
source = "registry+https://github.com/rust-lang/crates.io-index"
4897
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
4898
dependencies = [
4899
+
"wit-bindgen",
4900
]
4901
4902
[[package]]
4903
name = "wasm-bindgen"
4904
+
version = "0.2.105"
4905
source = "registry+https://github.com/rust-lang/crates.io-index"
4906
+
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
4907
dependencies = [
4908
"cfg-if",
4909
"once_cell",
4910
"rustversion",
4911
"wasm-bindgen-macro",
4912
"wasm-bindgen-shared",
4913
]
4914
4915
[[package]]
4916
name = "wasm-bindgen-futures"
4917
+
version = "0.4.55"
4918
source = "registry+https://github.com/rust-lang/crates.io-index"
4919
+
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
4920
dependencies = [
4921
"cfg-if",
4922
"js-sys",
···
4927
4928
[[package]]
4929
name = "wasm-bindgen-macro"
4930
+
version = "0.2.105"
4931
source = "registry+https://github.com/rust-lang/crates.io-index"
4932
+
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
4933
dependencies = [
4934
"quote",
4935
"wasm-bindgen-macro-support",
···
4937
4938
[[package]]
4939
name = "wasm-bindgen-macro-support"
4940
+
version = "0.2.105"
4941
source = "registry+https://github.com/rust-lang/crates.io-index"
4942
+
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
4943
dependencies = [
4944
+
"bumpalo",
4945
"proc-macro2",
4946
"quote",
4947
+
"syn 2.0.109",
4948
"wasm-bindgen-shared",
4949
]
4950
4951
[[package]]
4952
name = "wasm-bindgen-shared"
4953
+
version = "0.2.105"
4954
source = "registry+https://github.com/rust-lang/crates.io-index"
4955
+
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
4956
dependencies = [
4957
"unicode-ident",
4958
]
···
4971
]
4972
4973
[[package]]
4974
+
name = "wayland-backend"
4975
+
version = "0.3.11"
4976
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4977
+
checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
4978
+
dependencies = [
4979
+
"cc",
4980
+
"downcast-rs",
4981
+
"rustix 1.1.2",
4982
+
"scoped-tls",
4983
+
"smallvec",
4984
+
"wayland-sys",
4985
+
]
4986
+
4987
+
[[package]]
4988
+
name = "wayland-client"
4989
+
version = "0.31.11"
4990
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4991
+
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
4992
+
dependencies = [
4993
+
"bitflags 2.10.0",
4994
+
"rustix 1.1.2",
4995
+
"wayland-backend",
4996
+
"wayland-scanner",
4997
+
]
4998
+
4999
+
[[package]]
5000
+
name = "wayland-protocols"
5001
+
version = "0.32.9"
5002
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5003
+
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
5004
+
dependencies = [
5005
+
"bitflags 2.10.0",
5006
+
"wayland-backend",
5007
+
"wayland-client",
5008
+
"wayland-scanner",
5009
+
]
5010
+
5011
+
[[package]]
5012
+
name = "wayland-protocols-wlr"
5013
+
version = "0.3.9"
5014
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5015
+
checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
5016
+
dependencies = [
5017
+
"bitflags 2.10.0",
5018
+
"wayland-backend",
5019
+
"wayland-client",
5020
+
"wayland-protocols",
5021
+
"wayland-scanner",
5022
+
]
5023
+
5024
+
[[package]]
5025
+
name = "wayland-scanner"
5026
+
version = "0.31.7"
5027
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5028
+
checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3"
5029
+
dependencies = [
5030
+
"proc-macro2",
5031
+
"quick-xml 0.37.5",
5032
+
"quote",
5033
+
]
5034
+
5035
+
[[package]]
5036
+
name = "wayland-sys"
5037
+
version = "0.31.7"
5038
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5039
+
checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142"
5040
+
dependencies = [
5041
+
"dlib",
5042
+
"log",
5043
+
"pkg-config",
5044
+
]
5045
+
5046
+
[[package]]
5047
name = "web-sys"
5048
+
version = "0.3.82"
5049
source = "registry+https://github.com/rust-lang/crates.io-index"
5050
+
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
5051
dependencies = [
5052
"js-sys",
5053
"wasm-bindgen",
···
5106
"webview2-com-macros",
5107
"webview2-com-sys",
5108
"windows",
5109
+
"windows-core 0.61.2",
5110
"windows-implement",
5111
"windows-interface",
5112
]
···
5119
dependencies = [
5120
"proc-macro2",
5121
"quote",
5122
+
"syn 2.0.109",
5123
]
5124
5125
[[package]]
···
5128
source = "registry+https://github.com/rust-lang/crates.io-index"
5129
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
5130
dependencies = [
5131
+
"thiserror 2.0.17",
5132
"windows",
5133
+
"windows-core 0.61.2",
5134
]
5135
5136
[[package]]
5137
+
name = "weezl"
5138
+
version = "0.1.12"
5139
source = "registry+https://github.com/rust-lang/crates.io-index"
5140
+
checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
5141
5142
[[package]]
5143
name = "winapi"
···
5157
5158
[[package]]
5159
name = "winapi-util"
5160
+
version = "0.1.11"
5161
source = "registry+https://github.com/rust-lang/crates.io-index"
5162
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
5163
dependencies = [
5164
+
"windows-sys 0.61.2",
5165
]
5166
5167
[[package]]
···
5176
source = "registry+https://github.com/rust-lang/crates.io-index"
5177
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
5178
dependencies = [
5179
+
"objc2 0.6.3",
5180
"objc2-app-kit",
5181
"objc2-core-foundation",
5182
+
"objc2-foundation 0.3.2",
5183
"raw-window-handle",
5184
"windows-sys 0.59.0",
5185
"windows-version",
···
5192
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
5193
dependencies = [
5194
"windows-collections",
5195
+
"windows-core 0.61.2",
5196
"windows-future",
5197
+
"windows-link 0.1.3",
5198
"windows-numerics",
5199
]
5200
···
5204
source = "registry+https://github.com/rust-lang/crates.io-index"
5205
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
5206
dependencies = [
5207
+
"windows-core 0.61.2",
5208
]
5209
5210
[[package]]
···
5215
dependencies = [
5216
"windows-implement",
5217
"windows-interface",
5218
+
"windows-link 0.1.3",
5219
+
"windows-result 0.3.4",
5220
+
"windows-strings 0.4.2",
5221
+
]
5222
+
5223
+
[[package]]
5224
+
name = "windows-core"
5225
+
version = "0.62.2"
5226
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5227
+
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
5228
+
dependencies = [
5229
+
"windows-implement",
5230
+
"windows-interface",
5231
+
"windows-link 0.2.1",
5232
+
"windows-result 0.4.1",
5233
+
"windows-strings 0.5.1",
5234
]
5235
5236
[[package]]
···
5239
source = "registry+https://github.com/rust-lang/crates.io-index"
5240
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
5241
dependencies = [
5242
+
"windows-core 0.61.2",
5243
+
"windows-link 0.1.3",
5244
"windows-threading",
5245
]
5246
5247
[[package]]
5248
name = "windows-implement"
5249
+
version = "0.60.2"
5250
source = "registry+https://github.com/rust-lang/crates.io-index"
5251
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
5252
dependencies = [
5253
"proc-macro2",
5254
"quote",
5255
+
"syn 2.0.109",
5256
]
5257
5258
[[package]]
5259
name = "windows-interface"
5260
+
version = "0.59.3"
5261
source = "registry+https://github.com/rust-lang/crates.io-index"
5262
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
5263
dependencies = [
5264
"proc-macro2",
5265
"quote",
5266
+
"syn 2.0.109",
5267
]
5268
5269
[[package]]
···
5273
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
5274
5275
[[package]]
5276
+
name = "windows-link"
5277
+
version = "0.2.1"
5278
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5279
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
5280
+
5281
+
[[package]]
5282
name = "windows-numerics"
5283
version = "0.2.0"
5284
source = "registry+https://github.com/rust-lang/crates.io-index"
5285
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
5286
dependencies = [
5287
+
"windows-core 0.61.2",
5288
+
"windows-link 0.1.3",
5289
]
5290
5291
[[package]]
···
5294
source = "registry+https://github.com/rust-lang/crates.io-index"
5295
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
5296
dependencies = [
5297
+
"windows-link 0.1.3",
5298
+
]
5299
+
5300
+
[[package]]
5301
+
name = "windows-result"
5302
+
version = "0.4.1"
5303
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5304
+
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
5305
+
dependencies = [
5306
+
"windows-link 0.2.1",
5307
]
5308
5309
[[package]]
···
5312
source = "registry+https://github.com/rust-lang/crates.io-index"
5313
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
5314
dependencies = [
5315
+
"windows-link 0.1.3",
5316
]
5317
5318
[[package]]
5319
+
name = "windows-strings"
5320
+
version = "0.5.1"
5321
source = "registry+https://github.com/rust-lang/crates.io-index"
5322
+
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
5323
dependencies = [
5324
+
"windows-link 0.2.1",
5325
]
5326
5327
[[package]]
5328
name = "windows-sys"
5329
+
version = "0.45.0"
5330
source = "registry+https://github.com/rust-lang/crates.io-index"
5331
+
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
5332
dependencies = [
5333
+
"windows-targets 0.42.2",
5334
]
5335
5336
[[package]]
···
5348
source = "registry+https://github.com/rust-lang/crates.io-index"
5349
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
5350
dependencies = [
5351
+
"windows-targets 0.53.5",
5352
+
]
5353
+
5354
+
[[package]]
5355
+
name = "windows-sys"
5356
+
version = "0.61.2"
5357
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5358
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
5359
+
dependencies = [
5360
+
"windows-link 0.2.1",
5361
]
5362
5363
[[package]]
···
5377
5378
[[package]]
5379
name = "windows-targets"
5380
version = "0.52.6"
5381
source = "registry+https://github.com/rust-lang/crates.io-index"
5382
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
···
5393
5394
[[package]]
5395
name = "windows-targets"
5396
+
version = "0.53.5"
5397
source = "registry+https://github.com/rust-lang/crates.io-index"
5398
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
5399
dependencies = [
5400
+
"windows-link 0.2.1",
5401
+
"windows_aarch64_gnullvm 0.53.1",
5402
+
"windows_aarch64_msvc 0.53.1",
5403
+
"windows_i686_gnu 0.53.1",
5404
+
"windows_i686_gnullvm 0.53.1",
5405
+
"windows_i686_msvc 0.53.1",
5406
+
"windows_x86_64_gnu 0.53.1",
5407
+
"windows_x86_64_gnullvm 0.53.1",
5408
+
"windows_x86_64_msvc 0.53.1",
5409
]
5410
5411
[[package]]
···
5414
source = "registry+https://github.com/rust-lang/crates.io-index"
5415
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
5416
dependencies = [
5417
+
"windows-link 0.1.3",
5418
]
5419
5420
[[package]]
5421
name = "windows-version"
5422
+
version = "0.1.7"
5423
source = "registry+https://github.com/rust-lang/crates.io-index"
5424
+
checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
5425
dependencies = [
5426
+
"windows-link 0.2.1",
5427
]
5428
5429
[[package]]
···
5431
version = "0.42.2"
5432
source = "registry+https://github.com/rust-lang/crates.io-index"
5433
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
5434
5435
[[package]]
5436
name = "windows_aarch64_gnullvm"
···
5440
5441
[[package]]
5442
name = "windows_aarch64_gnullvm"
5443
+
version = "0.53.1"
5444
source = "registry+https://github.com/rust-lang/crates.io-index"
5445
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
5446
5447
[[package]]
5448
name = "windows_aarch64_msvc"
···
5452
5453
[[package]]
5454
name = "windows_aarch64_msvc"
5455
version = "0.52.6"
5456
source = "registry+https://github.com/rust-lang/crates.io-index"
5457
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
5458
5459
[[package]]
5460
name = "windows_aarch64_msvc"
5461
+
version = "0.53.1"
5462
source = "registry+https://github.com/rust-lang/crates.io-index"
5463
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
5464
5465
[[package]]
5466
name = "windows_i686_gnu"
···
5470
5471
[[package]]
5472
name = "windows_i686_gnu"
5473
version = "0.52.6"
5474
source = "registry+https://github.com/rust-lang/crates.io-index"
5475
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
5476
5477
[[package]]
5478
name = "windows_i686_gnu"
5479
+
version = "0.53.1"
5480
source = "registry+https://github.com/rust-lang/crates.io-index"
5481
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
5482
5483
[[package]]
5484
name = "windows_i686_gnullvm"
···
5488
5489
[[package]]
5490
name = "windows_i686_gnullvm"
5491
+
version = "0.53.1"
5492
source = "registry+https://github.com/rust-lang/crates.io-index"
5493
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
5494
5495
[[package]]
5496
name = "windows_i686_msvc"
···
5500
5501
[[package]]
5502
name = "windows_i686_msvc"
5503
version = "0.52.6"
5504
source = "registry+https://github.com/rust-lang/crates.io-index"
5505
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
5506
5507
[[package]]
5508
name = "windows_i686_msvc"
5509
+
version = "0.53.1"
5510
source = "registry+https://github.com/rust-lang/crates.io-index"
5511
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
5512
5513
[[package]]
5514
name = "windows_x86_64_gnu"
···
5518
5519
[[package]]
5520
name = "windows_x86_64_gnu"
5521
version = "0.52.6"
5522
source = "registry+https://github.com/rust-lang/crates.io-index"
5523
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
5524
5525
[[package]]
5526
name = "windows_x86_64_gnu"
5527
+
version = "0.53.1"
5528
source = "registry+https://github.com/rust-lang/crates.io-index"
5529
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
5530
5531
[[package]]
5532
name = "windows_x86_64_gnullvm"
···
5536
5537
[[package]]
5538
name = "windows_x86_64_gnullvm"
5539
version = "0.52.6"
5540
source = "registry+https://github.com/rust-lang/crates.io-index"
5541
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
5542
5543
[[package]]
5544
name = "windows_x86_64_gnullvm"
5545
+
version = "0.53.1"
5546
source = "registry+https://github.com/rust-lang/crates.io-index"
5547
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
5548
5549
[[package]]
5550
name = "windows_x86_64_msvc"
···
5554
5555
[[package]]
5556
name = "windows_x86_64_msvc"
5557
version = "0.52.6"
5558
source = "registry+https://github.com/rust-lang/crates.io-index"
5559
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
5560
5561
[[package]]
5562
name = "windows_x86_64_msvc"
5563
+
version = "0.53.1"
5564
source = "registry+https://github.com/rust-lang/crates.io-index"
5565
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
5566
5567
[[package]]
5568
name = "winnow"
···
5575
5576
[[package]]
5577
name = "winnow"
5578
+
version = "0.7.13"
5579
source = "registry+https://github.com/rust-lang/crates.io-index"
5580
+
checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
5581
dependencies = [
5582
"memchr",
5583
]
···
5593
]
5594
5595
[[package]]
5596
+
name = "wit-bindgen"
5597
+
version = "0.46.0"
5598
source = "registry+https://github.com/rust-lang/crates.io-index"
5599
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
5600
+
5601
+
[[package]]
5602
+
name = "wl-clipboard-rs"
5603
+
version = "0.9.2"
5604
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5605
+
checksum = "8e5ff8d0e60065f549fafd9d6cb626203ea64a798186c80d8e7df4f8af56baeb"
5606
dependencies = [
5607
+
"libc",
5608
+
"log",
5609
+
"os_pipe",
5610
+
"rustix 0.38.44",
5611
+
"tempfile",
5612
+
"thiserror 2.0.17",
5613
+
"tree_magic_mini",
5614
+
"wayland-backend",
5615
+
"wayland-client",
5616
+
"wayland-protocols",
5617
+
"wayland-protocols-wlr",
5618
]
5619
5620
[[package]]
5621
name = "writeable"
5622
+
version = "0.6.2"
5623
source = "registry+https://github.com/rust-lang/crates.io-index"
5624
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
5625
5626
[[package]]
5627
name = "wry"
5628
+
version = "0.53.5"
5629
source = "registry+https://github.com/rust-lang/crates.io-index"
5630
+
checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2"
5631
dependencies = [
5632
"base64 0.22.1",
5633
+
"block2 0.6.2",
5634
"cookie",
5635
"crossbeam-channel",
5636
+
"dirs",
5637
"dpi",
5638
"dunce",
5639
"gdkx11",
···
5645
"kuchikiki",
5646
"libc",
5647
"ndk",
5648
+
"objc2 0.6.3",
5649
"objc2-app-kit",
5650
"objc2-core-foundation",
5651
+
"objc2-foundation 0.3.2",
5652
"objc2-ui-kit",
5653
"objc2-web-kit",
5654
"once_cell",
···
5657
"sha2",
5658
"soup3",
5659
"tao-macros",
5660
+
"thiserror 2.0.17",
5661
"url",
5662
"webkit2gtk",
5663
"webkit2gtk-sys",
5664
"webview2-com",
5665
"windows",
5666
+
"windows-core 0.61.2",
5667
"windows-version",
5668
"x11-dl",
5669
]
···
5690
]
5691
5692
[[package]]
5693
+
name = "x11rb"
5694
+
version = "0.13.2"
5695
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5696
+
checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
5697
+
dependencies = [
5698
+
"gethostname",
5699
+
"rustix 1.1.2",
5700
+
"x11rb-protocol",
5701
+
]
5702
+
5703
+
[[package]]
5704
+
name = "x11rb-protocol"
5705
+
version = "0.13.2"
5706
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5707
+
checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
5708
+
5709
+
[[package]]
5710
+
name = "xkbcommon"
5711
+
version = "0.9.0"
5712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5713
+
checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d"
5714
+
dependencies = [
5715
+
"libc",
5716
+
"memmap2",
5717
+
"xkeysym",
5718
+
]
5719
+
5720
+
[[package]]
5721
+
name = "xkeysym"
5722
+
version = "0.2.1"
5723
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5724
+
checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
5725
+
5726
+
[[package]]
5727
name = "yoke"
5728
+
version = "0.8.1"
5729
source = "registry+https://github.com/rust-lang/crates.io-index"
5730
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
5731
dependencies = [
5732
"stable_deref_trait",
5733
"yoke-derive",
5734
"zerofrom",
···
5736
5737
[[package]]
5738
name = "yoke-derive"
5739
+
version = "0.8.1"
5740
source = "registry+https://github.com/rust-lang/crates.io-index"
5741
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
5742
dependencies = [
5743
"proc-macro2",
5744
"quote",
5745
+
"syn 2.0.109",
5746
"synstructure",
5747
]
5748
5749
[[package]]
5750
name = "zbus"
5751
+
version = "5.12.0"
5752
source = "registry+https://github.com/rust-lang/crates.io-index"
5753
+
checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91"
5754
dependencies = [
5755
"async-broadcast",
5756
"async-executor",
···
5770
"ordered-stream",
5771
"serde",
5772
"serde_repr",
5773
+
"tokio",
5774
"tracing",
5775
"uds_windows",
5776
+
"uuid",
5777
+
"windows-sys 0.61.2",
5778
+
"winnow 0.7.13",
5779
"zbus_macros",
5780
"zbus_names",
5781
"zvariant",
···
5783
5784
[[package]]
5785
name = "zbus_macros"
5786
+
version = "5.12.0"
5787
source = "registry+https://github.com/rust-lang/crates.io-index"
5788
+
checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314"
5789
dependencies = [
5790
+
"proc-macro-crate 3.4.0",
5791
"proc-macro2",
5792
"quote",
5793
+
"syn 2.0.109",
5794
"zbus_names",
5795
"zvariant",
5796
"zvariant_utils",
···
5804
dependencies = [
5805
"serde",
5806
"static_assertions",
5807
+
"winnow 0.7.13",
5808
"zvariant",
5809
]
5810
5811
[[package]]
5812
name = "zerocopy"
5813
+
version = "0.8.27"
5814
source = "registry+https://github.com/rust-lang/crates.io-index"
5815
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
5816
dependencies = [
5817
"zerocopy-derive",
5818
]
5819
5820
[[package]]
5821
name = "zerocopy-derive"
5822
+
version = "0.8.27"
5823
source = "registry+https://github.com/rust-lang/crates.io-index"
5824
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
5825
dependencies = [
5826
"proc-macro2",
5827
"quote",
5828
+
"syn 2.0.109",
5829
]
5830
5831
[[package]]
···
5845
dependencies = [
5846
"proc-macro2",
5847
"quote",
5848
+
"syn 2.0.109",
5849
"synstructure",
5850
]
5851
5852
[[package]]
5853
name = "zerotrie"
5854
+
version = "0.2.3"
5855
source = "registry+https://github.com/rust-lang/crates.io-index"
5856
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
5857
dependencies = [
5858
"displaydoc",
5859
"yoke",
···
5862
5863
[[package]]
5864
name = "zerovec"
5865
+
version = "0.11.5"
5866
source = "registry+https://github.com/rust-lang/crates.io-index"
5867
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
5868
dependencies = [
5869
"yoke",
5870
"zerofrom",
···
5873
5874
[[package]]
5875
name = "zerovec-derive"
5876
+
version = "0.11.2"
5877
source = "registry+https://github.com/rust-lang/crates.io-index"
5878
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
5879
dependencies = [
5880
"proc-macro2",
5881
"quote",
5882
+
"syn 2.0.109",
5883
+
]
5884
+
5885
+
[[package]]
5886
+
name = "zune-core"
5887
+
version = "0.4.12"
5888
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5889
+
checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
5890
+
5891
+
[[package]]
5892
+
name = "zune-jpeg"
5893
+
version = "0.4.21"
5894
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5895
+
checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
5896
+
dependencies = [
5897
+
"zune-core",
5898
]
5899
5900
[[package]]
5901
name = "zvariant"
5902
+
version = "5.8.0"
5903
source = "registry+https://github.com/rust-lang/crates.io-index"
5904
+
checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c"
5905
dependencies = [
5906
"endi",
5907
"enumflags2",
5908
"serde",
5909
+
"url",
5910
+
"winnow 0.7.13",
5911
"zvariant_derive",
5912
"zvariant_utils",
5913
]
5914
5915
[[package]]
5916
name = "zvariant_derive"
5917
+
version = "5.8.0"
5918
source = "registry+https://github.com/rust-lang/crates.io-index"
5919
+
checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006"
5920
dependencies = [
5921
+
"proc-macro-crate 3.4.0",
5922
"proc-macro2",
5923
"quote",
5924
+
"syn 2.0.109",
5925
"zvariant_utils",
5926
]
5927
5928
[[package]]
5929
name = "zvariant_utils"
5930
+
version = "3.2.1"
5931
source = "registry+https://github.com/rust-lang/crates.io-index"
5932
+
checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
5933
dependencies = [
5934
"proc-macro2",
5935
"quote",
5936
"serde",
5937
+
"syn 2.0.109",
5938
+
"winnow 0.7.13",
5939
]
+13
-4
src-tauri/Cargo.toml
+13
-4
src-tauri/Cargo.toml
···
18
tauri-build = { version = "2", features = [] }
19
20
[dependencies]
21
-
tauri = { version = "2", features = [] }
22
tauri-plugin-opener = "2"
23
serde = { version = "1", features = ["derive"] }
24
serde_json = "1"
25
-
sqlx = { version = "0.8.6", features = [ "sqlite", "runtime-tokio" ] }
26
-
tokio = { version = "1.47.0", features = [ "macros" ] }
27
-
dirs = "6.0.0"
28
···
18
tauri-build = { version = "2", features = [] }
19
20
[dependencies]
21
+
tauri = { version = "2", features = [ 'tray-icon', 'image-png' ] }
22
tauri-plugin-opener = "2"
23
serde = { version = "1", features = ["derive"] }
24
serde_json = "1"
25
+
tokio = { version = "1.47", features = [ "macros" ] }
26
+
dirs = "6.0"
27
+
anyhow = "1.0"
28
+
flate2 = "1.1"
29
+
tauri-plugin-dialog = "2"
30
+
crossbeam-channel = "0.5"
31
+
tauri-plugin-clipboard-manager = "2"
32
+
tauri-plugin-os = "2"
33
+
34
+
# [target.'cfg(windows)'.dependencies]
35
+
enigo = { version = "0.6.1" }
36
+
chrono = "0.4.42"
37
+1
-1
src-tauri/build.rs
+1
-1
src-tauri/build.rs
+10
-3
src-tauri/capabilities/default.json
+10
-3
src-tauri/capabilities/default.json
···
2
"$schema": "../gen/schemas/desktop-schema.json",
3
"identifier": "default",
4
"description": "Capability for the main window",
5
+
"windows": [
6
+
"main"
7
+
],
8
"permissions": [
9
"core:default",
10
+
"core:window:allow-destroy",
11
+
"opener:default",
12
+
"dialog:default",
13
+
"clipboard-manager:allow-read-text",
14
+
"clipboard-manager:allow-write-text",
15
+
"os:default"
16
]
17
+
}
+9
src-tauri/src/frontend_calls/close_app.rs
+9
src-tauri/src/frontend_calls/close_app.rs
+11
src-tauri/src/frontend_calls/get_addresses.rs
+11
src-tauri/src/frontend_calls/get_addresses.rs
+20
src-tauri/src/frontend_calls/load_previous_tabs.rs
+20
src-tauri/src/frontend_calls/load_previous_tabs.rs
···
···
1
+
use std::collections::HashMap;
2
+
3
+
use tauri::{State, Window};
4
+
5
+
use crate::{structs::nodes::Node, utils::config::Config};
6
+
7
+
#[tauri::command]
8
+
pub fn load_previous_tabs(
9
+
window: Window,
10
+
conf: State<Config>,
11
+
) -> HashMap<String, (Vec<Node>, String, Option<String>, bool)> {
12
+
let config = conf.store.lock().unwrap();
13
+
14
+
if !config.hide_editor_on_start {
15
+
window.show().unwrap();
16
+
}
17
+
18
+
let tabs = config.loaded_tabs.clone();
19
+
tabs
20
+
}
+6
src-tauri/src/frontend_calls/mod.rs
+6
src-tauri/src/frontend_calls/mod.rs
+17
src-tauri/src/frontend_calls/save_graph.rs
+17
src-tauri/src/frontend_calls/save_graph.rs
···
···
1
+
use std::{fs::File, io::Write, path::PathBuf};
2
+
3
+
use flate2::{write::GzEncoder, Compression};
4
+
use tauri::State;
5
+
6
+
use crate::utils::config::Config;
7
+
8
+
#[tauri::command]
9
+
pub fn save_graph(graph: String, path: PathBuf, conf: State<Config>) {
10
+
let file = File::create(&path).unwrap();
11
+
let mut encoder = GzEncoder::new(file, Compression::default());
12
+
13
+
encoder.write_all(graph.as_bytes()).unwrap();
14
+
encoder.finish().unwrap();
15
+
16
+
conf.save();
17
+
}
+15
src-tauri/src/frontend_calls/settings.rs
+15
src-tauri/src/frontend_calls/settings.rs
···
···
1
+
use tauri::State;
2
+
3
+
use crate::utils::config::Config;
4
+
5
+
#[tauri::command]
6
+
pub fn set_hide_editor_on_app_start(value: bool, conf: State<Config>) {
7
+
let mut config = conf.store.lock().unwrap();
8
+
config.hide_editor_on_start = value;
9
+
}
10
+
11
+
#[tauri::command]
12
+
pub fn get_hide_editor_on_app_start(conf: State<Config>) -> bool {
13
+
let config = conf.store.lock().unwrap();
14
+
config.hide_editor_on_start
15
+
}
+34
src-tauri/src/frontend_calls/sync_tab.rs
+34
src-tauri/src/frontend_calls/sync_tab.rs
···
···
1
+
use chrono::Utc;
2
+
use crossbeam_channel::Sender;
3
+
4
+
use tauri::State;
5
+
6
+
use crate::{runtime::commands::RuntimeCommand, structs::nodes::Node, utils::config::Config};
7
+
8
+
#[tauri::command]
9
+
pub fn sync_tab(
10
+
graph: Vec<Node>,
11
+
id: String,
12
+
name: String,
13
+
save_state: bool,
14
+
location: Option<String>,
15
+
cmd: State<Sender<RuntimeCommand>>,
16
+
conf: State<Config>,
17
+
) {
18
+
cmd
19
+
.send(RuntimeCommand::AddTab(graph.clone(), id.clone()))
20
+
.unwrap();
21
+
22
+
let mut config = conf.store.lock().unwrap();
23
+
config.loaded_tabs.insert(id, (graph, name, location, save_state));
24
+
25
+
conf.save_prelocked(config);
26
+
}
27
+
28
+
#[tauri::command]
29
+
pub fn discard_tab(id: String, cmd: State<Sender<RuntimeCommand>>, conf: State<Config>) {
30
+
cmd.send(RuntimeCommand::RemoveTab(id.clone())).unwrap();
31
+
32
+
let mut config = conf.store.lock().unwrap();
33
+
config.loaded_tabs.remove(&id);
34
+
}
+40
-15
src-tauri/src/lib.rs
+40
-15
src-tauri/src/lib.rs
···
1
-
use std::fs;
2
3
-
use sqlx::{migrate::MigrateDatabase, Sqlite, SqlitePool};
4
5
-
use crate::utils::config::Config;
6
7
mod utils;
8
9
#[cfg_attr(mobile, tauri::mobile_entry_point)]
···
11
pub async fn run() {
12
let container_folder = dirs::config_dir().unwrap().join("VRCMacros");
13
14
-
match fs ::metadata(&container_folder){
15
Ok(meta) => {
16
-
if meta.is_file(){
17
-
panic!("document.write('Cannot launch app as the container path is a file not a directory')");
18
}
19
}
20
Err(_) => {
···
22
}
23
}
24
25
-
let db_file = container_folder.join("VRCMacros.db");
26
-
if !db_file.exists(){ Sqlite::create_database(db_file.to_str().unwrap()).await.unwrap(); }
27
28
-
let conf_file = container_folder.join("VRCMacros.json");
29
-
if !conf_file.exists(){ fs::write(&conf_file, "{ \"setup_complete\": false }").unwrap() }
30
31
-
let pool = SqlitePool::connect(db_file.to_str().unwrap()).await.unwrap();
32
-
let conf = Config::new(conf_file);
33
34
tauri::Builder::default()
35
.plugin(tauri_plugin_opener::init())
36
-
.invoke_handler(tauri::generate_handler![])
37
-
.manage(pool)
38
.manage(conf)
39
.run(tauri::generate_context!())
40
.expect("error while running tauri application");
41
-
}
···
1
+
use std::{fs, sync::Mutex};
2
3
+
use crossbeam_channel::bounded;
4
+
use frontend_calls::*;
5
6
+
use crate::{osc::OSCMessage, setup::setup, utils::{config::Config, vrchat_builtin_parameters}};
7
8
+
mod frontend_calls;
9
+
mod osc;
10
+
mod runtime;
11
+
mod setup;
12
+
mod structs;
13
mod utils;
14
15
#[cfg_attr(mobile, tauri::mobile_entry_point)]
···
17
pub async fn run() {
18
let container_folder = dirs::config_dir().unwrap().join("VRCMacros");
19
20
+
match fs::metadata(&container_folder) {
21
Ok(meta) => {
22
+
if meta.is_file() {
23
+
panic!("Cannot launch app as the container path is a file not a directory");
24
}
25
}
26
Err(_) => {
···
28
}
29
}
30
31
+
let conf_file = container_folder.join("conf");
32
+
let conf = Config::new(conf_file);
33
34
+
static ADDRESSES: Mutex<Vec<OSCMessage>> = Mutex::new(Vec::new());
35
+
36
+
let mut addresses = ADDRESSES.lock().unwrap();
37
+
addresses.append(&mut vrchat_builtin_parameters::get_read_addresses());
38
+
drop(addresses);
39
40
+
let (runtime_sender, runtime_receiver) = bounded(1024);
41
42
tauri::Builder::default()
43
+
.plugin(tauri_plugin_os::init())
44
+
.plugin(tauri_plugin_clipboard_manager::init())
45
+
.plugin(tauri_plugin_dialog::init())
46
.plugin(tauri_plugin_opener::init())
47
+
.invoke_handler(tauri::generate_handler![
48
+
get_addresses::get_addresses,
49
+
save_graph::save_graph,
50
+
sync_tab::sync_tab,
51
+
sync_tab::discard_tab,
52
+
load_previous_tabs::load_previous_tabs,
53
+
close_app::close_app,
54
+
settings::set_hide_editor_on_app_start,
55
+
settings::get_hide_editor_on_app_start,
56
+
])
57
.manage(conf)
58
+
.manage(&ADDRESSES)
59
+
.manage(runtime_sender)
60
+
.setup(|app| {
61
+
setup(app, &ADDRESSES, runtime_receiver);
62
+
Ok(())
63
+
})
64
.run(tauri::generate_context!())
65
.expect("error while running tauri application");
66
+
}
+3
-1
src-tauri/src/main.rs
+3
-1
src-tauri/src/main.rs
+60
-42
src-tauri/src/osc.rs
+60
-42
src-tauri/src/osc.rs
···
1
// https://gist.github.com/phaze-the-dumb/634daacb5141eae2f846e20987dba7a8
2
3
-
use std::{ net::UdpSocket, sync::mpsc::Sender };
4
5
-
#[derive(Debug, Clone)]
6
-
pub enum OSCValue{
7
-
Int(i32),
8
-
Float(f32),
9
-
Boolean(bool),
10
-
String(String),
11
}
12
13
-
#[derive(Debug)]
14
-
pub struct OSCMessage{
15
-
pub address: String,
16
-
pub values: Vec<OSCValue>
17
}
18
19
-
pub fn start_server( sender: Sender<OSCMessage>, addr: &str ) {
20
let socket = UdpSocket::bind(addr).unwrap();
21
22
loop {
···
24
let (amt, _src) = socket.recv_from(&mut buf).unwrap();
25
26
let buf = &mut buf[..amt];
27
-
if buf[0] != 0x2F { panic!("Packet is not an OSC Message"); }
28
29
let mut addr: Vec<u8> = Vec::new();
30
let mut value_start = 0;
31
32
-
loop{
33
let byte = buf[value_start];
34
-
if byte == 0x00{ break; }
35
36
value_start += 1;
37
addr.push(byte);
38
}
39
40
-
loop{
41
let byte = buf[value_start];
42
value_start += 1;
43
44
-
if byte == 0x2C{ break; }
45
}
46
47
let mut types: Vec<u8> = Vec::new();
48
49
-
loop{
50
let byte = buf[value_start];
51
-
if byte == 0x00{ break; }
52
53
types.push(byte);
54
value_start += 1;
···
57
value_start = ((value_start as f32 / 4.0).ceil() * 4.0) as usize;
58
let mut values = Vec::new();
59
60
-
for tp in types{
61
-
match tp{
62
0x69 => {
63
let val_buf = &buf[value_start..value_start + 4];
64
65
let bytes = <&[u8; 4]>::try_from(val_buf).unwrap().clone();
66
let int = i32::from_be_bytes(bytes);
67
68
-
values.push(OSCValue::Int(int));
69
value_start += 4;
70
-
},
71
0x66 => {
72
let val_buf = &buf[value_start..value_start + 4];
73
74
let bytes = <&[u8; 4]>::try_from(val_buf).unwrap().clone();
75
let float = f32::from_be_bytes(bytes);
76
77
-
values.push(OSCValue::Float(float));
78
value_start += 4;
79
-
},
80
-
0x54 => values.push(OSCValue::Boolean(true)),
81
-
0x46 => values.push(OSCValue::Boolean(false)),
82
_ => {}
83
}
84
}
85
86
let message = OSCMessage {
87
address: String::from_utf8(addr.clone()).unwrap(),
88
-
values: values
89
};
90
91
sender.send(message).unwrap();
92
}
93
}
94
95
-
pub fn send_message( address: &str, values: Vec<OSCValue>, ip_addr: &str ){
96
let socket = UdpSocket::bind("127.0.0.1:0").unwrap();
97
let mut buf: Vec<u8> = Vec::new();
98
···
110
let mut value_count = 1;
111
for value in values.clone() {
112
match value {
113
-
OSCValue::Boolean( val ) => buf.push(if val { 0x54 } else { 0x46 }),
114
-
OSCValue::Float(_) => buf.push(0x66),
115
-
OSCValue::Int(_) => buf.push(0x69),
116
-
OSCValue::String(_) => buf.push(0x73)
117
};
118
119
value_count += 1;
120
}
121
122
-
for _i in 0..4 - (value_count % 4) {
123
buf.push(0);
124
}
125
126
-
for value in values{
127
-
match value{
128
-
OSCValue::Float( val ) => buf.append(&mut val.to_be_bytes().to_vec()),
129
-
OSCValue::Int( val ) => buf.append(&mut val.to_be_bytes().to_vec()),
130
-
OSCValue::String( val ) => {
131
let mut str_buf = val.as_bytes().to_vec();
132
let buf_len = str_buf.len().clone();
133
134
buf.append(&mut str_buf);
135
136
-
for _i in 0..4 - (buf_len % 4) {
137
buf.push(0);
138
}
139
}
···
141
}
142
}
143
144
-
println!("{:X?}", &buf);
145
socket.send_to(&buf, ip_addr).unwrap();
146
-
}
···
1
// https://gist.github.com/phaze-the-dumb/634daacb5141eae2f846e20987dba7a8
2
+
use std::net::UdpSocket;
3
+
4
+
use crossbeam_channel::Sender;
5
+
use serde::Serialize;
6
7
+
use crate::structs::parameter_types::ParameterType;
8
9
+
#[derive(Debug, Clone, Serialize)]
10
+
pub struct OSCMessage {
11
+
pub address: String,
12
+
pub values: Vec<ParameterType>,
13
}
14
15
+
impl PartialEq for OSCMessage {
16
+
// Technically this isn't exactly equal, but the only time i'm checking if OSCMessage's are equal
17
+
// Is when i'm checking for the "address" value
18
+
19
+
fn eq(&self, other: &Self) -> bool {
20
+
self.address == other.address
21
+
}
22
+
23
+
fn ne(&self, other: &Self) -> bool {
24
+
self.address != other.address
25
+
}
26
}
27
28
+
// TODO: Implement osc bundles
29
+
pub fn start_server(sender: Sender<OSCMessage>, addr: &str) {
30
let socket = UdpSocket::bind(addr).unwrap();
31
32
loop {
···
34
let (amt, _src) = socket.recv_from(&mut buf).unwrap();
35
36
let buf = &mut buf[..amt];
37
+
if buf[0] != 0x2F {
38
+
panic!("Packet is not an OSC Message");
39
+
}
40
41
let mut addr: Vec<u8> = Vec::new();
42
let mut value_start = 0;
43
44
+
loop {
45
let byte = buf[value_start];
46
+
if byte == 0x00 {
47
+
break;
48
+
}
49
50
value_start += 1;
51
addr.push(byte);
52
}
53
54
+
loop {
55
let byte = buf[value_start];
56
value_start += 1;
57
58
+
if byte == 0x2C {
59
+
break;
60
+
}
61
}
62
63
let mut types: Vec<u8> = Vec::new();
64
65
+
loop {
66
let byte = buf[value_start];
67
+
if byte == 0x00 {
68
+
break;
69
+
}
70
71
types.push(byte);
72
value_start += 1;
···
75
value_start = ((value_start as f32 / 4.0).ceil() * 4.0) as usize;
76
let mut values = Vec::new();
77
78
+
for tp in types {
79
+
match tp {
80
0x69 => {
81
let val_buf = &buf[value_start..value_start + 4];
82
83
let bytes = <&[u8; 4]>::try_from(val_buf).unwrap().clone();
84
let int = i32::from_be_bytes(bytes);
85
86
+
values.push(ParameterType::Int(int));
87
value_start += 4;
88
+
}
89
0x66 => {
90
let val_buf = &buf[value_start..value_start + 4];
91
92
let bytes = <&[u8; 4]>::try_from(val_buf).unwrap().clone();
93
let float = f32::from_be_bytes(bytes);
94
95
+
values.push(ParameterType::Float(float));
96
value_start += 4;
97
+
}
98
+
0x54 => values.push(ParameterType::Boolean(true)),
99
+
0x46 => values.push(ParameterType::Boolean(false)),
100
_ => {}
101
}
102
}
103
104
let message = OSCMessage {
105
address: String::from_utf8(addr.clone()).unwrap(),
106
+
values: values,
107
};
108
109
sender.send(message).unwrap();
110
}
111
}
112
113
+
pub fn send_message(address: &str, values: Vec<ParameterType>, ip_addr: &str) {
114
let socket = UdpSocket::bind("127.0.0.1:0").unwrap();
115
let mut buf: Vec<u8> = Vec::new();
116
···
128
let mut value_count = 1;
129
for value in values.clone() {
130
match value {
131
+
ParameterType::Boolean(val) => buf.push(if val { 0x54 } else { 0x46 }),
132
+
ParameterType::Float(_) => buf.push(0x66),
133
+
ParameterType::Int(_) => buf.push(0x69),
134
+
ParameterType::String(_) => buf.push(0x73),
135
+
_ => {}
136
};
137
138
value_count += 1;
139
}
140
141
+
for _i in 0..4 - (value_count % 4) {
142
buf.push(0);
143
}
144
145
+
for value in values {
146
+
match value {
147
+
ParameterType::Float(val) => buf.append(&mut val.to_be_bytes().to_vec()),
148
+
ParameterType::Int(val) => buf.append(&mut val.to_be_bytes().to_vec()),
149
+
ParameterType::String(val) => {
150
let mut str_buf = val.as_bytes().to_vec();
151
let buf_len = str_buf.len().clone();
152
153
buf.append(&mut str_buf);
154
155
+
for _i in 0..4 - (buf_len % 4) {
156
buf.push(0);
157
}
158
}
···
160
}
161
}
162
163
socket.send_to(&buf, ip_addr).unwrap();
164
+
}
+9
src-tauri/src/runtime/commands.rs
+9
src-tauri/src/runtime/commands.rs
+51
src-tauri/src/runtime/nodes/conditional/ifequal.rs
+51
src-tauri/src/runtime/nodes/conditional/ifequal.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct ConditionalIfEqual {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
}
10
+
11
+
impl ConditionalIfEqual {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for ConditionalIfEqual {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
let is_equal = args[1] == args[2];
41
+
42
+
vec![
43
+
ParameterType::Flow(is_equal),
44
+
ParameterType::Flow(!is_equal),
45
+
]
46
+
}
47
+
48
+
fn is_entrypoint(&self) -> bool {
49
+
false
50
+
}
51
+
}
+51
src-tauri/src/runtime/nodes/conditional/iffalse.rs
+51
src-tauri/src/runtime/nodes/conditional/iffalse.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct ConditionalIfFalse {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
}
10
+
11
+
impl ConditionalIfFalse {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for ConditionalIfFalse {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
let is_false = !args[1].as_bool().unwrap();
41
+
42
+
vec![
43
+
ParameterType::Flow(is_false),
44
+
ParameterType::Flow(!is_false),
45
+
]
46
+
}
47
+
48
+
fn is_entrypoint(&self) -> bool {
49
+
false
50
+
}
51
+
}
+51
src-tauri/src/runtime/nodes/conditional/iftrue.rs
+51
src-tauri/src/runtime/nodes/conditional/iftrue.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct ConditionalIfTrue {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
}
10
+
11
+
impl ConditionalIfTrue {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for ConditionalIfTrue {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
let is_true = args[1].as_bool().unwrap();
41
+
42
+
vec![
43
+
ParameterType::Flow(is_true),
44
+
ParameterType::Flow(!is_true),
45
+
]
46
+
}
47
+
48
+
fn is_entrypoint(&self) -> bool {
49
+
false
50
+
}
51
+
}
+3
src-tauri/src/runtime/nodes/conditional/mod.rs
+3
src-tauri/src/runtime/nodes/conditional/mod.rs
+47
src-tauri/src/runtime/nodes/debug.rs
+47
src-tauri/src/runtime/nodes/debug.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct Debug {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>
9
+
}
10
+
11
+
impl Debug {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for Debug {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
dbg!(&args); // TODO: Debug to actual UI instead of console
41
+
vec![]
42
+
}
43
+
44
+
fn is_entrypoint(&self) -> bool {
45
+
false
46
+
}
47
+
}
+1
src-tauri/src/runtime/nodes/oscactions/mod.rs
+1
src-tauri/src/runtime/nodes/oscactions/mod.rs
···
···
1
+
pub mod sendchatbox;
+61
src-tauri/src/runtime/nodes/oscactions/sendchatbox.rs
+61
src-tauri/src/runtime/nodes/oscactions/sendchatbox.rs
···
···
1
+
use std::vec;
2
+
3
+
use crate::{
4
+
osc,
5
+
runtime::nodes::RuntimeNode,
6
+
structs::{nodes::Node, parameter_types::ParameterType},
7
+
};
8
+
9
+
pub struct OSCActionsSendChatbox {
10
+
outputs: Vec<Vec<(String, isize, isize)>>,
11
+
inputs: Vec<Option<(String, isize, isize)>>,
12
+
}
13
+
14
+
impl OSCActionsSendChatbox {
15
+
pub fn new(node: Node) -> Box<Self> {
16
+
Box::new(Self {
17
+
outputs: node.outputs.iter().map(|x| {
18
+
x.connections.iter()
19
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
20
+
21
+
inputs: node.inputs.iter().map(|x| {
22
+
let y = x.connections.get(0);
23
+
if let Some(y) = y{
24
+
Some((y.node.clone(), y.index, y.value_type))
25
+
} else{
26
+
None
27
+
}
28
+
}).collect(),
29
+
})
30
+
}
31
+
}
32
+
33
+
impl RuntimeNode for OSCActionsSendChatbox {
34
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
35
+
self.outputs.clone()
36
+
}
37
+
38
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
39
+
self.inputs.clone()
40
+
}
41
+
42
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
43
+
if let Ok(msg) = args[1].as_string(){
44
+
osc::send_message(
45
+
"/chatbox/input",
46
+
vec![
47
+
ParameterType::String(msg.clone()),
48
+
ParameterType::Boolean(true),
49
+
ParameterType::Boolean(false),
50
+
],
51
+
"127.0.0.1:9000",
52
+
);
53
+
}
54
+
55
+
vec![]
56
+
}
57
+
58
+
fn is_entrypoint(&self) -> bool {
59
+
false
60
+
}
61
+
}
+69
src-tauri/src/runtime/nodes/osctrigger.rs
+69
src-tauri/src/runtime/nodes/osctrigger.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct OSCTrigger {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
address: Option<String>
11
+
}
12
+
13
+
impl OSCTrigger {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
address: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_str().unwrap().to_owned())
35
+
},
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for OSCTrigger {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, mut args: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if args.len() == 0{ return args }
51
+
52
+
let execute = if let Some(internal_address) = &self.address {
53
+
if let Ok(address) = args[0].as_string() {
54
+
address == *internal_address
55
+
} else{
56
+
false
57
+
}
58
+
} else{
59
+
false
60
+
};
61
+
62
+
args[0] = ParameterType::Flow(execute);
63
+
args
64
+
}
65
+
66
+
fn is_entrypoint(&self) -> bool {
67
+
true
68
+
}
69
+
}
+73
src-tauri/src/runtime/nodes/press_key.rs
+73
src-tauri/src/runtime/nodes/press_key.rs
···
···
1
+
use std::sync::{Arc, Mutex};
2
+
3
+
use enigo::{Direction, Enigo, Key, Keyboard};
4
+
5
+
use crate::{
6
+
runtime::nodes::RuntimeNode,
7
+
structs::{nodes::Node, parameter_types::ParameterType},
8
+
};
9
+
10
+
pub struct PressKey {
11
+
outputs: Vec<Vec<(String, isize, isize)>>,
12
+
inputs: Vec<Option<(String, isize, isize)>>,
13
+
14
+
key: Option<char>,
15
+
enigo: Arc<Mutex<Enigo>>,
16
+
}
17
+
18
+
impl PressKey {
19
+
pub fn new(node: Node, enigo: Arc<Mutex<Enigo>>) -> Box<Self> {
20
+
let value = &node.statics[0].value;
21
+
22
+
Box::new(Self {
23
+
outputs: node.outputs.iter().map(|x| {
24
+
x.connections.iter()
25
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
26
+
27
+
inputs: node.inputs.iter().map(|x| {
28
+
let y = x.connections.get(0);
29
+
if let Some(y) = y{
30
+
Some((y.node.clone(), y.index, y.value_type))
31
+
} else{
32
+
None
33
+
}
34
+
}).collect(),
35
+
36
+
enigo,
37
+
key: if value.is_null() {
38
+
None
39
+
} else {
40
+
let string = value.as_str().unwrap().to_owned();
41
+
42
+
if string.len() == 1 {
43
+
Some(string.chars().nth(0).unwrap())
44
+
} else {
45
+
None
46
+
}
47
+
},
48
+
})
49
+
}
50
+
}
51
+
52
+
impl RuntimeNode for PressKey {
53
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
54
+
self.outputs.clone()
55
+
}
56
+
57
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
58
+
self.inputs.clone()
59
+
}
60
+
61
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
62
+
if self.key.is_some() {
63
+
let mut enigo = self.enigo.lock().unwrap();
64
+
enigo.key(Key::MediaPlayPause, Direction::Click).unwrap();
65
+
}
66
+
67
+
vec![]
68
+
}
69
+
70
+
fn is_entrypoint(&self) -> bool {
71
+
false
72
+
}
73
+
}
+70
src-tauri/src/runtime/nodes/shell.rs
+70
src-tauri/src/runtime/nodes/shell.rs
···
···
1
+
use std::{io::Stdin, process::{Command, Stdio}};
2
+
3
+
use crate::{
4
+
runtime::nodes::RuntimeNode,
5
+
structs::{nodes::Node, parameter_types::ParameterType},
6
+
};
7
+
8
+
pub struct ShellCommand {
9
+
outputs: Vec<Vec<(String, isize, isize)>>,
10
+
inputs: Vec<Option<(String, isize, isize)>>
11
+
}
12
+
13
+
impl ShellCommand {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
Box::new(Self {
16
+
outputs: node.outputs.iter().map(|x| {
17
+
x.connections.iter()
18
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
19
+
20
+
inputs: node.inputs.iter().map(|x| {
21
+
let y = x.connections.get(0);
22
+
if let Some(y) = y{
23
+
Some((y.node.clone(), y.index, y.value_type))
24
+
} else{
25
+
None
26
+
}
27
+
}).collect()
28
+
})
29
+
}
30
+
}
31
+
32
+
impl RuntimeNode for ShellCommand {
33
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
34
+
self.outputs.clone()
35
+
}
36
+
37
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
38
+
self.inputs.clone()
39
+
}
40
+
41
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
42
+
if let Ok(cmd) = args[1].as_string(){
43
+
if cmd != ""{
44
+
let mut split_cmd = cmd.split(" ");
45
+
46
+
let mut cmd = Command::new(split_cmd.nth(0).unwrap());
47
+
if split_cmd.clone().count() > 0{ cmd.args(split_cmd); }
48
+
49
+
cmd.stdout(Stdio::piped());
50
+
cmd.stderr(Stdio::piped());
51
+
52
+
let child = cmd.spawn().unwrap();
53
+
let output = child.wait_with_output().unwrap();
54
+
55
+
vec![
56
+
ParameterType::Flow(true),
57
+
ParameterType::String(str::from_utf8(&output.stdout).unwrap().to_owned())
58
+
]
59
+
} else{
60
+
vec![ ParameterType::Flow(false) ]
61
+
}
62
+
} else{
63
+
vec![ ParameterType::Flow(false) ]
64
+
}
65
+
}
66
+
67
+
fn is_entrypoint(&self) -> bool {
68
+
false
69
+
}
70
+
}
+60
src-tauri/src/runtime/nodes/statics/float.rs
+60
src-tauri/src/runtime/nodes/statics/float.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct StaticFloat {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<f32>,
11
+
}
12
+
13
+
impl StaticFloat {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
value: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_f64().unwrap() as f32)
35
+
}
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for StaticFloat {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if self.value.is_some() {
51
+
vec![ParameterType::Float(self.value.clone().unwrap())]
52
+
} else {
53
+
vec![ParameterType::Float(0.0)]
54
+
}
55
+
}
56
+
57
+
fn is_entrypoint(&self) -> bool {
58
+
false
59
+
}
60
+
}
+60
src-tauri/src/runtime/nodes/statics/int.rs
+60
src-tauri/src/runtime/nodes/statics/int.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct StaticInt {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<i32>,
11
+
}
12
+
13
+
impl StaticInt {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
value: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_i64().unwrap() as i32)
35
+
}
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for StaticInt {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if self.value.is_some() {
51
+
vec![ParameterType::Int(self.value.clone().unwrap())]
52
+
} else {
53
+
vec![ParameterType::Int(0)]
54
+
}
55
+
}
56
+
57
+
fn is_entrypoint(&self) -> bool {
58
+
false
59
+
}
60
+
}
+3
src-tauri/src/runtime/nodes/statics/mod.rs
+3
src-tauri/src/runtime/nodes/statics/mod.rs
+60
src-tauri/src/runtime/nodes/statics/string.rs
+60
src-tauri/src/runtime/nodes/statics/string.rs
···
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct StaticString {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<String>,
11
+
}
12
+
13
+
impl StaticString {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
value: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_str().unwrap().to_owned())
35
+
}
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for StaticString {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if self.value.is_some() {
51
+
vec![ParameterType::String(self.value.clone().unwrap())]
52
+
} else {
53
+
vec![ParameterType::String("".to_owned())]
54
+
}
55
+
}
56
+
57
+
fn is_entrypoint(&self) -> bool {
58
+
false
59
+
}
60
+
}
+99
src-tauri/src/runtime/nodes.rs
+99
src-tauri/src/runtime/nodes.rs
···
···
1
+
use std::{
2
+
collections::HashMap,
3
+
sync::{Arc, Mutex},
4
+
};
5
+
6
+
// #[cfg(target_os = "windows")]
7
+
use enigo::Enigo;
8
+
9
+
use crate::{
10
+
runtime::nodes::{
11
+
conditional::{
12
+
ifequal::ConditionalIfEqual, iffalse::ConditionalIfFalse, iftrue::ConditionalIfTrue,
13
+
}, debug::Debug, oscactions::sendchatbox::OSCActionsSendChatbox, osctrigger::OSCTrigger, shell::ShellCommand, statics::{float::StaticFloat, int::StaticInt, string::StaticString}
14
+
},
15
+
structs::{nodes::Node, parameter_types::ParameterType},
16
+
};
17
+
18
+
// #[cfg(target_os = "windows")]
19
+
use crate::runtime::nodes::press_key::PressKey;
20
+
21
+
mod conditional;
22
+
mod debug;
23
+
mod oscactions;
24
+
mod osctrigger;
25
+
mod statics;
26
+
mod shell;
27
+
28
+
// #[cfg(target_os = "windows")]
29
+
mod press_key;
30
+
31
+
pub struct RuntimeNodeTree {
32
+
pub nodes: HashMap<String, Box<dyn RuntimeNode>>,
33
+
}
34
+
35
+
unsafe impl Send for RuntimeNodeTree {}
36
+
37
+
impl RuntimeNodeTree {
38
+
pub fn from(tree: Vec<Node>, /*#[cfg(target_os = "windows")]*/ enigo: Arc<Mutex<Enigo>>) -> Self {
39
+
let mut runtime_nodes: HashMap<String, Box<dyn RuntimeNode>> = HashMap::new();
40
+
for node in tree {
41
+
match node.type_id.as_str() {
42
+
"osctrigger" => {
43
+
runtime_nodes.insert(node.id.clone(), OSCTrigger::new(node));
44
+
}
45
+
46
+
"staticstring" => {
47
+
runtime_nodes.insert(node.id.clone(), StaticString::new(node));
48
+
}
49
+
"staticint" => {
50
+
runtime_nodes.insert(node.id.clone(), StaticInt::new(node));
51
+
}
52
+
"staticfloat" => {
53
+
runtime_nodes.insert(node.id.clone(), StaticFloat::new(node));
54
+
}
55
+
56
+
"iftrue" => {
57
+
runtime_nodes.insert(node.id.clone(), ConditionalIfTrue::new(node));
58
+
}
59
+
"iffalse" => {
60
+
runtime_nodes.insert(node.id.clone(), ConditionalIfFalse::new(node));
61
+
}
62
+
"ifequal" => {
63
+
runtime_nodes.insert(node.id.clone(), ConditionalIfEqual::new(node));
64
+
}
65
+
66
+
"oscsendchatbox" => {
67
+
runtime_nodes.insert(node.id.clone(), OSCActionsSendChatbox::new(node));
68
+
}
69
+
70
+
"debug" => {
71
+
runtime_nodes.insert(node.id.clone(), Debug::new(node));
72
+
}
73
+
74
+
// #[cfg(target_os = "windows")]
75
+
"presskey" => {
76
+
runtime_nodes.insert(node.id.clone(), PressKey::new(node, enigo.clone()));
77
+
}
78
+
79
+
"shellcommand" => {
80
+
runtime_nodes.insert(node.id.clone(), ShellCommand::new(node));
81
+
}
82
+
83
+
_ => {}
84
+
}
85
+
}
86
+
87
+
Self {
88
+
nodes: runtime_nodes,
89
+
}
90
+
}
91
+
}
92
+
93
+
pub trait RuntimeNode {
94
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>>; // Node ID, input index, output value type
95
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>>; // Node ID, input index, output value type
96
+
97
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType>; // Then call functions on the second loop
98
+
fn is_entrypoint(&self) -> bool;
99
+
}
+97
src-tauri/src/runtime.rs
+97
src-tauri/src/runtime.rs
···
···
1
+
use std::collections::HashMap;
2
+
3
+
use anyhow::{bail, Result};
4
+
5
+
use crate::{runtime::nodes::RuntimeNodeTree, structs::parameter_types::ParameterType};
6
+
7
+
pub mod commands;
8
+
pub mod nodes;
9
+
10
+
// TODO: Variables
11
+
12
+
pub fn recurse_runtime(entry: String, tab: &mut RuntimeNodeTree, args: Vec<ParameterType>) -> Result<()>{
13
+
let ( out_args, output_map ) = runtime(entry, tab, args)?;
14
+
15
+
let mut next_node_args: HashMap<String, Vec<ParameterType>> = HashMap::new();
16
+
17
+
for i in 0..out_args.len(){
18
+
if output_map.len() <= i { break; }
19
+
let links = &output_map[i];
20
+
21
+
for ( id, link_index, _ ) in links{
22
+
let link_index = link_index.clone() as usize;
23
+
24
+
if next_node_args.contains_key(id){
25
+
let args: &mut _ = next_node_args.get_mut(id).unwrap();
26
+
while args.len() < link_index{ args.push(ParameterType::None); }
27
+
28
+
args.push(out_args[i].clone());
29
+
} else{
30
+
let mut args = vec![ParameterType::None; link_index];
31
+
args.push(out_args[i].clone());
32
+
33
+
next_node_args.insert(id.clone(), args);
34
+
}
35
+
}
36
+
}
37
+
38
+
for i in 0..out_args.len(){
39
+
if let ParameterType::Flow(next) = out_args[i]{
40
+
if next{
41
+
let links = &output_map[i];
42
+
43
+
for ( id, _, _ ) in links{
44
+
let args = next_node_args.remove(id).unwrap();
45
+
recurse_runtime(id.clone(), tab, args)?;
46
+
}
47
+
}
48
+
}
49
+
}
50
+
51
+
Ok(())
52
+
}
53
+
54
+
pub fn runtime(entry: String, tab: &mut RuntimeNodeTree, mut args: Vec<ParameterType>) -> Result<(Vec<ParameterType>, Vec<Vec<(String, isize, isize)>>)> {
55
+
let node = tab.nodes.get_mut(&entry);
56
+
if node.is_none() { bail!("Cannot find node"); }
57
+
58
+
let node = node.unwrap();
59
+
let inputs = node.inputs();
60
+
61
+
let mut needed_input_nodes = HashMap::new();
62
+
63
+
for i in 0..inputs.len(){
64
+
if i >= args.len() || args[i] == ParameterType::None{
65
+
if let Some(input) = &inputs[i]{
66
+
if !needed_input_nodes.contains_key(&input.0){
67
+
needed_input_nodes.insert(input.0.clone(), vec![(input.1.clone(), i.clone())]);
68
+
} else{
69
+
needed_input_nodes.get_mut(&input.0).unwrap().push((input.1.clone(), i.clone()));
70
+
}
71
+
}
72
+
}
73
+
}
74
+
75
+
for ( id, needed ) in needed_input_nodes{
76
+
let (out_args, _) = runtime(id, tab, vec![]).unwrap();
77
+
78
+
for ( output, input ) in needed{
79
+
let arg = &out_args[output as usize];
80
+
81
+
if args.len() >= input{
82
+
while args.len() < input{ args.push(ParameterType::None); }
83
+
args.push(arg.clone());
84
+
} else{
85
+
args[input] = arg.clone();
86
+
}
87
+
}
88
+
}
89
+
90
+
let node = tab.nodes.get_mut(&entry); // TODO: Find a way to only do this lookup once
91
+
if node.is_none() { bail!("Cannot find node"); }
92
+
93
+
let node = node.unwrap();
94
+
95
+
let output = node.execute(args);
96
+
Ok((output, node.outputs()))
97
+
}
+147
src-tauri/src/setup.rs
+147
src-tauri/src/setup.rs
···
···
1
+
use crossbeam_channel::{bounded, Receiver};
2
+
use std::{
3
+
collections::HashMap,
4
+
fs::File,
5
+
io::Read,
6
+
sync::{Arc, Mutex},
7
+
};
8
+
9
+
use flate2::read::GzDecoder;
10
+
use serde_json::{Map, Value};
11
+
use tauri::{App, Emitter, Listener, Manager, WindowEvent};
12
+
13
+
use crate::{
14
+
osc::{self, OSCMessage}, runtime::{commands::RuntimeCommand, nodes::RuntimeNodeTree, recurse_runtime}, structs::parameter_types::ParameterType, utils::{setup_traymenu::setup_traymenu, vrchat_builtin_parameters}
15
+
};
16
+
17
+
pub fn setup(
18
+
app: &mut App,
19
+
addresses: &'static Mutex<Vec<OSCMessage>>,
20
+
runtime_command_receiver: Receiver<RuntimeCommand>,
21
+
) {
22
+
let window = app.get_webview_window("main").unwrap();
23
+
window.hide().unwrap();
24
+
25
+
let win_handle = window.clone();
26
+
27
+
window.on_window_event(move |event| match event {
28
+
WindowEvent::CloseRequested { api, .. } => {
29
+
api.prevent_close();
30
+
win_handle.emit("prompt_to_close", ()).unwrap();
31
+
}
32
+
WindowEvent::Resized(_) => {
33
+
let minimised = win_handle.is_minimized().unwrap();
34
+
if minimised{
35
+
win_handle.hide().unwrap();
36
+
win_handle.emit("hide-window", ()).unwrap();
37
+
win_handle.unminimize().unwrap();
38
+
}
39
+
}
40
+
_ => {}
41
+
});
42
+
43
+
setup_traymenu(app.handle());
44
+
45
+
let handle = window.clone();
46
+
window.listen("tauri://drag-drop", move |ev| {
47
+
let path: Value = serde_json::from_str(ev.payload()).unwrap();
48
+
let path = path["paths"][0].as_str().unwrap();
49
+
50
+
let file = File::open(&path).unwrap();
51
+
let mut decoder = GzDecoder::new(file);
52
+
let mut string = String::new();
53
+
54
+
decoder.read_to_string(&mut string).unwrap();
55
+
56
+
let mut map = Map::new();
57
+
58
+
map.insert("path".to_owned(), Value::String(path.to_owned()));
59
+
map.insert("graph".to_owned(), Value::String(string));
60
+
61
+
handle.emit("load_new_tab", Value::Object(map)).unwrap();
62
+
});
63
+
64
+
let (sender, receiver) = bounded(1024);
65
+
66
+
tokio::spawn(async move {
67
+
osc::start_server(sender, "127.0.0.1:9001");
68
+
});
69
+
70
+
let (runtime_sender, runtime_receiver) = bounded(1024);
71
+
72
+
let runtime_sender_1 = runtime_sender.clone();
73
+
tokio::spawn(async move {
74
+
loop {
75
+
let cmd = runtime_command_receiver.recv().unwrap();
76
+
runtime_sender_1.send(cmd).unwrap();
77
+
}
78
+
});
79
+
80
+
tokio::spawn(async move {
81
+
loop {
82
+
let message = receiver.recv().unwrap();
83
+
84
+
window.emit("osc-message", &message).unwrap();
85
+
86
+
let msg = message.clone();
87
+
let mut addrs = addresses.lock().unwrap();
88
+
if !addrs.contains(&msg) {
89
+
addrs.push(msg);
90
+
}
91
+
92
+
if message.address == "/avatar/change".to_owned(){
93
+
*addrs = vrchat_builtin_parameters::get_read_addresses();
94
+
95
+
// TODO: Read avatar paramaters from file
96
+
}
97
+
98
+
runtime_sender
99
+
.send(RuntimeCommand::OSCMessage(message))
100
+
.unwrap();
101
+
}
102
+
});
103
+
104
+
// TODO: Run tabs in seperate threads (really not looking forward to this... thanks rust)
105
+
106
+
tokio::spawn(async move {
107
+
let mut tabs: HashMap<String, RuntimeNodeTree> = HashMap::new();
108
+
109
+
// #[cfg(target_os = "windows")]
110
+
let enigo = Arc::new(Mutex::new(enigo::Enigo::new(&enigo::Settings::default()).unwrap()));
111
+
112
+
loop {
113
+
let cmd = runtime_receiver.recv().unwrap();
114
+
115
+
match cmd {
116
+
RuntimeCommand::OSCMessage(msg) => {
117
+
for (_, mut tab) in &mut tabs {
118
+
let keys: Vec<String> = tab.nodes.keys().map(|x| x.clone()).collect();
119
+
120
+
for id in keys {
121
+
let entry = tab.nodes[&id].is_entrypoint();
122
+
123
+
if entry {
124
+
let mut args = vec![ ParameterType::String(msg.address.clone())];
125
+
let mut values = msg.values.clone();
126
+
127
+
args.append(&mut values);
128
+
let _ = recurse_runtime(id.clone(), &mut tab, args);
129
+
}
130
+
}
131
+
}
132
+
}
133
+
134
+
RuntimeCommand::AddTab(graph, id) => {
135
+
// #[cfg(target_os = "windows")]
136
+
tabs.insert(id, RuntimeNodeTree::from(graph, enigo.clone()));
137
+
138
+
// #[cfg(target_os = "linux")]
139
+
// tabs.insert(id, RuntimeNodeTree::from(graph));
140
+
}
141
+
RuntimeCommand::RemoveTab(id) => {
142
+
tabs.remove(&id);
143
+
}
144
+
}
145
+
}
146
+
});
147
+
}
+43
src-tauri/src/structs/nodes.rs
+43
src-tauri/src/structs/nodes.rs
···
···
1
+
use serde::{Deserialize, Serialize};
2
+
use serde_json::Value;
3
+
4
+
#[derive(Serialize, Deserialize, Debug, Clone)]
5
+
pub struct Node {
6
+
pub id: String,
7
+
pub name: String,
8
+
pub outputs: Vec<NodeIO>,
9
+
pub inputs: Vec<NodeIO>,
10
+
pub pos: [f32; 2],
11
+
pub statics: Vec<NodeStatic>,
12
+
13
+
#[serde(rename = "typeId")]
14
+
pub type_id: String,
15
+
}
16
+
17
+
#[derive(Serialize, Deserialize, Debug, Clone)]
18
+
pub struct NodeStatic {
19
+
pub name: String,
20
+
21
+
#[serde(rename = "type")]
22
+
pub value_type: isize,
23
+
pub value: Value,
24
+
}
25
+
26
+
#[derive(Serialize, Deserialize, Debug, Clone)]
27
+
pub struct NodeIO {
28
+
pub name: String,
29
+
30
+
#[serde(rename = "type")]
31
+
pub value_type: isize,
32
+
pub connections: Vec<NodeOutputConnections>,
33
+
}
34
+
35
+
#[derive(Serialize, Deserialize, Debug, Clone)]
36
+
pub struct NodeOutputConnections {
37
+
pub name: String,
38
+
pub node: String,
39
+
pub index: isize,
40
+
41
+
#[serde(rename = "type")]
42
+
pub value_type: isize,
43
+
}
+68
src-tauri/src/structs/parameter_types.rs
+68
src-tauri/src/structs/parameter_types.rs
···
···
1
+
use anyhow::{bail, Result};
2
+
use serde::Serialize;
3
+
4
+
#[derive(Serialize, Clone, Debug, PartialEq)]
5
+
#[serde(tag = "key", content = "value")]
6
+
pub enum ParameterType {
7
+
AnyType(String),
8
+
Label(&'static str),
9
+
10
+
Int(i32),
11
+
Float(f32),
12
+
Boolean(bool),
13
+
String(String),
14
+
Flow(bool),
15
+
16
+
None,
17
+
}
18
+
19
+
impl ParameterType {
20
+
pub fn as_bool(&self) -> Result<bool> {
21
+
match self {
22
+
ParameterType::Boolean(val) => Ok(val.clone()),
23
+
ParameterType::Int(val) => {
24
+
if *val == 0 {
25
+
Ok(false)
26
+
} else {
27
+
Ok(true)
28
+
}
29
+
}
30
+
_ => bail!("Cannot cast to bool."),
31
+
}
32
+
}
33
+
34
+
pub fn as_int(&self) -> Result<i32> {
35
+
match self {
36
+
ParameterType::Boolean(val) => {
37
+
if *val {
38
+
Ok(1)
39
+
} else {
40
+
Ok(0)
41
+
}
42
+
}
43
+
ParameterType::Int(val) => Ok(val.clone()),
44
+
ParameterType::Float(val) => Ok(val.round().clone() as i32),
45
+
ParameterType::String(val) => Ok(val.clone().parse()?),
46
+
_ => bail!("Cannot cast to int."),
47
+
}
48
+
}
49
+
50
+
pub fn as_float(&self) -> Result<f32> {
51
+
match self {
52
+
ParameterType::Int(val) => Ok(val.clone() as f32),
53
+
ParameterType::Float(val) => Ok(val.clone()),
54
+
ParameterType::String(val) => Ok(val.clone().parse()?),
55
+
_ => bail!("Cannot cast to float."),
56
+
}
57
+
}
58
+
59
+
pub fn as_string(&self) -> Result<String> {
60
+
match self {
61
+
ParameterType::Boolean(val) => Ok(val.clone().to_string()),
62
+
ParameterType::Int(val) => Ok(val.clone().to_string()),
63
+
ParameterType::Float(val) => Ok(val.clone().to_string()),
64
+
ParameterType::String(val) => Ok(val.clone()),
65
+
_ => bail!("Cannot cast to string."),
66
+
}
67
+
}
68
+
}
+70
-54
src-tauri/src/utils/config.rs
+70
-54
src-tauri/src/utils/config.rs
···
1
-
use std::{ collections::HashMap, fs, path::PathBuf, sync::Mutex };
2
-
3
-
use serde::{ Deserialize, Serialize };
4
-
use serde_json::{json, Value};
5
-
6
-
#[derive(Clone, Deserialize, Serialize)]
7
-
pub enum ConfigValue{
8
-
Bool(bool),
9
-
String(String),
10
-
Number(f64),
11
-
Null
12
-
}
13
-
14
-
pub struct Config{
15
-
store: Mutex<HashMap<String, ConfigValue>>,
16
-
}
17
-
18
-
impl Config{
19
-
pub fn new( path: PathBuf ) -> Self{
20
-
let json_string = fs::read_to_string(path).unwrap();
21
-
let json: Value = serde_json::from_str(&json_string).unwrap();
22
-
23
-
let mut hashmap = HashMap::new();
24
-
25
-
let obj = json.as_object().unwrap();
26
-
for ( key, val ) in obj{
27
-
hashmap.insert(key.clone(), if val.is_boolean(){ ConfigValue::Bool(val.as_bool().unwrap()) } else if val.is_number(){ ConfigValue::Number(val.as_f64().unwrap()) } else if val.is_string(){ ConfigValue::String(val.as_str().unwrap().to_owned()) } else { ConfigValue::Null });
28
-
}
29
-
30
-
Config {
31
-
store: Mutex::new(hashmap)
32
-
}
33
-
}
34
-
35
-
pub fn set( &self, key: &str, value: ConfigValue ){
36
-
self.store.lock().unwrap().insert(key.to_owned(), value);
37
-
}
38
-
39
-
pub fn get( &self, key: &str ) -> Option<ConfigValue>{
40
-
let store = self.store.lock().unwrap();
41
-
let val = store.get(&key.to_owned());
42
-
43
-
if val.is_none(){
44
-
None
45
-
} else{
46
-
Some(val.unwrap().clone())
47
-
}
48
-
}
49
-
50
-
pub fn save( &self ){
51
-
let dat = serde_json::to_string(&self.store.lock().unwrap().clone()).unwrap();
52
-
fs::write(dirs::config_dir().unwrap().join("VRCMacros").join("VRCMacros.json"), dat).unwrap();
53
-
}
54
-
}
···
1
+
use std::{
2
+
collections::HashMap,
3
+
fs::File,
4
+
io::{Read, Write},
5
+
path::PathBuf,
6
+
sync::{Mutex, MutexGuard},
7
+
};
8
+
9
+
use chrono::Utc;
10
+
use flate2::{read::GzDecoder, write::GzEncoder, Compression};
11
+
use serde::{Deserialize, Serialize};
12
+
13
+
use crate::structs::nodes::Node;
14
+
15
+
#[derive(Clone, Serialize, Deserialize, Debug)]
16
+
pub struct ConfigValues {
17
+
#[serde(default)]
18
+
pub loaded_tabs: HashMap<String, (Vec<Node>, String, Option<String>, bool)>,
19
+
20
+
#[serde(default)]
21
+
pub hide_editor_on_start: bool,
22
+
}
23
+
24
+
pub struct Config {
25
+
pub store: Mutex<ConfigValues>,
26
+
path: PathBuf,
27
+
}
28
+
29
+
impl Config {
30
+
pub fn new(path: PathBuf) -> Self {
31
+
let json_string = if path.exists() {
32
+
let mut decoder = GzDecoder::new(File::open(&path).unwrap());
33
+
let mut string = String::new();
34
+
35
+
decoder.read_to_string(&mut string).unwrap();
36
+
string
37
+
} else {
38
+
"{}".into()
39
+
};
40
+
41
+
let json: ConfigValues = serde_json::from_str(&json_string).unwrap();
42
+
43
+
Config {
44
+
store: Mutex::new(json),
45
+
path: path,
46
+
}
47
+
}
48
+
49
+
pub fn save(&self) {
50
+
let mut dat = self.store.lock().unwrap();
51
+
52
+
let dat = serde_json::to_string(&*dat).unwrap();
53
+
54
+
let file = File::create(&self.path).unwrap();
55
+
let mut encoder = GzEncoder::new(file, Compression::default());
56
+
57
+
encoder.write_all(dat.as_bytes()).unwrap();
58
+
encoder.finish().unwrap();
59
+
}
60
+
61
+
pub fn save_prelocked(&self, mut dat: MutexGuard<'_, ConfigValues>) {
62
+
let dat = serde_json::to_string(&*dat).unwrap();
63
+
64
+
let file = File::create(&self.path).unwrap();
65
+
let mut encoder = GzEncoder::new(file, Compression::default());
66
+
67
+
encoder.write_all(dat.as_bytes()).unwrap();
68
+
encoder.finish().unwrap();
69
+
}
70
+
}
+3
-1
src-tauri/src/utils/mod.rs
+3
-1
src-tauri/src/utils/mod.rs
+315
src-tauri/src/utils/vrchat_builtin_parameters.rs
+315
src-tauri/src/utils/vrchat_builtin_parameters.rs
···
···
1
+
use crate::{osc::OSCMessage, structs::parameter_types::ParameterType};
2
+
3
+
pub fn get_read_addresses() -> Vec<OSCMessage>{
4
+
vec![
5
+
// Avatar Parameters
6
+
OSCMessage {
7
+
address: "/avatar/change".into(),
8
+
values: vec![ ParameterType::String("".into()) ]
9
+
},
10
+
11
+
OSCMessage {
12
+
address: "/avatar/parameters/VRCEmote".into(),
13
+
values: vec![ ParameterType::Int(0) ]
14
+
},
15
+
OSCMessage {
16
+
address: "/avatar/parameters/VRCFaceBlendV".into(),
17
+
values: vec![ ParameterType::Float(0.0) ]
18
+
},
19
+
OSCMessage {
20
+
address: "/avatar/parameters/VRCFaceBlendH".into(),
21
+
values: vec![ ParameterType::Float(0.0) ]
22
+
},
23
+
OSCMessage {
24
+
address: "/avatar/parameters/PreviewMode".into(),
25
+
values: vec![ ParameterType::Int(0) ]
26
+
},
27
+
OSCMessage {
28
+
address: "/avatar/parameters/IsAnimatorEnabled".into(),
29
+
values: vec![ ParameterType::Boolean(true) ]
30
+
},
31
+
32
+
OSCMessage {
33
+
address: "/avatar/parameters/GestureRightWeight".into(),
34
+
values: vec![ ParameterType::Float(0.0) ]
35
+
},
36
+
OSCMessage {
37
+
address: "/avatar/parameters/GestureLeftWeight".into(),
38
+
values: vec![ ParameterType::Float(0.0) ]
39
+
},
40
+
OSCMessage {
41
+
address: "/avatar/parameters/GestureRight".into(),
42
+
values: vec![ ParameterType::Int(0) ]
43
+
},
44
+
OSCMessage {
45
+
address: "/avatar/parameters/GestureLeft".into(),
46
+
values: vec![ ParameterType::Int(0) ]
47
+
},
48
+
49
+
OSCMessage {
50
+
address: "/avatar/parameters/ScaleModified".into(),
51
+
values: vec![ ParameterType::Boolean(true) ]
52
+
},
53
+
OSCMessage {
54
+
address: "/avatar/parameters/ScaleFactor".into(),
55
+
values: vec![ ParameterType::Float(1.0) ]
56
+
},
57
+
OSCMessage {
58
+
address: "/avatar/parameters/ScaleFactorInverse".into(),
59
+
values: vec![ ParameterType::Float(1.0) ]
60
+
},
61
+
OSCMessage {
62
+
address: "/avatar/parameters/EyeHeightAsPercent".into(),
63
+
values: vec![ ParameterType::Float(1.0) ]
64
+
},
65
+
66
+
OSCMessage {
67
+
address: "/avatar/parameters/Viseme".into(),
68
+
values: vec![ ParameterType::Int(0) ]
69
+
},
70
+
OSCMessage {
71
+
address: "/avatar/parameters/Voice".into(),
72
+
values: vec![ ParameterType::Float(0.0) ]
73
+
},
74
+
OSCMessage {
75
+
address: "/avatar/parameters/Earmuffs".into(),
76
+
values: vec![ ParameterType::Boolean(true) ]
77
+
},
78
+
OSCMessage {
79
+
address: "/avatar/parameters/MuteSelf".into(),
80
+
values: vec![ ParameterType::Boolean(true) ]
81
+
},
82
+
83
+
OSCMessage {
84
+
address: "/avatar/parameters/AFK".into(),
85
+
values: vec![ ParameterType::Boolean(true) ]
86
+
},
87
+
OSCMessage {
88
+
address: "/avatar/parameters/InStation".into(),
89
+
values: vec![ ParameterType::Boolean(true) ]
90
+
},
91
+
OSCMessage {
92
+
address: "/avatar/parameters/Seated".into(),
93
+
values: vec![ ParameterType::Boolean(true) ]
94
+
},
95
+
OSCMessage {
96
+
address: "/avatar/parameters/VRMode".into(),
97
+
values: vec![ ParameterType::Int(0) ]
98
+
},
99
+
OSCMessage {
100
+
address: "/avatar/parameters/TrackingType".into(),
101
+
values: vec![ ParameterType::Int(0) ]
102
+
},
103
+
104
+
OSCMessage {
105
+
address: "/avatar/parameters/Grounded".into(),
106
+
values: vec![ ParameterType::Boolean(true) ]
107
+
},
108
+
OSCMessage {
109
+
address: "/avatar/parameters/Upright".into(),
110
+
values: vec![ ParameterType::Float(1.0) ]
111
+
},
112
+
OSCMessage {
113
+
address: "/avatar/parameters/AngularY".into(),
114
+
values: vec![ ParameterType::Float(1.0) ]
115
+
},
116
+
OSCMessage {
117
+
address: "/avatar/parameters/VelocityX".into(),
118
+
values: vec![ ParameterType::Float(1.0) ]
119
+
},
120
+
OSCMessage {
121
+
address: "/avatar/parameters/VelocityY".into(),
122
+
values: vec![ ParameterType::Float(1.0) ]
123
+
},
124
+
OSCMessage {
125
+
address: "/avatar/parameters/VelocityZ".into(),
126
+
values: vec![ ParameterType::Float(1.0) ]
127
+
},
128
+
OSCMessage {
129
+
address: "/avatar/parameters/VelocityMagnitude".into(),
130
+
values: vec![ ParameterType::Float(1.0) ]
131
+
},
132
+
133
+
// User Camera
134
+
OSCMessage {
135
+
address: "/usercamera/Mode".into(),
136
+
values: vec![ ParameterType::Int(0) ]
137
+
},
138
+
OSCMessage {
139
+
address: "/usercamera/Pose".into(),
140
+
values: vec![
141
+
ParameterType::Float(0.0),
142
+
ParameterType::Float(0.0),
143
+
ParameterType::Float(0.0),
144
+
145
+
ParameterType::Float(0.0),
146
+
ParameterType::Float(0.0),
147
+
ParameterType::Float(0.0)
148
+
]
149
+
},
150
+
151
+
OSCMessage {
152
+
address: "/usercamera/ShowUIInCamera".into(),
153
+
values: vec![ ParameterType::Boolean(true) ]
154
+
},
155
+
OSCMessage {
156
+
address: "/usercamera/LocalPlayer".into(),
157
+
values: vec![ ParameterType::Boolean(true) ]
158
+
},
159
+
OSCMessage {
160
+
address: "/usercamera/RemotePlayer".into(),
161
+
values: vec![ ParameterType::Boolean(true) ]
162
+
},
163
+
OSCMessage {
164
+
address: "/usercamera/Environment".into(),
165
+
values: vec![ ParameterType::Boolean(true) ]
166
+
},
167
+
OSCMessage {
168
+
address: "/usercamera/GreenScreen".into(),
169
+
values: vec![ ParameterType::Boolean(true) ]
170
+
},
171
+
OSCMessage {
172
+
address: "/usercamera/Lock".into(),
173
+
values: vec![ ParameterType::Boolean(true) ]
174
+
},
175
+
OSCMessage {
176
+
address: "/usercamera/SmoothMovement".into(),
177
+
values: vec![ ParameterType::Boolean(true) ]
178
+
},
179
+
OSCMessage {
180
+
address: "/usercamera/LookAtMe".into(),
181
+
values: vec![ ParameterType::Boolean(true) ]
182
+
},
183
+
OSCMessage {
184
+
address: "/usercamera/AutoLevelRoll".into(),
185
+
values: vec![ ParameterType::Boolean(true) ]
186
+
},
187
+
OSCMessage {
188
+
address: "/usercamera/AutoLevelPitch".into(),
189
+
values: vec![ ParameterType::Boolean(true) ]
190
+
},
191
+
OSCMessage {
192
+
address: "/usercamera/Flying".into(),
193
+
values: vec![ ParameterType::Boolean(true) ]
194
+
},
195
+
OSCMessage {
196
+
address: "/usercamera/TriggerTakesPhotos".into(),
197
+
values: vec![ ParameterType::Boolean(true) ]
198
+
},
199
+
OSCMessage {
200
+
address: "/usercamera/DollyPathsStayVisible".into(),
201
+
values: vec![ ParameterType::Boolean(true) ]
202
+
},
203
+
OSCMessage {
204
+
address: "/usercamera/AudioFromCamera".into(),
205
+
values: vec![ ParameterType::Boolean(true) ]
206
+
},
207
+
OSCMessage {
208
+
address: "/usercamera/ShowFocus".into(),
209
+
values: vec![ ParameterType::Boolean(true) ]
210
+
},
211
+
OSCMessage {
212
+
address: "/usercamera/Streaming".into(),
213
+
values: vec![ ParameterType::Boolean(true) ]
214
+
},
215
+
OSCMessage {
216
+
address: "/usercamera/RollWhileFlying".into(),
217
+
values: vec![ ParameterType::Boolean(true) ]
218
+
},
219
+
OSCMessage {
220
+
address: "/usercamera/OrientationIsLandscape".into(),
221
+
values: vec![ ParameterType::Boolean(true) ]
222
+
},
223
+
224
+
OSCMessage {
225
+
address: "/usercamera/Zoom".into(),
226
+
values: vec![ ParameterType::Float(0.0) ]
227
+
},
228
+
OSCMessage {
229
+
address: "/usercamera/Exposure".into(),
230
+
values: vec![ ParameterType::Float(0.0) ]
231
+
},
232
+
OSCMessage {
233
+
address: "/usercamera/Aperture".into(),
234
+
values: vec![ ParameterType::Float(0.0) ]
235
+
},
236
+
OSCMessage {
237
+
address: "/usercamera/Hue".into(),
238
+
values: vec![ ParameterType::Float(0.0) ]
239
+
},
240
+
OSCMessage {
241
+
address: "/usercamera/Saturation".into(),
242
+
values: vec![ ParameterType::Float(0.0) ]
243
+
},
244
+
OSCMessage {
245
+
address: "/usercamera/Lightness".into(),
246
+
values: vec![ ParameterType::Float(0.0) ]
247
+
},
248
+
OSCMessage {
249
+
address: "/usercamera/LookAtMeXOffset".into(),
250
+
values: vec![ ParameterType::Float(0.0) ]
251
+
},
252
+
OSCMessage {
253
+
address: "/usercamera/LookAtMeYOffset".into(),
254
+
values: vec![ ParameterType::Float(0.0) ]
255
+
},
256
+
OSCMessage {
257
+
address: "/usercamera/FlySpeed".into(),
258
+
values: vec![ ParameterType::Float(0.0) ]
259
+
},
260
+
OSCMessage {
261
+
address: "/usercamera/TurnSpeed".into(),
262
+
values: vec![ ParameterType::Float(0.0) ]
263
+
},
264
+
OSCMessage {
265
+
address: "/usercamera/SmoothStrength".into(),
266
+
values: vec![ ParameterType::Float(0.0) ]
267
+
},
268
+
OSCMessage {
269
+
address: "/usercamera/PhotoRate".into(),
270
+
values: vec![ ParameterType::Float(0.0) ]
271
+
},
272
+
OSCMessage {
273
+
address: "/usercamera/Duration".into(),
274
+
values: vec![ ParameterType::Float(0.0) ]
275
+
},
276
+
277
+
// Trackers
278
+
OSCMessage {
279
+
address: "/tracking/vrsystem/head/pose".into(),
280
+
values: vec![
281
+
ParameterType::Float(0.0),
282
+
ParameterType::Float(0.0),
283
+
ParameterType::Float(0.0),
284
+
285
+
ParameterType::Float(0.0),
286
+
ParameterType::Float(0.0),
287
+
ParameterType::Float(0.0),
288
+
]
289
+
},
290
+
OSCMessage {
291
+
address: "/tracking/vrsystem/rightwrist/pose".into(),
292
+
values: vec![
293
+
ParameterType::Float(0.0),
294
+
ParameterType::Float(0.0),
295
+
ParameterType::Float(0.0),
296
+
297
+
ParameterType::Float(0.0),
298
+
ParameterType::Float(0.0),
299
+
ParameterType::Float(0.0),
300
+
]
301
+
},
302
+
OSCMessage {
303
+
address: "/tracking/vrsystem/leftwrist/pose".into(),
304
+
values: vec![
305
+
ParameterType::Float(0.0),
306
+
ParameterType::Float(0.0),
307
+
ParameterType::Float(0.0),
308
+
309
+
ParameterType::Float(0.0),
310
+
ParameterType::Float(0.0),
311
+
ParameterType::Float(0.0),
312
+
]
313
+
},
314
+
]
315
+
}
+2
-2
src-tauri/tauri.conf.json
+2
-2
src-tauri/tauri.conf.json
+1
-1
vite.config.ts
+1
-1
vite.config.ts