+5
-2
.gitignore
+5
-2
.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>
+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
+86
-40
src/Mangers/NodeManager.tsx
+86
-40
src/Mangers/NodeManager.tsx
···
7
import { NodesByID } from "../Nodes/Nodes";
8
import { save } from "@tauri-apps/plugin-dialog";
9
import { ConfirmationManager } from "./ConfirmationManager";
10
-
import { getCurrentWindow } from "@tauri-apps/api/window";
11
12
export interface TabHashMap {
13
[details: string] : Tab;
···
24
constructor(){
25
NodeManager.Instance = this;
26
27
listen('load_new_tab', ( ev: any ) => {
28
this._loadFromConfig(ev.payload.path, null, ev.payload.graph);
29
});
···
32
let version = await getVersion();
33
34
for(let tab of Object.entries<any>(tabs)){
35
-
console.log(tab);
36
-
37
-
await this._loadFromConfig(tab[1][2], tab[0], JSON.stringify({
38
tab_name: tab[1][1],
39
version,
40
graph: tab[1][0]
41
}));
42
};
43
});
44
45
-
(async () => {
46
-
let window = await getCurrentWindow();
47
48
-
window.onCloseRequested(async _ => {
49
-
let tabs = Object.values(this._tabs);
50
-
let tabsNeedingSaving = tabs.filter(x => x.needsSave());
51
-
52
-
for(let tab of tabsNeedingSaving){
53
-
await new Promise<void>(res => {
54
-
ConfirmationManager.Instance.ShowConfirmation(
55
-
`Discard Changes in ${tab.name}?`,
56
-
'If you close this tab without saving you will lose all changes.',
57
-
[
58
-
{
59
-
text: 'Save',
60
-
callback: async () => {
61
-
await this.SaveTab(tab);
62
-
res();
63
-
}
64
-
},
65
-
{
66
-
text: 'Don\'t Save',
67
-
callback: () => { res(); }
68
}
69
-
]
70
-
)
71
-
});
72
-
}
73
-
});
74
-
})();
75
}
76
77
78
private _tabUpdateHook: ( tabs: TabHashMap ) => void = () => {};
79
private _tabChangeHook: () => void = () => {};
80
81
public async AddTab( name: string, id: string | null = null ): Promise<Tab>{
82
let [ selected, setSelected ] = createSignal(false);
···
94
needsSave,
95
setNeedsSave,
96
97
-
refuseSync: false
98
};
99
100
this._tabs[tab.id] = tab;
···
189
}
190
}
191
192
-
public async SaveTab( tab: Tab ){
193
let path =
194
-
tab.saveLocation ||
195
await save({ defaultPath: tab.name + '.macro', filters: [ { name: 'Macro Files', extensions: [ 'macro' ] } ] });
196
197
if(!path)throw new Error("Cannot save");
···
246
let tab = this._tabs[this._selectedTab];
247
if(!tab)return;
248
249
-
if(tab.refuseSync)return;
250
-
invoke('sync_tab', { graph: this._generateTabGraph(tab.id)[0], id: tab.id, name: tab.name, location: tab.saveLocation });
251
252
if(needsSave)tab.setNeedsSave(true);
253
}
···
262
)return;
263
264
let tab = await this.AddTab(json.tab_name, id);
265
-
tab.refuseSync = true;
266
tab.saveLocation = path;
267
268
this._nodes = [];
···
293
let input = output.connections[k];
294
let node = this._nodes.find(x => x.id === input.node)!;
295
296
let realInput = node.inputs.find(x => x.index === input.index);
297
let realOutput = outputParentNode.outputs[j];
298
···
318
tab.setNeedsSave(false);
319
tab.nodes = this._nodes;
320
321
-
tab.refuseSync = false;
322
-
this.UpdateConfig(false);
323
}
324
325
private _generateTabGraph( tabId: string | null ): [ any, Tab | null ]{
···
335
let node = tab.nodes[i];
336
337
let nodeOutputs = [];
338
339
for (let j = 0; j < node.outputs.length; j++) {
340
let output = node.outputs[j];
···
351
})
352
}
353
354
nodesToSave.push({
355
name: node.name,
356
id: node.id,
357
typeId: node.typeId,
358
pos: [ node.x, node.y ],
359
outputs: nodeOutputs,
360
statics: node.statics
361
})
362
}
···
371
invoke('save_graph', { graph: JSON.stringify({
372
tab_name: tab.name,
373
version: await getVersion(),
374
graph: nodesToSave
375
}), path });
376
}
···
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;
···
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
});
···
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);
···
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");
···
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
}
···
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
+
};
+3
-2
src/Nodes/Statics/Float.tsx
+3
-2
src/Nodes/Statics/Float.tsx
···
2
import { NodeDefinition } from "../Nodes";
3
4
export let NodeStaticsFloat: NodeDefinition = {
5
isSingle: true,
6
name: 'Float',
7
typeId: 'staticfloat',
8
9
w: 200,
10
-
h: 85,
11
12
statics: [{
13
type: NodeType.Float,
14
name: 'Value',
15
-
value: null
16
}],
17
18
outputs: [{ name: "Float", type: NodeType.Float }],
···
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 }],
+3
-2
src/Nodes/Statics/Int.tsx
+3
-2
src/Nodes/Statics/Int.tsx
···
2
import { NodeDefinition } from "../Nodes";
3
4
export let NodeStaticsInt: NodeDefinition = {
5
isSingle: true,
6
name: 'Int',
7
typeId: 'staticint',
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 }],
+2
src/Nodes/Statics.tsx
+2
src/Nodes/Statics.tsx
+1
-1
src/components/ConfirmationPopup.tsx
+1
-1
src/components/ConfirmationPopup.tsx
+8
-12
src/components/ControlBar.tsx
+8
-12
src/components/ControlBar.tsx
···
1
import './ControlBar.css';
2
3
-
import { Accessor, createEffect, createSignal, For, Match, Show, Switch } from 'solid-js';
4
import { Node, NodeType } from '../structs/node';
5
import { TextInput } from './TextInput';
6
import { invoke } from '@tauri-apps/api/core';
···
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
-
createEffect(() => {
18
-
console.log(props.node());
19
-
})
20
-
21
return (
22
<div class="control-bar">
23
-
<For each={props.node()?.statics}>
24
{ ( item ) => {
25
let [ popupOpen, setPopupOpen ] = createSignal(false);
26
···
36
value={item.value || ''}
37
onChange={( el ) => {
38
let value = el.target.value;
39
-
let node = props.node()!;
40
41
item.value = value;
42
node.onStaticsUpdate(node);
···
54
value={item.value !== undefined ? item.value : ''}
55
onChange={( el ) => {
56
let value = el.target.value;
57
-
let node = props.node()!;
58
59
item.value = parseInt(value);
60
node.onStaticsUpdate(node);
···
72
value={item.value !== undefined ? item.value : ''}
73
onChange={( el ) => {
74
let value = el.target.value;
75
-
let node = props.node()!;
76
77
item.value = parseFloat(value);
78
node.onStaticsUpdate(node);
···
92
return addresses.map(x => x.address).filter(x => x.toLowerCase().includes(text.toLowerCase()));
93
}}
94
change={( text ) => {
95
-
let node = props.node()!;
96
97
item.value = text;
98
node.onStaticsUpdate(node);
···
118
}}
119
value={item.value}
120
changed={( value ) => {
121
-
let node = props.node()!;
122
123
item.value = value;
124
node.onStaticsUpdate(node);
···
1
import './ControlBar.css';
2
3
+
import { Accessor, createSignal, For, Match, Show, Switch } from 'solid-js';
4
import { Node, NodeType } from '../structs/node';
5
import { TextInput } from './TextInput';
6
import { invoke } from '@tauri-apps/api/core';
···
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
···
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);
···
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);
···
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);
···
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
+
}
+29
src/components/TabMenu.css
+29
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;
···
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
}
+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
+
}
+1220
-703
src-tauri/Cargo.lock
+1220
-703
src-tauri/Cargo.lock
···
7
version = "0.1.0"
8
dependencies = [
9
"anyhow",
10
"crossbeam-channel",
11
"dirs",
12
"flate2",
13
"serde",
14
"serde_json",
15
"tauri",
16
"tauri-build",
17
"tauri-plugin-dialog",
18
"tauri-plugin-opener",
19
"tokio",
20
]
21
22
[[package]]
23
-
name = "addr2line"
24
-
version = "0.24.2"
25
-
source = "registry+https://github.com/rust-lang/crates.io-index"
26
-
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
27
-
dependencies = [
28
-
"gimli",
29
-
]
30
-
31
-
[[package]]
32
name = "adler2"
33
version = "2.0.1"
34
source = "registry+https://github.com/rust-lang/crates.io-index"
···
36
37
[[package]]
38
name = "aho-corasick"
39
-
version = "1.1.3"
40
source = "registry+https://github.com/rust-lang/crates.io-index"
41
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
42
dependencies = [
43
"memchr",
44
]
···
59
]
60
61
[[package]]
62
-
name = "android-tzdata"
63
-
version = "0.1.1"
64
-
source = "registry+https://github.com/rust-lang/crates.io-index"
65
-
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
66
-
67
-
[[package]]
68
name = "android_system_properties"
69
version = "0.1.5"
70
source = "registry+https://github.com/rust-lang/crates.io-index"
···
75
76
[[package]]
77
name = "anyhow"
78
-
version = "1.0.99"
79
source = "registry+https://github.com/rust-lang/crates.io-index"
80
-
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
81
82
[[package]]
83
name = "ashpd"
···
126
127
[[package]]
128
name = "async-executor"
129
-
version = "1.13.2"
130
source = "registry+https://github.com/rust-lang/crates.io-index"
131
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
132
dependencies = [
133
"async-task",
134
"concurrent-queue",
···
140
141
[[package]]
142
name = "async-io"
143
-
version = "2.5.0"
144
source = "registry+https://github.com/rust-lang/crates.io-index"
145
-
checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
146
dependencies = [
147
-
"async-lock",
148
"cfg-if",
149
"concurrent-queue",
150
"futures-io",
151
"futures-lite",
152
"parking",
153
"polling",
154
-
"rustix",
155
"slab",
156
-
"windows-sys 0.60.2",
157
]
158
159
[[package]]
160
name = "async-lock"
161
-
version = "3.4.0"
162
source = "registry+https://github.com/rust-lang/crates.io-index"
163
-
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
164
dependencies = [
165
"event-listener",
166
"event-listener-strategy",
···
169
170
[[package]]
171
name = "async-process"
172
-
version = "2.4.0"
173
source = "registry+https://github.com/rust-lang/crates.io-index"
174
-
checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
175
dependencies = [
176
"async-channel",
177
"async-io",
···
182
"cfg-if",
183
"event-listener",
184
"futures-lite",
185
-
"rustix",
186
]
187
188
[[package]]
···
193
dependencies = [
194
"proc-macro2",
195
"quote",
196
-
"syn 2.0.104",
197
]
198
199
[[package]]
200
name = "async-signal"
201
-
version = "0.2.12"
202
source = "registry+https://github.com/rust-lang/crates.io-index"
203
-
checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
204
dependencies = [
205
"async-io",
206
"async-lock",
···
208
"cfg-if",
209
"futures-core",
210
"futures-io",
211
-
"rustix",
212
"signal-hook-registry",
213
"slab",
214
-
"windows-sys 0.60.2",
215
]
216
217
[[package]]
···
222
223
[[package]]
224
name = "async-trait"
225
-
version = "0.1.88"
226
source = "registry+https://github.com/rust-lang/crates.io-index"
227
-
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
228
dependencies = [
229
"proc-macro2",
230
"quote",
231
-
"syn 2.0.104",
232
]
233
234
[[package]]
···
267
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
268
269
[[package]]
270
-
name = "backtrace"
271
-
version = "0.3.75"
272
-
source = "registry+https://github.com/rust-lang/crates.io-index"
273
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
274
-
dependencies = [
275
-
"addr2line",
276
-
"cfg-if",
277
-
"libc",
278
-
"miniz_oxide",
279
-
"object",
280
-
"rustc-demangle",
281
-
"windows-targets 0.52.6",
282
-
]
283
-
284
-
[[package]]
285
name = "base64"
286
version = "0.21.7"
287
source = "registry+https://github.com/rust-lang/crates.io-index"
···
301
302
[[package]]
303
name = "bitflags"
304
-
version = "2.9.1"
305
source = "registry+https://github.com/rust-lang/crates.io-index"
306
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
307
dependencies = [
308
-
"serde",
309
]
310
311
[[package]]
···
328
329
[[package]]
330
name = "block2"
331
-
version = "0.6.1"
332
source = "registry+https://github.com/rust-lang/crates.io-index"
333
-
checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
334
dependencies = [
335
-
"objc2 0.6.1",
336
]
337
338
[[package]]
···
350
351
[[package]]
352
name = "brotli"
353
-
version = "8.0.1"
354
source = "registry+https://github.com/rust-lang/crates.io-index"
355
-
checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
356
dependencies = [
357
"alloc-no-stdlib",
358
"alloc-stdlib",
···
377
378
[[package]]
379
name = "bytemuck"
380
-
version = "1.23.1"
381
source = "registry+https://github.com/rust-lang/crates.io-index"
382
-
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
383
384
[[package]]
385
name = "byteorder"
386
version = "1.5.0"
387
source = "registry+https://github.com/rust-lang/crates.io-index"
388
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
389
390
[[package]]
391
name = "bytes"
···
402
source = "registry+https://github.com/rust-lang/crates.io-index"
403
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
404
dependencies = [
405
-
"bitflags 2.9.1",
406
"cairo-sys-rs",
407
"glib",
408
"libc",
···
423
424
[[package]]
425
name = "camino"
426
-
version = "1.1.10"
427
source = "registry+https://github.com/rust-lang/crates.io-index"
428
-
checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
429
dependencies = [
430
-
"serde",
431
]
432
433
[[package]]
···
450
"semver",
451
"serde",
452
"serde_json",
453
-
"thiserror 2.0.12",
454
]
455
456
[[package]]
···
460
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
461
dependencies = [
462
"serde",
463
-
"toml 0.9.3",
464
]
465
466
[[package]]
467
name = "cc"
468
-
version = "1.2.30"
469
source = "registry+https://github.com/rust-lang/crates.io-index"
470
-
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
471
dependencies = [
472
"shlex",
473
]
474
···
501
502
[[package]]
503
name = "cfg-if"
504
-
version = "1.0.1"
505
source = "registry+https://github.com/rust-lang/crates.io-index"
506
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
507
508
[[package]]
509
name = "cfg_aliases"
···
513
514
[[package]]
515
name = "chrono"
516
-
version = "0.4.41"
517
source = "registry+https://github.com/rust-lang/crates.io-index"
518
-
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
519
dependencies = [
520
-
"android-tzdata",
521
"iana-time-zone",
522
"num-traits",
523
"serde",
524
-
"windows-link",
525
]
526
527
[[package]]
···
581
source = "registry+https://github.com/rust-lang/crates.io-index"
582
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
583
dependencies = [
584
-
"bitflags 2.9.1",
585
"core-foundation",
586
"core-graphics-types",
587
"foreign-types",
···
594
source = "registry+https://github.com/rust-lang/crates.io-index"
595
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
596
dependencies = [
597
-
"bitflags 2.9.1",
598
"core-foundation",
599
"libc",
600
]
···
633
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
634
635
[[package]]
636
name = "crypto-common"
637
version = "0.1.6"
638
source = "registry+https://github.com/rust-lang/crates.io-index"
···
666
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
667
dependencies = [
668
"quote",
669
-
"syn 2.0.104",
670
]
671
672
[[package]]
···
676
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
677
dependencies = [
678
"quote",
679
-
"syn 2.0.104",
680
]
681
682
[[package]]
683
name = "darling"
684
-
version = "0.20.11"
685
source = "registry+https://github.com/rust-lang/crates.io-index"
686
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
687
dependencies = [
688
"darling_core",
689
"darling_macro",
···
691
692
[[package]]
693
name = "darling_core"
694
-
version = "0.20.11"
695
source = "registry+https://github.com/rust-lang/crates.io-index"
696
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
697
dependencies = [
698
"fnv",
699
"ident_case",
700
"proc-macro2",
701
"quote",
702
"strsim",
703
-
"syn 2.0.104",
704
]
705
706
[[package]]
707
name = "darling_macro"
708
-
version = "0.20.11"
709
source = "registry+https://github.com/rust-lang/crates.io-index"
710
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
711
dependencies = [
712
"darling_core",
713
"quote",
714
-
"syn 2.0.104",
715
]
716
717
[[package]]
718
name = "deranged"
719
-
version = "0.4.0"
720
source = "registry+https://github.com/rust-lang/crates.io-index"
721
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
722
dependencies = [
723
"powerfmt",
724
-
"serde",
725
]
726
727
[[package]]
···
734
"proc-macro2",
735
"quote",
736
"rustc_version",
737
-
"syn 2.0.104",
738
]
739
740
[[package]]
···
765
"libc",
766
"option-ext",
767
"redox_users",
768
-
"windows-sys 0.60.2",
769
]
770
771
[[package]]
···
780
source = "registry+https://github.com/rust-lang/crates.io-index"
781
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
782
dependencies = [
783
-
"bitflags 2.9.1",
784
-
"block2 0.6.1",
785
"libc",
786
-
"objc2 0.6.1",
787
]
788
789
[[package]]
···
794
dependencies = [
795
"proc-macro2",
796
"quote",
797
-
"syn 2.0.104",
798
]
799
800
[[package]]
···
803
source = "registry+https://github.com/rust-lang/crates.io-index"
804
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
805
dependencies = [
806
-
"libloading",
807
]
808
809
[[package]]
810
name = "dlopen2"
811
-
version = "0.7.0"
812
source = "registry+https://github.com/rust-lang/crates.io-index"
813
-
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
814
dependencies = [
815
"dlopen2_derive",
816
"libc",
···
826
dependencies = [
827
"proc-macro2",
828
"quote",
829
-
"syn 2.0.104",
830
]
831
832
[[package]]
···
873
874
[[package]]
875
name = "embed-resource"
876
-
version = "3.0.5"
877
source = "registry+https://github.com/rust-lang/crates.io-index"
878
-
checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38"
879
dependencies = [
880
"cc",
881
"memchr",
882
"rustc_version",
883
-
"toml 0.9.3",
884
"vswhom",
885
"winreg",
886
]
···
898
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
899
900
[[package]]
901
name = "enumflags2"
902
version = "0.7.12"
903
source = "registry+https://github.com/rust-lang/crates.io-index"
···
915
dependencies = [
916
"proc-macro2",
917
"quote",
918
-
"syn 2.0.104",
919
]
920
921
[[package]]
···
926
927
[[package]]
928
name = "erased-serde"
929
-
version = "0.4.6"
930
source = "registry+https://github.com/rust-lang/crates.io-index"
931
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
932
dependencies = [
933
"serde",
934
"typeid",
935
]
936
937
[[package]]
938
name = "errno"
939
-
version = "0.3.13"
940
source = "registry+https://github.com/rust-lang/crates.io-index"
941
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
942
dependencies = [
943
"libc",
944
-
"windows-sys 0.60.2",
945
]
946
947
[[package]]
948
name = "event-listener"
949
-
version = "5.4.0"
950
source = "registry+https://github.com/rust-lang/crates.io-index"
951
-
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
952
dependencies = [
953
"concurrent-queue",
954
"parking",
···
972
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
973
974
[[package]]
975
name = "fdeflate"
976
version = "0.3.7"
977
source = "registry+https://github.com/rust-lang/crates.io-index"
···
991
]
992
993
[[package]]
994
name = "flate2"
995
-
version = "1.1.2"
996
source = "registry+https://github.com/rust-lang/crates.io-index"
997
-
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
998
dependencies = [
999
"crc32fast",
1000
"miniz_oxide",
···
1007
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1008
1009
[[package]]
1010
name = "foreign-types"
1011
version = "0.5.0"
1012
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1024
dependencies = [
1025
"proc-macro2",
1026
"quote",
1027
-
"syn 2.0.104",
1028
]
1029
1030
[[package]]
···
1035
1036
[[package]]
1037
name = "form_urlencoded"
1038
-
version = "1.2.1"
1039
source = "registry+https://github.com/rust-lang/crates.io-index"
1040
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
1041
dependencies = [
1042
"percent-encoding",
1043
]
···
1086
1087
[[package]]
1088
name = "futures-lite"
1089
-
version = "2.6.0"
1090
source = "registry+https://github.com/rust-lang/crates.io-index"
1091
-
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
1092
dependencies = [
1093
"fastrand",
1094
"futures-core",
···
1105
dependencies = [
1106
"proc-macro2",
1107
"quote",
1108
-
"syn 2.0.104",
1109
]
1110
1111
[[package]]
···
1247
1248
[[package]]
1249
name = "generic-array"
1250
-
version = "0.14.7"
1251
source = "registry+https://github.com/rust-lang/crates.io-index"
1252
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1253
dependencies = [
1254
"typenum",
1255
"version_check",
1256
]
1257
1258
[[package]]
···
1279
1280
[[package]]
1281
name = "getrandom"
1282
-
version = "0.3.3"
1283
source = "registry+https://github.com/rust-lang/crates.io-index"
1284
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1285
dependencies = [
1286
"cfg-if",
1287
"libc",
1288
"r-efi",
1289
-
"wasi 0.14.2+wasi-0.2.4",
1290
]
1291
1292
[[package]]
1293
-
name = "gimli"
1294
-
version = "0.31.1"
1295
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1296
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1297
-
1298
-
[[package]]
1299
name = "gio"
1300
version = "0.18.4"
1301
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1333
source = "registry+https://github.com/rust-lang/crates.io-index"
1334
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1335
dependencies = [
1336
-
"bitflags 2.9.1",
1337
"futures-channel",
1338
"futures-core",
1339
"futures-executor",
···
1357
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1358
dependencies = [
1359
"heck 0.4.1",
1360
-
"proc-macro-crate 2.0.0",
1361
"proc-macro-error",
1362
"proc-macro2",
1363
"quote",
1364
-
"syn 2.0.104",
1365
]
1366
1367
[[package]]
···
1376
1377
[[package]]
1378
name = "glob"
1379
-
version = "0.3.2"
1380
source = "registry+https://github.com/rust-lang/crates.io-index"
1381
-
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
1382
1383
[[package]]
1384
name = "gobject-sys"
···
1440
"proc-macro-error",
1441
"proc-macro2",
1442
"quote",
1443
-
"syn 2.0.104",
1444
]
1445
1446
[[package]]
···
1451
1452
[[package]]
1453
name = "hashbrown"
1454
-
version = "0.15.4"
1455
source = "registry+https://github.com/rust-lang/crates.io-index"
1456
-
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
1457
1458
[[package]]
1459
name = "heck"
···
1533
1534
[[package]]
1535
name = "hyper"
1536
-
version = "1.6.0"
1537
source = "registry+https://github.com/rust-lang/crates.io-index"
1538
-
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1539
dependencies = [
1540
"bytes",
1541
"futures-channel",
1542
-
"futures-util",
1543
"http",
1544
"http-body",
1545
"httparse",
1546
"itoa",
1547
"pin-project-lite",
1548
"smallvec",
1549
"tokio",
1550
"want",
···
1552
1553
[[package]]
1554
name = "hyper-util"
1555
-
version = "0.1.16"
1556
source = "registry+https://github.com/rust-lang/crates.io-index"
1557
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1558
dependencies = [
1559
"base64 0.22.1",
1560
"bytes",
···
1576
1577
[[package]]
1578
name = "iana-time-zone"
1579
-
version = "0.1.63"
1580
source = "registry+https://github.com/rust-lang/crates.io-index"
1581
-
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1582
dependencies = [
1583
"android_system_properties",
1584
"core-foundation-sys",
···
1586
"js-sys",
1587
"log",
1588
"wasm-bindgen",
1589
-
"windows-core",
1590
]
1591
1592
[[package]]
···
1605
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1606
dependencies = [
1607
"byteorder",
1608
-
"png",
1609
]
1610
1611
[[package]]
1612
name = "icu_collections"
1613
-
version = "2.0.0"
1614
source = "registry+https://github.com/rust-lang/crates.io-index"
1615
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1616
dependencies = [
1617
"displaydoc",
1618
"potential_utf",
···
1623
1624
[[package]]
1625
name = "icu_locale_core"
1626
-
version = "2.0.0"
1627
source = "registry+https://github.com/rust-lang/crates.io-index"
1628
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1629
dependencies = [
1630
"displaydoc",
1631
"litemap",
···
1636
1637
[[package]]
1638
name = "icu_normalizer"
1639
-
version = "2.0.0"
1640
source = "registry+https://github.com/rust-lang/crates.io-index"
1641
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1642
dependencies = [
1643
-
"displaydoc",
1644
"icu_collections",
1645
"icu_normalizer_data",
1646
"icu_properties",
···
1651
1652
[[package]]
1653
name = "icu_normalizer_data"
1654
-
version = "2.0.0"
1655
source = "registry+https://github.com/rust-lang/crates.io-index"
1656
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1657
1658
[[package]]
1659
name = "icu_properties"
1660
-
version = "2.0.1"
1661
source = "registry+https://github.com/rust-lang/crates.io-index"
1662
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1663
dependencies = [
1664
-
"displaydoc",
1665
"icu_collections",
1666
"icu_locale_core",
1667
"icu_properties_data",
1668
"icu_provider",
1669
-
"potential_utf",
1670
"zerotrie",
1671
"zerovec",
1672
]
1673
1674
[[package]]
1675
name = "icu_properties_data"
1676
-
version = "2.0.1"
1677
source = "registry+https://github.com/rust-lang/crates.io-index"
1678
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1679
1680
[[package]]
1681
name = "icu_provider"
1682
-
version = "2.0.0"
1683
source = "registry+https://github.com/rust-lang/crates.io-index"
1684
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1685
dependencies = [
1686
"displaydoc",
1687
"icu_locale_core",
1688
-
"stable_deref_trait",
1689
-
"tinystr",
1690
"writeable",
1691
"yoke",
1692
"zerofrom",
···
1702
1703
[[package]]
1704
name = "idna"
1705
-
version = "1.0.3"
1706
source = "registry+https://github.com/rust-lang/crates.io-index"
1707
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
1708
dependencies = [
1709
"idna_adapter",
1710
"smallvec",
···
1722
]
1723
1724
[[package]]
1725
name = "indexmap"
1726
version = "1.9.3"
1727
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1734
1735
[[package]]
1736
name = "indexmap"
1737
-
version = "2.10.0"
1738
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
-
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
1740
dependencies = [
1741
"equivalent",
1742
-
"hashbrown 0.15.4",
1743
"serde",
1744
]
1745
1746
[[package]]
···
1753
]
1754
1755
[[package]]
1756
-
name = "io-uring"
1757
-
version = "0.7.9"
1758
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1759
-
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
1760
-
dependencies = [
1761
-
"bitflags 2.9.1",
1762
-
"cfg-if",
1763
-
"libc",
1764
-
]
1765
-
1766
-
[[package]]
1767
name = "ipnet"
1768
version = "2.11.0"
1769
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1771
1772
[[package]]
1773
name = "iri-string"
1774
-
version = "0.7.8"
1775
source = "registry+https://github.com/rust-lang/crates.io-index"
1776
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1777
dependencies = [
1778
"memchr",
1779
"serde",
···
1851
1852
[[package]]
1853
name = "js-sys"
1854
-
version = "0.3.77"
1855
source = "registry+https://github.com/rust-lang/crates.io-index"
1856
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1857
dependencies = [
1858
"once_cell",
1859
"wasm-bindgen",
···
1887
source = "registry+https://github.com/rust-lang/crates.io-index"
1888
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
1889
dependencies = [
1890
-
"bitflags 2.9.1",
1891
"serde",
1892
"unicode-segmentation",
1893
]
···
1900
dependencies = [
1901
"cssparser",
1902
"html5ever",
1903
-
"indexmap 2.10.0",
1904
"selectors",
1905
]
1906
···
1930
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
1931
dependencies = [
1932
"gtk-sys",
1933
-
"libloading",
1934
"once_cell",
1935
]
1936
1937
[[package]]
1938
name = "libc"
1939
-
version = "0.2.174"
1940
source = "registry+https://github.com/rust-lang/crates.io-index"
1941
-
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
1942
1943
[[package]]
1944
name = "libloading"
···
1951
]
1952
1953
[[package]]
1954
name = "libredox"
1955
-
version = "0.1.8"
1956
source = "registry+https://github.com/rust-lang/crates.io-index"
1957
-
checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7"
1958
dependencies = [
1959
-
"bitflags 2.9.1",
1960
"libc",
1961
]
1962
1963
[[package]]
1964
name = "linux-raw-sys"
1965
-
version = "0.9.4"
1966
source = "registry+https://github.com/rust-lang/crates.io-index"
1967
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
1968
1969
[[package]]
1970
name = "litemap"
1971
-
version = "0.8.0"
1972
source = "registry+https://github.com/rust-lang/crates.io-index"
1973
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1974
1975
[[package]]
1976
name = "lock_api"
1977
-
version = "0.4.13"
1978
source = "registry+https://github.com/rust-lang/crates.io-index"
1979
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
1980
dependencies = [
1981
-
"autocfg",
1982
"scopeguard",
1983
]
1984
1985
[[package]]
1986
name = "log"
1987
-
version = "0.4.27"
1988
source = "registry+https://github.com/rust-lang/crates.io-index"
1989
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
1990
1991
[[package]]
1992
name = "mac"
···
2016
dependencies = [
2017
"proc-macro2",
2018
"quote",
2019
-
"syn 2.0.104",
2020
]
2021
2022
[[package]]
···
2027
2028
[[package]]
2029
name = "memchr"
2030
-
version = "2.7.5"
2031
source = "registry+https://github.com/rust-lang/crates.io-index"
2032
-
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
2033
2034
[[package]]
2035
name = "memoffset"
···
2047
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2048
2049
[[package]]
2050
name = "miniz_oxide"
2051
version = "0.8.9"
2052
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2058
2059
[[package]]
2060
name = "mio"
2061
-
version = "1.0.4"
2062
source = "registry+https://github.com/rust-lang/crates.io-index"
2063
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2064
dependencies = [
2065
"libc",
2066
"wasi 0.11.1+wasi-snapshot-preview1",
2067
-
"windows-sys 0.59.0",
2068
]
2069
2070
[[package]]
2071
name = "muda"
2072
-
version = "0.17.0"
2073
source = "registry+https://github.com/rust-lang/crates.io-index"
2074
-
checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988"
2075
dependencies = [
2076
"crossbeam-channel",
2077
"dpi",
2078
"gtk",
2079
"keyboard-types",
2080
-
"objc2 0.6.1",
2081
"objc2-app-kit",
2082
"objc2-core-foundation",
2083
-
"objc2-foundation 0.3.1",
2084
"once_cell",
2085
-
"png",
2086
"serde",
2087
-
"thiserror 2.0.12",
2088
-
"windows-sys 0.59.0",
2089
]
2090
2091
[[package]]
···
2094
source = "registry+https://github.com/rust-lang/crates.io-index"
2095
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2096
dependencies = [
2097
-
"bitflags 2.9.1",
2098
"jni-sys",
2099
"log",
2100
"ndk-sys",
···
2130
source = "registry+https://github.com/rust-lang/crates.io-index"
2131
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2132
dependencies = [
2133
-
"bitflags 2.9.1",
2134
"cfg-if",
2135
"cfg_aliases",
2136
"libc",
···
2144
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2145
2146
[[package]]
2147
name = "num-conv"
2148
version = "0.1.0"
2149
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2160
2161
[[package]]
2162
name = "num_enum"
2163
-
version = "0.7.4"
2164
source = "registry+https://github.com/rust-lang/crates.io-index"
2165
-
checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2166
dependencies = [
2167
"num_enum_derive",
2168
"rustversion",
···
2170
2171
[[package]]
2172
name = "num_enum_derive"
2173
-
version = "0.7.4"
2174
source = "registry+https://github.com/rust-lang/crates.io-index"
2175
-
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2176
dependencies = [
2177
-
"proc-macro-crate 3.3.0",
2178
"proc-macro2",
2179
"quote",
2180
-
"syn 2.0.104",
2181
]
2182
2183
[[package]]
···
2198
2199
[[package]]
2200
name = "objc2"
2201
-
version = "0.6.1"
2202
source = "registry+https://github.com/rust-lang/crates.io-index"
2203
-
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
2204
dependencies = [
2205
"objc2-encode",
2206
"objc2-exception-helper",
···
2208
2209
[[package]]
2210
name = "objc2-app-kit"
2211
-
version = "0.3.1"
2212
source = "registry+https://github.com/rust-lang/crates.io-index"
2213
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2214
dependencies = [
2215
-
"bitflags 2.9.1",
2216
-
"block2 0.6.1",
2217
"libc",
2218
-
"objc2 0.6.1",
2219
"objc2-cloud-kit",
2220
"objc2-core-data",
2221
"objc2-core-foundation",
2222
"objc2-core-graphics",
2223
"objc2-core-image",
2224
-
"objc2-foundation 0.3.1",
2225
-
"objc2-quartz-core 0.3.1",
2226
]
2227
2228
[[package]]
2229
name = "objc2-cloud-kit"
2230
-
version = "0.3.1"
2231
source = "registry+https://github.com/rust-lang/crates.io-index"
2232
-
checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d"
2233
dependencies = [
2234
-
"bitflags 2.9.1",
2235
-
"objc2 0.6.1",
2236
-
"objc2-foundation 0.3.1",
2237
]
2238
2239
[[package]]
2240
name = "objc2-core-data"
2241
-
version = "0.3.1"
2242
source = "registry+https://github.com/rust-lang/crates.io-index"
2243
-
checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d"
2244
dependencies = [
2245
-
"bitflags 2.9.1",
2246
-
"objc2 0.6.1",
2247
-
"objc2-foundation 0.3.1",
2248
]
2249
2250
[[package]]
2251
name = "objc2-core-foundation"
2252
-
version = "0.3.1"
2253
source = "registry+https://github.com/rust-lang/crates.io-index"
2254
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2255
dependencies = [
2256
-
"bitflags 2.9.1",
2257
"dispatch2",
2258
-
"objc2 0.6.1",
2259
]
2260
2261
[[package]]
2262
name = "objc2-core-graphics"
2263
-
version = "0.3.1"
2264
source = "registry+https://github.com/rust-lang/crates.io-index"
2265
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2266
dependencies = [
2267
-
"bitflags 2.9.1",
2268
"dispatch2",
2269
-
"objc2 0.6.1",
2270
"objc2-core-foundation",
2271
"objc2-io-surface",
2272
]
2273
2274
[[package]]
2275
name = "objc2-core-image"
2276
-
version = "0.3.1"
2277
source = "registry+https://github.com/rust-lang/crates.io-index"
2278
-
checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e"
2279
dependencies = [
2280
-
"objc2 0.6.1",
2281
-
"objc2-foundation 0.3.1",
2282
]
2283
2284
[[package]]
···
2302
source = "registry+https://github.com/rust-lang/crates.io-index"
2303
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2304
dependencies = [
2305
-
"bitflags 2.9.1",
2306
"block2 0.5.1",
2307
"libc",
2308
"objc2 0.5.2",
···
2310
2311
[[package]]
2312
name = "objc2-foundation"
2313
-
version = "0.3.1"
2314
source = "registry+https://github.com/rust-lang/crates.io-index"
2315
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
2316
dependencies = [
2317
-
"bitflags 2.9.1",
2318
-
"block2 0.6.1",
2319
"libc",
2320
-
"objc2 0.6.1",
2321
"objc2-core-foundation",
2322
]
2323
2324
[[package]]
2325
name = "objc2-io-surface"
2326
-
version = "0.3.1"
2327
source = "registry+https://github.com/rust-lang/crates.io-index"
2328
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
2329
dependencies = [
2330
-
"bitflags 2.9.1",
2331
-
"objc2 0.6.1",
2332
"objc2-core-foundation",
2333
]
2334
···
2338
source = "registry+https://github.com/rust-lang/crates.io-index"
2339
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2340
dependencies = [
2341
-
"bitflags 2.9.1",
2342
"block2 0.5.1",
2343
"objc2 0.5.2",
2344
"objc2-foundation 0.2.2",
···
2350
source = "registry+https://github.com/rust-lang/crates.io-index"
2351
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2352
dependencies = [
2353
-
"bitflags 2.9.1",
2354
"block2 0.5.1",
2355
"objc2 0.5.2",
2356
"objc2-foundation 0.2.2",
···
2359
2360
[[package]]
2361
name = "objc2-quartz-core"
2362
-
version = "0.3.1"
2363
source = "registry+https://github.com/rust-lang/crates.io-index"
2364
-
checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5"
2365
dependencies = [
2366
-
"bitflags 2.9.1",
2367
-
"objc2 0.6.1",
2368
-
"objc2-foundation 0.3.1",
2369
]
2370
2371
[[package]]
2372
-
name = "objc2-ui-kit"
2373
-
version = "0.3.1"
2374
source = "registry+https://github.com/rust-lang/crates.io-index"
2375
-
checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed"
2376
dependencies = [
2377
-
"bitflags 2.9.1",
2378
-
"objc2 0.6.1",
2379
"objc2-core-foundation",
2380
-
"objc2-foundation 0.3.1",
2381
]
2382
2383
[[package]]
2384
-
name = "objc2-web-kit"
2385
-
version = "0.3.1"
2386
source = "registry+https://github.com/rust-lang/crates.io-index"
2387
-
checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad"
2388
dependencies = [
2389
-
"bitflags 2.9.1",
2390
-
"block2 0.6.1",
2391
-
"objc2 0.6.1",
2392
-
"objc2-app-kit",
2393
"objc2-core-foundation",
2394
-
"objc2-foundation 0.3.1",
2395
]
2396
2397
[[package]]
2398
-
name = "object"
2399
-
version = "0.36.7"
2400
source = "registry+https://github.com/rust-lang/crates.io-index"
2401
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
2402
dependencies = [
2403
-
"memchr",
2404
]
2405
2406
[[package]]
···
2438
]
2439
2440
[[package]]
2441
name = "pango"
2442
version = "0.18.3"
2443
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2470
2471
[[package]]
2472
name = "parking_lot"
2473
-
version = "0.12.4"
2474
source = "registry+https://github.com/rust-lang/crates.io-index"
2475
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
2476
dependencies = [
2477
"lock_api",
2478
"parking_lot_core",
···
2480
2481
[[package]]
2482
name = "parking_lot_core"
2483
-
version = "0.9.11"
2484
source = "registry+https://github.com/rust-lang/crates.io-index"
2485
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2486
dependencies = [
2487
"cfg-if",
2488
"libc",
2489
"redox_syscall",
2490
"smallvec",
2491
-
"windows-targets 0.52.6",
2492
]
2493
2494
[[package]]
···
2499
2500
[[package]]
2501
name = "percent-encoding"
2502
-
version = "2.3.1"
2503
source = "registry+https://github.com/rust-lang/crates.io-index"
2504
-
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
2505
2506
[[package]]
2507
name = "phf"
···
2607
"phf_shared 0.11.3",
2608
"proc-macro2",
2609
"quote",
2610
-
"syn 2.0.104",
2611
]
2612
2613
[[package]]
···
2668
2669
[[package]]
2670
name = "plist"
2671
-
version = "1.7.4"
2672
source = "registry+https://github.com/rust-lang/crates.io-index"
2673
-
checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1"
2674
dependencies = [
2675
"base64 0.22.1",
2676
-
"indexmap 2.10.0",
2677
-
"quick-xml 0.38.0",
2678
"serde",
2679
"time",
2680
]
···
2693
]
2694
2695
[[package]]
2696
name = "polling"
2697
-
version = "3.9.0"
2698
source = "registry+https://github.com/rust-lang/crates.io-index"
2699
-
checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7"
2700
dependencies = [
2701
"cfg-if",
2702
"concurrent-queue",
2703
"hermit-abi",
2704
"pin-project-lite",
2705
-
"rustix",
2706
-
"windows-sys 0.60.2",
2707
]
2708
2709
[[package]]
2710
name = "potential_utf"
2711
-
version = "0.1.2"
2712
source = "registry+https://github.com/rust-lang/crates.io-index"
2713
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
2714
dependencies = [
2715
"zerovec",
2716
]
···
2748
2749
[[package]]
2750
name = "proc-macro-crate"
2751
-
version = "2.0.0"
2752
source = "registry+https://github.com/rust-lang/crates.io-index"
2753
-
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
2754
dependencies = [
2755
-
"toml_edit 0.20.7",
2756
]
2757
2758
[[package]]
2759
name = "proc-macro-crate"
2760
-
version = "3.3.0"
2761
source = "registry+https://github.com/rust-lang/crates.io-index"
2762
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
2763
dependencies = [
2764
-
"toml_edit 0.22.27",
2765
]
2766
2767
[[package]]
···
2796
2797
[[package]]
2798
name = "proc-macro2"
2799
-
version = "1.0.95"
2800
source = "registry+https://github.com/rust-lang/crates.io-index"
2801
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
2802
dependencies = [
2803
"unicode-ident",
2804
]
2805
2806
[[package]]
2807
name = "quick-xml"
2808
version = "0.37.5"
2809
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2814
2815
[[package]]
2816
name = "quick-xml"
2817
-
version = "0.38.0"
2818
source = "registry+https://github.com/rust-lang/crates.io-index"
2819
-
checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b"
2820
dependencies = [
2821
"memchr",
2822
]
2823
2824
[[package]]
2825
name = "quote"
2826
-
version = "1.0.40"
2827
source = "registry+https://github.com/rust-lang/crates.io-index"
2828
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
2829
dependencies = [
2830
"proc-macro2",
2831
]
···
2925
source = "registry+https://github.com/rust-lang/crates.io-index"
2926
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
2927
dependencies = [
2928
-
"getrandom 0.3.3",
2929
]
2930
2931
[[package]]
···
2954
2955
[[package]]
2956
name = "redox_syscall"
2957
-
version = "0.5.17"
2958
source = "registry+https://github.com/rust-lang/crates.io-index"
2959
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
2960
dependencies = [
2961
-
"bitflags 2.9.1",
2962
]
2963
2964
[[package]]
2965
name = "redox_users"
2966
-
version = "0.5.0"
2967
source = "registry+https://github.com/rust-lang/crates.io-index"
2968
-
checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
2969
dependencies = [
2970
"getrandom 0.2.16",
2971
"libredox",
2972
-
"thiserror 2.0.12",
2973
]
2974
2975
[[package]]
2976
name = "ref-cast"
2977
-
version = "1.0.24"
2978
source = "registry+https://github.com/rust-lang/crates.io-index"
2979
-
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
2980
dependencies = [
2981
"ref-cast-impl",
2982
]
2983
2984
[[package]]
2985
name = "ref-cast-impl"
2986
-
version = "1.0.24"
2987
source = "registry+https://github.com/rust-lang/crates.io-index"
2988
-
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
2989
dependencies = [
2990
"proc-macro2",
2991
"quote",
2992
-
"syn 2.0.104",
2993
]
2994
2995
[[package]]
2996
name = "regex"
2997
-
version = "1.11.1"
2998
source = "registry+https://github.com/rust-lang/crates.io-index"
2999
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
3000
dependencies = [
3001
"aho-corasick",
3002
"memchr",
···
3006
3007
[[package]]
3008
name = "regex-automata"
3009
-
version = "0.4.9"
3010
source = "registry+https://github.com/rust-lang/crates.io-index"
3011
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
3012
dependencies = [
3013
"aho-corasick",
3014
"memchr",
···
3017
3018
[[package]]
3019
name = "regex-syntax"
3020
-
version = "0.8.5"
3021
source = "registry+https://github.com/rust-lang/crates.io-index"
3022
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
3023
3024
[[package]]
3025
name = "reqwest"
3026
-
version = "0.12.22"
3027
source = "registry+https://github.com/rust-lang/crates.io-index"
3028
-
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
3029
dependencies = [
3030
"base64 0.22.1",
3031
"bytes",
···
3063
checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed"
3064
dependencies = [
3065
"ashpd",
3066
-
"block2 0.6.1",
3067
"dispatch2",
3068
"glib-sys",
3069
"gobject-sys",
3070
"gtk-sys",
3071
"js-sys",
3072
"log",
3073
-
"objc2 0.6.1",
3074
"objc2-app-kit",
3075
"objc2-core-foundation",
3076
-
"objc2-foundation 0.3.1",
3077
"raw-window-handle",
3078
"wasm-bindgen",
3079
"wasm-bindgen-futures",
3080
"web-sys",
3081
"windows-sys 0.59.0",
3082
]
3083
-
3084
-
[[package]]
3085
-
name = "rustc-demangle"
3086
-
version = "0.1.26"
3087
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3088
-
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
3089
3090
[[package]]
3091
name = "rustc_version"
···
3098
3099
[[package]]
3100
name = "rustix"
3101
-
version = "1.0.8"
3102
source = "registry+https://github.com/rust-lang/crates.io-index"
3103
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
3104
dependencies = [
3105
-
"bitflags 2.9.1",
3106
"errno",
3107
"libc",
3108
-
"linux-raw-sys",
3109
-
"windows-sys 0.60.2",
3110
]
3111
3112
[[package]]
3113
name = "rustversion"
3114
-
version = "1.0.21"
3115
source = "registry+https://github.com/rust-lang/crates.io-index"
3116
-
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
3117
3118
[[package]]
3119
name = "ryu"
···
3159
3160
[[package]]
3161
name = "schemars"
3162
-
version = "1.0.4"
3163
source = "registry+https://github.com/rust-lang/crates.io-index"
3164
-
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
3165
dependencies = [
3166
"dyn-clone",
3167
"ref-cast",
···
3178
"proc-macro2",
3179
"quote",
3180
"serde_derive_internals",
3181
-
"syn 2.0.104",
3182
]
3183
3184
[[package]]
···
3213
3214
[[package]]
3215
name = "semver"
3216
-
version = "1.0.26"
3217
source = "registry+https://github.com/rust-lang/crates.io-index"
3218
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
3219
dependencies = [
3220
"serde",
3221
]
3222
3223
[[package]]
3224
name = "serde"
3225
-
version = "1.0.219"
3226
source = "registry+https://github.com/rust-lang/crates.io-index"
3227
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
3228
dependencies = [
3229
"serde_derive",
3230
]
3231
3232
[[package]]
3233
name = "serde-untagged"
3234
-
version = "0.1.7"
3235
source = "registry+https://github.com/rust-lang/crates.io-index"
3236
-
checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
3237
dependencies = [
3238
"erased-serde",
3239
"serde",
3240
"typeid",
3241
]
3242
3243
[[package]]
3244
name = "serde_derive"
3245
-
version = "1.0.219"
3246
source = "registry+https://github.com/rust-lang/crates.io-index"
3247
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
3248
dependencies = [
3249
"proc-macro2",
3250
"quote",
3251
-
"syn 2.0.104",
3252
]
3253
3254
[[package]]
···
3259
dependencies = [
3260
"proc-macro2",
3261
"quote",
3262
-
"syn 2.0.104",
3263
]
3264
3265
[[package]]
3266
name = "serde_json"
3267
-
version = "1.0.141"
3268
source = "registry+https://github.com/rust-lang/crates.io-index"
3269
-
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
3270
dependencies = [
3271
"itoa",
3272
"memchr",
3273
"ryu",
3274
"serde",
3275
]
3276
3277
[[package]]
···
3282
dependencies = [
3283
"proc-macro2",
3284
"quote",
3285
-
"syn 2.0.104",
3286
]
3287
3288
[[package]]
···
3296
3297
[[package]]
3298
name = "serde_spanned"
3299
-
version = "1.0.0"
3300
source = "registry+https://github.com/rust-lang/crates.io-index"
3301
-
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
3302
dependencies = [
3303
-
"serde",
3304
]
3305
3306
[[package]]
···
3317
3318
[[package]]
3319
name = "serde_with"
3320
-
version = "3.14.0"
3321
source = "registry+https://github.com/rust-lang/crates.io-index"
3322
-
checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
3323
dependencies = [
3324
"base64 0.22.1",
3325
"chrono",
3326
"hex",
3327
"indexmap 1.9.3",
3328
-
"indexmap 2.10.0",
3329
"schemars 0.9.0",
3330
-
"schemars 1.0.4",
3331
-
"serde",
3332
-
"serde_derive",
3333
"serde_json",
3334
"serde_with_macros",
3335
"time",
···
3337
3338
[[package]]
3339
name = "serde_with_macros"
3340
-
version = "3.14.0"
3341
source = "registry+https://github.com/rust-lang/crates.io-index"
3342
-
checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
3343
dependencies = [
3344
"darling",
3345
"proc-macro2",
3346
"quote",
3347
-
"syn 2.0.104",
3348
]
3349
3350
[[package]]
3351
name = "serialize-to-javascript"
3352
-
version = "0.1.1"
3353
source = "registry+https://github.com/rust-lang/crates.io-index"
3354
-
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
3355
dependencies = [
3356
"serde",
3357
"serde_json",
···
3360
3361
[[package]]
3362
name = "serialize-to-javascript-impl"
3363
-
version = "0.1.1"
3364
source = "registry+https://github.com/rust-lang/crates.io-index"
3365
-
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
3366
dependencies = [
3367
"proc-macro2",
3368
"quote",
3369
-
"syn 1.0.109",
3370
]
3371
3372
[[package]]
···
3398
3399
[[package]]
3400
name = "signal-hook-registry"
3401
-
version = "1.4.5"
3402
source = "registry+https://github.com/rust-lang/crates.io-index"
3403
-
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
3404
dependencies = [
3405
"libc",
3406
]
···
3425
3426
[[package]]
3427
name = "slab"
3428
-
version = "0.4.10"
3429
source = "registry+https://github.com/rust-lang/crates.io-index"
3430
-
checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
3431
3432
[[package]]
3433
name = "smallvec"
···
3437
3438
[[package]]
3439
name = "socket2"
3440
-
version = "0.6.0"
3441
source = "registry+https://github.com/rust-lang/crates.io-index"
3442
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
3443
dependencies = [
3444
"libc",
3445
-
"windows-sys 0.59.0",
3446
]
3447
3448
[[package]]
···
3453
dependencies = [
3454
"bytemuck",
3455
"cfg_aliases",
3456
-
"core-graphics",
3457
"foreign-types",
3458
"js-sys",
3459
"log",
···
3495
3496
[[package]]
3497
name = "stable_deref_trait"
3498
-
version = "1.2.0"
3499
source = "registry+https://github.com/rust-lang/crates.io-index"
3500
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
3501
3502
[[package]]
3503
name = "static_assertions"
···
3560
3561
[[package]]
3562
name = "syn"
3563
-
version = "2.0.104"
3564
source = "registry+https://github.com/rust-lang/crates.io-index"
3565
-
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
3566
dependencies = [
3567
"proc-macro2",
3568
"quote",
···
3586
dependencies = [
3587
"proc-macro2",
3588
"quote",
3589
-
"syn 2.0.104",
3590
]
3591
3592
[[package]]
···
3598
"cfg-expr",
3599
"heck 0.5.0",
3600
"pkg-config",
3601
-
"toml 0.8.23",
3602
"version-compare",
3603
]
3604
3605
[[package]]
3606
name = "tao"
3607
-
version = "0.34.0"
3608
source = "registry+https://github.com/rust-lang/crates.io-index"
3609
-
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
3610
dependencies = [
3611
-
"bitflags 2.9.1",
3612
"core-foundation",
3613
-
"core-graphics",
3614
"crossbeam-channel",
3615
"dispatch",
3616
"dlopen2",
···
3625
"ndk",
3626
"ndk-context",
3627
"ndk-sys",
3628
-
"objc2 0.6.1",
3629
"objc2-app-kit",
3630
-
"objc2-foundation 0.3.1",
3631
"once_cell",
3632
"parking_lot",
3633
"raw-window-handle",
···
3636
"unicode-segmentation",
3637
"url",
3638
"windows",
3639
-
"windows-core",
3640
"windows-version",
3641
"x11-dl",
3642
]
···
3649
dependencies = [
3650
"proc-macro2",
3651
"quote",
3652
-
"syn 2.0.104",
3653
]
3654
3655
[[package]]
···
3660
3661
[[package]]
3662
name = "tauri"
3663
-
version = "2.7.0"
3664
source = "registry+https://github.com/rust-lang/crates.io-index"
3665
-
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
3666
dependencies = [
3667
"anyhow",
3668
"bytes",
3669
"dirs",
3670
"dunce",
3671
"embed_plist",
3672
-
"getrandom 0.3.3",
3673
"glob",
3674
"gtk",
3675
"heck 0.5.0",
3676
"http",
3677
"jni",
3678
"libc",
3679
"log",
3680
"mime",
3681
"muda",
3682
-
"objc2 0.6.1",
3683
"objc2-app-kit",
3684
-
"objc2-foundation 0.3.1",
3685
"objc2-ui-kit",
3686
"percent-encoding",
3687
"plist",
3688
"raw-window-handle",
···
3697
"tauri-runtime",
3698
"tauri-runtime-wry",
3699
"tauri-utils",
3700
-
"thiserror 2.0.12",
3701
"tokio",
3702
"tray-icon",
3703
"url",
3704
-
"urlpattern",
3705
"webkit2gtk",
3706
"webview2-com",
3707
"window-vibrancy",
···
3710
3711
[[package]]
3712
name = "tauri-build"
3713
-
version = "2.3.1"
3714
source = "registry+https://github.com/rust-lang/crates.io-index"
3715
-
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
3716
dependencies = [
3717
"anyhow",
3718
"cargo_toml",
···
3726
"serde_json",
3727
"tauri-utils",
3728
"tauri-winres",
3729
-
"toml 0.8.23",
3730
"walkdir",
3731
]
3732
3733
[[package]]
3734
name = "tauri-codegen"
3735
-
version = "2.3.1"
3736
source = "registry+https://github.com/rust-lang/crates.io-index"
3737
-
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
3738
dependencies = [
3739
"base64 0.22.1",
3740
"brotli",
3741
"ico",
3742
"json-patch",
3743
"plist",
3744
-
"png",
3745
"proc-macro2",
3746
"quote",
3747
"semver",
3748
"serde",
3749
"serde_json",
3750
"sha2",
3751
-
"syn 2.0.104",
3752
"tauri-utils",
3753
-
"thiserror 2.0.12",
3754
"time",
3755
"url",
3756
"uuid",
···
3759
3760
[[package]]
3761
name = "tauri-macros"
3762
-
version = "2.3.2"
3763
source = "registry+https://github.com/rust-lang/crates.io-index"
3764
-
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
3765
dependencies = [
3766
"heck 0.5.0",
3767
"proc-macro2",
3768
"quote",
3769
-
"syn 2.0.104",
3770
"tauri-codegen",
3771
"tauri-utils",
3772
]
3773
3774
[[package]]
3775
name = "tauri-plugin"
3776
-
version = "2.3.1"
3777
source = "registry+https://github.com/rust-lang/crates.io-index"
3778
-
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
3779
dependencies = [
3780
"anyhow",
3781
"glob",
···
3784
"serde",
3785
"serde_json",
3786
"tauri-utils",
3787
-
"toml 0.8.23",
3788
"walkdir",
3789
]
3790
3791
[[package]]
3792
-
name = "tauri-plugin-dialog"
3793
version = "2.3.2"
3794
source = "registry+https://github.com/rust-lang/crates.io-index"
3795
-
checksum = "37e5858cc7b455a73ab4ea2ebc08b5be33682c00ff1bf4cad5537d4fb62499d9"
3796
dependencies = [
3797
"log",
3798
"raw-window-handle",
···
3802
"tauri",
3803
"tauri-plugin",
3804
"tauri-plugin-fs",
3805
-
"thiserror 2.0.12",
3806
"url",
3807
]
3808
3809
[[package]]
3810
name = "tauri-plugin-fs"
3811
-
version = "2.4.1"
3812
source = "registry+https://github.com/rust-lang/crates.io-index"
3813
-
checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99"
3814
dependencies = [
3815
"anyhow",
3816
"dunce",
···
3823
"tauri",
3824
"tauri-plugin",
3825
"tauri-utils",
3826
-
"thiserror 2.0.12",
3827
-
"toml 0.8.23",
3828
"url",
3829
]
3830
3831
[[package]]
3832
name = "tauri-plugin-opener"
3833
-
version = "2.4.0"
3834
source = "registry+https://github.com/rust-lang/crates.io-index"
3835
-
checksum = "ecee219f11cdac713ab32959db5d0cceec4810ba4f4458da992292ecf9660321"
3836
dependencies = [
3837
"dunce",
3838
"glob",
3839
"objc2-app-kit",
3840
-
"objc2-foundation 0.3.1",
3841
"open",
3842
"schemars 0.8.22",
3843
"serde",
3844
"serde_json",
3845
"tauri",
3846
"tauri-plugin",
3847
-
"thiserror 2.0.12",
3848
"url",
3849
"windows",
3850
"zbus",
3851
]
3852
3853
[[package]]
3854
name = "tauri-runtime"
3855
-
version = "2.7.1"
3856
source = "registry+https://github.com/rust-lang/crates.io-index"
3857
-
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
3858
dependencies = [
3859
"cookie",
3860
"dpi",
3861
"gtk",
3862
"http",
3863
"jni",
3864
-
"objc2 0.6.1",
3865
"objc2-ui-kit",
3866
"raw-window-handle",
3867
"serde",
3868
"serde_json",
3869
"tauri-utils",
3870
-
"thiserror 2.0.12",
3871
"url",
3872
"windows",
3873
]
3874
3875
[[package]]
3876
name = "tauri-runtime-wry"
3877
-
version = "2.7.2"
3878
source = "registry+https://github.com/rust-lang/crates.io-index"
3879
-
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
3880
dependencies = [
3881
"gtk",
3882
"http",
3883
"jni",
3884
"log",
3885
-
"objc2 0.6.1",
3886
"objc2-app-kit",
3887
-
"objc2-foundation 0.3.1",
3888
"once_cell",
3889
"percent-encoding",
3890
"raw-window-handle",
···
3901
3902
[[package]]
3903
name = "tauri-utils"
3904
-
version = "2.6.0"
3905
source = "registry+https://github.com/rust-lang/crates.io-index"
3906
-
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
3907
dependencies = [
3908
"anyhow",
3909
"brotli",
···
3929
"serde_json",
3930
"serde_with",
3931
"swift-rs",
3932
-
"thiserror 2.0.12",
3933
-
"toml 0.8.23",
3934
"url",
3935
"urlpattern",
3936
"uuid",
···
3939
3940
[[package]]
3941
name = "tauri-winres"
3942
-
version = "0.3.1"
3943
source = "registry+https://github.com/rust-lang/crates.io-index"
3944
-
checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4"
3945
dependencies = [
3946
"embed-resource",
3947
-
"indexmap 2.10.0",
3948
-
"toml 0.8.23",
3949
]
3950
3951
[[package]]
3952
name = "tempfile"
3953
-
version = "3.20.0"
3954
source = "registry+https://github.com/rust-lang/crates.io-index"
3955
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
3956
dependencies = [
3957
"fastrand",
3958
-
"getrandom 0.3.3",
3959
"once_cell",
3960
-
"rustix",
3961
-
"windows-sys 0.59.0",
3962
]
3963
3964
[[package]]
···
3983
3984
[[package]]
3985
name = "thiserror"
3986
-
version = "2.0.12"
3987
source = "registry+https://github.com/rust-lang/crates.io-index"
3988
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
3989
dependencies = [
3990
-
"thiserror-impl 2.0.12",
3991
]
3992
3993
[[package]]
···
3998
dependencies = [
3999
"proc-macro2",
4000
"quote",
4001
-
"syn 2.0.104",
4002
]
4003
4004
[[package]]
4005
name = "thiserror-impl"
4006
-
version = "2.0.12"
4007
source = "registry+https://github.com/rust-lang/crates.io-index"
4008
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4009
dependencies = [
4010
"proc-macro2",
4011
"quote",
4012
-
"syn 2.0.104",
4013
]
4014
4015
[[package]]
4016
name = "time"
4017
-
version = "0.3.41"
4018
source = "registry+https://github.com/rust-lang/crates.io-index"
4019
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
4020
dependencies = [
4021
"deranged",
4022
"itoa",
···
4029
4030
[[package]]
4031
name = "time-core"
4032
-
version = "0.1.4"
4033
source = "registry+https://github.com/rust-lang/crates.io-index"
4034
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
4035
4036
[[package]]
4037
name = "time-macros"
4038
-
version = "0.2.22"
4039
source = "registry+https://github.com/rust-lang/crates.io-index"
4040
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
4041
dependencies = [
4042
"num-conv",
4043
"time-core",
···
4045
4046
[[package]]
4047
name = "tinystr"
4048
-
version = "0.8.1"
4049
source = "registry+https://github.com/rust-lang/crates.io-index"
4050
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
4051
dependencies = [
4052
"displaydoc",
4053
"zerovec",
···
4055
4056
[[package]]
4057
name = "tokio"
4058
-
version = "1.47.0"
4059
source = "registry+https://github.com/rust-lang/crates.io-index"
4060
-
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
4061
dependencies = [
4062
-
"backtrace",
4063
"bytes",
4064
-
"io-uring",
4065
"libc",
4066
"mio",
4067
"pin-project-lite",
4068
"signal-hook-registry",
4069
-
"slab",
4070
"socket2",
4071
"tokio-macros",
4072
"tracing",
4073
-
"windows-sys 0.59.0",
4074
]
4075
4076
[[package]]
4077
name = "tokio-macros"
4078
-
version = "2.5.0"
4079
source = "registry+https://github.com/rust-lang/crates.io-index"
4080
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
4081
dependencies = [
4082
"proc-macro2",
4083
"quote",
4084
-
"syn 2.0.104",
4085
]
4086
4087
[[package]]
4088
name = "tokio-util"
4089
-
version = "0.7.15"
4090
source = "registry+https://github.com/rust-lang/crates.io-index"
4091
-
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
4092
dependencies = [
4093
"bytes",
4094
"futures-core",
···
4099
4100
[[package]]
4101
name = "toml"
4102
-
version = "0.8.23"
4103
source = "registry+https://github.com/rust-lang/crates.io-index"
4104
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
4105
dependencies = [
4106
"serde",
4107
"serde_spanned 0.6.9",
4108
-
"toml_datetime 0.6.11",
4109
-
"toml_edit 0.22.27",
4110
]
4111
4112
[[package]]
4113
name = "toml"
4114
-
version = "0.9.3"
4115
source = "registry+https://github.com/rust-lang/crates.io-index"
4116
-
checksum = "e06723639aaded957e5a80be250c1f82f274b9d23ebb4d94163668470623461c"
4117
dependencies = [
4118
-
"indexmap 2.10.0",
4119
-
"serde",
4120
-
"serde_spanned 1.0.0",
4121
-
"toml_datetime 0.7.0",
4122
"toml_parser",
4123
"toml_writer",
4124
-
"winnow 0.7.12",
4125
]
4126
4127
[[package]]
4128
name = "toml_datetime"
4129
-
version = "0.6.11"
4130
source = "registry+https://github.com/rust-lang/crates.io-index"
4131
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
4132
dependencies = [
4133
"serde",
4134
]
4135
4136
[[package]]
4137
name = "toml_datetime"
4138
-
version = "0.7.0"
4139
source = "registry+https://github.com/rust-lang/crates.io-index"
4140
-
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
4141
dependencies = [
4142
-
"serde",
4143
]
4144
4145
[[package]]
···
4148
source = "registry+https://github.com/rust-lang/crates.io-index"
4149
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4150
dependencies = [
4151
-
"indexmap 2.10.0",
4152
-
"toml_datetime 0.6.11",
4153
"winnow 0.5.40",
4154
]
4155
4156
[[package]]
4157
name = "toml_edit"
4158
-
version = "0.20.7"
4159
source = "registry+https://github.com/rust-lang/crates.io-index"
4160
-
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
4161
dependencies = [
4162
-
"indexmap 2.10.0",
4163
-
"toml_datetime 0.6.11",
4164
"winnow 0.5.40",
4165
]
4166
4167
[[package]]
4168
name = "toml_edit"
4169
-
version = "0.22.27"
4170
source = "registry+https://github.com/rust-lang/crates.io-index"
4171
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
4172
dependencies = [
4173
-
"indexmap 2.10.0",
4174
-
"serde",
4175
-
"serde_spanned 0.6.9",
4176
-
"toml_datetime 0.6.11",
4177
-
"toml_write",
4178
-
"winnow 0.7.12",
4179
]
4180
4181
[[package]]
4182
name = "toml_parser"
4183
-
version = "1.0.1"
4184
source = "registry+https://github.com/rust-lang/crates.io-index"
4185
-
checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30"
4186
dependencies = [
4187
-
"winnow 0.7.12",
4188
]
4189
4190
[[package]]
4191
-
name = "toml_write"
4192
-
version = "0.1.2"
4193
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4194
-
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
4195
-
4196
-
[[package]]
4197
name = "toml_writer"
4198
-
version = "1.0.2"
4199
source = "registry+https://github.com/rust-lang/crates.io-index"
4200
-
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
4201
4202
[[package]]
4203
name = "tower"
···
4220
source = "registry+https://github.com/rust-lang/crates.io-index"
4221
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4222
dependencies = [
4223
-
"bitflags 2.9.1",
4224
"bytes",
4225
"futures-util",
4226
"http",
···
4263
dependencies = [
4264
"proc-macro2",
4265
"quote",
4266
-
"syn 2.0.104",
4267
]
4268
4269
[[package]]
···
4277
4278
[[package]]
4279
name = "tray-icon"
4280
-
version = "0.21.0"
4281
source = "registry+https://github.com/rust-lang/crates.io-index"
4282
-
checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a"
4283
dependencies = [
4284
"crossbeam-channel",
4285
"dirs",
4286
"libappindicator",
4287
"muda",
4288
-
"objc2 0.6.1",
4289
"objc2-app-kit",
4290
"objc2-core-foundation",
4291
"objc2-core-graphics",
4292
-
"objc2-foundation 0.3.1",
4293
"once_cell",
4294
-
"png",
4295
"serde",
4296
-
"thiserror 2.0.12",
4297
-
"windows-sys 0.59.0",
4298
]
4299
4300
[[package]]
···
4311
4312
[[package]]
4313
name = "typenum"
4314
-
version = "1.18.0"
4315
source = "registry+https://github.com/rust-lang/crates.io-index"
4316
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
4317
4318
[[package]]
4319
name = "uds_windows"
···
4369
4370
[[package]]
4371
name = "unicode-ident"
4372
-
version = "1.0.18"
4373
source = "registry+https://github.com/rust-lang/crates.io-index"
4374
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
4375
4376
[[package]]
4377
name = "unicode-segmentation"
···
4381
4382
[[package]]
4383
name = "url"
4384
-
version = "2.5.4"
4385
source = "registry+https://github.com/rust-lang/crates.io-index"
4386
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
4387
dependencies = [
4388
"form_urlencoded",
4389
"idna",
···
4417
4418
[[package]]
4419
name = "uuid"
4420
-
version = "1.17.0"
4421
source = "registry+https://github.com/rust-lang/crates.io-index"
4422
-
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
4423
dependencies = [
4424
-
"getrandom 0.3.3",
4425
"js-sys",
4426
"serde",
4427
"wasm-bindgen",
···
4429
4430
[[package]]
4431
name = "version-compare"
4432
-
version = "0.2.0"
4433
source = "registry+https://github.com/rust-lang/crates.io-index"
4434
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
4435
4436
[[package]]
4437
name = "version_check"
···
4491
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4492
4493
[[package]]
4494
-
name = "wasi"
4495
-
version = "0.14.2+wasi-0.2.4"
4496
source = "registry+https://github.com/rust-lang/crates.io-index"
4497
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
4498
dependencies = [
4499
-
"wit-bindgen-rt",
4500
]
4501
4502
[[package]]
4503
name = "wasm-bindgen"
4504
-
version = "0.2.100"
4505
source = "registry+https://github.com/rust-lang/crates.io-index"
4506
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
4507
dependencies = [
4508
"cfg-if",
4509
"once_cell",
4510
"rustversion",
4511
"wasm-bindgen-macro",
4512
-
]
4513
-
4514
-
[[package]]
4515
-
name = "wasm-bindgen-backend"
4516
-
version = "0.2.100"
4517
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4518
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
4519
-
dependencies = [
4520
-
"bumpalo",
4521
-
"log",
4522
-
"proc-macro2",
4523
-
"quote",
4524
-
"syn 2.0.104",
4525
"wasm-bindgen-shared",
4526
]
4527
4528
[[package]]
4529
name = "wasm-bindgen-futures"
4530
-
version = "0.4.50"
4531
source = "registry+https://github.com/rust-lang/crates.io-index"
4532
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
4533
dependencies = [
4534
"cfg-if",
4535
"js-sys",
···
4540
4541
[[package]]
4542
name = "wasm-bindgen-macro"
4543
-
version = "0.2.100"
4544
source = "registry+https://github.com/rust-lang/crates.io-index"
4545
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
4546
dependencies = [
4547
"quote",
4548
"wasm-bindgen-macro-support",
···
4550
4551
[[package]]
4552
name = "wasm-bindgen-macro-support"
4553
-
version = "0.2.100"
4554
source = "registry+https://github.com/rust-lang/crates.io-index"
4555
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
4556
dependencies = [
4557
"proc-macro2",
4558
"quote",
4559
-
"syn 2.0.104",
4560
-
"wasm-bindgen-backend",
4561
"wasm-bindgen-shared",
4562
]
4563
4564
[[package]]
4565
name = "wasm-bindgen-shared"
4566
-
version = "0.2.100"
4567
source = "registry+https://github.com/rust-lang/crates.io-index"
4568
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
4569
dependencies = [
4570
"unicode-ident",
4571
]
···
4591
dependencies = [
4592
"cc",
4593
"downcast-rs",
4594
-
"rustix",
4595
"scoped-tls",
4596
"smallvec",
4597
"wayland-sys",
···
4603
source = "registry+https://github.com/rust-lang/crates.io-index"
4604
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
4605
dependencies = [
4606
-
"bitflags 2.9.1",
4607
-
"rustix",
4608
"wayland-backend",
4609
"wayland-scanner",
4610
]
···
4615
source = "registry+https://github.com/rust-lang/crates.io-index"
4616
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
4617
dependencies = [
4618
-
"bitflags 2.9.1",
4619
"wayland-backend",
4620
"wayland-client",
4621
"wayland-scanner",
4622
]
4623
4624
[[package]]
4625
name = "wayland-scanner"
4626
version = "0.31.7"
4627
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4645
4646
[[package]]
4647
name = "web-sys"
4648
-
version = "0.3.77"
4649
source = "registry+https://github.com/rust-lang/crates.io-index"
4650
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
4651
dependencies = [
4652
"js-sys",
4653
"wasm-bindgen",
···
4706
"webview2-com-macros",
4707
"webview2-com-sys",
4708
"windows",
4709
-
"windows-core",
4710
"windows-implement",
4711
"windows-interface",
4712
]
···
4719
dependencies = [
4720
"proc-macro2",
4721
"quote",
4722
-
"syn 2.0.104",
4723
]
4724
4725
[[package]]
···
4728
source = "registry+https://github.com/rust-lang/crates.io-index"
4729
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
4730
dependencies = [
4731
-
"thiserror 2.0.12",
4732
"windows",
4733
-
"windows-core",
4734
]
4735
4736
[[package]]
4737
name = "winapi"
4738
version = "0.3.9"
4739
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4751
4752
[[package]]
4753
name = "winapi-util"
4754
-
version = "0.1.9"
4755
source = "registry+https://github.com/rust-lang/crates.io-index"
4756
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
4757
dependencies = [
4758
-
"windows-sys 0.59.0",
4759
]
4760
4761
[[package]]
···
4770
source = "registry+https://github.com/rust-lang/crates.io-index"
4771
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
4772
dependencies = [
4773
-
"objc2 0.6.1",
4774
"objc2-app-kit",
4775
"objc2-core-foundation",
4776
-
"objc2-foundation 0.3.1",
4777
"raw-window-handle",
4778
"windows-sys 0.59.0",
4779
"windows-version",
···
4786
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4787
dependencies = [
4788
"windows-collections",
4789
-
"windows-core",
4790
"windows-future",
4791
-
"windows-link",
4792
"windows-numerics",
4793
]
4794
···
4798
source = "registry+https://github.com/rust-lang/crates.io-index"
4799
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4800
dependencies = [
4801
-
"windows-core",
4802
]
4803
4804
[[package]]
···
4809
dependencies = [
4810
"windows-implement",
4811
"windows-interface",
4812
-
"windows-link",
4813
-
"windows-result",
4814
-
"windows-strings",
4815
]
4816
4817
[[package]]
···
4820
source = "registry+https://github.com/rust-lang/crates.io-index"
4821
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4822
dependencies = [
4823
-
"windows-core",
4824
-
"windows-link",
4825
"windows-threading",
4826
]
4827
4828
[[package]]
4829
name = "windows-implement"
4830
-
version = "0.60.0"
4831
source = "registry+https://github.com/rust-lang/crates.io-index"
4832
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
4833
dependencies = [
4834
"proc-macro2",
4835
"quote",
4836
-
"syn 2.0.104",
4837
]
4838
4839
[[package]]
4840
name = "windows-interface"
4841
-
version = "0.59.1"
4842
source = "registry+https://github.com/rust-lang/crates.io-index"
4843
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
4844
dependencies = [
4845
"proc-macro2",
4846
"quote",
4847
-
"syn 2.0.104",
4848
]
4849
4850
[[package]]
···
4854
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4855
4856
[[package]]
4857
name = "windows-numerics"
4858
version = "0.2.0"
4859
source = "registry+https://github.com/rust-lang/crates.io-index"
4860
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4861
dependencies = [
4862
-
"windows-core",
4863
-
"windows-link",
4864
]
4865
4866
[[package]]
···
4869
source = "registry+https://github.com/rust-lang/crates.io-index"
4870
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4871
dependencies = [
4872
-
"windows-link",
4873
]
4874
4875
[[package]]
···
4878
source = "registry+https://github.com/rust-lang/crates.io-index"
4879
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4880
dependencies = [
4881
-
"windows-link",
4882
]
4883
4884
[[package]]
···
4905
source = "registry+https://github.com/rust-lang/crates.io-index"
4906
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
4907
dependencies = [
4908
-
"windows-targets 0.53.3",
4909
]
4910
4911
[[package]]
···
4941
4942
[[package]]
4943
name = "windows-targets"
4944
-
version = "0.53.3"
4945
source = "registry+https://github.com/rust-lang/crates.io-index"
4946
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
4947
dependencies = [
4948
-
"windows-link",
4949
-
"windows_aarch64_gnullvm 0.53.0",
4950
-
"windows_aarch64_msvc 0.53.0",
4951
-
"windows_i686_gnu 0.53.0",
4952
-
"windows_i686_gnullvm 0.53.0",
4953
-
"windows_i686_msvc 0.53.0",
4954
-
"windows_x86_64_gnu 0.53.0",
4955
-
"windows_x86_64_gnullvm 0.53.0",
4956
-
"windows_x86_64_msvc 0.53.0",
4957
]
4958
4959
[[package]]
···
4962
source = "registry+https://github.com/rust-lang/crates.io-index"
4963
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4964
dependencies = [
4965
-
"windows-link",
4966
]
4967
4968
[[package]]
4969
name = "windows-version"
4970
-
version = "0.1.4"
4971
source = "registry+https://github.com/rust-lang/crates.io-index"
4972
-
checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
4973
dependencies = [
4974
-
"windows-link",
4975
]
4976
4977
[[package]]
···
4988
4989
[[package]]
4990
name = "windows_aarch64_gnullvm"
4991
-
version = "0.53.0"
4992
source = "registry+https://github.com/rust-lang/crates.io-index"
4993
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
4994
4995
[[package]]
4996
name = "windows_aarch64_msvc"
···
5006
5007
[[package]]
5008
name = "windows_aarch64_msvc"
5009
-
version = "0.53.0"
5010
source = "registry+https://github.com/rust-lang/crates.io-index"
5011
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
5012
5013
[[package]]
5014
name = "windows_i686_gnu"
···
5024
5025
[[package]]
5026
name = "windows_i686_gnu"
5027
-
version = "0.53.0"
5028
source = "registry+https://github.com/rust-lang/crates.io-index"
5029
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
5030
5031
[[package]]
5032
name = "windows_i686_gnullvm"
···
5036
5037
[[package]]
5038
name = "windows_i686_gnullvm"
5039
-
version = "0.53.0"
5040
source = "registry+https://github.com/rust-lang/crates.io-index"
5041
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
5042
5043
[[package]]
5044
name = "windows_i686_msvc"
···
5054
5055
[[package]]
5056
name = "windows_i686_msvc"
5057
-
version = "0.53.0"
5058
source = "registry+https://github.com/rust-lang/crates.io-index"
5059
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
5060
5061
[[package]]
5062
name = "windows_x86_64_gnu"
···
5072
5073
[[package]]
5074
name = "windows_x86_64_gnu"
5075
-
version = "0.53.0"
5076
source = "registry+https://github.com/rust-lang/crates.io-index"
5077
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
5078
5079
[[package]]
5080
name = "windows_x86_64_gnullvm"
···
5090
5091
[[package]]
5092
name = "windows_x86_64_gnullvm"
5093
-
version = "0.53.0"
5094
source = "registry+https://github.com/rust-lang/crates.io-index"
5095
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
5096
5097
[[package]]
5098
name = "windows_x86_64_msvc"
···
5108
5109
[[package]]
5110
name = "windows_x86_64_msvc"
5111
-
version = "0.53.0"
5112
source = "registry+https://github.com/rust-lang/crates.io-index"
5113
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
5114
5115
[[package]]
5116
name = "winnow"
···
5123
5124
[[package]]
5125
name = "winnow"
5126
-
version = "0.7.12"
5127
source = "registry+https://github.com/rust-lang/crates.io-index"
5128
-
checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
5129
dependencies = [
5130
"memchr",
5131
]
···
5141
]
5142
5143
[[package]]
5144
-
name = "wit-bindgen-rt"
5145
-
version = "0.39.0"
5146
source = "registry+https://github.com/rust-lang/crates.io-index"
5147
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
5148
dependencies = [
5149
-
"bitflags 2.9.1",
5150
]
5151
5152
[[package]]
5153
name = "writeable"
5154
-
version = "0.6.1"
5155
source = "registry+https://github.com/rust-lang/crates.io-index"
5156
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
5157
5158
[[package]]
5159
name = "wry"
5160
-
version = "0.52.1"
5161
source = "registry+https://github.com/rust-lang/crates.io-index"
5162
-
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
5163
dependencies = [
5164
"base64 0.22.1",
5165
-
"block2 0.6.1",
5166
"cookie",
5167
"crossbeam-channel",
5168
"dpi",
5169
"dunce",
5170
"gdkx11",
···
5176
"kuchikiki",
5177
"libc",
5178
"ndk",
5179
-
"objc2 0.6.1",
5180
"objc2-app-kit",
5181
"objc2-core-foundation",
5182
-
"objc2-foundation 0.3.1",
5183
"objc2-ui-kit",
5184
"objc2-web-kit",
5185
"once_cell",
···
5188
"sha2",
5189
"soup3",
5190
"tao-macros",
5191
-
"thiserror 2.0.12",
5192
"url",
5193
"webkit2gtk",
5194
"webkit2gtk-sys",
5195
"webview2-com",
5196
"windows",
5197
-
"windows-core",
5198
"windows-version",
5199
"x11-dl",
5200
]
···
5221
]
5222
5223
[[package]]
5224
name = "yoke"
5225
-
version = "0.8.0"
5226
source = "registry+https://github.com/rust-lang/crates.io-index"
5227
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
5228
dependencies = [
5229
-
"serde",
5230
"stable_deref_trait",
5231
"yoke-derive",
5232
"zerofrom",
···
5234
5235
[[package]]
5236
name = "yoke-derive"
5237
-
version = "0.8.0"
5238
source = "registry+https://github.com/rust-lang/crates.io-index"
5239
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
5240
dependencies = [
5241
"proc-macro2",
5242
"quote",
5243
-
"syn 2.0.104",
5244
"synstructure",
5245
]
5246
5247
[[package]]
5248
name = "zbus"
5249
-
version = "5.9.0"
5250
source = "registry+https://github.com/rust-lang/crates.io-index"
5251
-
checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
5252
dependencies = [
5253
"async-broadcast",
5254
"async-executor",
···
5271
"tokio",
5272
"tracing",
5273
"uds_windows",
5274
-
"windows-sys 0.59.0",
5275
-
"winnow 0.7.12",
5276
"zbus_macros",
5277
"zbus_names",
5278
"zvariant",
···
5280
5281
[[package]]
5282
name = "zbus_macros"
5283
-
version = "5.9.0"
5284
source = "registry+https://github.com/rust-lang/crates.io-index"
5285
-
checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
5286
dependencies = [
5287
-
"proc-macro-crate 3.3.0",
5288
"proc-macro2",
5289
"quote",
5290
-
"syn 2.0.104",
5291
"zbus_names",
5292
"zvariant",
5293
"zvariant_utils",
···
5301
dependencies = [
5302
"serde",
5303
"static_assertions",
5304
-
"winnow 0.7.12",
5305
"zvariant",
5306
]
5307
5308
[[package]]
5309
name = "zerocopy"
5310
-
version = "0.8.26"
5311
source = "registry+https://github.com/rust-lang/crates.io-index"
5312
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
5313
dependencies = [
5314
"zerocopy-derive",
5315
]
5316
5317
[[package]]
5318
name = "zerocopy-derive"
5319
-
version = "0.8.26"
5320
source = "registry+https://github.com/rust-lang/crates.io-index"
5321
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
5322
dependencies = [
5323
"proc-macro2",
5324
"quote",
5325
-
"syn 2.0.104",
5326
]
5327
5328
[[package]]
···
5342
dependencies = [
5343
"proc-macro2",
5344
"quote",
5345
-
"syn 2.0.104",
5346
"synstructure",
5347
]
5348
5349
[[package]]
5350
name = "zerotrie"
5351
-
version = "0.2.2"
5352
source = "registry+https://github.com/rust-lang/crates.io-index"
5353
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
5354
dependencies = [
5355
"displaydoc",
5356
"yoke",
···
5359
5360
[[package]]
5361
name = "zerovec"
5362
-
version = "0.11.2"
5363
source = "registry+https://github.com/rust-lang/crates.io-index"
5364
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
5365
dependencies = [
5366
"yoke",
5367
"zerofrom",
···
5370
5371
[[package]]
5372
name = "zerovec-derive"
5373
-
version = "0.11.1"
5374
source = "registry+https://github.com/rust-lang/crates.io-index"
5375
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
5376
dependencies = [
5377
"proc-macro2",
5378
"quote",
5379
-
"syn 2.0.104",
5380
]
5381
5382
[[package]]
5383
name = "zvariant"
5384
-
version = "5.6.0"
5385
source = "registry+https://github.com/rust-lang/crates.io-index"
5386
-
checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
5387
dependencies = [
5388
"endi",
5389
"enumflags2",
5390
"serde",
5391
"url",
5392
-
"winnow 0.7.12",
5393
"zvariant_derive",
5394
"zvariant_utils",
5395
]
5396
5397
[[package]]
5398
name = "zvariant_derive"
5399
-
version = "5.6.0"
5400
source = "registry+https://github.com/rust-lang/crates.io-index"
5401
-
checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
5402
dependencies = [
5403
-
"proc-macro-crate 3.3.0",
5404
"proc-macro2",
5405
"quote",
5406
-
"syn 2.0.104",
5407
"zvariant_utils",
5408
]
5409
5410
[[package]]
5411
name = "zvariant_utils"
5412
-
version = "3.2.0"
5413
source = "registry+https://github.com/rust-lang/crates.io-index"
5414
-
checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
5415
dependencies = [
5416
"proc-macro2",
5417
"quote",
5418
"serde",
5419
-
"static_assertions",
5420
-
"syn 2.0.104",
5421
-
"winnow 0.7.12",
5422
]
···
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"
381
version = "1.5.0"
382
source = "registry+https://github.com/rust-lang/crates.io-index"
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"
···
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"
1401
version = "0.18.4"
1402
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1434
source = "registry+https://github.com/rust-lang/crates.io-index"
1435
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1436
dependencies = [
1437
+
"bitflags 2.10.0",
1438
"futures-channel",
1439
"futures-core",
1440
"futures-executor",
···
1458
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1459
dependencies = [
1460
"heck 0.4.1",
1461
+
"proc-macro-crate 2.0.2",
1462
"proc-macro-error",
1463
"proc-macro2",
1464
"quote",
1465
+
"syn 2.0.109",
1466
]
1467
1468
[[package]]
···
1477
1478
[[package]]
1479
name = "glob"
1480
+
version = "0.3.3"
1481
source = "registry+https://github.com/rust-lang/crates.io-index"
1482
+
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
1483
1484
[[package]]
1485
name = "gobject-sys"
···
1541
"proc-macro-error",
1542
"proc-macro2",
1543
"quote",
1544
+
"syn 2.0.109",
1545
+
]
1546
+
1547
+
[[package]]
1548
+
name = "half"
1549
+
version = "2.7.1"
1550
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1551
+
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
1552
+
dependencies = [
1553
+
"cfg-if",
1554
+
"crunchy",
1555
+
"zerocopy",
1556
]
1557
1558
[[package]]
···
1563
1564
[[package]]
1565
name = "hashbrown"
1566
+
version = "0.15.5"
1567
source = "registry+https://github.com/rust-lang/crates.io-index"
1568
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1569
+
dependencies = [
1570
+
"foldhash",
1571
+
]
1572
+
1573
+
[[package]]
1574
+
name = "hashbrown"
1575
+
version = "0.16.0"
1576
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1577
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1578
1579
[[package]]
1580
name = "heck"
···
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",
3398
"web-sys",
3399
"windows-sys 0.59.0",
3400
]
3401
3402
[[package]]
3403
name = "rustc_version"
···
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
+
5024
+
[[package]]
5025
name = "wayland-scanner"
5026
version = "0.31.7"
5027
source = "registry+https://github.com/rust-lang/crates.io-index"
···
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
-6
src-tauri/Cargo.toml
+12
-6
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
-
crossbeam-channel = "0.5.15"
31
···
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
+4
-1
src-tauri/capabilities/default.json
+4
-1
src-tauri/capabilities/default.json
+9
src-tauri/src/frontend_calls/close_app.rs
+9
src-tauri/src/frontend_calls/close_app.rs
+11
-4
src-tauri/src/frontend_calls/load_previous_tabs.rs
+11
-4
src-tauri/src/frontend_calls/load_previous_tabs.rs
···
1
use std::collections::HashMap;
2
3
-
use tauri::State;
4
5
-
use crate::{ structs::nodes::Node, utils::config::Config };
6
7
#[tauri::command]
8
-
pub fn load_previous_tabs( conf: State<Config> ) -> HashMap<String, ( Vec<Node>, String, Option<String> )> {
9
let config = conf.store.lock().unwrap();
10
11
let tabs = config.loaded_tabs.clone();
12
tabs
13
-
}
···
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
+
}
+3
-1
src-tauri/src/frontend_calls/mod.rs
+3
-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
+
}
+18
-11
src-tauri/src/frontend_calls/sync_tab.rs
+18
-11
src-tauri/src/frontend_calls/sync_tab.rs
···
1
use crossbeam_channel::Sender;
2
3
use tauri::State;
4
5
-
use crate::{ runtime::commands::RuntimeCommand, structs::nodes::Node, utils::config::Config };
6
7
#[tauri::command]
8
-
pub fn sync_tab( graph: Vec<Node>, id: String, name: String, location: Option<String>, cmd: State<Sender<RuntimeCommand>>, conf: State<Config> ){
9
-
cmd.send(RuntimeCommand::AddTab(graph.clone(), id.clone())).unwrap();
10
11
let mut config = conf.store.lock().unwrap();
12
-
config.loaded_tabs.insert(id, ( graph, name, location ));
13
-
drop(config);
14
15
-
conf.save();
16
}
17
18
#[tauri::command]
19
-
pub fn discard_tab( id: String, cmd: State<Sender<RuntimeCommand>>, conf: State<Config> ){
20
cmd.send(RuntimeCommand::RemoveTab(id.clone())).unwrap();
21
22
let mut config = conf.store.lock().unwrap();
23
config.loaded_tabs.remove(&id);
24
-
drop(config);
25
-
26
-
conf.save();
27
-
}
···
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
+
}
+15
-10
src-tauri/src/lib.rs
+15
-10
src-tauri/src/lib.rs
···
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 };
7
8
mod frontend_calls;
9
mod osc;
10
mod setup;
11
mod structs;
12
mod utils;
13
-
mod runtime;
14
15
#[cfg_attr(mobile, tauri::mobile_entry_point)]
16
#[tokio::main]
17
pub async fn run() {
18
-
// TODO: Impl background running by default
19
-
20
let container_folder = dirs::config_dir().unwrap().join("VRCMacros");
21
22
match fs::metadata(&container_folder) {
23
Ok(meta) => {
24
if meta.is_file() {
25
-
panic!(
26
-
"document.write('Cannot launch app as the container path is a file not a directory')"
27
-
);
28
}
29
}
30
Err(_) => {
···
37
38
static ADDRESSES: Mutex<Vec<OSCMessage>> = Mutex::new(Vec::new());
39
40
-
let ( runtime_sender, runtime_receiver ) = bounded(1024);
41
42
tauri::Builder::default()
43
.plugin(tauri_plugin_dialog::init())
44
.plugin(tauri_plugin_opener::init())
45
.invoke_handler(tauri::generate_handler![
···
47
save_graph::save_graph,
48
sync_tab::sync_tab,
49
sync_tab::discard_tab,
50
-
load_previous_tabs::load_previous_tabs
51
])
52
.manage(conf)
53
.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]
17
pub async fn run() {
18
let container_folder = dirs::config_dir().unwrap().join("VRCMacros");
19
20
match fs::metadata(&container_folder) {
21
Ok(meta) => {
22
if meta.is_file() {
23
+
panic!("Cannot launch app as the container path is a file not a directory");
24
}
25
}
26
Err(_) => {
···
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![
···
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
-1
src-tauri/src/osc.rs
-1
src-tauri/src/osc.rs
+4
-4
src-tauri/src/runtime/commands.rs
+4
-4
src-tauri/src/runtime/commands.rs
+37
-38
src-tauri/src/runtime/nodes/conditional/ifequal.rs
+37
-38
src-tauri/src/runtime/nodes/conditional/ifequal.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct ConditionalIfEqual{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value1: ParameterType,
6
-
value2: ParameterType
7
}
8
9
-
impl ConditionalIfEqual{
10
-
pub fn new( node: Node ) -> Box<Self>{
11
-
dbg!(&node);
12
-
13
Box::new(Self {
14
-
outputs: node.outputs.iter()
15
-
.map(| x | {
16
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
17
-
}).collect(),
18
-
value1: ParameterType::None,
19
-
value2: ParameterType::None,
20
})
21
}
22
}
23
24
-
impl RuntimeNode for ConditionalIfEqual{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> { self.outputs.clone() }
26
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> { Some(vec![]) }
27
28
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
29
-
if self.value1 == ParameterType::None && self.value2 == ParameterType::None{
30
-
None
31
-
} else{
32
-
let equal = self.value1 == self.value2;
33
-
Some(vec![ ParameterType::Flow(equal), ParameterType::Flow(!equal) ])
34
-
}
35
}
36
37
-
fn update_arg( &mut self, index: usize, arg: ParameterType ) -> bool {
38
-
match index{
39
-
1 => {
40
-
self.value1 = arg;
41
-
}
42
-
2 => {
43
-
self.value2 = arg;
44
-
}
45
-
_ => {}
46
-
}
47
48
false
49
}
50
-
51
-
fn is_entrypoint( &self ) -> bool { false }
52
-
}
···
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
+
}
+38
-33
src-tauri/src/runtime/nodes/conditional/iffalse.rs
+38
-33
src-tauri/src/runtime/nodes/conditional/iffalse.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct ConditionalIfFalse{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
runtime_active: bool
6
}
7
8
-
impl ConditionalIfFalse{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
12
Box::new(Self {
13
-
outputs: node.outputs.iter()
14
-
.map(| x | {
15
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
16
-
}).collect(),
17
-
runtime_active: false
18
})
19
}
20
}
21
22
-
impl RuntimeNode for ConditionalIfFalse{
23
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> { self.outputs.clone() }
24
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> { Some(vec![]) }
25
26
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
27
-
Some(vec![ ParameterType::Flow(!self.runtime_active), ParameterType::Flow(self.runtime_active) ])
28
}
29
30
-
fn update_arg( &mut self, _: usize, arg: ParameterType ) -> bool {
31
-
if let ParameterType::Boolean(boolean) = arg{
32
-
if boolean{
33
-
self.runtime_active = true;
34
-
true
35
-
} else{
36
-
self.runtime_active = false;
37
-
false
38
-
}
39
-
} else{
40
-
self.runtime_active = false;
41
-
false
42
-
}
43
}
44
45
-
fn is_entrypoint( &self ) -> bool { false }
46
-
}
···
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
+
}
+38
-33
src-tauri/src/runtime/nodes/conditional/iftrue.rs
+38
-33
src-tauri/src/runtime/nodes/conditional/iftrue.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct ConditionalIfTrue{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
runtime_active: bool
6
}
7
8
-
impl ConditionalIfTrue{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
12
Box::new(Self {
13
-
outputs: node.outputs.iter()
14
-
.map(| x | {
15
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
16
-
}).collect(),
17
-
runtime_active: false
18
})
19
}
20
}
21
22
-
impl RuntimeNode for ConditionalIfTrue{
23
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> { self.outputs.clone() }
24
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> { Some(vec![]) }
25
26
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
27
-
Some(vec![ ParameterType::Flow(self.runtime_active), ParameterType::Flow(!self.runtime_active) ])
28
}
29
30
-
fn update_arg( &mut self, _: usize, arg: ParameterType ) -> bool {
31
-
if let ParameterType::Boolean(boolean) = arg{
32
-
if boolean{
33
-
self.runtime_active = true;
34
-
true
35
-
} else{
36
-
self.runtime_active = false;
37
-
false
38
-
}
39
-
} else{
40
-
self.runtime_active = false;
41
-
false
42
-
}
43
}
44
45
-
fn is_entrypoint( &self ) -> bool { false }
46
-
}
···
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
+
}
+2
-2
src-tauri/src/runtime/nodes/conditional/mod.rs
+2
-2
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 ) -> 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 ) -> Option<Vec<ParameterType>> {
18
-
dbg!(&self.to_log);
19
-
self.to_log = None;
20
21
-
None
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
+
}
+49
-44
src-tauri/src/runtime/nodes/osctrigger.rs
+49
-44
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: Option<String>,
6
-
runtime_active: bool
7
-
}
8
9
-
impl OSCTrigger{
10
-
pub fn new( node: Node ) -> Box<Self>{
11
-
dbg!(&node);
12
13
let value = &node.statics[0].value;
14
15
Box::new(Self {
16
-
address: if value.is_null(){ None } else { Some(value.as_str().unwrap().to_owned()) },
17
-
outputs: node.outputs.iter()
18
-
.map(| x | {
19
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
20
-
}).collect(),
21
-
runtime_active: false
22
})
23
}
24
}
25
26
-
impl RuntimeNode for OSCTrigger{
27
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
28
self.outputs.clone()
29
}
30
31
-
fn execute_dry( &mut self, msg: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> {
32
-
if self.address.is_none(){
33
-
self.runtime_active = false;
34
-
return None
35
-
}
36
37
-
if let ParameterType::String(address) = &msg[0]{
38
-
if *address == *self.address.as_ref().unwrap(){
39
-
self.runtime_active = true;
40
-
Some(msg.clone())
41
-
// The first value is technically the address value,
42
-
// but this value gets ignored as the first output of
43
-
// the osctrigger node is a flow output which gets ignored
44
-
// on dry runs.
45
} else{
46
-
self.runtime_active = false;
47
-
None
48
}
49
} else{
50
-
self.runtime_active = false;
51
-
None
52
-
}
53
}
54
55
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
56
-
let execute = self.runtime_active;
57
-
self.runtime_active = false;
58
-
59
-
Some(vec![ ParameterType::Flow(execute) ])
60
}
61
-
62
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
63
-
fn is_entrypoint( &self ) -> bool { true }
64
-
}
···
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
+
}
+44
-25
src-tauri/src/runtime/nodes/statics/float.rs
+44
-25
src-tauri/src/runtime/nodes/statics/float.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct StaticFloat{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value: Option<f32>
6
}
7
8
-
impl StaticFloat{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
12
let value = &node.statics[0].value;
13
14
Box::new(Self {
15
-
value: if value.is_null(){ None } else { Some(value.as_f64().unwrap() as f32) },
16
-
outputs: node.outputs.iter()
17
-
.map(| x | {
18
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
19
-
}).collect(),
20
})
21
}
22
}
23
24
-
impl RuntimeNode for StaticFloat{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
26
self.outputs.clone()
27
}
28
29
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> {
30
-
if self.value.is_some(){
31
-
Some(vec![ ParameterType::Float(self.value.clone().unwrap()) ])
32
-
} else{
33
-
None
34
-
}
35
}
36
37
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> { None }
38
39
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
40
-
fn is_entrypoint( &self ) -> bool { true }
41
-
}
···
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
+
}
+44
-25
src-tauri/src/runtime/nodes/statics/int.rs
+44
-25
src-tauri/src/runtime/nodes/statics/int.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct StaticInt{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value: Option<i32>
6
}
7
8
-
impl StaticInt{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
12
let value = &node.statics[0].value;
13
14
Box::new(Self {
15
-
value: if value.is_null(){ None } else { Some(value.as_i64().unwrap() as i32) },
16
-
outputs: node.outputs.iter()
17
-
.map(| x | {
18
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
19
-
}).collect(),
20
})
21
}
22
}
23
24
-
impl RuntimeNode for StaticInt{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
26
self.outputs.clone()
27
}
28
29
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> {
30
-
if self.value.is_some(){
31
-
Some(vec![ ParameterType::Int(self.value.clone().unwrap()) ])
32
-
} else{
33
-
None
34
-
}
35
}
36
37
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> { None }
38
39
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
40
-
fn is_entrypoint( &self ) -> bool { true }
41
-
}
···
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
+
}
+2
-2
src-tauri/src/runtime/nodes/statics/mod.rs
+2
-2
src-tauri/src/runtime/nodes/statics/mod.rs
+44
-25
src-tauri/src/runtime/nodes/statics/string.rs
+44
-25
src-tauri/src/runtime/nodes/statics/string.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
2
3
-
pub struct StaticString{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value: Option<String>
6
}
7
8
-
impl StaticString{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
12
let value = &node.statics[0].value;
13
14
Box::new(Self {
15
-
value: if value.is_null(){ None } else { Some(value.as_str().unwrap().to_owned()) },
16
-
outputs: node.outputs.iter()
17
-
.map(| x | {
18
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
19
-
}).collect(),
20
})
21
}
22
}
23
24
-
impl RuntimeNode for StaticString{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
26
self.outputs.clone()
27
}
28
29
-
fn execute_dry( &mut self, _: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> {
30
-
if self.value.is_some(){
31
-
Some(vec![ ParameterType::String(self.value.clone().unwrap()) ])
32
-
} else{
33
-
None
34
-
}
35
}
36
37
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> { None }
38
39
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
40
-
fn is_entrypoint( &self ) -> bool { true }
41
-
}
···
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
+
}
+79
-26
src-tauri/src/runtime/nodes.rs
+79
-26
src-tauri/src/runtime/nodes.rs
···
1
-
use std::collections::HashMap;
2
3
-
use crate::{ runtime::nodes::{ conditional::{ ifequal::ConditionalIfEqual, iffalse::ConditionalIfFalse, iftrue::ConditionalIfTrue }, debug::Debug, osctrigger::OSCTrigger, statics::{ float::StaticFloat, int::StaticInt, string::StaticString } }, structs::{ nodes::Node, parameter_types::ParameterType } };
4
5
mod osctrigger;
6
-
mod debug;
7
mod statics;
8
-
mod conditional;
9
10
-
pub struct RuntimeNodeTree{
11
-
pub nodes: HashMap<String, Box<dyn RuntimeNode>>
12
}
13
14
-
unsafe impl Send for RuntimeNodeTree{}
15
16
-
impl RuntimeNodeTree{
17
-
pub fn from( tree: Vec<Node> ) -> Self{
18
let mut runtime_nodes: HashMap<String, Box<dyn RuntimeNode>> = HashMap::new();
19
-
for node in tree{
20
-
match node.type_id.as_str(){
21
-
"osctrigger" => { runtime_nodes.insert(node.id.clone(), OSCTrigger::new(node)); }
22
23
-
"staticstring" => { runtime_nodes.insert(node.id.clone(), StaticString::new(node)); }
24
-
"staticint" => { runtime_nodes.insert(node.id.clone(), StaticInt::new(node)); }
25
-
"staticfloat" => { runtime_nodes.insert(node.id.clone(), StaticFloat::new(node)); }
26
27
-
"iftrue" => { runtime_nodes.insert(node.id.clone(), ConditionalIfTrue::new(node)); }
28
-
"iffalse" => { runtime_nodes.insert(node.id.clone(), ConditionalIfFalse::new(node)); }
29
-
"ifequal" => { runtime_nodes.insert(node.id.clone(), ConditionalIfEqual::new(node)); }
30
31
-
"debug" => { runtime_nodes.insert(node.id.clone(), Debug::new(node)); }
32
_ => {}
33
}
34
}
35
36
-
Self { nodes: runtime_nodes }
37
}
38
}
39
40
-
pub trait RuntimeNode{
41
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>>; // Node ID, input index, output value type
42
-
fn execute_dry( &mut self, msg: &Vec<ParameterType> ) -> Option<Vec<ParameterType>>; // Only update values on the first loop through
43
-
fn execute( &mut self ) -> Option<Vec<ParameterType>>; // Then call functions on the second loop
44
-
fn update_arg( &mut self, index: usize, value: ParameterType ) -> bool;
45
-
fn is_entrypoint( &self ) -> bool;
46
}
···
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
}
+65
-40
src-tauri/src/runtime.rs
+65
-40
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: &mut RuntimeNodeTree ) -> Result<()>{
11
-
let node = tab.nodes.get_mut(&entry);
12
-
if node.is_none(){ bail!("Cannot find node"); }
13
14
-
let node = node.unwrap();
15
16
-
let output_map = node.outputs();
17
-
let args = node.execute_dry(parameters);
18
19
-
if args.is_some(){
20
-
let args = args.unwrap();
21
22
-
for i in 0..args.len(){
23
-
let arg = &args[i];
24
25
-
for output in &output_map[i]{
26
-
if output.2 == 5{ break; } // Ignore flow outputs
27
28
-
let next_node = tab.nodes.get_mut(&output.0);
29
-
if next_node.is_none(){ bail!("Cannot find node {}", output.0) }
30
31
-
let next_node = next_node.unwrap();
32
-
let can_update = next_node.update_arg(output.1 as usize, arg.clone());
33
34
-
if can_update{
35
-
runtime_dry(output.0.clone(), &vec![], tab)?;
36
}
37
}
38
}
···
41
Ok(())
42
}
43
44
-
pub fn runtime( entry: String, tab: &mut RuntimeNodeTree ) -> Result<()>{
45
let node = tab.nodes.get_mut(&entry);
46
-
if node.is_none(){ bail!("Cannot find node"); }
47
48
let node = node.unwrap();
49
50
-
let next = node.execute();
51
-
if next.is_some(){
52
-
let next = next.unwrap();
53
54
-
let outputs = node.outputs();
55
56
-
for i in 0..next.len(){
57
-
let arg = &next[i];
58
-
if i >= outputs.len() { break; }
59
60
-
for output in &outputs[i]{
61
-
if let ParameterType::Flow(next) = arg{
62
-
if *next{
63
-
// This is a flow output, continue
64
-
runtime(output.0.clone(), tab)?;
65
-
}
66
-
}
67
}
68
}
69
}
70
71
-
Ok(())
72
-
}
···
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
-
}
···
+73
-34
src-tauri/src/setup.rs
+73
-34
src-tauri/src/setup.rs
···
1
-
use std::{ collections::HashMap, fs::File, io::Read, sync::Mutex };
2
-
use crossbeam_channel::{ Receiver, bounded };
3
4
use flate2::read::GzDecoder;
5
-
use serde_json::{ Map, Value };
6
-
use tauri::{ App, Emitter, Listener, Manager, State };
7
8
-
use crate::{ osc::{ self, OSCMessage }, runtime::{ commands::RuntimeCommand, nodes::RuntimeNodeTree, runtime, runtime_dry }, structs::parameter_types::ParameterType, utils::config::Config };
9
10
pub fn setup(
11
app: &mut App,
12
addresses: &'static Mutex<Vec<OSCMessage>>,
13
-
mut runtime_command_receiver: Receiver<RuntimeCommand>
14
) {
15
let window = app.get_webview_window("main").unwrap();
16
17
let handle = window.clone();
18
window.listen("tauri://drag-drop", move |ev| {
···
33
handle.emit("load_new_tab", Value::Object(map)).unwrap();
34
});
35
36
-
let ( sender, receiver ) = bounded(1024);
37
38
tokio::spawn(async move {
39
osc::start_server(sender, "127.0.0.1:9001");
40
});
41
42
-
let ( runtime_sender, runtime_receiver ) = bounded(1024);
43
44
let runtime_sender_1 = runtime_sender.clone();
45
tokio::spawn(async move {
···
57
58
let msg = message.clone();
59
let mut addrs = addresses.lock().unwrap();
60
-
if !addrs.contains(&msg) { addrs.push(msg); }
61
62
-
runtime_sender.send(RuntimeCommand::OSCMessage(message)).unwrap();
63
}
64
});
65
66
tokio::spawn(async move {
67
let mut tabs: HashMap<String, RuntimeNodeTree> = HashMap::new();
68
69
loop {
70
let cmd = runtime_receiver.recv().unwrap();
71
72
-
match cmd{
73
-
RuntimeCommand::OSCMessage( msg ) => {
74
-
for ( _, mut tab ) in &mut tabs{
75
-
let keys: Vec<String> = tab.nodes.keys().map(| x | { x.clone() }).collect();
76
77
-
for id in keys.clone(){
78
let entry = tab.nodes[&id].is_entrypoint();
79
80
-
if entry{
81
-
let args = vec![
82
-
vec![ ParameterType::String(msg.address.clone()) ], msg.values.clone()
83
-
].concat();
84
85
-
runtime_dry(id.clone(), &args, &mut tab).unwrap();
86
-
}
87
-
}
88
-
89
-
for id in keys{
90
-
let entry = tab.nodes[&id].is_entrypoint();
91
-
92
-
if entry{
93
-
let _ = runtime(id.clone(), &mut tab);
94
}
95
}
96
}
97
-
},
98
99
-
RuntimeCommand::AddTab( graph, id ) => {
100
-
tabs.insert(id, RuntimeNodeTree::from(graph));
101
-
},
102
-
RuntimeCommand::RemoveTab( id ) => {
103
tabs.remove(&id);
104
}
105
}
106
}
107
});
108
-
}
···
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 {
···
85
86
let msg = message.clone();
87
let mut addrs = addresses.lock().unwrap();
88
+
if !addrs.contains(&msg) {
89
+
addrs.push(msg);
90
+
}
91
+
92
+
if message.address == "/avatar/change".to_owned(){
93
+
*addrs = vrchat_builtin_parameters::get_read_addresses();
94
+
95
+
// TODO: Read avatar paramaters from file
96
+
}
97
98
+
runtime_sender
99
+
.send(RuntimeCommand::OSCMessage(message))
100
+
.unwrap();
101
}
102
});
103
104
+
// TODO: Run tabs in seperate threads (really not looking forward to this... thanks rust)
105
+
106
tokio::spawn(async move {
107
let mut tabs: HashMap<String, RuntimeNodeTree> = HashMap::new();
108
109
+
// #[cfg(target_os = "windows")]
110
+
let enigo = Arc::new(Mutex::new(enigo::Enigo::new(&enigo::Settings::default()).unwrap()));
111
+
112
loop {
113
let cmd = runtime_receiver.recv().unwrap();
114
115
+
match cmd {
116
+
RuntimeCommand::OSCMessage(msg) => {
117
+
for (_, mut tab) in &mut tabs {
118
+
let keys: Vec<String> = tab.nodes.keys().map(|x| x.clone()).collect();
119
120
+
for id in keys {
121
let entry = tab.nodes[&id].is_entrypoint();
122
123
+
if entry {
124
+
let mut args = vec![ ParameterType::String(msg.address.clone())];
125
+
let mut values = msg.values.clone();
126
127
+
args.append(&mut values);
128
+
let _ = recurse_runtime(id.clone(), &mut tab, args);
129
}
130
}
131
}
132
+
}
133
134
+
RuntimeCommand::AddTab(graph, id) => {
135
+
// #[cfg(target_os = "windows")]
136
+
tabs.insert(id, RuntimeNodeTree::from(graph, enigo.clone()));
137
+
138
+
// #[cfg(target_os = "linux")]
139
+
// tabs.insert(id, RuntimeNodeTree::from(graph));
140
+
}
141
+
RuntimeCommand::RemoveTab(id) => {
142
tabs.remove(&id);
143
}
144
}
145
}
146
});
147
+
}
+1
-1
src-tauri/src/structs/mod.rs
+1
-1
src-tauri/src/structs/mod.rs
+13
-12
src-tauri/src/structs/nodes.rs
+13
-12
src-tauri/src/structs/nodes.rs
···
1
-
use serde::{ Deserialize, Serialize };
2
use serde_json::Value;
3
4
#[derive(Serialize, Deserialize, Debug, Clone)]
5
-
pub struct Node{
6
pub id: String,
7
pub name: String,
8
-
pub outputs: Vec<NodeOutput>,
9
-
pub pos: [ f32; 2 ],
10
pub statics: Vec<NodeStatic>,
11
12
#[serde(rename = "typeId")]
13
-
pub type_id: String
14
}
15
16
#[derive(Serialize, Deserialize, Debug, Clone)]
17
-
pub struct NodeStatic{
18
pub name: String,
19
20
#[serde(rename = "type")]
21
pub value_type: isize,
22
-
pub value: Value
23
}
24
25
#[derive(Serialize, Deserialize, Debug, Clone)]
26
-
pub struct NodeOutput{
27
pub name: String,
28
29
#[serde(rename = "type")]
30
pub value_type: isize,
31
-
pub connections: Vec<NodeOutputConnections>
32
}
33
34
#[derive(Serialize, Deserialize, Debug, Clone)]
35
-
pub struct NodeOutputConnections{
36
pub name: String,
37
pub node: String,
38
pub index: isize,
39
40
#[serde(rename = "type")]
41
-
pub value_type: isize
42
-
}
···
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
+
}
+53
-1
src-tauri/src/structs/parameter_types.rs
+53
-1
src-tauri/src/structs/parameter_types.rs
···
1
+
use anyhow::{bail, Result};
2
use serde::Serialize;
3
4
#[derive(Serialize, Clone, Debug, PartialEq)]
···
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
}
+28
-7
src-tauri/src/utils/config.rs
+28
-7
src-tauri/src/utils/config.rs
···
1
-
use std::{ collections::HashMap, fs::File, io::{ Read, Write }, path::PathBuf, sync::Mutex };
2
3
-
use flate2::{ read::GzDecoder, write::GzEncoder, Compression };
4
-
use serde::{ Deserialize, Serialize };
5
6
use crate::structs::nodes::Node;
7
8
#[derive(Clone, Serialize, Deserialize, Debug)]
9
-
pub struct ConfigValues{
10
#[serde(default)]
11
-
pub loaded_tabs: HashMap<String, ( Vec<Node>, String, Option<String> )>
12
}
13
14
pub struct Config {
···
37
}
38
39
pub fn save(&self) {
40
-
let dat = serde_json::to_string(&self.store.lock().unwrap().clone()).unwrap();
41
-
dbg!(&dat);
42
43
let file = File::create(&self.path).unwrap();
44
let mut encoder = GzEncoder::new(file, Compression::default());
···
1
+
use std::{
2
+
collections::HashMap,
3
+
fs::File,
4
+
io::{Read, Write},
5
+
path::PathBuf,
6
+
sync::{Mutex, MutexGuard},
7
+
};
8
9
+
use chrono::Utc;
10
+
use flate2::{read::GzDecoder, write::GzEncoder, Compression};
11
+
use serde::{Deserialize, Serialize};
12
13
use crate::structs::nodes::Node;
14
15
#[derive(Clone, Serialize, Deserialize, Debug)]
16
+
pub struct ConfigValues {
17
+
#[serde(default)]
18
+
pub loaded_tabs: HashMap<String, (Vec<Node>, String, Option<String>, bool)>,
19
+
20
#[serde(default)]
21
+
pub hide_editor_on_start: bool,
22
}
23
24
pub struct Config {
···
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