+5
-1
.gitignore
+5
-1
.gitignore
-3
.vscode/extensions.json
-3
.vscode/extensions.json
+11
-9
package.json
+11
-9
package.json
···
12
},
13
"license": "MIT",
14
"dependencies": {
15
-
"@tauri-apps/api": "^2",
16
-
"@tauri-apps/plugin-dialog": "~2",
17
-
"@tauri-apps/plugin-opener": "^2",
18
-
"animejs": "^4.1.2",
19
-
"solid-js": "^1.9.3"
20
},
21
"devDependencies": {
22
-
"@tauri-apps/cli": "^2",
23
"@types/animejs": "^3.1.13",
24
-
"typescript": "~5.6.2",
25
-
"vite": "^6.0.3",
26
-
"vite-plugin-solid": "^2.11.0"
27
}
28
}
···
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
}
+477
-437
pnpm-lock.yaml
+477
-437
pnpm-lock.yaml
···
9
.:
10
dependencies:
11
'@tauri-apps/api':
12
-
specifier: ^2
13
-
version: 2.7.0
14
'@tauri-apps/plugin-dialog':
15
specifier: ~2
16
-
version: 2.4.0
17
-
'@tauri-apps/plugin-opener':
18
-
specifier: ^2
19
-
version: 2.4.0
20
animejs:
21
-
specifier: ^4.1.2
22
-
version: 4.1.2
23
solid-js:
24
-
specifier: ^1.9.3
25
-
version: 1.9.7
26
devDependencies:
27
'@tauri-apps/cli':
28
-
specifier: ^2
29
-
version: 2.7.1
30
'@types/animejs':
31
specifier: ^3.1.13
32
version: 3.1.13
33
typescript:
34
-
specifier: ~5.6.2
35
version: 5.6.3
36
vite:
37
-
specifier: ^6.0.3
38
-
version: 6.3.5
39
vite-plugin-solid:
40
-
specifier: ^2.11.0
41
-
version: 2.11.8(solid-js@1.9.7)(vite@6.3.5)
42
43
packages:
44
-
45
-
'@ampproject/remapping@2.3.0':
46
-
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
47
-
engines: {node: '>=6.0.0'}
48
49
'@babel/code-frame@7.27.1':
50
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
51
engines: {node: '>=6.9.0'}
52
53
-
'@babel/compat-data@7.28.0':
54
-
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
55
engines: {node: '>=6.9.0'}
56
57
-
'@babel/core@7.28.0':
58
-
resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
59
engines: {node: '>=6.9.0'}
60
61
-
'@babel/generator@7.28.0':
62
-
resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
63
engines: {node: '>=6.9.0'}
64
65
'@babel/helper-compilation-targets@7.27.2':
···
78
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
79
engines: {node: '>=6.9.0'}
80
81
-
'@babel/helper-module-transforms@7.27.3':
82
-
resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
83
engines: {node: '>=6.9.0'}
84
peerDependencies:
85
'@babel/core': ^7.0.0
···
92
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
93
engines: {node: '>=6.9.0'}
94
95
-
'@babel/helper-validator-identifier@7.27.1':
96
-
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
97
engines: {node: '>=6.9.0'}
98
99
'@babel/helper-validator-option@7.27.1':
100
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
101
engines: {node: '>=6.9.0'}
102
103
-
'@babel/helpers@7.28.2':
104
-
resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==}
105
engines: {node: '>=6.9.0'}
106
107
-
'@babel/parser@7.28.0':
108
-
resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
109
engines: {node: '>=6.0.0'}
110
hasBin: true
111
···
119
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
120
engines: {node: '>=6.9.0'}
121
122
-
'@babel/traverse@7.28.0':
123
-
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
124
engines: {node: '>=6.9.0'}
125
126
-
'@babel/types@7.28.2':
127
-
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
128
engines: {node: '>=6.9.0'}
129
130
-
'@esbuild/aix-ppc64@0.25.8':
131
-
resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==}
132
engines: {node: '>=18'}
133
cpu: [ppc64]
134
os: [aix]
135
136
-
'@esbuild/android-arm64@0.25.8':
137
-
resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==}
138
engines: {node: '>=18'}
139
cpu: [arm64]
140
os: [android]
141
142
-
'@esbuild/android-arm@0.25.8':
143
-
resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==}
144
engines: {node: '>=18'}
145
cpu: [arm]
146
os: [android]
147
148
-
'@esbuild/android-x64@0.25.8':
149
-
resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==}
150
engines: {node: '>=18'}
151
cpu: [x64]
152
os: [android]
153
154
-
'@esbuild/darwin-arm64@0.25.8':
155
-
resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==}
156
engines: {node: '>=18'}
157
cpu: [arm64]
158
os: [darwin]
159
160
-
'@esbuild/darwin-x64@0.25.8':
161
-
resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==}
162
engines: {node: '>=18'}
163
cpu: [x64]
164
os: [darwin]
165
166
-
'@esbuild/freebsd-arm64@0.25.8':
167
-
resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==}
168
engines: {node: '>=18'}
169
cpu: [arm64]
170
os: [freebsd]
171
172
-
'@esbuild/freebsd-x64@0.25.8':
173
-
resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==}
174
engines: {node: '>=18'}
175
cpu: [x64]
176
os: [freebsd]
177
178
-
'@esbuild/linux-arm64@0.25.8':
179
-
resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==}
180
engines: {node: '>=18'}
181
cpu: [arm64]
182
os: [linux]
183
184
-
'@esbuild/linux-arm@0.25.8':
185
-
resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==}
186
engines: {node: '>=18'}
187
cpu: [arm]
188
os: [linux]
189
190
-
'@esbuild/linux-ia32@0.25.8':
191
-
resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==}
192
engines: {node: '>=18'}
193
cpu: [ia32]
194
os: [linux]
195
196
-
'@esbuild/linux-loong64@0.25.8':
197
-
resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==}
198
engines: {node: '>=18'}
199
cpu: [loong64]
200
os: [linux]
201
202
-
'@esbuild/linux-mips64el@0.25.8':
203
-
resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==}
204
engines: {node: '>=18'}
205
cpu: [mips64el]
206
os: [linux]
207
208
-
'@esbuild/linux-ppc64@0.25.8':
209
-
resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==}
210
engines: {node: '>=18'}
211
cpu: [ppc64]
212
os: [linux]
213
214
-
'@esbuild/linux-riscv64@0.25.8':
215
-
resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==}
216
engines: {node: '>=18'}
217
cpu: [riscv64]
218
os: [linux]
219
220
-
'@esbuild/linux-s390x@0.25.8':
221
-
resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==}
222
engines: {node: '>=18'}
223
cpu: [s390x]
224
os: [linux]
225
226
-
'@esbuild/linux-x64@0.25.8':
227
-
resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==}
228
engines: {node: '>=18'}
229
cpu: [x64]
230
os: [linux]
231
232
-
'@esbuild/netbsd-arm64@0.25.8':
233
-
resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==}
234
engines: {node: '>=18'}
235
cpu: [arm64]
236
os: [netbsd]
237
238
-
'@esbuild/netbsd-x64@0.25.8':
239
-
resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==}
240
engines: {node: '>=18'}
241
cpu: [x64]
242
os: [netbsd]
243
244
-
'@esbuild/openbsd-arm64@0.25.8':
245
-
resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==}
246
engines: {node: '>=18'}
247
cpu: [arm64]
248
os: [openbsd]
249
250
-
'@esbuild/openbsd-x64@0.25.8':
251
-
resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==}
252
engines: {node: '>=18'}
253
cpu: [x64]
254
os: [openbsd]
255
256
-
'@esbuild/openharmony-arm64@0.25.8':
257
-
resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==}
258
engines: {node: '>=18'}
259
cpu: [arm64]
260
os: [openharmony]
261
262
-
'@esbuild/sunos-x64@0.25.8':
263
-
resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==}
264
engines: {node: '>=18'}
265
cpu: [x64]
266
os: [sunos]
267
268
-
'@esbuild/win32-arm64@0.25.8':
269
-
resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==}
270
engines: {node: '>=18'}
271
cpu: [arm64]
272
os: [win32]
273
274
-
'@esbuild/win32-ia32@0.25.8':
275
-
resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==}
276
engines: {node: '>=18'}
277
cpu: [ia32]
278
os: [win32]
279
280
-
'@esbuild/win32-x64@0.25.8':
281
-
resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==}
282
engines: {node: '>=18'}
283
cpu: [x64]
284
os: [win32]
285
286
-
'@jridgewell/gen-mapping@0.3.12':
287
-
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
288
289
'@jridgewell/resolve-uri@3.1.2':
290
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
291
engines: {node: '>=6.0.0'}
292
293
-
'@jridgewell/sourcemap-codec@1.5.4':
294
-
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
295
296
-
'@jridgewell/trace-mapping@0.3.29':
297
-
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
298
299
-
'@rollup/rollup-android-arm-eabi@4.46.1':
300
-
resolution: {integrity: sha512-oENme6QxtLCqjChRUUo3S6X8hjCXnWmJWnedD7VbGML5GUtaOtAyx+fEEXnBXVf0CBZApMQU0Idwi0FmyxzQhw==}
301
cpu: [arm]
302
os: [android]
303
304
-
'@rollup/rollup-android-arm64@4.46.1':
305
-
resolution: {integrity: sha512-OikvNT3qYTl9+4qQ9Bpn6+XHM+ogtFadRLuT2EXiFQMiNkXFLQfNVppi5o28wvYdHL2s3fM0D/MZJ8UkNFZWsw==}
306
cpu: [arm64]
307
os: [android]
308
309
-
'@rollup/rollup-darwin-arm64@4.46.1':
310
-
resolution: {integrity: sha512-EFYNNGij2WllnzljQDQnlFTXzSJw87cpAs4TVBAWLdkvic5Uh5tISrIL6NRcxoh/b2EFBG/TK8hgRrGx94zD4A==}
311
cpu: [arm64]
312
os: [darwin]
313
314
-
'@rollup/rollup-darwin-x64@4.46.1':
315
-
resolution: {integrity: sha512-ZaNH06O1KeTug9WI2+GRBE5Ujt9kZw4a1+OIwnBHal92I8PxSsl5KpsrPvthRynkhMck4XPdvY0z26Cym/b7oA==}
316
cpu: [x64]
317
os: [darwin]
318
319
-
'@rollup/rollup-freebsd-arm64@4.46.1':
320
-
resolution: {integrity: sha512-n4SLVebZP8uUlJ2r04+g2U/xFeiQlw09Me5UFqny8HGbARl503LNH5CqFTb5U5jNxTouhRjai6qPT0CR5c/Iig==}
321
cpu: [arm64]
322
os: [freebsd]
323
324
-
'@rollup/rollup-freebsd-x64@4.46.1':
325
-
resolution: {integrity: sha512-8vu9c02F16heTqpvo3yeiu7Vi1REDEC/yES/dIfq3tSXe6mLndiwvYr3AAvd1tMNUqE9yeGYa5w7PRbI5QUV+w==}
326
cpu: [x64]
327
os: [freebsd]
328
329
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.1':
330
-
resolution: {integrity: sha512-K4ncpWl7sQuyp6rWiGUvb6Q18ba8mzM0rjWJ5JgYKlIXAau1db7hZnR0ldJvqKWWJDxqzSLwGUhA4jp+KqgDtQ==}
331
cpu: [arm]
332
os: [linux]
333
334
-
'@rollup/rollup-linux-arm-musleabihf@4.46.1':
335
-
resolution: {integrity: sha512-YykPnXsjUjmXE6j6k2QBBGAn1YsJUix7pYaPLK3RVE0bQL2jfdbfykPxfF8AgBlqtYbfEnYHmLXNa6QETjdOjQ==}
336
cpu: [arm]
337
os: [linux]
338
339
-
'@rollup/rollup-linux-arm64-gnu@4.46.1':
340
-
resolution: {integrity: sha512-kKvqBGbZ8i9pCGW3a1FH3HNIVg49dXXTsChGFsHGXQaVJPLA4f/O+XmTxfklhccxdF5FefUn2hvkoGJH0ScWOA==}
341
cpu: [arm64]
342
os: [linux]
343
344
-
'@rollup/rollup-linux-arm64-musl@4.46.1':
345
-
resolution: {integrity: sha512-zzX5nTw1N1plmqC9RGC9vZHFuiM7ZP7oSWQGqpbmfjK7p947D518cVK1/MQudsBdcD84t6k70WNczJOct6+hdg==}
346
cpu: [arm64]
347
os: [linux]
348
349
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.1':
350
-
resolution: {integrity: sha512-O8CwgSBo6ewPpktFfSDgB6SJN9XDcPSvuwxfejiddbIC/hn9Tg6Ai0f0eYDf3XvB/+PIWzOQL+7+TZoB8p9Yuw==}
351
cpu: [loong64]
352
os: [linux]
353
354
-
'@rollup/rollup-linux-ppc64-gnu@4.46.1':
355
-
resolution: {integrity: sha512-JnCfFVEKeq6G3h3z8e60kAp8Rd7QVnWCtPm7cxx+5OtP80g/3nmPtfdCXbVl063e3KsRnGSKDHUQMydmzc/wBA==}
356
cpu: [ppc64]
357
os: [linux]
358
359
-
'@rollup/rollup-linux-riscv64-gnu@4.46.1':
360
-
resolution: {integrity: sha512-dVxuDqS237eQXkbYzQQfdf/njgeNw6LZuVyEdUaWwRpKHhsLI+y4H/NJV8xJGU19vnOJCVwaBFgr936FHOnJsQ==}
361
cpu: [riscv64]
362
os: [linux]
363
364
-
'@rollup/rollup-linux-riscv64-musl@4.46.1':
365
-
resolution: {integrity: sha512-CvvgNl2hrZrTR9jXK1ye0Go0HQRT6ohQdDfWR47/KFKiLd5oN5T14jRdUVGF4tnsN8y9oSfMOqH6RuHh+ck8+w==}
366
cpu: [riscv64]
367
os: [linux]
368
369
-
'@rollup/rollup-linux-s390x-gnu@4.46.1':
370
-
resolution: {integrity: sha512-x7ANt2VOg2565oGHJ6rIuuAon+A8sfe1IeUx25IKqi49OjSr/K3awoNqr9gCwGEJo9OuXlOn+H2p1VJKx1psxA==}
371
cpu: [s390x]
372
os: [linux]
373
374
-
'@rollup/rollup-linux-x64-gnu@4.46.1':
375
-
resolution: {integrity: sha512-9OADZYryz/7E8/qt0vnaHQgmia2Y0wrjSSn1V/uL+zw/i7NUhxbX4cHXdEQ7dnJgzYDS81d8+tf6nbIdRFZQoQ==}
376
cpu: [x64]
377
os: [linux]
378
379
-
'@rollup/rollup-linux-x64-musl@4.46.1':
380
-
resolution: {integrity: sha512-NuvSCbXEKY+NGWHyivzbjSVJi68Xfq1VnIvGmsuXs6TCtveeoDRKutI5vf2ntmNnVq64Q4zInet0UDQ+yMB6tA==}
381
cpu: [x64]
382
os: [linux]
383
384
-
'@rollup/rollup-win32-arm64-msvc@4.46.1':
385
-
resolution: {integrity: sha512-mWz+6FSRb82xuUMMV1X3NGiaPFqbLN9aIueHleTZCc46cJvwTlvIh7reQLk4p97dv0nddyewBhwzryBHH7wtPw==}
386
cpu: [arm64]
387
os: [win32]
388
389
-
'@rollup/rollup-win32-ia32-msvc@4.46.1':
390
-
resolution: {integrity: sha512-7Thzy9TMXDw9AU4f4vsLNBxh7/VOKuXi73VH3d/kHGr0tZ3x/ewgL9uC7ojUKmH1/zvmZe2tLapYcZllk3SO8Q==}
391
cpu: [ia32]
392
os: [win32]
393
394
-
'@rollup/rollup-win32-x64-msvc@4.46.1':
395
-
resolution: {integrity: sha512-7GVB4luhFmGUNXXJhH2jJwZCFB3pIOixv2E3s17GQHBFUOQaISlt7aGcQgqvCaDSxTZJUzlK/QJ1FN8S94MrzQ==}
396
cpu: [x64]
397
os: [win32]
398
399
-
'@tauri-apps/api@2.7.0':
400
-
resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==}
401
402
-
'@tauri-apps/api@2.8.0':
403
-
resolution: {integrity: sha512-ga7zdhbS2GXOMTIZRT0mYjKJtR9fivsXzsyq5U3vjDL0s6DTMwYRm0UHNjzTY5dh4+LSC68Sm/7WEiimbQNYlw==}
404
405
-
'@tauri-apps/cli-darwin-arm64@2.7.1':
406
-
resolution: {integrity: sha512-j2NXQN6+08G03xYiyKDKqbCV2Txt+hUKg0a8hYr92AmoCU8fgCjHyva/p16lGFGUG3P2Yu0xiNe1hXL9ZuRMzA==}
407
engines: {node: '>= 10'}
408
cpu: [arm64]
409
os: [darwin]
410
411
-
'@tauri-apps/cli-darwin-x64@2.7.1':
412
-
resolution: {integrity: sha512-CdYAefeM35zKsc91qIyKzbaO7FhzTyWKsE8hj7tEJ1INYpoh1NeNNyL/NSEA3Nebi5ilugioJ5tRK8ZXG8y3gw==}
413
engines: {node: '>= 10'}
414
cpu: [x64]
415
os: [darwin]
416
417
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.7.1':
418
-
resolution: {integrity: sha512-dnvyJrTA1UJxJjQ8q1N/gWomjP8Twij1BUQu2fdcT3OPpqlrbOk5R1yT0oD/721xoKNjroB5BXCsmmlykllxNg==}
419
engines: {node: '>= 10'}
420
cpu: [arm]
421
os: [linux]
422
423
-
'@tauri-apps/cli-linux-arm64-gnu@2.7.1':
424
-
resolution: {integrity: sha512-FtBW6LJPNRTws3qyUc294AqCWU91l/H0SsFKq6q4Q45MSS4x6wxLxou8zB53tLDGEPx3JSoPLcDaSfPlSbyujQ==}
425
engines: {node: '>= 10'}
426
cpu: [arm64]
427
os: [linux]
428
429
-
'@tauri-apps/cli-linux-arm64-musl@2.7.1':
430
-
resolution: {integrity: sha512-/HXY0t4FHkpFzjeYS5c16mlA6z0kzn5uKLWptTLTdFSnYpr8FCnOP4Sdkvm2TDQPF2ERxXtNCd+WR/jQugbGnA==}
431
engines: {node: '>= 10'}
432
cpu: [arm64]
433
os: [linux]
434
435
-
'@tauri-apps/cli-linux-riscv64-gnu@2.7.1':
436
-
resolution: {integrity: sha512-GeW5lVI2GhhnaYckiDzstG2j2Jwlud5d2XefRGwlOK+C/bVGLT1le8MNPYK8wgRlpeK8fG1WnJJYD6Ke7YQ8bg==}
437
engines: {node: '>= 10'}
438
cpu: [riscv64]
439
os: [linux]
440
441
-
'@tauri-apps/cli-linux-x64-gnu@2.7.1':
442
-
resolution: {integrity: sha512-DprxKQkPxIPYwUgg+cscpv2lcIUhn2nxEPlk0UeaiV9vATxCXyytxr1gLcj3xgjGyNPlM0MlJyYaPy1JmRg1cA==}
443
engines: {node: '>= 10'}
444
cpu: [x64]
445
os: [linux]
446
447
-
'@tauri-apps/cli-linux-x64-musl@2.7.1':
448
-
resolution: {integrity: sha512-KLlq3kOK7OUyDR757c0zQjPULpGZpLhNB0lZmZpHXvoOUcqZoCXJHh4dT/mryWZJp5ilrem5l8o9ngrDo0X1AA==}
449
engines: {node: '>= 10'}
450
cpu: [x64]
451
os: [linux]
452
453
-
'@tauri-apps/cli-win32-arm64-msvc@2.7.1':
454
-
resolution: {integrity: sha512-dH7KUjKkSypCeWPiainHyXoES3obS+JIZVoSwSZfKq2gWgs48FY3oT0hQNYrWveE+VR4VoR3b/F3CPGbgFvksA==}
455
engines: {node: '>= 10'}
456
cpu: [arm64]
457
os: [win32]
458
459
-
'@tauri-apps/cli-win32-ia32-msvc@2.7.1':
460
-
resolution: {integrity: sha512-1oeibfyWQPVcijOrTg709qhbXArjX3x1MPjrmA5anlygwrbByxLBcLXvotcOeULFcnH2FYUMMLLant8kgvwE5A==}
461
engines: {node: '>= 10'}
462
cpu: [ia32]
463
os: [win32]
464
465
-
'@tauri-apps/cli-win32-x64-msvc@2.7.1':
466
-
resolution: {integrity: sha512-D7Q9kDObutuirCNLxYQ7KAg2Xxg99AjcdYz/KuMw5HvyEPbkC9Q7JL0vOrQOrHEHxIQ2lYzFOZvKKoC2yyqXcg==}
467
engines: {node: '>= 10'}
468
cpu: [x64]
469
os: [win32]
470
471
-
'@tauri-apps/cli@2.7.1':
472
-
resolution: {integrity: sha512-RcGWR4jOUEl92w3uvI0h61Llkfj9lwGD1iwvDRD2isMrDhOzjeeeVn9aGzeW1jubQ/kAbMYfydcA4BA0Cy733Q==}
473
engines: {node: '>= 10'}
474
hasBin: true
475
476
-
'@tauri-apps/plugin-dialog@2.4.0':
477
-
resolution: {integrity: sha512-OvXkrEBfWwtd8tzVCEXIvRfNEX87qs2jv6SqmVPiHcJjBhSF/GUvjqUNIDmKByb5N8nvDqVUM7+g1sXwdC/S9w==}
478
479
-
'@tauri-apps/plugin-opener@2.4.0':
480
-
resolution: {integrity: sha512-43VyN8JJtvKWJY72WI/KNZszTpDpzHULFxQs0CJBIYUdCRowQ6Q1feWTDb979N7nldqSuDOaBupZ6wz2nvuWwQ==}
481
482
'@types/animejs@3.1.13':
483
resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==}
···
491
'@types/babel__template@7.4.4':
492
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
493
494
-
'@types/babel__traverse@7.20.7':
495
-
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
496
497
'@types/estree@1.0.8':
498
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
499
500
-
animejs@4.1.2:
501
-
resolution: {integrity: sha512-QojQzHzN4ZCOGk4Seir5CWPHGKFPpMAsen3KEj/BHsIKDceH0xKd3FBWflyKiNefKG2fn3+ofpY9jD/UXhpY6A==}
502
503
-
babel-plugin-jsx-dom-expressions@0.39.8:
504
-
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==}
505
peerDependencies:
506
'@babel/core': ^7.20.12
507
508
-
babel-preset-solid@1.9.6:
509
-
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==}
510
peerDependencies:
511
'@babel/core': ^7.0.0
512
513
-
browserslist@4.25.1:
514
-
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
515
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
516
hasBin: true
517
518
-
caniuse-lite@1.0.30001731:
519
-
resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==}
520
521
convert-source-map@2.0.0:
522
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
···
524
csstype@3.1.3:
525
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
526
527
-
debug@4.4.1:
528
-
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
529
engines: {node: '>=6.0'}
530
peerDependencies:
531
supports-color: '*'
···
533
supports-color:
534
optional: true
535
536
-
electron-to-chromium@1.5.192:
537
-
resolution: {integrity: sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==}
538
539
entities@6.0.1:
540
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
541
engines: {node: '>=0.12'}
542
543
-
esbuild@0.25.8:
544
-
resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==}
545
engines: {node: '>=18'}
546
hasBin: true
547
···
549
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
550
engines: {node: '>=6'}
551
552
-
fdir@6.4.6:
553
-
resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
554
peerDependencies:
555
picomatch: ^3 || ^4
556
peerDependenciesMeta:
···
601
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
602
hasBin: true
603
604
-
node-releases@2.0.19:
605
-
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
606
607
parse5@7.3.0:
608
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
618
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
619
engines: {node: ^10 || ^12 || >=14}
620
621
-
rollup@4.46.1:
622
-
resolution: {integrity: sha512-33xGNBsDJAkzt0PvninskHlWnTIPgDtTwhg0U38CUoNP/7H6wI2Cz6dUeoNPbjdTdsYTGuiFFASuUOWovH0SyQ==}
623
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
624
hasBin: true
625
···
627
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
628
hasBin: true
629
630
-
seroval-plugins@1.3.2:
631
-
resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==}
632
engines: {node: '>=10'}
633
peerDependencies:
634
seroval: ^1.0
···
637
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
638
engines: {node: '>=10'}
639
640
-
solid-js@1.9.7:
641
-
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==}
642
643
solid-refresh@0.6.3:
644
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
649
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
650
engines: {node: '>=0.10.0'}
651
652
-
tinyglobby@0.2.14:
653
-
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
654
engines: {node: '>=12.0.0'}
655
656
typescript@5.6.3:
···
658
engines: {node: '>=14.17'}
659
hasBin: true
660
661
-
update-browserslist-db@1.1.3:
662
-
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
663
hasBin: true
664
peerDependencies:
665
browserslist: '>= 4.21.0'
666
667
-
validate-html-nesting@1.2.3:
668
-
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
669
-
670
-
vite-plugin-solid@2.11.8:
671
-
resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==}
672
peerDependencies:
673
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
674
solid-js: ^1.7.2
···
677
'@testing-library/jest-dom':
678
optional: true
679
680
-
vite@6.3.5:
681
-
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
682
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
683
hasBin: true
684
peerDependencies:
···
730
731
snapshots:
732
733
-
'@ampproject/remapping@2.3.0':
734
-
dependencies:
735
-
'@jridgewell/gen-mapping': 0.3.12
736
-
'@jridgewell/trace-mapping': 0.3.29
737
-
738
'@babel/code-frame@7.27.1':
739
dependencies:
740
-
'@babel/helper-validator-identifier': 7.27.1
741
js-tokens: 4.0.0
742
picocolors: 1.1.1
743
744
-
'@babel/compat-data@7.28.0': {}
745
746
-
'@babel/core@7.28.0':
747
dependencies:
748
-
'@ampproject/remapping': 2.3.0
749
'@babel/code-frame': 7.27.1
750
-
'@babel/generator': 7.28.0
751
'@babel/helper-compilation-targets': 7.27.2
752
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0)
753
-
'@babel/helpers': 7.28.2
754
-
'@babel/parser': 7.28.0
755
'@babel/template': 7.27.2
756
-
'@babel/traverse': 7.28.0
757
-
'@babel/types': 7.28.2
758
convert-source-map: 2.0.0
759
-
debug: 4.4.1
760
gensync: 1.0.0-beta.2
761
json5: 2.2.3
762
semver: 6.3.1
763
transitivePeerDependencies:
764
- supports-color
765
766
-
'@babel/generator@7.28.0':
767
dependencies:
768
-
'@babel/parser': 7.28.0
769
-
'@babel/types': 7.28.2
770
-
'@jridgewell/gen-mapping': 0.3.12
771
-
'@jridgewell/trace-mapping': 0.3.29
772
jsesc: 3.1.0
773
774
'@babel/helper-compilation-targets@7.27.2':
775
dependencies:
776
-
'@babel/compat-data': 7.28.0
777
'@babel/helper-validator-option': 7.27.1
778
-
browserslist: 4.25.1
779
lru-cache: 5.1.1
780
semver: 6.3.1
781
···
783
784
'@babel/helper-module-imports@7.18.6':
785
dependencies:
786
-
'@babel/types': 7.28.2
787
788
'@babel/helper-module-imports@7.27.1':
789
dependencies:
790
-
'@babel/traverse': 7.28.0
791
-
'@babel/types': 7.28.2
792
transitivePeerDependencies:
793
- supports-color
794
795
-
'@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
796
dependencies:
797
-
'@babel/core': 7.28.0
798
'@babel/helper-module-imports': 7.27.1
799
-
'@babel/helper-validator-identifier': 7.27.1
800
-
'@babel/traverse': 7.28.0
801
transitivePeerDependencies:
802
- supports-color
803
···
805
806
'@babel/helper-string-parser@7.27.1': {}
807
808
-
'@babel/helper-validator-identifier@7.27.1': {}
809
810
'@babel/helper-validator-option@7.27.1': {}
811
812
-
'@babel/helpers@7.28.2':
813
dependencies:
814
'@babel/template': 7.27.2
815
-
'@babel/types': 7.28.2
816
817
-
'@babel/parser@7.28.0':
818
dependencies:
819
-
'@babel/types': 7.28.2
820
821
-
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
822
dependencies:
823
-
'@babel/core': 7.28.0
824
'@babel/helper-plugin-utils': 7.27.1
825
826
'@babel/template@7.27.2':
827
dependencies:
828
'@babel/code-frame': 7.27.1
829
-
'@babel/parser': 7.28.0
830
-
'@babel/types': 7.28.2
831
832
-
'@babel/traverse@7.28.0':
833
dependencies:
834
'@babel/code-frame': 7.27.1
835
-
'@babel/generator': 7.28.0
836
'@babel/helper-globals': 7.28.0
837
-
'@babel/parser': 7.28.0
838
'@babel/template': 7.27.2
839
-
'@babel/types': 7.28.2
840
-
debug: 4.4.1
841
transitivePeerDependencies:
842
- supports-color
843
844
-
'@babel/types@7.28.2':
845
dependencies:
846
'@babel/helper-string-parser': 7.27.1
847
-
'@babel/helper-validator-identifier': 7.27.1
848
849
-
'@esbuild/aix-ppc64@0.25.8':
850
optional: true
851
852
-
'@esbuild/android-arm64@0.25.8':
853
optional: true
854
855
-
'@esbuild/android-arm@0.25.8':
856
optional: true
857
858
-
'@esbuild/android-x64@0.25.8':
859
optional: true
860
861
-
'@esbuild/darwin-arm64@0.25.8':
862
optional: true
863
864
-
'@esbuild/darwin-x64@0.25.8':
865
optional: true
866
867
-
'@esbuild/freebsd-arm64@0.25.8':
868
optional: true
869
870
-
'@esbuild/freebsd-x64@0.25.8':
871
optional: true
872
873
-
'@esbuild/linux-arm64@0.25.8':
874
optional: true
875
876
-
'@esbuild/linux-arm@0.25.8':
877
optional: true
878
879
-
'@esbuild/linux-ia32@0.25.8':
880
optional: true
881
882
-
'@esbuild/linux-loong64@0.25.8':
883
optional: true
884
885
-
'@esbuild/linux-mips64el@0.25.8':
886
optional: true
887
888
-
'@esbuild/linux-ppc64@0.25.8':
889
optional: true
890
891
-
'@esbuild/linux-riscv64@0.25.8':
892
optional: true
893
894
-
'@esbuild/linux-s390x@0.25.8':
895
optional: true
896
897
-
'@esbuild/linux-x64@0.25.8':
898
optional: true
899
900
-
'@esbuild/netbsd-arm64@0.25.8':
901
optional: true
902
903
-
'@esbuild/netbsd-x64@0.25.8':
904
optional: true
905
906
-
'@esbuild/openbsd-arm64@0.25.8':
907
optional: true
908
909
-
'@esbuild/openbsd-x64@0.25.8':
910
optional: true
911
912
-
'@esbuild/openharmony-arm64@0.25.8':
913
optional: true
914
915
-
'@esbuild/sunos-x64@0.25.8':
916
optional: true
917
918
-
'@esbuild/win32-arm64@0.25.8':
919
optional: true
920
921
-
'@esbuild/win32-ia32@0.25.8':
922
optional: true
923
924
-
'@esbuild/win32-x64@0.25.8':
925
optional: true
926
927
-
'@jridgewell/gen-mapping@0.3.12':
928
dependencies:
929
-
'@jridgewell/sourcemap-codec': 1.5.4
930
-
'@jridgewell/trace-mapping': 0.3.29
931
932
'@jridgewell/resolve-uri@3.1.2': {}
933
934
-
'@jridgewell/sourcemap-codec@1.5.4': {}
935
936
-
'@jridgewell/trace-mapping@0.3.29':
937
dependencies:
938
'@jridgewell/resolve-uri': 3.1.2
939
-
'@jridgewell/sourcemap-codec': 1.5.4
940
941
-
'@rollup/rollup-android-arm-eabi@4.46.1':
942
optional: true
943
944
-
'@rollup/rollup-android-arm64@4.46.1':
945
optional: true
946
947
-
'@rollup/rollup-darwin-arm64@4.46.1':
948
optional: true
949
950
-
'@rollup/rollup-darwin-x64@4.46.1':
951
optional: true
952
953
-
'@rollup/rollup-freebsd-arm64@4.46.1':
954
optional: true
955
956
-
'@rollup/rollup-freebsd-x64@4.46.1':
957
optional: true
958
959
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.1':
960
optional: true
961
962
-
'@rollup/rollup-linux-arm-musleabihf@4.46.1':
963
optional: true
964
965
-
'@rollup/rollup-linux-arm64-gnu@4.46.1':
966
optional: true
967
968
-
'@rollup/rollup-linux-arm64-musl@4.46.1':
969
optional: true
970
971
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.1':
972
optional: true
973
974
-
'@rollup/rollup-linux-ppc64-gnu@4.46.1':
975
optional: true
976
977
-
'@rollup/rollup-linux-riscv64-gnu@4.46.1':
978
optional: true
979
980
-
'@rollup/rollup-linux-riscv64-musl@4.46.1':
981
optional: true
982
983
-
'@rollup/rollup-linux-s390x-gnu@4.46.1':
984
optional: true
985
986
-
'@rollup/rollup-linux-x64-gnu@4.46.1':
987
optional: true
988
989
-
'@rollup/rollup-linux-x64-musl@4.46.1':
990
optional: true
991
992
-
'@rollup/rollup-win32-arm64-msvc@4.46.1':
993
optional: true
994
995
-
'@rollup/rollup-win32-ia32-msvc@4.46.1':
996
optional: true
997
998
-
'@rollup/rollup-win32-x64-msvc@4.46.1':
999
optional: true
1000
1001
-
'@tauri-apps/api@2.7.0': {}
1002
1003
-
'@tauri-apps/api@2.8.0': {}
1004
1005
-
'@tauri-apps/cli-darwin-arm64@2.7.1':
1006
optional: true
1007
1008
-
'@tauri-apps/cli-darwin-x64@2.7.1':
1009
optional: true
1010
1011
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.7.1':
1012
optional: true
1013
1014
-
'@tauri-apps/cli-linux-arm64-gnu@2.7.1':
1015
optional: true
1016
1017
-
'@tauri-apps/cli-linux-arm64-musl@2.7.1':
1018
optional: true
1019
1020
-
'@tauri-apps/cli-linux-riscv64-gnu@2.7.1':
1021
optional: true
1022
1023
-
'@tauri-apps/cli-linux-x64-gnu@2.7.1':
1024
optional: true
1025
1026
-
'@tauri-apps/cli-linux-x64-musl@2.7.1':
1027
optional: true
1028
1029
-
'@tauri-apps/cli-win32-arm64-msvc@2.7.1':
1030
optional: true
1031
1032
-
'@tauri-apps/cli-win32-ia32-msvc@2.7.1':
1033
optional: true
1034
1035
-
'@tauri-apps/cli-win32-x64-msvc@2.7.1':
1036
optional: true
1037
1038
-
'@tauri-apps/cli@2.7.1':
1039
optionalDependencies:
1040
-
'@tauri-apps/cli-darwin-arm64': 2.7.1
1041
-
'@tauri-apps/cli-darwin-x64': 2.7.1
1042
-
'@tauri-apps/cli-linux-arm-gnueabihf': 2.7.1
1043
-
'@tauri-apps/cli-linux-arm64-gnu': 2.7.1
1044
-
'@tauri-apps/cli-linux-arm64-musl': 2.7.1
1045
-
'@tauri-apps/cli-linux-riscv64-gnu': 2.7.1
1046
-
'@tauri-apps/cli-linux-x64-gnu': 2.7.1
1047
-
'@tauri-apps/cli-linux-x64-musl': 2.7.1
1048
-
'@tauri-apps/cli-win32-arm64-msvc': 2.7.1
1049
-
'@tauri-apps/cli-win32-ia32-msvc': 2.7.1
1050
-
'@tauri-apps/cli-win32-x64-msvc': 2.7.1
1051
1052
-
'@tauri-apps/plugin-dialog@2.4.0':
1053
dependencies:
1054
-
'@tauri-apps/api': 2.8.0
1055
1056
-
'@tauri-apps/plugin-opener@2.4.0':
1057
dependencies:
1058
-
'@tauri-apps/api': 2.7.0
1059
1060
'@types/animejs@3.1.13': {}
1061
1062
'@types/babel__core@7.20.5':
1063
dependencies:
1064
-
'@babel/parser': 7.28.0
1065
-
'@babel/types': 7.28.2
1066
'@types/babel__generator': 7.27.0
1067
'@types/babel__template': 7.4.4
1068
-
'@types/babel__traverse': 7.20.7
1069
1070
'@types/babel__generator@7.27.0':
1071
dependencies:
1072
-
'@babel/types': 7.28.2
1073
1074
'@types/babel__template@7.4.4':
1075
dependencies:
1076
-
'@babel/parser': 7.28.0
1077
-
'@babel/types': 7.28.2
1078
1079
-
'@types/babel__traverse@7.20.7':
1080
dependencies:
1081
-
'@babel/types': 7.28.2
1082
1083
'@types/estree@1.0.8': {}
1084
1085
-
animejs@4.1.2: {}
1086
1087
-
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0):
1088
dependencies:
1089
-
'@babel/core': 7.28.0
1090
'@babel/helper-module-imports': 7.18.6
1091
-
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
1092
-
'@babel/types': 7.28.2
1093
html-entities: 2.3.3
1094
parse5: 7.3.0
1095
-
validate-html-nesting: 1.2.3
1096
1097
-
babel-preset-solid@1.9.6(@babel/core@7.28.0):
1098
dependencies:
1099
-
'@babel/core': 7.28.0
1100
-
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0)
1101
1102
-
browserslist@4.25.1:
1103
dependencies:
1104
-
caniuse-lite: 1.0.30001731
1105
-
electron-to-chromium: 1.5.192
1106
-
node-releases: 2.0.19
1107
-
update-browserslist-db: 1.1.3(browserslist@4.25.1)
1108
1109
-
caniuse-lite@1.0.30001731: {}
1110
1111
convert-source-map@2.0.0: {}
1112
1113
csstype@3.1.3: {}
1114
1115
-
debug@4.4.1:
1116
dependencies:
1117
ms: 2.1.3
1118
1119
-
electron-to-chromium@1.5.192: {}
1120
1121
entities@6.0.1: {}
1122
1123
-
esbuild@0.25.8:
1124
optionalDependencies:
1125
-
'@esbuild/aix-ppc64': 0.25.8
1126
-
'@esbuild/android-arm': 0.25.8
1127
-
'@esbuild/android-arm64': 0.25.8
1128
-
'@esbuild/android-x64': 0.25.8
1129
-
'@esbuild/darwin-arm64': 0.25.8
1130
-
'@esbuild/darwin-x64': 0.25.8
1131
-
'@esbuild/freebsd-arm64': 0.25.8
1132
-
'@esbuild/freebsd-x64': 0.25.8
1133
-
'@esbuild/linux-arm': 0.25.8
1134
-
'@esbuild/linux-arm64': 0.25.8
1135
-
'@esbuild/linux-ia32': 0.25.8
1136
-
'@esbuild/linux-loong64': 0.25.8
1137
-
'@esbuild/linux-mips64el': 0.25.8
1138
-
'@esbuild/linux-ppc64': 0.25.8
1139
-
'@esbuild/linux-riscv64': 0.25.8
1140
-
'@esbuild/linux-s390x': 0.25.8
1141
-
'@esbuild/linux-x64': 0.25.8
1142
-
'@esbuild/netbsd-arm64': 0.25.8
1143
-
'@esbuild/netbsd-x64': 0.25.8
1144
-
'@esbuild/openbsd-arm64': 0.25.8
1145
-
'@esbuild/openbsd-x64': 0.25.8
1146
-
'@esbuild/openharmony-arm64': 0.25.8
1147
-
'@esbuild/sunos-x64': 0.25.8
1148
-
'@esbuild/win32-arm64': 0.25.8
1149
-
'@esbuild/win32-ia32': 0.25.8
1150
-
'@esbuild/win32-x64': 0.25.8
1151
1152
escalade@3.2.0: {}
1153
1154
-
fdir@6.4.6(picomatch@4.0.3):
1155
optionalDependencies:
1156
picomatch: 4.0.3
1157
···
1182
1183
nanoid@3.3.11: {}
1184
1185
-
node-releases@2.0.19: {}
1186
1187
parse5@7.3.0:
1188
dependencies:
···
1198
picocolors: 1.1.1
1199
source-map-js: 1.2.1
1200
1201
-
rollup@4.46.1:
1202
dependencies:
1203
'@types/estree': 1.0.8
1204
optionalDependencies:
1205
-
'@rollup/rollup-android-arm-eabi': 4.46.1
1206
-
'@rollup/rollup-android-arm64': 4.46.1
1207
-
'@rollup/rollup-darwin-arm64': 4.46.1
1208
-
'@rollup/rollup-darwin-x64': 4.46.1
1209
-
'@rollup/rollup-freebsd-arm64': 4.46.1
1210
-
'@rollup/rollup-freebsd-x64': 4.46.1
1211
-
'@rollup/rollup-linux-arm-gnueabihf': 4.46.1
1212
-
'@rollup/rollup-linux-arm-musleabihf': 4.46.1
1213
-
'@rollup/rollup-linux-arm64-gnu': 4.46.1
1214
-
'@rollup/rollup-linux-arm64-musl': 4.46.1
1215
-
'@rollup/rollup-linux-loongarch64-gnu': 4.46.1
1216
-
'@rollup/rollup-linux-ppc64-gnu': 4.46.1
1217
-
'@rollup/rollup-linux-riscv64-gnu': 4.46.1
1218
-
'@rollup/rollup-linux-riscv64-musl': 4.46.1
1219
-
'@rollup/rollup-linux-s390x-gnu': 4.46.1
1220
-
'@rollup/rollup-linux-x64-gnu': 4.46.1
1221
-
'@rollup/rollup-linux-x64-musl': 4.46.1
1222
-
'@rollup/rollup-win32-arm64-msvc': 4.46.1
1223
-
'@rollup/rollup-win32-ia32-msvc': 4.46.1
1224
-
'@rollup/rollup-win32-x64-msvc': 4.46.1
1225
fsevents: 2.3.3
1226
1227
semver@6.3.1: {}
1228
1229
-
seroval-plugins@1.3.2(seroval@1.3.2):
1230
dependencies:
1231
seroval: 1.3.2
1232
1233
seroval@1.3.2: {}
1234
1235
-
solid-js@1.9.7:
1236
dependencies:
1237
csstype: 3.1.3
1238
seroval: 1.3.2
1239
-
seroval-plugins: 1.3.2(seroval@1.3.2)
1240
1241
-
solid-refresh@0.6.3(solid-js@1.9.7):
1242
dependencies:
1243
-
'@babel/generator': 7.28.0
1244
'@babel/helper-module-imports': 7.27.1
1245
-
'@babel/types': 7.28.2
1246
-
solid-js: 1.9.7
1247
transitivePeerDependencies:
1248
- supports-color
1249
1250
source-map-js@1.2.1: {}
1251
1252
-
tinyglobby@0.2.14:
1253
dependencies:
1254
-
fdir: 6.4.6(picomatch@4.0.3)
1255
picomatch: 4.0.3
1256
1257
typescript@5.6.3: {}
1258
1259
-
update-browserslist-db@1.1.3(browserslist@4.25.1):
1260
dependencies:
1261
-
browserslist: 4.25.1
1262
escalade: 3.2.0
1263
picocolors: 1.1.1
1264
1265
-
validate-html-nesting@1.2.3: {}
1266
-
1267
-
vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@6.3.5):
1268
dependencies:
1269
-
'@babel/core': 7.28.0
1270
'@types/babel__core': 7.20.5
1271
-
babel-preset-solid: 1.9.6(@babel/core@7.28.0)
1272
merge-anything: 5.1.7
1273
-
solid-js: 1.9.7
1274
-
solid-refresh: 0.6.3(solid-js@1.9.7)
1275
-
vite: 6.3.5
1276
-
vitefu: 1.1.1(vite@6.3.5)
1277
transitivePeerDependencies:
1278
- supports-color
1279
1280
-
vite@6.3.5:
1281
dependencies:
1282
-
esbuild: 0.25.8
1283
-
fdir: 6.4.6(picomatch@4.0.3)
1284
picomatch: 4.0.3
1285
postcss: 8.5.6
1286
-
rollup: 4.46.1
1287
-
tinyglobby: 0.2.14
1288
optionalDependencies:
1289
fsevents: 2.3.3
1290
1291
-
vitefu@1.1.1(vite@6.3.5):
1292
optionalDependencies:
1293
-
vite: 6.3.5
1294
1295
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/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/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>
+5
src/App.css
+5
src/App.css
+156
-55
src/App.tsx
+156
-55
src/App.tsx
···
1
-
import { 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, NodeIOResolveAnyTypes } from "./structs/node";
6
import { isPointInRect, isPointInRectApplyOffset, screenToWorldSpace } from "./utils/interections";
7
import { ControlBar } from "./components/ControlBar";
8
import { CanvasContextMenu } from "./ContextMenu/Canvas";
···
12
import { TabMenu } from "./components/TabMenu";
13
import { ConfirmationPopup } from "./components/ConfirmationPopup";
14
15
-
let App = () => {
16
-
// TODO: Delete selected node when delete key is pressed
17
-
// TODO: Keybind system
18
-
// TODO: Add undo / redo -ing
19
20
-
let [ selectedNode, setSelectedNode ] = createSignal<Node | null>(null);
21
22
let canvas!: HTMLCanvasElement;
23
let ctx: CanvasRenderingContext2D;
···
58
visible: false
59
}
60
61
-
onMount(() => {
62
-
NodeManager.Instance.HookTabChange(() => setSelectedNode(null));
63
64
ctx = canvas.getContext('2d')!;
65
···
102
}
103
104
if(clickedNode){
105
-
contextMenu.items = NodeContextMenu(clickedNode);
106
} else{
107
contextMenu.items = CanvasContextMenu;
108
}
···
111
contextMenu.visible = true;
112
}
113
114
canvas.onmousedown = ( e ) => {
115
if(
116
e.clientY < 60 ||
117
e.clientX < 220 ||
···
157
158
if(nodes){
159
nodes.map(node => {
160
-
node.selected = false;
161
-
162
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
163
e.clientX, e.clientY,
164
-
node.x, node.y, node.w, node.h
165
)){
166
node.outputs.map(( output, i ) => {
167
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
168
e.clientX, e.clientY,
169
-
node.x + (node.w - 30),
170
node.y + 50 + (30 * i),
171
20, 20
172
)){
173
output.index = i;
174
175
-
drawingTo = [ node.x + (node.w - 30), node.y + 50 + (30 * i) ];
176
drawingFrom = output;
177
178
isDrawing = true;
···
183
node.inputs.map(( input, i ) => {
184
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
185
e.clientX, e.clientY,
186
-
node.x + 10,
187
node.y + 50 + (30 * i),
188
20, 20
189
)){
···
213
}
214
215
movingNode = clickedNode;
216
-
217
-
if(clickedNode){
218
-
clickedNode.selected = true;
219
-
setSelectedNode(clickedNode);
220
-
}
221
222
isMouseDown = true;
223
mouseStartPos = [ e.clientX, e.clientY ];
224
}
225
226
canvas.onmousemove = ( e ) => {
227
if(isMouseDown){
228
if(isDrawing){
229
drawingTo = screenToWorldSpace(canvas, { x: offset[0], y: offset[1], scale }, e.clientX - 10 * scale, e.clientY - 10 * scale) as [ number, number ];
230
} else if(movingNode){
231
-
movingNode.x = movingNode.x - (mouseStartPos[0] - e.clientX) / scale;
232
-
movingNode.y = movingNode.y - (mouseStartPos[1] - e.clientY) / scale;
233
234
-
mouseStartPos = [ e.clientX, e.clientY ];
235
NodeManager.Instance.UpdateConfig();
236
} else{
237
-
offsetTarget = [ offsetTarget[0] - (mouseStartPos[0] - e.clientX) / scale, offsetTarget[1] - (mouseStartPos[1] - e.clientY) / scale ];
238
-
mouseStartPos = [ e.clientX, e.clientY ];
239
240
screenMoved = true;
241
}
···
279
280
canvas.onmouseup = ( e ) => {
281
let nodes = NodeManager.Instance.GetNodes();
282
283
if(nodes){
284
nodes.map(node => {
285
-
node.inputs.map(( input, i ) => {
286
-
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
287
-
e.clientX, e.clientY,
288
-
node.x + 10,
289
-
node.y + 50 + (30 * i),
290
-
20, 20
291
-
)){
292
-
if(isDrawing){
293
-
let fromType = NodeIOResolveAnyTypes(drawingFrom!);
294
-
let toType = NodeIOResolveAnyTypes(input);
295
296
-
if(
297
-
drawingFrom!.connections.indexOf(input) === -1 &&
298
-
(
299
-
toType === null ||
300
-
fromType === toType
301
-
)
302
-
){
303
-
drawingFrom!.connections.push(input);
304
-
input.connections.push(drawingFrom!);
305
306
-
NodeManager.Instance.UpdateConfig();
307
}
308
}
309
-
}
310
-
})
311
})
312
}
313
314
isDrawing = false;
315
isMouseDown = false;
316
}
317
318
requestAnimationFrame(update);
319
});
320
321
let update = () => {
322
if(stopRender)return;
323
-
324
scale = lerp(scale, targetScale, 0.25);
325
326
offset[0] = lerp(offset[0], offsetTarget[0], 0.5);
···
345
346
let isMouseDown = false;
347
let mouseStartPos = [ 0, 0 ];
348
349
let interval = setInterval(() => {
350
if(screenMoved){
···
354
}
355
}, 1000);
356
357
-
onCleanup(() => {
358
-
stopRender = true;
359
-
window.clearInterval(interval);
360
-
});
361
-
362
return (
363
<>
364
<ConfirmationPopup />
365
<TabMenu />
366
-
<ControlBar node={selectedNode} lockMovement={( lock ) => lockMovement = lock} />
367
<canvas ref={canvas}/>
368
</>
369
);
···
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";
···
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;
···
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
···
114
}
115
116
if(clickedNode){
117
+
contextMenu.items = NodeContextMenu(clickedNode, selectedNodes, setSelectedNodes);
118
} else{
119
contextMenu.items = CanvasContextMenu;
120
}
···
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 ||
···
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;
···
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
)){
···
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
}
···
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);
···
450
451
let isMouseDown = false;
452
let mouseStartPos = [ 0, 0 ];
453
+
let mouseMovePos = [ 0, 0 ];
454
455
let interval = setInterval(() => {
456
if(screenMoved){
···
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
);
+14
-2
src/ContextMenu/Node.tsx
+14
-2
src/ContextMenu/Node.tsx
···
1
import { NodeManager } from "../Mangers/NodeManager";
2
import { PositionInfo } from "../renderer";
3
import { Node } from "../structs/node";
4
5
-
export let NodeContextMenu = ( clickedNode: Node ) => [
6
{
7
text: "Delete Node",
8
clicked: ( _e: MouseEvent, _canvas: HTMLCanvasElement, _position: PositionInfo ) => {
···
18
})
19
})
20
21
-
// TODO: If node is currently selected, deselect it.
22
NodeManager.Instance.RemoveNode(clickedNode!)
23
},
24
hovered: false
···
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 ) => {
···
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
+109
-17
src/Mangers/NodeManager.tsx
+109
-17
src/Mangers/NodeManager.tsx
···
7
import { NodesByID } from "../Nodes/Nodes";
8
import { save } from "@tauri-apps/plugin-dialog";
9
import { ConfirmationManager } from "./ConfirmationManager";
10
11
export interface TabHashMap {
12
[details: string] : Tab;
···
22
23
constructor(){
24
NodeManager.Instance = this;
25
26
listen('load_new_tab', ( ev: any ) => {
27
-
this._loadFromConfig(ev.payload.path, ev.payload.graph);
28
-
})
29
}
30
31
32
private _tabUpdateHook: ( tabs: TabHashMap ) => void = () => {};
33
private _tabChangeHook: () => void = () => {};
34
35
-
public async AddTab( name: string ): Promise<Tab>{
36
let [ selected, setSelected ] = createSignal(false);
37
let [ needsSave, setNeedsSave ] = createSignal(false);
38
39
let tab: Tab = {
40
name: name,
41
-
id: await NodeManager.Instance.GetNewNodeId(),
42
nodes: [],
43
saveLocation: null,
44
···
48
needsSave,
49
setNeedsSave,
50
51
-
refuseSync: false
52
};
53
54
this._tabs[tab.id] = tab;
···
143
}
144
}
145
146
-
public async SaveTab( tab: Tab ){
147
let path =
148
-
tab.saveLocation ||
149
await save({ defaultPath: tab.name + '.macro', filters: [ { name: 'Macro Files', extensions: [ 'macro' ] } ] });
150
151
-
if(!path)return;
152
153
tab.saveLocation = path;
154
tab.setNeedsSave(false);
···
195
}
196
197
198
-
public UpdateConfig(){
199
if(!this._selectedTab)return;
200
let tab = this._tabs[this._selectedTab];
201
if(!tab)return;
202
203
-
if(tab.refuseSync)return;
204
-
invoke('sync_tab', { graph: this._generateTabGraph(tab.id)[0], id: tab.id });
205
206
-
tab.setNeedsSave(true);
207
}
208
209
-
private async _loadFromConfig( path: string, config: string ){
210
let json = JSON.parse(config);
211
212
if(
···
215
!json.graph
216
)return;
217
218
-
let tab = await this.AddTab(json.tab_name);
219
-
tab.refuseSync = true;
220
tab.saveLocation = path;
221
222
this._nodes = [];
···
247
let input = output.connections[k];
248
let node = this._nodes.find(x => x.id === input.node)!;
249
250
let realInput = node.inputs.find(x => x.index === input.index);
251
let realOutput = outputParentNode.outputs[j];
252
···
272
tab.setNeedsSave(false);
273
tab.nodes = this._nodes;
274
275
-
tab.refuseSync = false;
276
-
this.UpdateConfig();
277
}
278
279
private _generateTabGraph( tabId: string | null ): [ any, Tab | null ]{
···
289
let node = tab.nodes[i];
290
291
let nodeOutputs = [];
292
293
for (let j = 0; j < node.outputs.length; j++) {
294
let output = node.outputs[j];
···
305
})
306
}
307
308
nodesToSave.push({
309
name: node.name,
310
id: node.id,
311
typeId: node.typeId,
312
pos: [ node.x, node.y ],
313
outputs: nodeOutputs,
314
statics: node.statics
315
})
316
}
···
325
invoke('save_graph', { graph: JSON.stringify({
326
tab_name: tab.name,
327
version: await getVersion(),
328
graph: nodesToSave
329
}), path });
330
}
···
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;
···
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
···
117
needsSave,
118
setNeedsSave,
119
120
+
needSync: false
121
};
122
123
this._tabs[tab.id] = tab;
···
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);
···
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(
···
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 = [];
···
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
···
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 ]{
···
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];
···
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
}
···
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
}
+2
-1
src/Nodes/Conditional/IfEqual.tsx
+2
-1
src/Nodes/Conditional/IfEqual.tsx
+2
-1
src/Nodes/Conditional/IfFalse.tsx
+2
-1
src/Nodes/Conditional/IfFalse.tsx
+2
-1
src/Nodes/Conditional/IfTrue.tsx
+2
-1
src/Nodes/Conditional/IfTrue.tsx
+2
src/Nodes/Conditional.tsx
+2
src/Nodes/Conditional.tsx
+2
-1
src/Nodes/Debug.tsx
+2
-1
src/Nodes/Debug.tsx
+24
-3
src/Nodes/Nodes.tsx
+24
-3
src/Nodes/Nodes.tsx
···
1
import { Node, NodeStatic, NodeType } from "../structs/node";
2
3
import { NodeConditional } from "./Conditional";
4
import { NodeDebug } from "./Debug";
5
import { NodeOSCActions } from "./OSCActions";
6
import { NodeOSCTrigger } from "./OSCTrigger";
7
import { NodeStatics } from "./Statics";
8
9
export interface NodeDefinition{
10
isSingle: boolean,
11
name: string,
12
typeId?: string,
13
onStaticsUpdate?: ( node: Node ) => Promise<void>,
14
// build?: ( pos: [ number, number ], onStaticsUpdate: ( node: Node ) => void ) => Promise<Node>,
15
w?: number,
16
-
h?: number,
17
statics?: NodeStatic[],
18
inputs?: { name: string, type: NodeType }[],
19
outputs?: { name: string, type: NodeType }[],
···
25
[details: string] : NodeDefinition;
26
}
27
28
-
export let Nodes: NodeDefinition[] = [
29
NodeOSCTrigger,
30
NodeConditional,
31
NodeStatics,
32
NodeOSCActions,
33
-
NodeDebug
34
]
35
36
export let NodesByID: NodeDefinitionHashMap = {}
37
···
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 }[],
···
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
+2
-1
src/Nodes/OSCActions/Send Chatbox.tsx
+2
-1
src/Nodes/OSCActions/Send Chatbox.tsx
+2
src/Nodes/OSCActions.tsx
+2
src/Nodes/OSCActions.tsx
+27
-10
src/Nodes/OSCTrigger.tsx
+27
-10
src/Nodes/OSCTrigger.tsx
···
5
import { NodeDefinition } from "./Nodes";
6
7
export let NodeOSCTrigger: NodeDefinition = {
8
isSingle: true,
9
name: 'OSC Trigger',
10
typeId: 'osctrigger',
11
12
w: 200,
13
-
h: 50,
14
15
statics: [
16
{
···
39
}
40
}
41
42
-
node.outputs.map(output => {
43
-
output.connections.map(partner => {
44
-
partner.connections = partner.connections.filter(x => x != output);
45
-
})
46
-
})
47
-
node.outputs = [];
48
49
-
node.outputs.push({
50
name: 'Flow',
51
type: NodeType.Flow,
52
connections: [],
···
73
}
74
75
if(type){
76
-
node.outputs.push({
77
name: dat.desc === '' ? dat.type : dat.desc,
78
type: type,
79
connections: [],
···
83
}
84
});
85
86
-
node.h = 60 + (parameters.length + 1) * 30;
87
NodeManager.Instance.UpdateConfig();
88
}
89
};
···
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
{
···
40
}
41
}
42
43
+
let tempOutputs = [];
44
45
+
tempOutputs.push({
46
name: 'Flow',
47
type: NodeType.Flow,
48
connections: [],
···
69
}
70
71
if(type){
72
+
tempOutputs.push({
73
name: dat.desc === '' ? dat.type : dat.desc,
74
type: type,
75
connections: [],
···
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
+
}
+4
-3
src/Nodes/Statics/Int.tsx
+4
-3
src/Nodes/Statics/Int.tsx
···
2
import { NodeDefinition } from "../Nodes";
3
4
export let NodeStaticsInt: NodeDefinition = {
5
isSingle: true,
6
name: 'Int',
7
-
typeId: 'ifelse',
8
9
w: 200,
10
-
h: 85,
11
12
statics: [{
13
type: NodeType.Int,
14
name: 'Value',
15
-
value: null
16
}],
17
18
outputs: [{ name: "Int", type: NodeType.Int }],
···
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 }],
+3
-2
src/Nodes/Statics/String.tsx
+3
-2
src/Nodes/Statics/String.tsx
···
2
import { NodeDefinition } from "../Nodes";
3
4
export let NodeStaticsString: NodeDefinition = {
5
isSingle: true,
6
name: 'String',
7
typeId: 'staticstring',
8
9
w: 200,
10
-
h: 85,
11
12
statics: [{
13
type: NodeType.String,
14
name: 'Value',
15
-
value: null
16
}],
17
18
outputs: [{ name: "String", type: NodeType.String }],
···
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 }],
+5
-1
src/Nodes/Statics.tsx
+5
-1
src/Nodes/Statics.tsx
···
1
import { NodeDefinition } from "./Nodes";
2
3
import { NodeStaticsInt } from "./Statics/Int";
4
import { NodeStaticsString } from "./Statics/String";
5
6
export let NodeStatics: NodeDefinition = {
7
isSingle: false,
8
name: 'Statics',
9
items: [
10
NodeStaticsInt,
11
-
NodeStaticsString
12
]
13
}
···
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
}
+1
-1
src/components/ConfirmationPopup.tsx
+1
-1
src/components/ConfirmationPopup.tsx
+40
-4
src/components/ControlBar.tsx
+40
-4
src/components/ControlBar.tsx
···
9
import { NodeManager } from '../Mangers/NodeManager';
10
11
export interface ControlBarProps{
12
-
node: Accessor<Node | null>,
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()?.statics}>
20
{ ( item ) => {
21
let [ popupOpen, setPopupOpen ] = createSignal(false);
22
···
26
<Match when={item.type == NodeType.String}>
27
{ item.name }
28
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
29
30
</div>
31
</Match>
32
<Match when={item.type == NodeType.Int}>
33
{ item.name }
34
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
35
36
</div>
37
</Match>
38
<Match when={item.type == NodeType.Float}>
39
{ item.name }
40
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
41
42
</div>
43
</Match>
44
<Match when={item.type == NodeType.OSCAddress}>
···
52
return addresses.map(x => x.address).filter(x => x.toLowerCase().includes(text.toLowerCase()));
53
}}
54
change={( text ) => {
55
-
let node = props.node()!;
56
57
item.value = text;
58
node.onStaticsUpdate(node);
···
78
}}
79
value={item.value}
80
changed={( value ) => {
81
-
let node = props.node()!;
82
83
item.value = value;
84
node.onStaticsUpdate(node);
···
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
···
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}>
···
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);
···
114
}}
115
value={item.value}
116
changed={( value ) => {
117
+
let node = props.node()[0]!;
118
119
item.value = value;
120
node.onStaticsUpdate(node);
+23
src/components/ParameterList.css
+23
src/components/ParameterList.css
···
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
}
+12
-1
src/components/ParameterList.tsx
+12
-1
src/components/ParameterList.tsx
···
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()}>
+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
+
}
+31
src/components/TabMenu.css
+31
src/components/TabMenu.css
···
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;
···
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{
···
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
}
+69
-50
src/components/TabMenu.tsx
+69
-50
src/components/TabMenu.tsx
···
1
-
import { createSignal, For, onMount, Show } from 'solid-js';
2
import './TabMenu.css';
3
import { NodeManager } from '../Mangers/NodeManager';
4
import { Tab } from '../structs/Tab';
5
6
export let TabMenu = () => {
7
let [ tabImportOpen, setTabImportOpen ] = createSignal(false);
8
let [ tabs, setTabs ] = createSignal<Tab[]>([], { equals: false });
9
10
let closeTabImportMenu = () => {
11
window.removeEventListener('click', closeTabImportMenu);
···
17
});
18
19
return (
20
-
<div class="tab-menu">
21
-
<For each={Object.values(tabs())}>
22
-
{
23
-
tab =>
24
-
<div class={ tab.selected() ? 'tab-selected ' : 'tab' } onClick={() => {
25
-
NodeManager.Instance.SelectTab(tab.id);
26
-
}}>
27
-
<div class="tab-icon" onClick={async () => {
28
-
if(tab.selected()){
29
-
NodeManager.Instance.SaveTab(tab);
30
-
}
31
-
}}>
32
-
<Show when={tab.selected() && tab.needsSave()} fallback={
33
-
<img src="/assets/icons/pen-to-square-regular-full.svg" width="15" />
34
-
}>
35
-
<img src="/assets/icons/floppy-disk-solid-full.svg" width="15" />
36
-
</Show>
37
38
-
</div>
39
-
<div class="tab-meta" onDblClick={( e ) => {
40
-
let input = <input class="tab-meta-input" value={ e.target.innerHTML } /> as HTMLInputElement;
41
42
-
e.target.innerHTML = '';
43
-
e.target.appendChild(input);
44
45
-
input.select();
46
-
input.onchange = () => {
47
-
NodeManager.Instance.RenameTab(tab.id, input.value);
48
-
e.target.innerHTML = input.value;
49
-
}
50
-
}}>{ tab.name }</div>
51
-
<div class="tab-close" onClick={() => {
52
-
setTimeout(() => {
53
-
NodeManager.Instance.CloseTab(tab.id);
54
-
}, 50)
55
-
}}><img src="/assets/icons/xmark-solid-full.svg" width="12" /></div>
56
</div>
57
-
}
58
-
</For>
59
60
-
<div class="tab" onClick={() => {
61
-
NodeManager.Instance.AddTab("Untitled");
62
-
}} onContextMenu={( e ) => {
63
-
e.preventDefault();
64
-
setTabImportOpen(true);
65
-
66
-
window.addEventListener('click', closeTabImportMenu);
67
-
}}>
68
-
<div class="tab-new-dropdown" style={{ display: tabImportOpen() ? 'block' : 'none' }}>
69
-
<div class="tab">Import from file</div>
70
-
<div class="tab">Import from URL</div>
71
</div>
72
-
<div class="tab-icon"><img src="/assets/icons/plus-solid-full.svg" width="15" /></div>
73
-
<div class="tab-meta">New Tab</div>
74
</div>
75
-
</div>
76
)
77
}
···
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);
···
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
}
+11
src/components/TextInput.css
+11
src/components/TextInput.css
···
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;
+1
-1
src/index.tsx
+1
-1
src/index.tsx
+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
+
}
+69
-40
src/renderer.ts
+69
-40
src/renderer.ts
···
63
let nodeX = Math.round(node.x / 10) * 10;
64
let nodeY = Math.round(node.y / 10) * 10;
65
66
-
ctx.fillStyle = '#1f2129';
67
-
ctx.strokeStyle = node.selected ? '#004696ff' : '#fff5';
68
ctx.lineWidth = 5 * position.scale;
69
70
// Draw Node Box
···
74
node.w * position.scale,
75
node.h * position.scale,
76
10 * position.scale);
77
78
ctx.stroke();
79
ctx.fill();
80
81
// Draw Node Name
82
ctx.fillStyle = '#fff';
83
-
ctx.font = (25 * position.scale) + 'px Comic Mono';
84
ctx.textAlign = 'center';
85
86
ctx.fillText(node.name,
···
89
);
90
91
// Draw Inputs
92
-
ctx.font = (15 * position.scale) + 'px Comic Mono';
93
ctx.textAlign = 'left';
94
95
node.inputs.map(( input, i ) => {
96
ctx.fillStyle = NodeIOLinkColours(input);
97
-
ctx.fillRect(
98
-
(nodeX + 10 + startX + position.x) * position.scale,
99
-
(nodeY + 50 + (30 * i) + startY + position.y) * position.scale,
100
-
20 * position.scale, 20 * position.scale
101
-
)
102
103
ctx.fillText(input.name,
104
-
(nodeX + 35 + startX + position.x) * position.scale,
105
(nodeY + 53 + (30 * i) + startY + position.y) * position.scale,
106
)
107
})
···
111
112
node.outputs.map(( output, i ) => {
113
ctx.fillStyle = NodeIOLinkColours(output);
114
-
ctx.fillRect(
115
-
(nodeX + (node.w - 30) + startX + position.x) * position.scale,
116
-
(nodeY + 50 + (30 * i) + startY + position.y) * position.scale,
117
-
20 * position.scale, 20 * position.scale
118
-
)
119
120
ctx.fillText(output.name,
121
-
(nodeX + (node.w - 35) + startX + position.x) * position.scale,
122
(nodeY + 53 + (30 * i) + startY + position.y) * position.scale,
123
)
124
})
···
130
131
node.outputs.map(( output, i ) => {
132
output.connections.map(partner => {
133
-
ctx.strokeStyle = NodeIOLinkColours(output);
134
-
drawCurve(ctx,
135
-
(nodeX + (node.w - 30) + 10 + startX + position.x) * position.scale,
136
-
(nodeY + 50 + (30 * i) + 10 + startY + position.y) * position.scale,
137
-
((Math.round(partner.parent.x / 10) * 10) + 20 + startX + position.x) * position.scale,
138
-
((Math.round(partner.parent.y / 10) * 10) + 60 + (30 * partner.index) + startY + position.y) * position.scale,
139
-
);
140
ctx.stroke();
141
})
142
})
···
148
contextMenu: ContextMenu
149
) => {
150
if(contextMenu.visible){
151
-
ctx.font = '20px Arial';
152
ctx.textBaseline = 'top';
153
ctx.textAlign = 'left';
154
···
192
let startX = canvas.width / -2;
193
let startY = canvas.height / -2;
194
195
-
ctx.fillStyle = '#f00';
196
197
-
ctx.fillRect(
198
-
(drawingTo[0] + 10 + startX + position.x) * position.scale,
199
-
(drawingTo[1] + 10 + startY + position.y) * position.scale,
200
-
10, 10
201
-
);
202
203
-
ctx.fillRect(
204
-
(drawingFrom.parent.x + (drawingFrom.parent.w - 30) + 10 + startX + position.x) * position.scale,
205
-
(drawingFrom.parent.y + 50 + (30 * drawingFrom.index) + 10 + startY + position.y) * position.scale,
206
-
10, 10
207
-
);
208
209
ctx.strokeStyle = NodeIOLinkColours(drawingFrom);
210
drawCurve(ctx,
211
-
(drawingFrom.parent.x + (drawingFrom.parent.w - 30) + 10 + startX + position.x) * position.scale,
212
-
(drawingFrom.parent.y + 50 + (30 * drawingFrom.index) + 10 + startY + position.y) * position.scale,
213
(drawingTo[0] + 10 + startX + position.x) * position.scale,
214
(drawingTo[1] + 10 + startY + position.y) * position.scale,
215
);
···
239
) => {
240
ctx.fillStyle = '#fff';
241
242
-
ctx.font = '20px Arial';
243
ctx.textBaseline = 'middle';
244
ctx.textAlign = 'center';
245
246
let textX = lerp((canvas.width / -2) + 200, canvas.width / 2, 0.5);
247
let textY = lerp((canvas.height / -2) + 40, canvas.height / 2, 0.5);
248
249
-
ctx.font = '40px Arial';
250
ctx.fillText('Welcome to VRCMacros', textX, textY);
251
252
-
ctx.font = '20px Arial';
253
ctx.fillText('Create a new tab to get started!', textX, textY + 40);
254
}
255
···
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
···
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,
···
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
})
···
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
})
···
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
})
···
171
contextMenu: ContextMenu
172
) => {
173
if(contextMenu.visible){
174
+
ctx.font = '20px Rubik';
175
ctx.textBaseline = 'top';
176
ctx.textAlign = 'left';
177
···
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
);
···
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
+1
-1
src/structs/Tab.ts
+1
-1
src/structs/Tab.ts
+41
-3
src/structs/node.ts
+41
-3
src/structs/node.ts
···
20
this.typeId = node.typeId!;
21
this.x = pos[0];
22
this.y = pos[1];
23
-
this.w = node.w!;
24
-
this.h = node.h!;
25
26
this.inputs = node.inputs ? node.inputs.map(( x, indx ) => {
27
return {
···
43
}
44
}) : [];
45
46
this.selected = false;
47
this.statics = node.statics!,
48
this.onStaticsUpdate = node.onStaticsUpdate!;
49
}
50
}
51
52
export interface NodeIO{
···
74
ParameterList = 10
75
}
76
77
export let NodeIOResolveAnyTypes = ( nodeio: NodeIO ): NodeType | null => {
78
if(nodeio.type > 0 && nodeio.type < 6){
79
// It's a base type
···
105
return null;
106
}
107
108
-
export let NodeIOLinkColours = ( nodeio: NodeIO ) => {
109
let cols: any = {
110
1: '#ffff9f',
111
2: '#cda0cb',
···
115
}
116
117
let type = NodeIOResolveAnyTypes(nodeio);
118
return type ? cols[type] : '#fff5';
119
}
120
···
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 {
···
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{
···
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
···
130
return null;
131
}
132
133
+
export let NodeIOLinkColours = ( nodeio: NodeIO, output?: NodeIO ) => {
134
let cols: any = {
135
1: '#ffff9f',
136
2: '#cda0cb',
···
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
+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
+
}
+1221
-703
src-tauri/Cargo.lock
+1221
-703
src-tauri/Cargo.lock
···
7
version = "0.1.0"
8
dependencies = [
9
"anyhow",
10
"dirs",
11
"flate2",
12
"serde",
13
"serde_json",
14
"tauri",
15
"tauri-build",
16
"tauri-plugin-dialog",
17
"tauri-plugin-opener",
18
"tokio",
19
]
20
21
[[package]]
22
-
name = "addr2line"
23
-
version = "0.24.2"
24
-
source = "registry+https://github.com/rust-lang/crates.io-index"
25
-
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
26
-
dependencies = [
27
-
"gimli",
28
-
]
29
-
30
-
[[package]]
31
name = "adler2"
32
version = "2.0.1"
33
source = "registry+https://github.com/rust-lang/crates.io-index"
···
35
36
[[package]]
37
name = "aho-corasick"
38
-
version = "1.1.3"
39
source = "registry+https://github.com/rust-lang/crates.io-index"
40
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
41
dependencies = [
42
"memchr",
43
]
···
58
]
59
60
[[package]]
61
-
name = "android-tzdata"
62
-
version = "0.1.1"
63
-
source = "registry+https://github.com/rust-lang/crates.io-index"
64
-
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
65
-
66
-
[[package]]
67
name = "android_system_properties"
68
version = "0.1.5"
69
source = "registry+https://github.com/rust-lang/crates.io-index"
···
74
75
[[package]]
76
name = "anyhow"
77
-
version = "1.0.99"
78
source = "registry+https://github.com/rust-lang/crates.io-index"
79
-
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
80
81
[[package]]
82
name = "ashpd"
···
125
126
[[package]]
127
name = "async-executor"
128
-
version = "1.13.2"
129
source = "registry+https://github.com/rust-lang/crates.io-index"
130
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
131
dependencies = [
132
"async-task",
133
"concurrent-queue",
···
139
140
[[package]]
141
name = "async-io"
142
-
version = "2.5.0"
143
source = "registry+https://github.com/rust-lang/crates.io-index"
144
-
checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
145
dependencies = [
146
-
"async-lock",
147
"cfg-if",
148
"concurrent-queue",
149
"futures-io",
150
"futures-lite",
151
"parking",
152
"polling",
153
-
"rustix",
154
"slab",
155
-
"windows-sys 0.60.2",
156
]
157
158
[[package]]
159
name = "async-lock"
160
-
version = "3.4.0"
161
source = "registry+https://github.com/rust-lang/crates.io-index"
162
-
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
163
dependencies = [
164
"event-listener",
165
"event-listener-strategy",
···
168
169
[[package]]
170
name = "async-process"
171
-
version = "2.4.0"
172
source = "registry+https://github.com/rust-lang/crates.io-index"
173
-
checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
174
dependencies = [
175
"async-channel",
176
"async-io",
···
181
"cfg-if",
182
"event-listener",
183
"futures-lite",
184
-
"rustix",
185
]
186
187
[[package]]
···
192
dependencies = [
193
"proc-macro2",
194
"quote",
195
-
"syn 2.0.104",
196
]
197
198
[[package]]
199
name = "async-signal"
200
-
version = "0.2.12"
201
source = "registry+https://github.com/rust-lang/crates.io-index"
202
-
checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
203
dependencies = [
204
"async-io",
205
"async-lock",
···
207
"cfg-if",
208
"futures-core",
209
"futures-io",
210
-
"rustix",
211
"signal-hook-registry",
212
"slab",
213
-
"windows-sys 0.60.2",
214
]
215
216
[[package]]
···
221
222
[[package]]
223
name = "async-trait"
224
-
version = "0.1.88"
225
source = "registry+https://github.com/rust-lang/crates.io-index"
226
-
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
227
dependencies = [
228
"proc-macro2",
229
"quote",
230
-
"syn 2.0.104",
231
]
232
233
[[package]]
···
266
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
267
268
[[package]]
269
-
name = "backtrace"
270
-
version = "0.3.75"
271
-
source = "registry+https://github.com/rust-lang/crates.io-index"
272
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
273
-
dependencies = [
274
-
"addr2line",
275
-
"cfg-if",
276
-
"libc",
277
-
"miniz_oxide",
278
-
"object",
279
-
"rustc-demangle",
280
-
"windows-targets 0.52.6",
281
-
]
282
-
283
-
[[package]]
284
name = "base64"
285
version = "0.21.7"
286
source = "registry+https://github.com/rust-lang/crates.io-index"
···
300
301
[[package]]
302
name = "bitflags"
303
-
version = "2.9.1"
304
source = "registry+https://github.com/rust-lang/crates.io-index"
305
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
306
dependencies = [
307
-
"serde",
308
]
309
310
[[package]]
···
327
328
[[package]]
329
name = "block2"
330
-
version = "0.6.1"
331
source = "registry+https://github.com/rust-lang/crates.io-index"
332
-
checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
333
dependencies = [
334
-
"objc2 0.6.1",
335
]
336
337
[[package]]
···
349
350
[[package]]
351
name = "brotli"
352
-
version = "8.0.1"
353
source = "registry+https://github.com/rust-lang/crates.io-index"
354
-
checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
355
dependencies = [
356
"alloc-no-stdlib",
357
"alloc-stdlib",
···
376
377
[[package]]
378
name = "bytemuck"
379
-
version = "1.23.1"
380
source = "registry+https://github.com/rust-lang/crates.io-index"
381
-
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
382
383
[[package]]
384
name = "byteorder"
···
387
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
388
389
[[package]]
390
name = "bytes"
391
version = "1.10.1"
392
source = "registry+https://github.com/rust-lang/crates.io-index"
···
401
source = "registry+https://github.com/rust-lang/crates.io-index"
402
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
403
dependencies = [
404
-
"bitflags 2.9.1",
405
"cairo-sys-rs",
406
"glib",
407
"libc",
···
422
423
[[package]]
424
name = "camino"
425
-
version = "1.1.10"
426
source = "registry+https://github.com/rust-lang/crates.io-index"
427
-
checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
428
dependencies = [
429
-
"serde",
430
]
431
432
[[package]]
···
449
"semver",
450
"serde",
451
"serde_json",
452
-
"thiserror 2.0.12",
453
]
454
455
[[package]]
···
459
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
460
dependencies = [
461
"serde",
462
-
"toml 0.9.3",
463
]
464
465
[[package]]
466
name = "cc"
467
-
version = "1.2.30"
468
source = "registry+https://github.com/rust-lang/crates.io-index"
469
-
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
470
dependencies = [
471
"shlex",
472
]
473
···
500
501
[[package]]
502
name = "cfg-if"
503
-
version = "1.0.1"
504
source = "registry+https://github.com/rust-lang/crates.io-index"
505
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
506
507
[[package]]
508
name = "cfg_aliases"
···
512
513
[[package]]
514
name = "chrono"
515
-
version = "0.4.41"
516
source = "registry+https://github.com/rust-lang/crates.io-index"
517
-
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
518
dependencies = [
519
-
"android-tzdata",
520
"iana-time-zone",
521
"num-traits",
522
"serde",
523
-
"windows-link",
524
]
525
526
[[package]]
···
580
source = "registry+https://github.com/rust-lang/crates.io-index"
581
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
582
dependencies = [
583
-
"bitflags 2.9.1",
584
"core-foundation",
585
"core-graphics-types",
586
"foreign-types",
···
593
source = "registry+https://github.com/rust-lang/crates.io-index"
594
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
595
dependencies = [
596
-
"bitflags 2.9.1",
597
"core-foundation",
598
"libc",
599
]
···
632
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
633
634
[[package]]
635
name = "crypto-common"
636
version = "0.1.6"
637
source = "registry+https://github.com/rust-lang/crates.io-index"
···
665
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
666
dependencies = [
667
"quote",
668
-
"syn 2.0.104",
669
]
670
671
[[package]]
···
675
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
676
dependencies = [
677
"quote",
678
-
"syn 2.0.104",
679
]
680
681
[[package]]
682
name = "darling"
683
-
version = "0.20.11"
684
source = "registry+https://github.com/rust-lang/crates.io-index"
685
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
686
dependencies = [
687
"darling_core",
688
"darling_macro",
···
690
691
[[package]]
692
name = "darling_core"
693
-
version = "0.20.11"
694
source = "registry+https://github.com/rust-lang/crates.io-index"
695
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
696
dependencies = [
697
"fnv",
698
"ident_case",
699
"proc-macro2",
700
"quote",
701
"strsim",
702
-
"syn 2.0.104",
703
]
704
705
[[package]]
706
name = "darling_macro"
707
-
version = "0.20.11"
708
source = "registry+https://github.com/rust-lang/crates.io-index"
709
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
710
dependencies = [
711
"darling_core",
712
"quote",
713
-
"syn 2.0.104",
714
]
715
716
[[package]]
717
name = "deranged"
718
-
version = "0.4.0"
719
source = "registry+https://github.com/rust-lang/crates.io-index"
720
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
721
dependencies = [
722
"powerfmt",
723
-
"serde",
724
]
725
726
[[package]]
···
733
"proc-macro2",
734
"quote",
735
"rustc_version",
736
-
"syn 2.0.104",
737
]
738
739
[[package]]
···
764
"libc",
765
"option-ext",
766
"redox_users",
767
-
"windows-sys 0.60.2",
768
]
769
770
[[package]]
···
779
source = "registry+https://github.com/rust-lang/crates.io-index"
780
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
781
dependencies = [
782
-
"bitflags 2.9.1",
783
-
"block2 0.6.1",
784
"libc",
785
-
"objc2 0.6.1",
786
]
787
788
[[package]]
···
793
dependencies = [
794
"proc-macro2",
795
"quote",
796
-
"syn 2.0.104",
797
]
798
799
[[package]]
···
802
source = "registry+https://github.com/rust-lang/crates.io-index"
803
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
804
dependencies = [
805
-
"libloading",
806
]
807
808
[[package]]
809
name = "dlopen2"
810
-
version = "0.7.0"
811
source = "registry+https://github.com/rust-lang/crates.io-index"
812
-
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
813
dependencies = [
814
"dlopen2_derive",
815
"libc",
···
825
dependencies = [
826
"proc-macro2",
827
"quote",
828
-
"syn 2.0.104",
829
]
830
831
[[package]]
···
872
873
[[package]]
874
name = "embed-resource"
875
-
version = "3.0.5"
876
source = "registry+https://github.com/rust-lang/crates.io-index"
877
-
checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38"
878
dependencies = [
879
"cc",
880
"memchr",
881
"rustc_version",
882
-
"toml 0.9.3",
883
"vswhom",
884
"winreg",
885
]
···
897
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
898
899
[[package]]
900
name = "enumflags2"
901
version = "0.7.12"
902
source = "registry+https://github.com/rust-lang/crates.io-index"
···
914
dependencies = [
915
"proc-macro2",
916
"quote",
917
-
"syn 2.0.104",
918
]
919
920
[[package]]
···
925
926
[[package]]
927
name = "erased-serde"
928
-
version = "0.4.6"
929
source = "registry+https://github.com/rust-lang/crates.io-index"
930
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
931
dependencies = [
932
"serde",
933
"typeid",
934
]
935
936
[[package]]
937
name = "errno"
938
-
version = "0.3.13"
939
source = "registry+https://github.com/rust-lang/crates.io-index"
940
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
941
dependencies = [
942
"libc",
943
-
"windows-sys 0.60.2",
944
]
945
946
[[package]]
947
name = "event-listener"
948
-
version = "5.4.0"
949
source = "registry+https://github.com/rust-lang/crates.io-index"
950
-
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
951
dependencies = [
952
"concurrent-queue",
953
"parking",
···
971
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
972
973
[[package]]
974
name = "fdeflate"
975
version = "0.3.7"
976
source = "registry+https://github.com/rust-lang/crates.io-index"
···
990
]
991
992
[[package]]
993
name = "flate2"
994
-
version = "1.1.2"
995
source = "registry+https://github.com/rust-lang/crates.io-index"
996
-
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
997
dependencies = [
998
"crc32fast",
999
"miniz_oxide",
···
1006
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1007
1008
[[package]]
1009
name = "foreign-types"
1010
version = "0.5.0"
1011
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1023
dependencies = [
1024
"proc-macro2",
1025
"quote",
1026
-
"syn 2.0.104",
1027
]
1028
1029
[[package]]
···
1034
1035
[[package]]
1036
name = "form_urlencoded"
1037
-
version = "1.2.1"
1038
source = "registry+https://github.com/rust-lang/crates.io-index"
1039
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
1040
dependencies = [
1041
"percent-encoding",
1042
]
···
1085
1086
[[package]]
1087
name = "futures-lite"
1088
-
version = "2.6.0"
1089
source = "registry+https://github.com/rust-lang/crates.io-index"
1090
-
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
1091
dependencies = [
1092
"fastrand",
1093
"futures-core",
···
1104
dependencies = [
1105
"proc-macro2",
1106
"quote",
1107
-
"syn 2.0.104",
1108
]
1109
1110
[[package]]
···
1246
1247
[[package]]
1248
name = "generic-array"
1249
-
version = "0.14.7"
1250
source = "registry+https://github.com/rust-lang/crates.io-index"
1251
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1252
dependencies = [
1253
"typenum",
1254
"version_check",
1255
]
1256
1257
[[package]]
···
1278
1279
[[package]]
1280
name = "getrandom"
1281
-
version = "0.3.3"
1282
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1284
dependencies = [
1285
"cfg-if",
1286
"libc",
1287
"r-efi",
1288
-
"wasi 0.14.2+wasi-0.2.4",
1289
]
1290
-
1291
-
[[package]]
1292
-
name = "gimli"
1293
-
version = "0.31.1"
1294
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1295
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1296
1297
[[package]]
1298
name = "gio"
···
1332
source = "registry+https://github.com/rust-lang/crates.io-index"
1333
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1334
dependencies = [
1335
-
"bitflags 2.9.1",
1336
"futures-channel",
1337
"futures-core",
1338
"futures-executor",
···
1356
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1357
dependencies = [
1358
"heck 0.4.1",
1359
-
"proc-macro-crate 2.0.0",
1360
"proc-macro-error",
1361
"proc-macro2",
1362
"quote",
1363
-
"syn 2.0.104",
1364
]
1365
1366
[[package]]
···
1375
1376
[[package]]
1377
name = "glob"
1378
-
version = "0.3.2"
1379
source = "registry+https://github.com/rust-lang/crates.io-index"
1380
-
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
1381
1382
[[package]]
1383
name = "gobject-sys"
···
1439
"proc-macro-error",
1440
"proc-macro2",
1441
"quote",
1442
-
"syn 2.0.104",
1443
]
1444
1445
[[package]]
···
1450
1451
[[package]]
1452
name = "hashbrown"
1453
-
version = "0.15.4"
1454
source = "registry+https://github.com/rust-lang/crates.io-index"
1455
-
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
1456
1457
[[package]]
1458
name = "heck"
···
1532
1533
[[package]]
1534
name = "hyper"
1535
-
version = "1.6.0"
1536
source = "registry+https://github.com/rust-lang/crates.io-index"
1537
-
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1538
dependencies = [
1539
"bytes",
1540
"futures-channel",
1541
-
"futures-util",
1542
"http",
1543
"http-body",
1544
"httparse",
1545
"itoa",
1546
"pin-project-lite",
1547
"smallvec",
1548
"tokio",
1549
"want",
···
1551
1552
[[package]]
1553
name = "hyper-util"
1554
-
version = "0.1.16"
1555
source = "registry+https://github.com/rust-lang/crates.io-index"
1556
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1557
dependencies = [
1558
"base64 0.22.1",
1559
"bytes",
···
1575
1576
[[package]]
1577
name = "iana-time-zone"
1578
-
version = "0.1.63"
1579
source = "registry+https://github.com/rust-lang/crates.io-index"
1580
-
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1581
dependencies = [
1582
"android_system_properties",
1583
"core-foundation-sys",
···
1585
"js-sys",
1586
"log",
1587
"wasm-bindgen",
1588
-
"windows-core",
1589
]
1590
1591
[[package]]
···
1604
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1605
dependencies = [
1606
"byteorder",
1607
-
"png",
1608
]
1609
1610
[[package]]
1611
name = "icu_collections"
1612
-
version = "2.0.0"
1613
source = "registry+https://github.com/rust-lang/crates.io-index"
1614
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1615
dependencies = [
1616
"displaydoc",
1617
"potential_utf",
···
1622
1623
[[package]]
1624
name = "icu_locale_core"
1625
-
version = "2.0.0"
1626
source = "registry+https://github.com/rust-lang/crates.io-index"
1627
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1628
dependencies = [
1629
"displaydoc",
1630
"litemap",
···
1635
1636
[[package]]
1637
name = "icu_normalizer"
1638
-
version = "2.0.0"
1639
source = "registry+https://github.com/rust-lang/crates.io-index"
1640
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1641
dependencies = [
1642
-
"displaydoc",
1643
"icu_collections",
1644
"icu_normalizer_data",
1645
"icu_properties",
···
1650
1651
[[package]]
1652
name = "icu_normalizer_data"
1653
-
version = "2.0.0"
1654
source = "registry+https://github.com/rust-lang/crates.io-index"
1655
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1656
1657
[[package]]
1658
name = "icu_properties"
1659
-
version = "2.0.1"
1660
source = "registry+https://github.com/rust-lang/crates.io-index"
1661
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1662
dependencies = [
1663
-
"displaydoc",
1664
"icu_collections",
1665
"icu_locale_core",
1666
"icu_properties_data",
1667
"icu_provider",
1668
-
"potential_utf",
1669
"zerotrie",
1670
"zerovec",
1671
]
1672
1673
[[package]]
1674
name = "icu_properties_data"
1675
-
version = "2.0.1"
1676
source = "registry+https://github.com/rust-lang/crates.io-index"
1677
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1678
1679
[[package]]
1680
name = "icu_provider"
1681
-
version = "2.0.0"
1682
source = "registry+https://github.com/rust-lang/crates.io-index"
1683
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1684
dependencies = [
1685
"displaydoc",
1686
"icu_locale_core",
1687
-
"stable_deref_trait",
1688
-
"tinystr",
1689
"writeable",
1690
"yoke",
1691
"zerofrom",
···
1701
1702
[[package]]
1703
name = "idna"
1704
-
version = "1.0.3"
1705
source = "registry+https://github.com/rust-lang/crates.io-index"
1706
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
1707
dependencies = [
1708
"idna_adapter",
1709
"smallvec",
···
1721
]
1722
1723
[[package]]
1724
name = "indexmap"
1725
version = "1.9.3"
1726
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1733
1734
[[package]]
1735
name = "indexmap"
1736
-
version = "2.10.0"
1737
source = "registry+https://github.com/rust-lang/crates.io-index"
1738
-
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
1739
dependencies = [
1740
"equivalent",
1741
-
"hashbrown 0.15.4",
1742
"serde",
1743
]
1744
1745
[[package]]
···
1752
]
1753
1754
[[package]]
1755
-
name = "io-uring"
1756
-
version = "0.7.9"
1757
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1758
-
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
1759
-
dependencies = [
1760
-
"bitflags 2.9.1",
1761
-
"cfg-if",
1762
-
"libc",
1763
-
]
1764
-
1765
-
[[package]]
1766
name = "ipnet"
1767
version = "2.11.0"
1768
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1770
1771
[[package]]
1772
name = "iri-string"
1773
-
version = "0.7.8"
1774
source = "registry+https://github.com/rust-lang/crates.io-index"
1775
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1776
dependencies = [
1777
"memchr",
1778
"serde",
···
1850
1851
[[package]]
1852
name = "js-sys"
1853
-
version = "0.3.77"
1854
source = "registry+https://github.com/rust-lang/crates.io-index"
1855
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1856
dependencies = [
1857
"once_cell",
1858
"wasm-bindgen",
···
1886
source = "registry+https://github.com/rust-lang/crates.io-index"
1887
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
1888
dependencies = [
1889
-
"bitflags 2.9.1",
1890
"serde",
1891
"unicode-segmentation",
1892
]
···
1899
dependencies = [
1900
"cssparser",
1901
"html5ever",
1902
-
"indexmap 2.10.0",
1903
"selectors",
1904
]
1905
···
1929
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
1930
dependencies = [
1931
"gtk-sys",
1932
-
"libloading",
1933
"once_cell",
1934
]
1935
1936
[[package]]
1937
name = "libc"
1938
-
version = "0.2.174"
1939
source = "registry+https://github.com/rust-lang/crates.io-index"
1940
-
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
1941
1942
[[package]]
1943
name = "libloading"
···
1950
]
1951
1952
[[package]]
1953
name = "libredox"
1954
-
version = "0.1.8"
1955
source = "registry+https://github.com/rust-lang/crates.io-index"
1956
-
checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7"
1957
dependencies = [
1958
-
"bitflags 2.9.1",
1959
"libc",
1960
]
1961
1962
[[package]]
1963
name = "linux-raw-sys"
1964
-
version = "0.9.4"
1965
source = "registry+https://github.com/rust-lang/crates.io-index"
1966
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
1967
1968
[[package]]
1969
name = "litemap"
1970
-
version = "0.8.0"
1971
source = "registry+https://github.com/rust-lang/crates.io-index"
1972
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1973
1974
[[package]]
1975
name = "lock_api"
1976
-
version = "0.4.13"
1977
source = "registry+https://github.com/rust-lang/crates.io-index"
1978
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
1979
dependencies = [
1980
-
"autocfg",
1981
"scopeguard",
1982
]
1983
1984
[[package]]
1985
name = "log"
1986
-
version = "0.4.27"
1987
source = "registry+https://github.com/rust-lang/crates.io-index"
1988
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
1989
1990
[[package]]
1991
name = "mac"
···
2015
dependencies = [
2016
"proc-macro2",
2017
"quote",
2018
-
"syn 2.0.104",
2019
]
2020
2021
[[package]]
···
2026
2027
[[package]]
2028
name = "memchr"
2029
-
version = "2.7.5"
2030
source = "registry+https://github.com/rust-lang/crates.io-index"
2031
-
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
2032
2033
[[package]]
2034
name = "memoffset"
···
2046
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2047
2048
[[package]]
2049
name = "miniz_oxide"
2050
version = "0.8.9"
2051
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2057
2058
[[package]]
2059
name = "mio"
2060
-
version = "1.0.4"
2061
source = "registry+https://github.com/rust-lang/crates.io-index"
2062
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2063
dependencies = [
2064
"libc",
2065
"wasi 0.11.1+wasi-snapshot-preview1",
2066
-
"windows-sys 0.59.0",
2067
]
2068
2069
[[package]]
2070
name = "muda"
2071
-
version = "0.17.0"
2072
source = "registry+https://github.com/rust-lang/crates.io-index"
2073
-
checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988"
2074
dependencies = [
2075
"crossbeam-channel",
2076
"dpi",
2077
"gtk",
2078
"keyboard-types",
2079
-
"objc2 0.6.1",
2080
"objc2-app-kit",
2081
"objc2-core-foundation",
2082
-
"objc2-foundation 0.3.1",
2083
"once_cell",
2084
-
"png",
2085
"serde",
2086
-
"thiserror 2.0.12",
2087
-
"windows-sys 0.59.0",
2088
]
2089
2090
[[package]]
···
2093
source = "registry+https://github.com/rust-lang/crates.io-index"
2094
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2095
dependencies = [
2096
-
"bitflags 2.9.1",
2097
"jni-sys",
2098
"log",
2099
"ndk-sys",
···
2129
source = "registry+https://github.com/rust-lang/crates.io-index"
2130
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2131
dependencies = [
2132
-
"bitflags 2.9.1",
2133
"cfg-if",
2134
"cfg_aliases",
2135
"libc",
···
2143
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2144
2145
[[package]]
2146
name = "num-conv"
2147
version = "0.1.0"
2148
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2159
2160
[[package]]
2161
name = "num_enum"
2162
-
version = "0.7.4"
2163
source = "registry+https://github.com/rust-lang/crates.io-index"
2164
-
checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2165
dependencies = [
2166
"num_enum_derive",
2167
"rustversion",
···
2169
2170
[[package]]
2171
name = "num_enum_derive"
2172
-
version = "0.7.4"
2173
source = "registry+https://github.com/rust-lang/crates.io-index"
2174
-
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2175
dependencies = [
2176
-
"proc-macro-crate 3.3.0",
2177
"proc-macro2",
2178
"quote",
2179
-
"syn 2.0.104",
2180
]
2181
2182
[[package]]
···
2197
2198
[[package]]
2199
name = "objc2"
2200
-
version = "0.6.1"
2201
source = "registry+https://github.com/rust-lang/crates.io-index"
2202
-
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
2203
dependencies = [
2204
"objc2-encode",
2205
"objc2-exception-helper",
···
2207
2208
[[package]]
2209
name = "objc2-app-kit"
2210
-
version = "0.3.1"
2211
source = "registry+https://github.com/rust-lang/crates.io-index"
2212
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2213
dependencies = [
2214
-
"bitflags 2.9.1",
2215
-
"block2 0.6.1",
2216
"libc",
2217
-
"objc2 0.6.1",
2218
"objc2-cloud-kit",
2219
"objc2-core-data",
2220
"objc2-core-foundation",
2221
"objc2-core-graphics",
2222
"objc2-core-image",
2223
-
"objc2-foundation 0.3.1",
2224
-
"objc2-quartz-core 0.3.1",
2225
]
2226
2227
[[package]]
2228
name = "objc2-cloud-kit"
2229
-
version = "0.3.1"
2230
source = "registry+https://github.com/rust-lang/crates.io-index"
2231
-
checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d"
2232
dependencies = [
2233
-
"bitflags 2.9.1",
2234
-
"objc2 0.6.1",
2235
-
"objc2-foundation 0.3.1",
2236
]
2237
2238
[[package]]
2239
name = "objc2-core-data"
2240
-
version = "0.3.1"
2241
source = "registry+https://github.com/rust-lang/crates.io-index"
2242
-
checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d"
2243
dependencies = [
2244
-
"bitflags 2.9.1",
2245
-
"objc2 0.6.1",
2246
-
"objc2-foundation 0.3.1",
2247
]
2248
2249
[[package]]
2250
name = "objc2-core-foundation"
2251
-
version = "0.3.1"
2252
source = "registry+https://github.com/rust-lang/crates.io-index"
2253
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2254
dependencies = [
2255
-
"bitflags 2.9.1",
2256
"dispatch2",
2257
-
"objc2 0.6.1",
2258
]
2259
2260
[[package]]
2261
name = "objc2-core-graphics"
2262
-
version = "0.3.1"
2263
source = "registry+https://github.com/rust-lang/crates.io-index"
2264
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2265
dependencies = [
2266
-
"bitflags 2.9.1",
2267
"dispatch2",
2268
-
"objc2 0.6.1",
2269
"objc2-core-foundation",
2270
"objc2-io-surface",
2271
]
2272
2273
[[package]]
2274
name = "objc2-core-image"
2275
-
version = "0.3.1"
2276
source = "registry+https://github.com/rust-lang/crates.io-index"
2277
-
checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e"
2278
dependencies = [
2279
-
"objc2 0.6.1",
2280
-
"objc2-foundation 0.3.1",
2281
]
2282
2283
[[package]]
···
2301
source = "registry+https://github.com/rust-lang/crates.io-index"
2302
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2303
dependencies = [
2304
-
"bitflags 2.9.1",
2305
"block2 0.5.1",
2306
"libc",
2307
"objc2 0.5.2",
···
2309
2310
[[package]]
2311
name = "objc2-foundation"
2312
-
version = "0.3.1"
2313
source = "registry+https://github.com/rust-lang/crates.io-index"
2314
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
2315
dependencies = [
2316
-
"bitflags 2.9.1",
2317
-
"block2 0.6.1",
2318
"libc",
2319
-
"objc2 0.6.1",
2320
"objc2-core-foundation",
2321
]
2322
2323
[[package]]
2324
name = "objc2-io-surface"
2325
-
version = "0.3.1"
2326
source = "registry+https://github.com/rust-lang/crates.io-index"
2327
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
2328
dependencies = [
2329
-
"bitflags 2.9.1",
2330
-
"objc2 0.6.1",
2331
"objc2-core-foundation",
2332
]
2333
···
2337
source = "registry+https://github.com/rust-lang/crates.io-index"
2338
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2339
dependencies = [
2340
-
"bitflags 2.9.1",
2341
"block2 0.5.1",
2342
"objc2 0.5.2",
2343
"objc2-foundation 0.2.2",
···
2349
source = "registry+https://github.com/rust-lang/crates.io-index"
2350
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2351
dependencies = [
2352
-
"bitflags 2.9.1",
2353
"block2 0.5.1",
2354
"objc2 0.5.2",
2355
"objc2-foundation 0.2.2",
···
2358
2359
[[package]]
2360
name = "objc2-quartz-core"
2361
-
version = "0.3.1"
2362
source = "registry+https://github.com/rust-lang/crates.io-index"
2363
-
checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5"
2364
dependencies = [
2365
-
"bitflags 2.9.1",
2366
-
"objc2 0.6.1",
2367
-
"objc2-foundation 0.3.1",
2368
]
2369
2370
[[package]]
2371
-
name = "objc2-ui-kit"
2372
-
version = "0.3.1"
2373
source = "registry+https://github.com/rust-lang/crates.io-index"
2374
-
checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed"
2375
dependencies = [
2376
-
"bitflags 2.9.1",
2377
-
"objc2 0.6.1",
2378
"objc2-core-foundation",
2379
-
"objc2-foundation 0.3.1",
2380
]
2381
2382
[[package]]
2383
-
name = "objc2-web-kit"
2384
-
version = "0.3.1"
2385
source = "registry+https://github.com/rust-lang/crates.io-index"
2386
-
checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad"
2387
dependencies = [
2388
-
"bitflags 2.9.1",
2389
-
"block2 0.6.1",
2390
-
"objc2 0.6.1",
2391
-
"objc2-app-kit",
2392
"objc2-core-foundation",
2393
-
"objc2-foundation 0.3.1",
2394
]
2395
2396
[[package]]
2397
-
name = "object"
2398
-
version = "0.36.7"
2399
source = "registry+https://github.com/rust-lang/crates.io-index"
2400
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
2401
dependencies = [
2402
-
"memchr",
2403
]
2404
2405
[[package]]
···
2437
]
2438
2439
[[package]]
2440
name = "pango"
2441
version = "0.18.3"
2442
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2469
2470
[[package]]
2471
name = "parking_lot"
2472
-
version = "0.12.4"
2473
source = "registry+https://github.com/rust-lang/crates.io-index"
2474
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
2475
dependencies = [
2476
"lock_api",
2477
"parking_lot_core",
···
2479
2480
[[package]]
2481
name = "parking_lot_core"
2482
-
version = "0.9.11"
2483
source = "registry+https://github.com/rust-lang/crates.io-index"
2484
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2485
dependencies = [
2486
"cfg-if",
2487
"libc",
2488
"redox_syscall",
2489
"smallvec",
2490
-
"windows-targets 0.52.6",
2491
]
2492
2493
[[package]]
···
2498
2499
[[package]]
2500
name = "percent-encoding"
2501
-
version = "2.3.1"
2502
source = "registry+https://github.com/rust-lang/crates.io-index"
2503
-
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
2504
2505
[[package]]
2506
name = "phf"
···
2606
"phf_shared 0.11.3",
2607
"proc-macro2",
2608
"quote",
2609
-
"syn 2.0.104",
2610
]
2611
2612
[[package]]
···
2667
2668
[[package]]
2669
name = "plist"
2670
-
version = "1.7.4"
2671
source = "registry+https://github.com/rust-lang/crates.io-index"
2672
-
checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1"
2673
dependencies = [
2674
"base64 0.22.1",
2675
-
"indexmap 2.10.0",
2676
-
"quick-xml 0.38.0",
2677
"serde",
2678
"time",
2679
]
···
2692
]
2693
2694
[[package]]
2695
name = "polling"
2696
-
version = "3.9.0"
2697
source = "registry+https://github.com/rust-lang/crates.io-index"
2698
-
checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7"
2699
dependencies = [
2700
"cfg-if",
2701
"concurrent-queue",
2702
"hermit-abi",
2703
"pin-project-lite",
2704
-
"rustix",
2705
-
"windows-sys 0.60.2",
2706
]
2707
2708
[[package]]
2709
name = "potential_utf"
2710
-
version = "0.1.2"
2711
source = "registry+https://github.com/rust-lang/crates.io-index"
2712
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
2713
dependencies = [
2714
"zerovec",
2715
]
···
2747
2748
[[package]]
2749
name = "proc-macro-crate"
2750
-
version = "2.0.0"
2751
source = "registry+https://github.com/rust-lang/crates.io-index"
2752
-
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
2753
dependencies = [
2754
-
"toml_edit 0.20.7",
2755
]
2756
2757
[[package]]
2758
name = "proc-macro-crate"
2759
-
version = "3.3.0"
2760
source = "registry+https://github.com/rust-lang/crates.io-index"
2761
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
2762
dependencies = [
2763
-
"toml_edit 0.22.27",
2764
]
2765
2766
[[package]]
···
2795
2796
[[package]]
2797
name = "proc-macro2"
2798
-
version = "1.0.95"
2799
source = "registry+https://github.com/rust-lang/crates.io-index"
2800
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
2801
dependencies = [
2802
"unicode-ident",
2803
]
2804
2805
[[package]]
2806
name = "quick-xml"
2807
version = "0.37.5"
2808
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2813
2814
[[package]]
2815
name = "quick-xml"
2816
-
version = "0.38.0"
2817
source = "registry+https://github.com/rust-lang/crates.io-index"
2818
-
checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b"
2819
dependencies = [
2820
"memchr",
2821
]
2822
2823
[[package]]
2824
name = "quote"
2825
-
version = "1.0.40"
2826
source = "registry+https://github.com/rust-lang/crates.io-index"
2827
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
2828
dependencies = [
2829
"proc-macro2",
2830
]
···
2924
source = "registry+https://github.com/rust-lang/crates.io-index"
2925
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
2926
dependencies = [
2927
-
"getrandom 0.3.3",
2928
]
2929
2930
[[package]]
···
2953
2954
[[package]]
2955
name = "redox_syscall"
2956
-
version = "0.5.17"
2957
source = "registry+https://github.com/rust-lang/crates.io-index"
2958
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
2959
dependencies = [
2960
-
"bitflags 2.9.1",
2961
]
2962
2963
[[package]]
2964
name = "redox_users"
2965
-
version = "0.5.0"
2966
source = "registry+https://github.com/rust-lang/crates.io-index"
2967
-
checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
2968
dependencies = [
2969
"getrandom 0.2.16",
2970
"libredox",
2971
-
"thiserror 2.0.12",
2972
]
2973
2974
[[package]]
2975
name = "ref-cast"
2976
-
version = "1.0.24"
2977
source = "registry+https://github.com/rust-lang/crates.io-index"
2978
-
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
2979
dependencies = [
2980
"ref-cast-impl",
2981
]
2982
2983
[[package]]
2984
name = "ref-cast-impl"
2985
-
version = "1.0.24"
2986
source = "registry+https://github.com/rust-lang/crates.io-index"
2987
-
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
2988
dependencies = [
2989
"proc-macro2",
2990
"quote",
2991
-
"syn 2.0.104",
2992
]
2993
2994
[[package]]
2995
name = "regex"
2996
-
version = "1.11.1"
2997
source = "registry+https://github.com/rust-lang/crates.io-index"
2998
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
2999
dependencies = [
3000
"aho-corasick",
3001
"memchr",
···
3005
3006
[[package]]
3007
name = "regex-automata"
3008
-
version = "0.4.9"
3009
source = "registry+https://github.com/rust-lang/crates.io-index"
3010
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
3011
dependencies = [
3012
"aho-corasick",
3013
"memchr",
···
3016
3017
[[package]]
3018
name = "regex-syntax"
3019
-
version = "0.8.5"
3020
source = "registry+https://github.com/rust-lang/crates.io-index"
3021
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
3022
3023
[[package]]
3024
name = "reqwest"
3025
-
version = "0.12.22"
3026
source = "registry+https://github.com/rust-lang/crates.io-index"
3027
-
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
3028
dependencies = [
3029
"base64 0.22.1",
3030
"bytes",
···
3062
checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed"
3063
dependencies = [
3064
"ashpd",
3065
-
"block2 0.6.1",
3066
"dispatch2",
3067
"glib-sys",
3068
"gobject-sys",
3069
"gtk-sys",
3070
"js-sys",
3071
"log",
3072
-
"objc2 0.6.1",
3073
"objc2-app-kit",
3074
"objc2-core-foundation",
3075
-
"objc2-foundation 0.3.1",
3076
"raw-window-handle",
3077
"wasm-bindgen",
3078
"wasm-bindgen-futures",
···
3081
]
3082
3083
[[package]]
3084
-
name = "rustc-demangle"
3085
-
version = "0.1.26"
3086
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3087
-
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
3088
-
3089
-
[[package]]
3090
name = "rustc_version"
3091
version = "0.4.1"
3092
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3097
3098
[[package]]
3099
name = "rustix"
3100
-
version = "1.0.8"
3101
source = "registry+https://github.com/rust-lang/crates.io-index"
3102
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
3103
dependencies = [
3104
-
"bitflags 2.9.1",
3105
"errno",
3106
"libc",
3107
-
"linux-raw-sys",
3108
-
"windows-sys 0.60.2",
3109
]
3110
3111
[[package]]
3112
name = "rustversion"
3113
-
version = "1.0.21"
3114
source = "registry+https://github.com/rust-lang/crates.io-index"
3115
-
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
3116
3117
[[package]]
3118
name = "ryu"
···
3158
3159
[[package]]
3160
name = "schemars"
3161
-
version = "1.0.4"
3162
source = "registry+https://github.com/rust-lang/crates.io-index"
3163
-
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
3164
dependencies = [
3165
"dyn-clone",
3166
"ref-cast",
···
3177
"proc-macro2",
3178
"quote",
3179
"serde_derive_internals",
3180
-
"syn 2.0.104",
3181
]
3182
3183
[[package]]
···
3212
3213
[[package]]
3214
name = "semver"
3215
-
version = "1.0.26"
3216
source = "registry+https://github.com/rust-lang/crates.io-index"
3217
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
3218
dependencies = [
3219
"serde",
3220
]
3221
3222
[[package]]
3223
name = "serde"
3224
-
version = "1.0.219"
3225
source = "registry+https://github.com/rust-lang/crates.io-index"
3226
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
3227
dependencies = [
3228
"serde_derive",
3229
]
3230
3231
[[package]]
3232
name = "serde-untagged"
3233
-
version = "0.1.7"
3234
source = "registry+https://github.com/rust-lang/crates.io-index"
3235
-
checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
3236
dependencies = [
3237
"erased-serde",
3238
"serde",
3239
"typeid",
3240
]
3241
3242
[[package]]
3243
name = "serde_derive"
3244
-
version = "1.0.219"
3245
source = "registry+https://github.com/rust-lang/crates.io-index"
3246
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
3247
dependencies = [
3248
"proc-macro2",
3249
"quote",
3250
-
"syn 2.0.104",
3251
]
3252
3253
[[package]]
···
3258
dependencies = [
3259
"proc-macro2",
3260
"quote",
3261
-
"syn 2.0.104",
3262
]
3263
3264
[[package]]
3265
name = "serde_json"
3266
-
version = "1.0.141"
3267
source = "registry+https://github.com/rust-lang/crates.io-index"
3268
-
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
3269
dependencies = [
3270
"itoa",
3271
"memchr",
3272
"ryu",
3273
"serde",
3274
]
3275
3276
[[package]]
···
3281
dependencies = [
3282
"proc-macro2",
3283
"quote",
3284
-
"syn 2.0.104",
3285
]
3286
3287
[[package]]
···
3295
3296
[[package]]
3297
name = "serde_spanned"
3298
-
version = "1.0.0"
3299
source = "registry+https://github.com/rust-lang/crates.io-index"
3300
-
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
3301
dependencies = [
3302
-
"serde",
3303
]
3304
3305
[[package]]
···
3316
3317
[[package]]
3318
name = "serde_with"
3319
-
version = "3.14.0"
3320
source = "registry+https://github.com/rust-lang/crates.io-index"
3321
-
checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
3322
dependencies = [
3323
"base64 0.22.1",
3324
"chrono",
3325
"hex",
3326
"indexmap 1.9.3",
3327
-
"indexmap 2.10.0",
3328
"schemars 0.9.0",
3329
-
"schemars 1.0.4",
3330
-
"serde",
3331
-
"serde_derive",
3332
"serde_json",
3333
"serde_with_macros",
3334
"time",
···
3336
3337
[[package]]
3338
name = "serde_with_macros"
3339
-
version = "3.14.0"
3340
source = "registry+https://github.com/rust-lang/crates.io-index"
3341
-
checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
3342
dependencies = [
3343
"darling",
3344
"proc-macro2",
3345
"quote",
3346
-
"syn 2.0.104",
3347
]
3348
3349
[[package]]
3350
name = "serialize-to-javascript"
3351
-
version = "0.1.1"
3352
source = "registry+https://github.com/rust-lang/crates.io-index"
3353
-
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
3354
dependencies = [
3355
"serde",
3356
"serde_json",
···
3359
3360
[[package]]
3361
name = "serialize-to-javascript-impl"
3362
-
version = "0.1.1"
3363
source = "registry+https://github.com/rust-lang/crates.io-index"
3364
-
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
3365
dependencies = [
3366
"proc-macro2",
3367
"quote",
3368
-
"syn 1.0.109",
3369
]
3370
3371
[[package]]
···
3397
3398
[[package]]
3399
name = "signal-hook-registry"
3400
-
version = "1.4.5"
3401
source = "registry+https://github.com/rust-lang/crates.io-index"
3402
-
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
3403
dependencies = [
3404
"libc",
3405
]
···
3424
3425
[[package]]
3426
name = "slab"
3427
-
version = "0.4.10"
3428
source = "registry+https://github.com/rust-lang/crates.io-index"
3429
-
checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
3430
3431
[[package]]
3432
name = "smallvec"
···
3436
3437
[[package]]
3438
name = "socket2"
3439
-
version = "0.6.0"
3440
source = "registry+https://github.com/rust-lang/crates.io-index"
3441
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
3442
dependencies = [
3443
"libc",
3444
-
"windows-sys 0.59.0",
3445
]
3446
3447
[[package]]
···
3452
dependencies = [
3453
"bytemuck",
3454
"cfg_aliases",
3455
-
"core-graphics",
3456
"foreign-types",
3457
"js-sys",
3458
"log",
···
3494
3495
[[package]]
3496
name = "stable_deref_trait"
3497
-
version = "1.2.0"
3498
source = "registry+https://github.com/rust-lang/crates.io-index"
3499
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
3500
3501
[[package]]
3502
name = "static_assertions"
···
3559
3560
[[package]]
3561
name = "syn"
3562
-
version = "2.0.104"
3563
source = "registry+https://github.com/rust-lang/crates.io-index"
3564
-
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
3565
dependencies = [
3566
"proc-macro2",
3567
"quote",
···
3585
dependencies = [
3586
"proc-macro2",
3587
"quote",
3588
-
"syn 2.0.104",
3589
]
3590
3591
[[package]]
···
3597
"cfg-expr",
3598
"heck 0.5.0",
3599
"pkg-config",
3600
-
"toml 0.8.23",
3601
"version-compare",
3602
]
3603
3604
[[package]]
3605
name = "tao"
3606
-
version = "0.34.0"
3607
source = "registry+https://github.com/rust-lang/crates.io-index"
3608
-
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
3609
dependencies = [
3610
-
"bitflags 2.9.1",
3611
"core-foundation",
3612
-
"core-graphics",
3613
"crossbeam-channel",
3614
"dispatch",
3615
"dlopen2",
···
3624
"ndk",
3625
"ndk-context",
3626
"ndk-sys",
3627
-
"objc2 0.6.1",
3628
"objc2-app-kit",
3629
-
"objc2-foundation 0.3.1",
3630
"once_cell",
3631
"parking_lot",
3632
"raw-window-handle",
···
3635
"unicode-segmentation",
3636
"url",
3637
"windows",
3638
-
"windows-core",
3639
"windows-version",
3640
"x11-dl",
3641
]
···
3648
dependencies = [
3649
"proc-macro2",
3650
"quote",
3651
-
"syn 2.0.104",
3652
]
3653
3654
[[package]]
···
3659
3660
[[package]]
3661
name = "tauri"
3662
-
version = "2.7.0"
3663
source = "registry+https://github.com/rust-lang/crates.io-index"
3664
-
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
3665
dependencies = [
3666
"anyhow",
3667
"bytes",
3668
"dirs",
3669
"dunce",
3670
"embed_plist",
3671
-
"getrandom 0.3.3",
3672
"glob",
3673
"gtk",
3674
"heck 0.5.0",
3675
"http",
3676
"jni",
3677
"libc",
3678
"log",
3679
"mime",
3680
"muda",
3681
-
"objc2 0.6.1",
3682
"objc2-app-kit",
3683
-
"objc2-foundation 0.3.1",
3684
"objc2-ui-kit",
3685
"percent-encoding",
3686
"plist",
3687
"raw-window-handle",
···
3696
"tauri-runtime",
3697
"tauri-runtime-wry",
3698
"tauri-utils",
3699
-
"thiserror 2.0.12",
3700
"tokio",
3701
"tray-icon",
3702
"url",
3703
-
"urlpattern",
3704
"webkit2gtk",
3705
"webview2-com",
3706
"window-vibrancy",
···
3709
3710
[[package]]
3711
name = "tauri-build"
3712
-
version = "2.3.1"
3713
source = "registry+https://github.com/rust-lang/crates.io-index"
3714
-
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
3715
dependencies = [
3716
"anyhow",
3717
"cargo_toml",
···
3725
"serde_json",
3726
"tauri-utils",
3727
"tauri-winres",
3728
-
"toml 0.8.23",
3729
"walkdir",
3730
]
3731
3732
[[package]]
3733
name = "tauri-codegen"
3734
-
version = "2.3.1"
3735
source = "registry+https://github.com/rust-lang/crates.io-index"
3736
-
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
3737
dependencies = [
3738
"base64 0.22.1",
3739
"brotli",
3740
"ico",
3741
"json-patch",
3742
"plist",
3743
-
"png",
3744
"proc-macro2",
3745
"quote",
3746
"semver",
3747
"serde",
3748
"serde_json",
3749
"sha2",
3750
-
"syn 2.0.104",
3751
"tauri-utils",
3752
-
"thiserror 2.0.12",
3753
"time",
3754
"url",
3755
"uuid",
···
3758
3759
[[package]]
3760
name = "tauri-macros"
3761
-
version = "2.3.2"
3762
source = "registry+https://github.com/rust-lang/crates.io-index"
3763
-
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
3764
dependencies = [
3765
"heck 0.5.0",
3766
"proc-macro2",
3767
"quote",
3768
-
"syn 2.0.104",
3769
"tauri-codegen",
3770
"tauri-utils",
3771
]
3772
3773
[[package]]
3774
name = "tauri-plugin"
3775
-
version = "2.3.1"
3776
source = "registry+https://github.com/rust-lang/crates.io-index"
3777
-
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
3778
dependencies = [
3779
"anyhow",
3780
"glob",
···
3783
"serde",
3784
"serde_json",
3785
"tauri-utils",
3786
-
"toml 0.8.23",
3787
"walkdir",
3788
]
3789
3790
[[package]]
3791
-
name = "tauri-plugin-dialog"
3792
version = "2.3.2"
3793
source = "registry+https://github.com/rust-lang/crates.io-index"
3794
-
checksum = "37e5858cc7b455a73ab4ea2ebc08b5be33682c00ff1bf4cad5537d4fb62499d9"
3795
dependencies = [
3796
"log",
3797
"raw-window-handle",
···
3801
"tauri",
3802
"tauri-plugin",
3803
"tauri-plugin-fs",
3804
-
"thiserror 2.0.12",
3805
"url",
3806
]
3807
3808
[[package]]
3809
name = "tauri-plugin-fs"
3810
-
version = "2.4.1"
3811
source = "registry+https://github.com/rust-lang/crates.io-index"
3812
-
checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99"
3813
dependencies = [
3814
"anyhow",
3815
"dunce",
···
3822
"tauri",
3823
"tauri-plugin",
3824
"tauri-utils",
3825
-
"thiserror 2.0.12",
3826
-
"toml 0.8.23",
3827
"url",
3828
]
3829
3830
[[package]]
3831
name = "tauri-plugin-opener"
3832
-
version = "2.4.0"
3833
source = "registry+https://github.com/rust-lang/crates.io-index"
3834
-
checksum = "ecee219f11cdac713ab32959db5d0cceec4810ba4f4458da992292ecf9660321"
3835
dependencies = [
3836
"dunce",
3837
"glob",
3838
"objc2-app-kit",
3839
-
"objc2-foundation 0.3.1",
3840
"open",
3841
"schemars 0.8.22",
3842
"serde",
3843
"serde_json",
3844
"tauri",
3845
"tauri-plugin",
3846
-
"thiserror 2.0.12",
3847
"url",
3848
"windows",
3849
"zbus",
3850
]
3851
3852
[[package]]
3853
name = "tauri-runtime"
3854
-
version = "2.7.1"
3855
source = "registry+https://github.com/rust-lang/crates.io-index"
3856
-
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
3857
dependencies = [
3858
"cookie",
3859
"dpi",
3860
"gtk",
3861
"http",
3862
"jni",
3863
-
"objc2 0.6.1",
3864
"objc2-ui-kit",
3865
"raw-window-handle",
3866
"serde",
3867
"serde_json",
3868
"tauri-utils",
3869
-
"thiserror 2.0.12",
3870
"url",
3871
"windows",
3872
]
3873
3874
[[package]]
3875
name = "tauri-runtime-wry"
3876
-
version = "2.7.2"
3877
source = "registry+https://github.com/rust-lang/crates.io-index"
3878
-
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
3879
dependencies = [
3880
"gtk",
3881
"http",
3882
"jni",
3883
"log",
3884
-
"objc2 0.6.1",
3885
"objc2-app-kit",
3886
-
"objc2-foundation 0.3.1",
3887
"once_cell",
3888
"percent-encoding",
3889
"raw-window-handle",
···
3900
3901
[[package]]
3902
name = "tauri-utils"
3903
-
version = "2.6.0"
3904
source = "registry+https://github.com/rust-lang/crates.io-index"
3905
-
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
3906
dependencies = [
3907
"anyhow",
3908
"brotli",
···
3928
"serde_json",
3929
"serde_with",
3930
"swift-rs",
3931
-
"thiserror 2.0.12",
3932
-
"toml 0.8.23",
3933
"url",
3934
"urlpattern",
3935
"uuid",
···
3938
3939
[[package]]
3940
name = "tauri-winres"
3941
-
version = "0.3.1"
3942
source = "registry+https://github.com/rust-lang/crates.io-index"
3943
-
checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4"
3944
dependencies = [
3945
"embed-resource",
3946
-
"indexmap 2.10.0",
3947
-
"toml 0.8.23",
3948
]
3949
3950
[[package]]
3951
name = "tempfile"
3952
-
version = "3.20.0"
3953
source = "registry+https://github.com/rust-lang/crates.io-index"
3954
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
3955
dependencies = [
3956
"fastrand",
3957
-
"getrandom 0.3.3",
3958
"once_cell",
3959
-
"rustix",
3960
-
"windows-sys 0.59.0",
3961
]
3962
3963
[[package]]
···
3982
3983
[[package]]
3984
name = "thiserror"
3985
-
version = "2.0.12"
3986
source = "registry+https://github.com/rust-lang/crates.io-index"
3987
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
3988
dependencies = [
3989
-
"thiserror-impl 2.0.12",
3990
]
3991
3992
[[package]]
···
3997
dependencies = [
3998
"proc-macro2",
3999
"quote",
4000
-
"syn 2.0.104",
4001
]
4002
4003
[[package]]
4004
name = "thiserror-impl"
4005
-
version = "2.0.12"
4006
source = "registry+https://github.com/rust-lang/crates.io-index"
4007
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4008
dependencies = [
4009
"proc-macro2",
4010
"quote",
4011
-
"syn 2.0.104",
4012
]
4013
4014
[[package]]
4015
name = "time"
4016
-
version = "0.3.41"
4017
source = "registry+https://github.com/rust-lang/crates.io-index"
4018
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
4019
dependencies = [
4020
"deranged",
4021
"itoa",
···
4028
4029
[[package]]
4030
name = "time-core"
4031
-
version = "0.1.4"
4032
source = "registry+https://github.com/rust-lang/crates.io-index"
4033
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
4034
4035
[[package]]
4036
name = "time-macros"
4037
-
version = "0.2.22"
4038
source = "registry+https://github.com/rust-lang/crates.io-index"
4039
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
4040
dependencies = [
4041
"num-conv",
4042
"time-core",
···
4044
4045
[[package]]
4046
name = "tinystr"
4047
-
version = "0.8.1"
4048
source = "registry+https://github.com/rust-lang/crates.io-index"
4049
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
4050
dependencies = [
4051
"displaydoc",
4052
"zerovec",
···
4054
4055
[[package]]
4056
name = "tokio"
4057
-
version = "1.47.0"
4058
source = "registry+https://github.com/rust-lang/crates.io-index"
4059
-
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
4060
dependencies = [
4061
-
"backtrace",
4062
"bytes",
4063
-
"io-uring",
4064
"libc",
4065
"mio",
4066
"pin-project-lite",
4067
"signal-hook-registry",
4068
-
"slab",
4069
"socket2",
4070
"tokio-macros",
4071
"tracing",
4072
-
"windows-sys 0.59.0",
4073
]
4074
4075
[[package]]
4076
name = "tokio-macros"
4077
-
version = "2.5.0"
4078
source = "registry+https://github.com/rust-lang/crates.io-index"
4079
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
4080
dependencies = [
4081
"proc-macro2",
4082
"quote",
4083
-
"syn 2.0.104",
4084
]
4085
4086
[[package]]
4087
name = "tokio-util"
4088
-
version = "0.7.15"
4089
source = "registry+https://github.com/rust-lang/crates.io-index"
4090
-
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
4091
dependencies = [
4092
"bytes",
4093
"futures-core",
···
4098
4099
[[package]]
4100
name = "toml"
4101
-
version = "0.8.23"
4102
source = "registry+https://github.com/rust-lang/crates.io-index"
4103
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
4104
dependencies = [
4105
"serde",
4106
"serde_spanned 0.6.9",
4107
-
"toml_datetime 0.6.11",
4108
-
"toml_edit 0.22.27",
4109
]
4110
4111
[[package]]
4112
name = "toml"
4113
-
version = "0.9.3"
4114
source = "registry+https://github.com/rust-lang/crates.io-index"
4115
-
checksum = "e06723639aaded957e5a80be250c1f82f274b9d23ebb4d94163668470623461c"
4116
dependencies = [
4117
-
"indexmap 2.10.0",
4118
-
"serde",
4119
-
"serde_spanned 1.0.0",
4120
-
"toml_datetime 0.7.0",
4121
"toml_parser",
4122
"toml_writer",
4123
-
"winnow 0.7.12",
4124
]
4125
4126
[[package]]
4127
name = "toml_datetime"
4128
-
version = "0.6.11"
4129
source = "registry+https://github.com/rust-lang/crates.io-index"
4130
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
4131
dependencies = [
4132
"serde",
4133
]
4134
4135
[[package]]
4136
name = "toml_datetime"
4137
-
version = "0.7.0"
4138
source = "registry+https://github.com/rust-lang/crates.io-index"
4139
-
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
4140
dependencies = [
4141
-
"serde",
4142
]
4143
4144
[[package]]
···
4147
source = "registry+https://github.com/rust-lang/crates.io-index"
4148
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4149
dependencies = [
4150
-
"indexmap 2.10.0",
4151
-
"toml_datetime 0.6.11",
4152
"winnow 0.5.40",
4153
]
4154
4155
[[package]]
4156
name = "toml_edit"
4157
-
version = "0.20.7"
4158
source = "registry+https://github.com/rust-lang/crates.io-index"
4159
-
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
4160
dependencies = [
4161
-
"indexmap 2.10.0",
4162
-
"toml_datetime 0.6.11",
4163
"winnow 0.5.40",
4164
]
4165
4166
[[package]]
4167
name = "toml_edit"
4168
-
version = "0.22.27"
4169
source = "registry+https://github.com/rust-lang/crates.io-index"
4170
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
4171
dependencies = [
4172
-
"indexmap 2.10.0",
4173
-
"serde",
4174
-
"serde_spanned 0.6.9",
4175
-
"toml_datetime 0.6.11",
4176
-
"toml_write",
4177
-
"winnow 0.7.12",
4178
]
4179
4180
[[package]]
4181
name = "toml_parser"
4182
-
version = "1.0.1"
4183
source = "registry+https://github.com/rust-lang/crates.io-index"
4184
-
checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30"
4185
dependencies = [
4186
-
"winnow 0.7.12",
4187
]
4188
4189
[[package]]
4190
-
name = "toml_write"
4191
-
version = "0.1.2"
4192
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4193
-
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
4194
-
4195
-
[[package]]
4196
name = "toml_writer"
4197
-
version = "1.0.2"
4198
source = "registry+https://github.com/rust-lang/crates.io-index"
4199
-
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
4200
4201
[[package]]
4202
name = "tower"
···
4219
source = "registry+https://github.com/rust-lang/crates.io-index"
4220
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4221
dependencies = [
4222
-
"bitflags 2.9.1",
4223
"bytes",
4224
"futures-util",
4225
"http",
···
4262
dependencies = [
4263
"proc-macro2",
4264
"quote",
4265
-
"syn 2.0.104",
4266
]
4267
4268
[[package]]
···
4276
4277
[[package]]
4278
name = "tray-icon"
4279
-
version = "0.21.0"
4280
source = "registry+https://github.com/rust-lang/crates.io-index"
4281
-
checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a"
4282
dependencies = [
4283
"crossbeam-channel",
4284
"dirs",
4285
"libappindicator",
4286
"muda",
4287
-
"objc2 0.6.1",
4288
"objc2-app-kit",
4289
"objc2-core-foundation",
4290
"objc2-core-graphics",
4291
-
"objc2-foundation 0.3.1",
4292
"once_cell",
4293
-
"png",
4294
"serde",
4295
-
"thiserror 2.0.12",
4296
-
"windows-sys 0.59.0",
4297
]
4298
4299
[[package]]
···
4310
4311
[[package]]
4312
name = "typenum"
4313
-
version = "1.18.0"
4314
source = "registry+https://github.com/rust-lang/crates.io-index"
4315
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
4316
4317
[[package]]
4318
name = "uds_windows"
···
4368
4369
[[package]]
4370
name = "unicode-ident"
4371
-
version = "1.0.18"
4372
source = "registry+https://github.com/rust-lang/crates.io-index"
4373
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
4374
4375
[[package]]
4376
name = "unicode-segmentation"
···
4380
4381
[[package]]
4382
name = "url"
4383
-
version = "2.5.4"
4384
source = "registry+https://github.com/rust-lang/crates.io-index"
4385
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
4386
dependencies = [
4387
"form_urlencoded",
4388
"idna",
···
4416
4417
[[package]]
4418
name = "uuid"
4419
-
version = "1.17.0"
4420
source = "registry+https://github.com/rust-lang/crates.io-index"
4421
-
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
4422
dependencies = [
4423
-
"getrandom 0.3.3",
4424
"js-sys",
4425
"serde",
4426
"wasm-bindgen",
···
4428
4429
[[package]]
4430
name = "version-compare"
4431
-
version = "0.2.0"
4432
source = "registry+https://github.com/rust-lang/crates.io-index"
4433
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
4434
4435
[[package]]
4436
name = "version_check"
···
4490
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4491
4492
[[package]]
4493
-
name = "wasi"
4494
-
version = "0.14.2+wasi-0.2.4"
4495
source = "registry+https://github.com/rust-lang/crates.io-index"
4496
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
4497
dependencies = [
4498
-
"wit-bindgen-rt",
4499
]
4500
4501
[[package]]
4502
name = "wasm-bindgen"
4503
-
version = "0.2.100"
4504
source = "registry+https://github.com/rust-lang/crates.io-index"
4505
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
4506
dependencies = [
4507
"cfg-if",
4508
"once_cell",
4509
"rustversion",
4510
"wasm-bindgen-macro",
4511
-
]
4512
-
4513
-
[[package]]
4514
-
name = "wasm-bindgen-backend"
4515
-
version = "0.2.100"
4516
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4517
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
4518
-
dependencies = [
4519
-
"bumpalo",
4520
-
"log",
4521
-
"proc-macro2",
4522
-
"quote",
4523
-
"syn 2.0.104",
4524
"wasm-bindgen-shared",
4525
]
4526
4527
[[package]]
4528
name = "wasm-bindgen-futures"
4529
-
version = "0.4.50"
4530
source = "registry+https://github.com/rust-lang/crates.io-index"
4531
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
4532
dependencies = [
4533
"cfg-if",
4534
"js-sys",
···
4539
4540
[[package]]
4541
name = "wasm-bindgen-macro"
4542
-
version = "0.2.100"
4543
source = "registry+https://github.com/rust-lang/crates.io-index"
4544
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
4545
dependencies = [
4546
"quote",
4547
"wasm-bindgen-macro-support",
···
4549
4550
[[package]]
4551
name = "wasm-bindgen-macro-support"
4552
-
version = "0.2.100"
4553
source = "registry+https://github.com/rust-lang/crates.io-index"
4554
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
4555
dependencies = [
4556
"proc-macro2",
4557
"quote",
4558
-
"syn 2.0.104",
4559
-
"wasm-bindgen-backend",
4560
"wasm-bindgen-shared",
4561
]
4562
4563
[[package]]
4564
name = "wasm-bindgen-shared"
4565
-
version = "0.2.100"
4566
source = "registry+https://github.com/rust-lang/crates.io-index"
4567
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
4568
dependencies = [
4569
"unicode-ident",
4570
]
···
4590
dependencies = [
4591
"cc",
4592
"downcast-rs",
4593
-
"rustix",
4594
"scoped-tls",
4595
"smallvec",
4596
"wayland-sys",
···
4602
source = "registry+https://github.com/rust-lang/crates.io-index"
4603
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
4604
dependencies = [
4605
-
"bitflags 2.9.1",
4606
-
"rustix",
4607
"wayland-backend",
4608
"wayland-scanner",
4609
]
···
4614
source = "registry+https://github.com/rust-lang/crates.io-index"
4615
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
4616
dependencies = [
4617
-
"bitflags 2.9.1",
4618
"wayland-backend",
4619
"wayland-client",
4620
"wayland-scanner",
4621
]
4622
···
4644
4645
[[package]]
4646
name = "web-sys"
4647
-
version = "0.3.77"
4648
source = "registry+https://github.com/rust-lang/crates.io-index"
4649
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
4650
dependencies = [
4651
"js-sys",
4652
"wasm-bindgen",
···
4705
"webview2-com-macros",
4706
"webview2-com-sys",
4707
"windows",
4708
-
"windows-core",
4709
"windows-implement",
4710
"windows-interface",
4711
]
···
4718
dependencies = [
4719
"proc-macro2",
4720
"quote",
4721
-
"syn 2.0.104",
4722
]
4723
4724
[[package]]
···
4727
source = "registry+https://github.com/rust-lang/crates.io-index"
4728
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
4729
dependencies = [
4730
-
"thiserror 2.0.12",
4731
"windows",
4732
-
"windows-core",
4733
]
4734
4735
[[package]]
4736
name = "winapi"
4737
version = "0.3.9"
4738
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4750
4751
[[package]]
4752
name = "winapi-util"
4753
-
version = "0.1.9"
4754
source = "registry+https://github.com/rust-lang/crates.io-index"
4755
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
4756
dependencies = [
4757
-
"windows-sys 0.59.0",
4758
]
4759
4760
[[package]]
···
4769
source = "registry+https://github.com/rust-lang/crates.io-index"
4770
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
4771
dependencies = [
4772
-
"objc2 0.6.1",
4773
"objc2-app-kit",
4774
"objc2-core-foundation",
4775
-
"objc2-foundation 0.3.1",
4776
"raw-window-handle",
4777
"windows-sys 0.59.0",
4778
"windows-version",
···
4785
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4786
dependencies = [
4787
"windows-collections",
4788
-
"windows-core",
4789
"windows-future",
4790
-
"windows-link",
4791
"windows-numerics",
4792
]
4793
···
4797
source = "registry+https://github.com/rust-lang/crates.io-index"
4798
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4799
dependencies = [
4800
-
"windows-core",
4801
]
4802
4803
[[package]]
···
4808
dependencies = [
4809
"windows-implement",
4810
"windows-interface",
4811
-
"windows-link",
4812
-
"windows-result",
4813
-
"windows-strings",
4814
]
4815
4816
[[package]]
···
4819
source = "registry+https://github.com/rust-lang/crates.io-index"
4820
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4821
dependencies = [
4822
-
"windows-core",
4823
-
"windows-link",
4824
"windows-threading",
4825
]
4826
4827
[[package]]
4828
name = "windows-implement"
4829
-
version = "0.60.0"
4830
source = "registry+https://github.com/rust-lang/crates.io-index"
4831
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
4832
dependencies = [
4833
"proc-macro2",
4834
"quote",
4835
-
"syn 2.0.104",
4836
]
4837
4838
[[package]]
4839
name = "windows-interface"
4840
-
version = "0.59.1"
4841
source = "registry+https://github.com/rust-lang/crates.io-index"
4842
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
4843
dependencies = [
4844
"proc-macro2",
4845
"quote",
4846
-
"syn 2.0.104",
4847
]
4848
4849
[[package]]
···
4853
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4854
4855
[[package]]
4856
name = "windows-numerics"
4857
version = "0.2.0"
4858
source = "registry+https://github.com/rust-lang/crates.io-index"
4859
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4860
dependencies = [
4861
-
"windows-core",
4862
-
"windows-link",
4863
]
4864
4865
[[package]]
···
4868
source = "registry+https://github.com/rust-lang/crates.io-index"
4869
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4870
dependencies = [
4871
-
"windows-link",
4872
]
4873
4874
[[package]]
···
4877
source = "registry+https://github.com/rust-lang/crates.io-index"
4878
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4879
dependencies = [
4880
-
"windows-link",
4881
]
4882
4883
[[package]]
···
4904
source = "registry+https://github.com/rust-lang/crates.io-index"
4905
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
4906
dependencies = [
4907
-
"windows-targets 0.53.3",
4908
]
4909
4910
[[package]]
···
4940
4941
[[package]]
4942
name = "windows-targets"
4943
-
version = "0.53.3"
4944
source = "registry+https://github.com/rust-lang/crates.io-index"
4945
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
4946
dependencies = [
4947
-
"windows-link",
4948
-
"windows_aarch64_gnullvm 0.53.0",
4949
-
"windows_aarch64_msvc 0.53.0",
4950
-
"windows_i686_gnu 0.53.0",
4951
-
"windows_i686_gnullvm 0.53.0",
4952
-
"windows_i686_msvc 0.53.0",
4953
-
"windows_x86_64_gnu 0.53.0",
4954
-
"windows_x86_64_gnullvm 0.53.0",
4955
-
"windows_x86_64_msvc 0.53.0",
4956
]
4957
4958
[[package]]
···
4961
source = "registry+https://github.com/rust-lang/crates.io-index"
4962
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4963
dependencies = [
4964
-
"windows-link",
4965
]
4966
4967
[[package]]
4968
name = "windows-version"
4969
-
version = "0.1.4"
4970
source = "registry+https://github.com/rust-lang/crates.io-index"
4971
-
checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
4972
dependencies = [
4973
-
"windows-link",
4974
]
4975
4976
[[package]]
···
4987
4988
[[package]]
4989
name = "windows_aarch64_gnullvm"
4990
-
version = "0.53.0"
4991
source = "registry+https://github.com/rust-lang/crates.io-index"
4992
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
4993
4994
[[package]]
4995
name = "windows_aarch64_msvc"
···
5005
5006
[[package]]
5007
name = "windows_aarch64_msvc"
5008
-
version = "0.53.0"
5009
source = "registry+https://github.com/rust-lang/crates.io-index"
5010
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
5011
5012
[[package]]
5013
name = "windows_i686_gnu"
···
5023
5024
[[package]]
5025
name = "windows_i686_gnu"
5026
-
version = "0.53.0"
5027
source = "registry+https://github.com/rust-lang/crates.io-index"
5028
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
5029
5030
[[package]]
5031
name = "windows_i686_gnullvm"
···
5035
5036
[[package]]
5037
name = "windows_i686_gnullvm"
5038
-
version = "0.53.0"
5039
source = "registry+https://github.com/rust-lang/crates.io-index"
5040
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
5041
5042
[[package]]
5043
name = "windows_i686_msvc"
···
5053
5054
[[package]]
5055
name = "windows_i686_msvc"
5056
-
version = "0.53.0"
5057
source = "registry+https://github.com/rust-lang/crates.io-index"
5058
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
5059
5060
[[package]]
5061
name = "windows_x86_64_gnu"
···
5071
5072
[[package]]
5073
name = "windows_x86_64_gnu"
5074
-
version = "0.53.0"
5075
source = "registry+https://github.com/rust-lang/crates.io-index"
5076
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
5077
5078
[[package]]
5079
name = "windows_x86_64_gnullvm"
···
5089
5090
[[package]]
5091
name = "windows_x86_64_gnullvm"
5092
-
version = "0.53.0"
5093
source = "registry+https://github.com/rust-lang/crates.io-index"
5094
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
5095
5096
[[package]]
5097
name = "windows_x86_64_msvc"
···
5107
5108
[[package]]
5109
name = "windows_x86_64_msvc"
5110
-
version = "0.53.0"
5111
source = "registry+https://github.com/rust-lang/crates.io-index"
5112
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
5113
5114
[[package]]
5115
name = "winnow"
···
5122
5123
[[package]]
5124
name = "winnow"
5125
-
version = "0.7.12"
5126
source = "registry+https://github.com/rust-lang/crates.io-index"
5127
-
checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
5128
dependencies = [
5129
"memchr",
5130
]
···
5140
]
5141
5142
[[package]]
5143
-
name = "wit-bindgen-rt"
5144
-
version = "0.39.0"
5145
source = "registry+https://github.com/rust-lang/crates.io-index"
5146
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
5147
dependencies = [
5148
-
"bitflags 2.9.1",
5149
]
5150
5151
[[package]]
5152
name = "writeable"
5153
-
version = "0.6.1"
5154
source = "registry+https://github.com/rust-lang/crates.io-index"
5155
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
5156
5157
[[package]]
5158
name = "wry"
5159
-
version = "0.52.1"
5160
source = "registry+https://github.com/rust-lang/crates.io-index"
5161
-
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
5162
dependencies = [
5163
"base64 0.22.1",
5164
-
"block2 0.6.1",
5165
"cookie",
5166
"crossbeam-channel",
5167
"dpi",
5168
"dunce",
5169
"gdkx11",
···
5175
"kuchikiki",
5176
"libc",
5177
"ndk",
5178
-
"objc2 0.6.1",
5179
"objc2-app-kit",
5180
"objc2-core-foundation",
5181
-
"objc2-foundation 0.3.1",
5182
"objc2-ui-kit",
5183
"objc2-web-kit",
5184
"once_cell",
···
5187
"sha2",
5188
"soup3",
5189
"tao-macros",
5190
-
"thiserror 2.0.12",
5191
"url",
5192
"webkit2gtk",
5193
"webkit2gtk-sys",
5194
"webview2-com",
5195
"windows",
5196
-
"windows-core",
5197
"windows-version",
5198
"x11-dl",
5199
]
···
5220
]
5221
5222
[[package]]
5223
name = "yoke"
5224
-
version = "0.8.0"
5225
source = "registry+https://github.com/rust-lang/crates.io-index"
5226
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
5227
dependencies = [
5228
-
"serde",
5229
"stable_deref_trait",
5230
"yoke-derive",
5231
"zerofrom",
···
5233
5234
[[package]]
5235
name = "yoke-derive"
5236
-
version = "0.8.0"
5237
source = "registry+https://github.com/rust-lang/crates.io-index"
5238
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
5239
dependencies = [
5240
"proc-macro2",
5241
"quote",
5242
-
"syn 2.0.104",
5243
"synstructure",
5244
]
5245
5246
[[package]]
5247
name = "zbus"
5248
-
version = "5.9.0"
5249
source = "registry+https://github.com/rust-lang/crates.io-index"
5250
-
checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
5251
dependencies = [
5252
"async-broadcast",
5253
"async-executor",
···
5270
"tokio",
5271
"tracing",
5272
"uds_windows",
5273
-
"windows-sys 0.59.0",
5274
-
"winnow 0.7.12",
5275
"zbus_macros",
5276
"zbus_names",
5277
"zvariant",
···
5279
5280
[[package]]
5281
name = "zbus_macros"
5282
-
version = "5.9.0"
5283
source = "registry+https://github.com/rust-lang/crates.io-index"
5284
-
checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
5285
dependencies = [
5286
-
"proc-macro-crate 3.3.0",
5287
"proc-macro2",
5288
"quote",
5289
-
"syn 2.0.104",
5290
"zbus_names",
5291
"zvariant",
5292
"zvariant_utils",
···
5300
dependencies = [
5301
"serde",
5302
"static_assertions",
5303
-
"winnow 0.7.12",
5304
"zvariant",
5305
]
5306
5307
[[package]]
5308
name = "zerocopy"
5309
-
version = "0.8.26"
5310
source = "registry+https://github.com/rust-lang/crates.io-index"
5311
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
5312
dependencies = [
5313
"zerocopy-derive",
5314
]
5315
5316
[[package]]
5317
name = "zerocopy-derive"
5318
-
version = "0.8.26"
5319
source = "registry+https://github.com/rust-lang/crates.io-index"
5320
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
5321
dependencies = [
5322
"proc-macro2",
5323
"quote",
5324
-
"syn 2.0.104",
5325
]
5326
5327
[[package]]
···
5341
dependencies = [
5342
"proc-macro2",
5343
"quote",
5344
-
"syn 2.0.104",
5345
"synstructure",
5346
]
5347
5348
[[package]]
5349
name = "zerotrie"
5350
-
version = "0.2.2"
5351
source = "registry+https://github.com/rust-lang/crates.io-index"
5352
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
5353
dependencies = [
5354
"displaydoc",
5355
"yoke",
···
5358
5359
[[package]]
5360
name = "zerovec"
5361
-
version = "0.11.2"
5362
source = "registry+https://github.com/rust-lang/crates.io-index"
5363
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
5364
dependencies = [
5365
"yoke",
5366
"zerofrom",
···
5369
5370
[[package]]
5371
name = "zerovec-derive"
5372
-
version = "0.11.1"
5373
source = "registry+https://github.com/rust-lang/crates.io-index"
5374
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
5375
dependencies = [
5376
"proc-macro2",
5377
"quote",
5378
-
"syn 2.0.104",
5379
]
5380
5381
[[package]]
5382
name = "zvariant"
5383
-
version = "5.6.0"
5384
source = "registry+https://github.com/rust-lang/crates.io-index"
5385
-
checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
5386
dependencies = [
5387
"endi",
5388
"enumflags2",
5389
"serde",
5390
"url",
5391
-
"winnow 0.7.12",
5392
"zvariant_derive",
5393
"zvariant_utils",
5394
]
5395
5396
[[package]]
5397
name = "zvariant_derive"
5398
-
version = "5.6.0"
5399
source = "registry+https://github.com/rust-lang/crates.io-index"
5400
-
checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
5401
dependencies = [
5402
-
"proc-macro-crate 3.3.0",
5403
"proc-macro2",
5404
"quote",
5405
-
"syn 2.0.104",
5406
"zvariant_utils",
5407
]
5408
5409
[[package]]
5410
name = "zvariant_utils"
5411
-
version = "3.2.0"
5412
source = "registry+https://github.com/rust-lang/crates.io-index"
5413
-
checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
5414
dependencies = [
5415
"proc-macro2",
5416
"quote",
5417
"serde",
5418
-
"static_assertions",
5419
-
"syn 2.0.104",
5420
-
"winnow 0.7.12",
5421
]
···
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"
···
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"
···
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]]
···
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"
···
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]]
···
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
]
···
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"
668
version = "0.1.6"
669
source = "registry+https://github.com/rust-lang/crates.io-index"
···
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]]
···
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]]
···
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]]
···
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",
···
1098
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1099
1100
[[package]]
1101
+
name = "foldhash"
1102
+
version = "0.1.5"
1103
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1104
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1105
+
1106
+
[[package]]
1107
name = "foreign-types"
1108
version = "0.5.0"
1109
source = "registry+https://github.com/rust-lang/crates.io-index"
···
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
]
···
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]]
···
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"
···
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"
···
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
···
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]]
···
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"
···
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"
2203
version = "0.8.9"
2204
source = "registry+https://github.com/rust-lang/crates.io-index"
···
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"
···
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]]
···
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]]
···
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"
···
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
]
···
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",
···
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",
···
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]]
···
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]]
···
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
]
···
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"
···
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",
···
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"
···
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",
···
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",
···
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",
···
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",
···
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"
···
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",
···
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
]
···
4978
dependencies = [
4979
"cc",
4980
"downcast-rs",
4981
+
"rustix 1.1.2",
4982
"scoped-tls",
4983
"smallvec",
4984
"wayland-sys",
···
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
]
···
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
···
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"
5144
version = "0.3.9"
5145
source = "registry+https://github.com/rust-lang/crates.io-index"
···
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]]
···
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]]
···
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]]
···
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"
···
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"
···
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"
···
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"
···
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"
···
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"
···
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",
···
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
]
+12
-5
src-tauri/Cargo.toml
+12
-5
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
-
tokio = { version = "1.47.0", features = [ "macros" ] }
26
-
dirs = "6.0.0"
27
-
anyhow = "1.0.99"
28
-
flate2 = "1.1.2"
29
tauri-plugin-dialog = "2"
30
···
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
+5
-1
src-tauri/capabilities/default.json
+5
-1
src-tauri/capabilities/default.json
+9
src-tauri/src/frontend_calls/close_app.rs
+9
src-tauri/src/frontend_calls/close_app.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
+
}
+4
-1
src-tauri/src/frontend_calls/mod.rs
+4
-1
src-tauri/src/frontend_calls/mod.rs
+6
-3
src-tauri/src/frontend_calls/save_graph.rs
+6
-3
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
5
#[tauri::command]
6
-
pub fn save_graph( graph: String, path: PathBuf ) {
7
-
dbg!(&graph, &path);
8
-
9
let file = File::create(&path).unwrap();
10
let mut encoder = GzEncoder::new(file, Compression::default());
11
12
encoder.write_all(graph.as_bytes()).unwrap();
13
encoder.finish().unwrap();
14
}
···
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
+
}
+26
-7
src-tauri/src/frontend_calls/sync_tab.rs
+26
-7
src-tauri/src/frontend_calls/sync_tab.rs
···
1
-
use std::sync::mpsc::Sender;
2
3
use tauri::State;
4
5
-
use crate::{ runtime::commands::RuntimeCommand, structs::nodes::Node };
6
7
#[tauri::command]
8
-
pub fn sync_tab( graph: Vec<Node>, id: String, cmd: State<Sender<RuntimeCommand>> ) {
9
-
cmd.send(RuntimeCommand::AddTab(graph, id)).unwrap();
10
}
11
12
#[tauri::command]
13
-
pub fn discard_tab( id: String, cmd: State<Sender<RuntimeCommand>> ) {
14
-
cmd.send(RuntimeCommand::RemoveTab(id)).unwrap();
15
-
}
···
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
+
}
+17
-8
src-tauri/src/lib.rs
+17
-8
src-tauri/src/lib.rs
···
1
-
use std::{collections::HashMap, fs, sync::{self, Arc, Mutex}};
2
3
use frontend_calls::*;
4
5
-
use crate::{ osc::OSCMessage, runtime::nodes::RuntimeNodeTree, setup::setup, utils::config::Config };
6
7
mod frontend_calls;
8
mod osc;
9
mod setup;
10
mod structs;
11
mod utils;
12
-
mod runtime;
13
14
#[cfg_attr(mobile, tauri::mobile_entry_point)]
15
#[tokio::main]
···
19
match fs::metadata(&container_folder) {
20
Ok(meta) => {
21
if meta.is_file() {
22
-
panic!(
23
-
"document.write('Cannot launch app as the container path is a file not a directory')"
24
-
);
25
}
26
}
27
Err(_) => {
···
34
35
static ADDRESSES: Mutex<Vec<OSCMessage>> = Mutex::new(Vec::new());
36
37
-
let ( runtime_sender, runtime_receiver ) = sync::mpsc::channel();
38
39
tauri::Builder::default()
40
.plugin(tauri_plugin_dialog::init())
41
.plugin(tauri_plugin_opener::init())
42
.invoke_handler(tauri::generate_handler![
43
get_addresses::get_addresses,
44
save_graph::save_graph,
45
sync_tab::sync_tab,
46
-
sync_tab::discard_tab
47
])
48
.manage(conf)
49
.manage(&ADDRESSES)
···
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)]
16
#[tokio::main]
···
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(_) => {
···
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)
+3
-1
src-tauri/src/main.rs
+3
-1
src-tauri/src/main.rs
+2
-3
src-tauri/src/osc.rs
+2
-3
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
use serde::Serialize;
6
7
use crate::structs::parameter_types::ParameterType;
···
160
}
161
}
162
163
-
println!("{:X?}", &buf);
164
socket.send_to(&buf, ip_addr).unwrap();
165
}
+5
-4
src-tauri/src/runtime/commands.rs
+5
-4
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
+36
-23
src-tauri/src/runtime/nodes/debug.rs
+36
-23
src-tauri/src/runtime/nodes/debug.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct Debug{
4
-
to_log: Option<ParameterType>
5
}
6
7
-
impl Debug{
8
-
pub fn new( node: Node ) -> Box<Self>{
9
-
Box::new(Self { to_log: None })
10
}
11
}
12
13
-
impl RuntimeNode for Debug{
14
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> { vec![] }
15
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> { Some(vec![]) }
16
17
-
fn execute( &mut self ) -> bool {
18
-
dbg!(&self.to_log);
19
-
self.to_log = None;
20
21
-
false
22
}
23
24
-
fn update_arg( &mut self, index: usize, value: ParameterType ) -> bool {
25
-
if index == 1{
26
-
self.to_log = Some(value);
27
-
true
28
-
} else{
29
-
false
30
-
}
31
}
32
-
33
-
fn is_entrypoint( &self ) -> bool { false }
34
-
}
···
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
+
}
+51
-39
src-tauri/src/runtime/nodes/osctrigger.rs
+51
-39
src-tauri/src/runtime/nodes/osctrigger.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct OSCTrigger{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
address: String,
6
-
runtime_active: bool
7
}
8
9
-
impl OSCTrigger{
10
-
pub fn new( node: Node ) -> Box<Self>{
11
-
dbg!(&node);
12
13
Box::new(Self {
14
-
address: node.statics[0].value.as_str().unwrap().to_owned(),
15
-
outputs: node.outputs.iter()
16
-
.map(| x | {
17
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
18
-
}).collect(),
19
-
runtime_active: false
20
})
21
}
22
}
23
24
-
impl RuntimeNode for OSCTrigger{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
26
self.outputs.clone()
27
}
28
29
-
fn execute_dry( &mut self, msg: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> {
30
-
if let ParameterType::String(address) = &msg[0]{
31
-
if *address == self.address{
32
-
self.runtime_active = true;
33
-
Some(msg.clone())
34
-
// The first value is technically the address value,
35
-
// but this value gets ignored as the first output of
36
-
// the osctrigger node is a flow output which gets ignored
37
-
// on dry runs.
38
} else{
39
-
self.runtime_active = false;
40
-
None
41
}
42
} else{
43
-
self.runtime_active = false;
44
-
None
45
-
}
46
-
}
47
-
48
-
fn execute( &mut self ) -> bool {
49
-
let execute = self.runtime_active;
50
-
self.runtime_active = false;
51
52
-
execute
53
}
54
55
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
56
-
fn is_entrypoint( &self ) -> bool { true }
57
-
}
···
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
+
}
+85
-19
src-tauri/src/runtime/nodes.rs
+85
-19
src-tauri/src/runtime/nodes.rs
···
1
-
use std::{collections::HashMap, sync::Mutex};
2
3
-
use crate::{ runtime::nodes::{ debug::Debug, osctrigger::OSCTrigger }, structs::{ nodes::Node, parameter_types::ParameterType } };
4
5
-
mod osctrigger;
6
mod debug;
7
8
-
pub struct RuntimeNodeTree{
9
-
pub nodes: HashMap<String, Mutex<Box<dyn RuntimeNode>>>
10
}
11
12
-
impl RuntimeNodeTree{
13
-
pub fn from( tree: Vec<Node> ) -> Self{
14
-
let mut runtime_nodes: HashMap<String, Mutex<Box<dyn RuntimeNode>>> = HashMap::new();
15
-
for node in tree{
16
-
match node.type_id.as_str(){
17
-
"osctrigger" => { runtime_nodes.insert(node.id.clone(), Mutex::new(OSCTrigger::new(node))); }
18
-
"debug" => { runtime_nodes.insert(node.id.clone(), Mutex::new(Debug::new(node))); }
19
_ => {}
20
}
21
}
22
23
-
Self { nodes: runtime_nodes }
24
}
25
}
26
27
-
pub trait RuntimeNode{
28
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>>; // Node ID, input index, output value type
29
-
fn execute_dry( &mut self, msg: &Vec<ParameterType> ) -> Option<Vec<ParameterType>>; // Only update values on the first loop through
30
-
fn execute( &mut self ) -> bool; // Then call functions on the second loop
31
-
fn update_arg( &mut self, index: usize, value: ParameterType ) -> bool;
32
-
fn is_entrypoint( &self ) -> bool;
33
}
···
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
}
+67
-45
src-tauri/src/runtime.rs
+67
-45
src-tauri/src/runtime.rs
···
1
-
use anyhow::{ bail, Result };
2
3
-
use crate::{ runtime::nodes::RuntimeNodeTree, structs::parameter_types::ParameterType };
4
-
5
-
pub mod nodes;
6
-
pub mod commands;
7
8
-
// This is horrible. I know, I'm sorry.
9
10
-
pub fn runtime_dry( entry: String, parameters: &Vec<ParameterType>, tab: &RuntimeNodeTree ) -> Result<()>{
11
-
let node = tab.nodes.get(&entry);
12
-
if node.is_none(){ bail!("Cannot find node"); }
13
14
-
let mut node = node.unwrap().lock().unwrap();
15
16
-
let output_map = node.outputs();
17
-
let args = node.execute_dry(parameters);
18
19
-
drop(node);
20
21
-
if args.is_some(){
22
-
let args = args.unwrap();
23
24
-
for i in 0..args.len(){
25
-
let arg = &args[i];
26
27
-
for output in &output_map[i]{
28
-
if output.2 == 5{ break; } // Ignore flow outputs
29
30
-
let next_node = tab.nodes.get(&output.0);
31
-
if next_node.is_none(){ bail!("Cannot find node {}", output.0) }
32
33
-
let mut next_node = next_node.unwrap().lock().unwrap();
34
-
let can_update = next_node.update_arg(output.1 as usize, arg.clone());
35
36
-
if can_update{
37
-
drop(next_node);
38
-
// ^^ Drop this MutexGuard before we enter the runtime,
39
-
// as it blocks the runtime for gaining a lock on the node
40
-
// TODO: Please find a better way of making it mutable
41
42
-
runtime_dry(output.0.clone(), &vec![], &tab)?;
43
}
44
}
45
}
···
48
Ok(())
49
}
50
51
52
-
pub fn runtime( entry: String, tab: &RuntimeNodeTree ) -> Result<()>{
53
-
let node = tab.nodes.get(&entry);
54
-
if node.is_none(){ bail!("Cannot find node"); }
55
56
-
let mut node = node.unwrap().lock().unwrap();
57
58
-
let next = node.execute();
59
-
if next{
60
-
let outputs = node.outputs();
61
62
-
drop(node);
63
64
-
for outputs in outputs{
65
-
for output in outputs{
66
-
if output.2 == 5{
67
-
// This is a flow output, continue
68
-
runtime(output.0, &tab)?;
69
-
}
70
}
71
}
72
}
73
74
-
Ok(())
75
-
}
···
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
}
···
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
+
}
-97
src-tauri/src/runtime.rs.old
-97
src-tauri/src/runtime.rs.old
···
1
-
use std::collections::HashMap;
2
-
3
-
use anyhow::bail;
4
-
5
-
use crate::{ osc::OSCMessage, structs::{ nodes::{ Node, Tab }, parameter_types::ParameterType } };
6
-
7
-
pub fn start_runtime(
8
-
tab: &Tab,
9
-
msg: &OSCMessage,
10
-
node_execution_table:
11
-
&HashMap<String, Box<dyn Fn(&Node, &OSCMessage, Vec<ParameterType>) -> Vec<ParameterType>>>
12
-
) -> anyhow::Result<()>{
13
-
for i in 0..tab.nodes.len(){
14
-
let node = &tab.nodes[i];
15
-
16
-
if node.type_id == "osctrigger"{
17
-
runtime(&tab.nodes, i, msg, node_execution_table)?;
18
-
}
19
-
}
20
-
21
-
Ok(())
22
-
}
23
-
24
-
fn runtime(
25
-
nodes: &Vec<Node>,
26
-
index: usize,
27
-
msg: &OSCMessage,
28
-
node_execution_table:
29
-
&HashMap<String, Box<dyn Fn(&Node, &OSCMessage, Vec<ParameterType>) -> Vec<ParameterType>>>
30
-
) -> anyhow::Result<()>{
31
-
let node = &nodes[index];
32
-
33
-
let execute_node = node_execution_table.get(&node.type_id);
34
-
if execute_node.is_none(){ bail!("Cannot find node in execution table."); }
35
-
36
-
let res = execute_node.unwrap()(node, msg, vec![]);
37
-
if res.len() == 0{ return Ok(()); }
38
-
39
-
let nodes_length = (&nodes).len();
40
-
41
-
for i in 0..res.len(){
42
-
let output = &node.outputs[i];
43
-
if output.value_type == 5 { // 5 - Flow Type
44
-
45
-
if let ParameterType::Flow(run) = res[i]{
46
-
47
-
if run{
48
-
let connections = &output.connections;
49
-
for connection in connections{
50
-
let mut found_node = None;
51
-
52
-
for i in 0..nodes_length{
53
-
let node = &nodes[i];
54
-
55
-
if node.id == connection.node{
56
-
found_node = Some(i);
57
-
break;
58
-
}
59
-
}
60
-
61
-
if found_node.is_some(){
62
-
runtime(nodes, found_node.unwrap(), msg, node_execution_table)?;
63
-
}
64
-
}
65
-
}
66
-
}
67
-
}
68
-
}
69
-
70
-
Ok(())
71
-
}
72
-
73
-
pub fn load_excecution_table(
74
-
node_execution_table:
75
-
&mut HashMap<String, Box<dyn Fn(&Node, &OSCMessage, Vec<ParameterType>) -> Vec<ParameterType>>>
76
-
){
77
-
node_execution_table.insert("osctrigger".into(), Box::new(| node, msg, _ |{
78
-
if node.statics[0].value.is_null(){ return vec![ ParameterType::Flow(false) ] }
79
-
80
-
let node_addr = node.statics[0].value.as_str().unwrap().to_owned();
81
-
if node_addr == msg.address{
82
-
let mut dat = vec![
83
-
ParameterType::Flow(true)
84
-
];
85
-
86
-
dat.extend(msg.values.clone());
87
-
dat
88
-
} else{
89
-
vec![ ParameterType::Flow(false) ]
90
-
}
91
-
}));
92
-
93
-
node_execution_table.insert("debug".into(), Box::new(| _, _, args |{
94
-
dbg!(&args[1]);
95
-
vec![]
96
-
}));
97
-
}
···
+74
-42
src-tauri/src/setup.rs
+74
-42
src-tauri/src/setup.rs
···
1
-
use std::{ collections::HashMap, fs::File, io::Read, sync::{ self, mpsc::Receiver, Mutex } };
2
3
use flate2::read::GzDecoder;
4
-
use serde_json::{ Map, Value };
5
-
use tauri::{ App, Emitter, Listener, Manager };
6
7
-
use crate::{ osc::{ self, OSCMessage }, runtime::{ commands::RuntimeCommand, nodes::RuntimeNodeTree, runtime, runtime_dry }, structs::parameter_types::ParameterType };
8
9
pub fn setup(
10
app: &mut App,
11
addresses: &'static Mutex<Vec<OSCMessage>>,
12
-
runtime_command_receiver: Receiver<RuntimeCommand>
13
) {
14
let window = app.get_webview_window("main").unwrap();
15
16
let handle = window.clone();
17
window.listen("tauri://drag-drop", move |ev| {
···
32
handle.emit("load_new_tab", Value::Object(map)).unwrap();
33
});
34
35
-
let ( sender, receiver ) = sync::mpsc::channel();
36
37
tokio::spawn(async move {
38
osc::start_server(sender, "127.0.0.1:9001");
39
});
40
41
-
let ( runtime_sender, runtime_receiver ) = sync::mpsc::channel();
42
43
let runtime_sender_1 = runtime_sender.clone();
44
tokio::spawn(async move {
···
55
window.emit("osc-message", &message).unwrap();
56
57
let msg = message.clone();
58
-
let mut addresses = addresses.lock().unwrap();
59
-
if !addresses.contains(&msg) { addresses.push(msg); }
60
61
-
runtime_sender.send(RuntimeCommand::OSCMessage(message)).unwrap();
62
}
63
});
64
65
tokio::spawn(async move {
66
let mut tabs: HashMap<String, RuntimeNodeTree> = HashMap::new();
67
68
loop {
69
let cmd = runtime_receiver.recv().unwrap();
70
71
-
match cmd{
72
-
RuntimeCommand::OSCMessage( msg ) => {
73
-
for ( _, tab ) in &mut tabs{
74
-
for ( id, node ) in &tab.nodes{
75
-
let node = node.lock().unwrap();
76
-
77
-
if node.is_entrypoint(){
78
-
let args = vec![
79
-
vec![ ParameterType::String(msg.address.clone()) ], msg.values.clone()
80
-
].concat();
81
-
82
-
drop(node);
83
-
// ^^ Drop this MutexGuard before we enter the runtime,
84
-
// as it blocks the runtime for gaining a lock on the node
85
-
// TODO: Please find a better way of making it mutable
86
-
87
-
runtime_dry(id.clone(), &args, tab).unwrap();
88
-
}
89
-
}
90
91
-
for ( id, node ) in &tab.nodes{
92
-
let node = node.lock().unwrap();
93
94
-
if node.is_entrypoint(){
95
-
drop(node);
96
-
// ^^ Drop this MutexGuard before we enter the runtime,
97
-
// as it blocks the runtime for gaining a lock on the node
98
-
// TODO: Please find a better way of making it mutable
99
100
-
runtime(id.clone(), tab).unwrap();
101
}
102
}
103
}
104
-
},
105
106
-
RuntimeCommand::AddTab( graph, id ) => {
107
-
tabs.insert(id, RuntimeNodeTree::from(graph));
108
-
},
109
-
RuntimeCommand::RemoveTab( id ) => {
110
tabs.remove(&id);
111
}
112
}
···
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| {
···
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 {
···
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
}
+1
-1
src-tauri/src/structs/mod.rs
+1
-1
src-tauri/src/structs/mod.rs
+17
-20
src-tauri/src/structs/nodes.rs
+17
-20
src-tauri/src/structs/nodes.rs
···
1
-
use serde::{ Deserialize, Serialize };
2
use serde_json::Value;
3
4
-
#[derive(Serialize, Deserialize, Debug)]
5
-
pub struct Node{
6
pub id: String,
7
pub name: String,
8
-
pub outputs: Vec<NodeOutput>,
9
-
pub pos: [ f32; 2 ],
10
pub statics: Vec<NodeStatic>,
11
12
#[serde(rename = "typeId")]
13
-
pub type_id: String
14
}
15
16
-
impl Node{
17
-
18
-
}
19
-
20
-
#[derive(Serialize, Deserialize, Debug)]
21
-
pub struct NodeStatic{
22
pub name: String,
23
24
#[serde(rename = "type")]
25
pub value_type: isize,
26
-
pub value: Value
27
}
28
29
-
#[derive(Serialize, Deserialize, Debug)]
30
-
pub struct NodeOutput{
31
pub name: String,
32
33
#[serde(rename = "type")]
34
pub value_type: isize,
35
-
pub connections: Vec<NodeOutputConnections>
36
}
37
38
-
#[derive(Serialize, Deserialize, Debug)]
39
-
pub struct NodeOutputConnections{
40
pub name: String,
41
pub node: String,
42
pub index: isize,
43
44
#[serde(rename = "type")]
45
-
pub value_type: isize
46
-
}
···
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
+
}
+55
-1
src-tauri/src/structs/parameter_types.rs
+55
-1
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),
···
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
}
+27
-26
src-tauri/src/utils/config.rs
+27
-26
src-tauri/src/utils/config.rs
···
3
fs::File,
4
io::{Read, Write},
5
path::PathBuf,
6
-
sync::Mutex,
7
};
8
9
use flate2::{read::GzDecoder, write::GzEncoder, Compression};
10
-
use serde_json::Value;
11
12
pub struct Config {
13
-
store: Mutex<HashMap<String, Value>>,
14
path: PathBuf,
15
}
16
···
26
"{}".into()
27
};
28
29
-
let json: Value = serde_json::from_str(&json_string).unwrap();
30
-
31
-
let mut hashmap = HashMap::new();
32
-
33
-
let obj = json.as_object().unwrap();
34
-
for (key, val) in obj {
35
-
hashmap.insert(key.clone(), val.clone());
36
-
}
37
38
Config {
39
-
store: Mutex::new(hashmap),
40
path: path,
41
}
42
}
43
44
-
pub fn set(&self, key: &str, value: Value) {
45
-
self.store.lock().unwrap().insert(key.to_owned(), value);
46
-
}
47
48
-
pub fn get(&self, key: &str) -> Option<Value> {
49
-
let store = self.store.lock().unwrap();
50
-
let val = store.get(&key.to_owned());
51
52
-
if val.is_none() {
53
-
None
54
-
} else {
55
-
Some(val.unwrap().clone())
56
-
}
57
}
58
59
-
pub fn save(&self) {
60
-
let dat = serde_json::to_string(&self.store.lock().unwrap().clone()).unwrap();
61
-
dbg!(&dat);
62
63
let file = File::create(&self.path).unwrap();
64
let mut encoder = GzEncoder::new(file, Compression::default());
···
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
···
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());
+2
src-tauri/src/utils/mod.rs
+2
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
+
}
+1
-1
vite.config.ts
+1
-1
vite.config.ts