+5
-2
.gitignore
+5
-2
.gitignore
-3
.vscode/extensions.json
-3
.vscode/extensions.json
+11
-9
package.json
+11
-9
package.json
···
12
12
},
13
13
"license": "MIT",
14
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"
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"
20
22
},
21
23
"devDependencies": {
22
-
"@tauri-apps/cli": "^2",
24
+
"@tauri-apps/cli": "^2.9.3",
23
25
"@types/animejs": "^3.1.13",
24
-
"typescript": "~5.6.2",
25
-
"vite": "^6.0.3",
26
-
"vite-plugin-solid": "^2.11.0"
26
+
"typescript": "~5.6.3",
27
+
"vite": "^6.4.1",
28
+
"vite-plugin-solid": "^2.11.10"
27
29
}
28
30
}
+477
-437
pnpm-lock.yaml
+477
-437
pnpm-lock.yaml
···
9
9
.:
10
10
dependencies:
11
11
'@tauri-apps/api':
12
-
specifier: ^2
13
-
version: 2.7.0
12
+
specifier: ^2.9.0
13
+
version: 2.9.0
14
+
'@tauri-apps/plugin-clipboard-manager':
15
+
specifier: ~2
16
+
version: 2.3.2
14
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':
15
24
specifier: ~2
16
-
version: 2.4.0
17
-
'@tauri-apps/plugin-opener':
18
-
specifier: ^2
19
-
version: 2.4.0
25
+
version: 2.3.2
20
26
animejs:
21
-
specifier: ^4.1.2
22
-
version: 4.1.2
27
+
specifier: ^4.2.2
28
+
version: 4.2.2
23
29
solid-js:
24
-
specifier: ^1.9.3
25
-
version: 1.9.7
30
+
specifier: ^1.9.10
31
+
version: 1.9.10
26
32
devDependencies:
27
33
'@tauri-apps/cli':
28
-
specifier: ^2
29
-
version: 2.7.1
34
+
specifier: ^2.9.3
35
+
version: 2.9.3
30
36
'@types/animejs':
31
37
specifier: ^3.1.13
32
38
version: 3.1.13
33
39
typescript:
34
-
specifier: ~5.6.2
40
+
specifier: ~5.6.3
35
41
version: 5.6.3
36
42
vite:
37
-
specifier: ^6.0.3
38
-
version: 6.3.5
43
+
specifier: ^6.4.1
44
+
version: 6.4.1
39
45
vite-plugin-solid:
40
-
specifier: ^2.11.0
41
-
version: 2.11.8(solid-js@1.9.7)(vite@6.3.5)
46
+
specifier: ^2.11.10
47
+
version: 2.11.10(solid-js@1.9.10)(vite@6.4.1)
42
48
43
49
packages:
44
-
45
-
'@ampproject/remapping@2.3.0':
46
-
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
47
-
engines: {node: '>=6.0.0'}
48
50
49
51
'@babel/code-frame@7.27.1':
50
52
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
51
53
engines: {node: '>=6.9.0'}
52
54
53
-
'@babel/compat-data@7.28.0':
54
-
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
55
+
'@babel/compat-data@7.28.5':
56
+
resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
55
57
engines: {node: '>=6.9.0'}
56
58
57
-
'@babel/core@7.28.0':
58
-
resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
59
+
'@babel/core@7.28.5':
60
+
resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
59
61
engines: {node: '>=6.9.0'}
60
62
61
-
'@babel/generator@7.28.0':
62
-
resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
63
+
'@babel/generator@7.28.5':
64
+
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
63
65
engines: {node: '>=6.9.0'}
64
66
65
67
'@babel/helper-compilation-targets@7.27.2':
···
78
80
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
79
81
engines: {node: '>=6.9.0'}
80
82
81
-
'@babel/helper-module-transforms@7.27.3':
82
-
resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
83
+
'@babel/helper-module-transforms@7.28.3':
84
+
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
83
85
engines: {node: '>=6.9.0'}
84
86
peerDependencies:
85
87
'@babel/core': ^7.0.0
···
92
94
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
93
95
engines: {node: '>=6.9.0'}
94
96
95
-
'@babel/helper-validator-identifier@7.27.1':
96
-
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
97
+
'@babel/helper-validator-identifier@7.28.5':
98
+
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
97
99
engines: {node: '>=6.9.0'}
98
100
99
101
'@babel/helper-validator-option@7.27.1':
100
102
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
101
103
engines: {node: '>=6.9.0'}
102
104
103
-
'@babel/helpers@7.28.2':
104
-
resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==}
105
+
'@babel/helpers@7.28.4':
106
+
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
105
107
engines: {node: '>=6.9.0'}
106
108
107
-
'@babel/parser@7.28.0':
108
-
resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
109
+
'@babel/parser@7.28.5':
110
+
resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
109
111
engines: {node: '>=6.0.0'}
110
112
hasBin: true
111
113
···
119
121
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
120
122
engines: {node: '>=6.9.0'}
121
123
122
-
'@babel/traverse@7.28.0':
123
-
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
124
+
'@babel/traverse@7.28.5':
125
+
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
124
126
engines: {node: '>=6.9.0'}
125
127
126
-
'@babel/types@7.28.2':
127
-
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
128
+
'@babel/types@7.28.5':
129
+
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
128
130
engines: {node: '>=6.9.0'}
129
131
130
-
'@esbuild/aix-ppc64@0.25.8':
131
-
resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==}
132
+
'@esbuild/aix-ppc64@0.25.12':
133
+
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
132
134
engines: {node: '>=18'}
133
135
cpu: [ppc64]
134
136
os: [aix]
135
137
136
-
'@esbuild/android-arm64@0.25.8':
137
-
resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==}
138
+
'@esbuild/android-arm64@0.25.12':
139
+
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
138
140
engines: {node: '>=18'}
139
141
cpu: [arm64]
140
142
os: [android]
141
143
142
-
'@esbuild/android-arm@0.25.8':
143
-
resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==}
144
+
'@esbuild/android-arm@0.25.12':
145
+
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
144
146
engines: {node: '>=18'}
145
147
cpu: [arm]
146
148
os: [android]
147
149
148
-
'@esbuild/android-x64@0.25.8':
149
-
resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==}
150
+
'@esbuild/android-x64@0.25.12':
151
+
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
150
152
engines: {node: '>=18'}
151
153
cpu: [x64]
152
154
os: [android]
153
155
154
-
'@esbuild/darwin-arm64@0.25.8':
155
-
resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==}
156
+
'@esbuild/darwin-arm64@0.25.12':
157
+
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
156
158
engines: {node: '>=18'}
157
159
cpu: [arm64]
158
160
os: [darwin]
159
161
160
-
'@esbuild/darwin-x64@0.25.8':
161
-
resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==}
162
+
'@esbuild/darwin-x64@0.25.12':
163
+
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
162
164
engines: {node: '>=18'}
163
165
cpu: [x64]
164
166
os: [darwin]
165
167
166
-
'@esbuild/freebsd-arm64@0.25.8':
167
-
resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==}
168
+
'@esbuild/freebsd-arm64@0.25.12':
169
+
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
168
170
engines: {node: '>=18'}
169
171
cpu: [arm64]
170
172
os: [freebsd]
171
173
172
-
'@esbuild/freebsd-x64@0.25.8':
173
-
resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==}
174
+
'@esbuild/freebsd-x64@0.25.12':
175
+
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
174
176
engines: {node: '>=18'}
175
177
cpu: [x64]
176
178
os: [freebsd]
177
179
178
-
'@esbuild/linux-arm64@0.25.8':
179
-
resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==}
180
+
'@esbuild/linux-arm64@0.25.12':
181
+
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
180
182
engines: {node: '>=18'}
181
183
cpu: [arm64]
182
184
os: [linux]
183
185
184
-
'@esbuild/linux-arm@0.25.8':
185
-
resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==}
186
+
'@esbuild/linux-arm@0.25.12':
187
+
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
186
188
engines: {node: '>=18'}
187
189
cpu: [arm]
188
190
os: [linux]
189
191
190
-
'@esbuild/linux-ia32@0.25.8':
191
-
resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==}
192
+
'@esbuild/linux-ia32@0.25.12':
193
+
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
192
194
engines: {node: '>=18'}
193
195
cpu: [ia32]
194
196
os: [linux]
195
197
196
-
'@esbuild/linux-loong64@0.25.8':
197
-
resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==}
198
+
'@esbuild/linux-loong64@0.25.12':
199
+
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
198
200
engines: {node: '>=18'}
199
201
cpu: [loong64]
200
202
os: [linux]
201
203
202
-
'@esbuild/linux-mips64el@0.25.8':
203
-
resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==}
204
+
'@esbuild/linux-mips64el@0.25.12':
205
+
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
204
206
engines: {node: '>=18'}
205
207
cpu: [mips64el]
206
208
os: [linux]
207
209
208
-
'@esbuild/linux-ppc64@0.25.8':
209
-
resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==}
210
+
'@esbuild/linux-ppc64@0.25.12':
211
+
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
210
212
engines: {node: '>=18'}
211
213
cpu: [ppc64]
212
214
os: [linux]
213
215
214
-
'@esbuild/linux-riscv64@0.25.8':
215
-
resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==}
216
+
'@esbuild/linux-riscv64@0.25.12':
217
+
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
216
218
engines: {node: '>=18'}
217
219
cpu: [riscv64]
218
220
os: [linux]
219
221
220
-
'@esbuild/linux-s390x@0.25.8':
221
-
resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==}
222
+
'@esbuild/linux-s390x@0.25.12':
223
+
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
222
224
engines: {node: '>=18'}
223
225
cpu: [s390x]
224
226
os: [linux]
225
227
226
-
'@esbuild/linux-x64@0.25.8':
227
-
resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==}
228
+
'@esbuild/linux-x64@0.25.12':
229
+
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
228
230
engines: {node: '>=18'}
229
231
cpu: [x64]
230
232
os: [linux]
231
233
232
-
'@esbuild/netbsd-arm64@0.25.8':
233
-
resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==}
234
+
'@esbuild/netbsd-arm64@0.25.12':
235
+
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
234
236
engines: {node: '>=18'}
235
237
cpu: [arm64]
236
238
os: [netbsd]
237
239
238
-
'@esbuild/netbsd-x64@0.25.8':
239
-
resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==}
240
+
'@esbuild/netbsd-x64@0.25.12':
241
+
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
240
242
engines: {node: '>=18'}
241
243
cpu: [x64]
242
244
os: [netbsd]
243
245
244
-
'@esbuild/openbsd-arm64@0.25.8':
245
-
resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==}
246
+
'@esbuild/openbsd-arm64@0.25.12':
247
+
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
246
248
engines: {node: '>=18'}
247
249
cpu: [arm64]
248
250
os: [openbsd]
249
251
250
-
'@esbuild/openbsd-x64@0.25.8':
251
-
resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==}
252
+
'@esbuild/openbsd-x64@0.25.12':
253
+
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
252
254
engines: {node: '>=18'}
253
255
cpu: [x64]
254
256
os: [openbsd]
255
257
256
-
'@esbuild/openharmony-arm64@0.25.8':
257
-
resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==}
258
+
'@esbuild/openharmony-arm64@0.25.12':
259
+
resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
258
260
engines: {node: '>=18'}
259
261
cpu: [arm64]
260
262
os: [openharmony]
261
263
262
-
'@esbuild/sunos-x64@0.25.8':
263
-
resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==}
264
+
'@esbuild/sunos-x64@0.25.12':
265
+
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
264
266
engines: {node: '>=18'}
265
267
cpu: [x64]
266
268
os: [sunos]
267
269
268
-
'@esbuild/win32-arm64@0.25.8':
269
-
resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==}
270
+
'@esbuild/win32-arm64@0.25.12':
271
+
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
270
272
engines: {node: '>=18'}
271
273
cpu: [arm64]
272
274
os: [win32]
273
275
274
-
'@esbuild/win32-ia32@0.25.8':
275
-
resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==}
276
+
'@esbuild/win32-ia32@0.25.12':
277
+
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
276
278
engines: {node: '>=18'}
277
279
cpu: [ia32]
278
280
os: [win32]
279
281
280
-
'@esbuild/win32-x64@0.25.8':
281
-
resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==}
282
+
'@esbuild/win32-x64@0.25.12':
283
+
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
282
284
engines: {node: '>=18'}
283
285
cpu: [x64]
284
286
os: [win32]
285
287
286
-
'@jridgewell/gen-mapping@0.3.12':
287
-
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
288
+
'@jridgewell/gen-mapping@0.3.13':
289
+
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
290
+
291
+
'@jridgewell/remapping@2.3.5':
292
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
288
293
289
294
'@jridgewell/resolve-uri@3.1.2':
290
295
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
291
296
engines: {node: '>=6.0.0'}
292
297
293
-
'@jridgewell/sourcemap-codec@1.5.4':
294
-
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
298
+
'@jridgewell/sourcemap-codec@1.5.5':
299
+
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
295
300
296
-
'@jridgewell/trace-mapping@0.3.29':
297
-
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
301
+
'@jridgewell/trace-mapping@0.3.31':
302
+
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
298
303
299
-
'@rollup/rollup-android-arm-eabi@4.46.1':
300
-
resolution: {integrity: sha512-oENme6QxtLCqjChRUUo3S6X8hjCXnWmJWnedD7VbGML5GUtaOtAyx+fEEXnBXVf0CBZApMQU0Idwi0FmyxzQhw==}
304
+
'@rollup/rollup-android-arm-eabi@4.53.0':
305
+
resolution: {integrity: sha512-MX3DD/o2W36nlgQb8KA5QtUw/bK5aR9YDzNmX1PRHZAa6LF/MQCWMN477CgBMg8gH1vEiEZsjWRIZeL/7ttUVA==}
301
306
cpu: [arm]
302
307
os: [android]
303
308
304
-
'@rollup/rollup-android-arm64@4.46.1':
305
-
resolution: {integrity: sha512-OikvNT3qYTl9+4qQ9Bpn6+XHM+ogtFadRLuT2EXiFQMiNkXFLQfNVppi5o28wvYdHL2s3fM0D/MZJ8UkNFZWsw==}
309
+
'@rollup/rollup-android-arm64@4.53.0':
310
+
resolution: {integrity: sha512-U4/R8ZvikDYLkl+hyAGP23SRHp3LwYSRy9SvJqsnva7TYLhVMy39RTVCYn1DdRNxXl1CyCQgE/mXKm9jaQT4ig==}
306
311
cpu: [arm64]
307
312
os: [android]
308
313
309
-
'@rollup/rollup-darwin-arm64@4.46.1':
310
-
resolution: {integrity: sha512-EFYNNGij2WllnzljQDQnlFTXzSJw87cpAs4TVBAWLdkvic5Uh5tISrIL6NRcxoh/b2EFBG/TK8hgRrGx94zD4A==}
314
+
'@rollup/rollup-darwin-arm64@4.53.0':
315
+
resolution: {integrity: sha512-nBG2BXRU3ifdK0HdqBKaT5VI6ScoIpABYZ+dWwQkIOYd8Suo4iykgPikjhsTd7NeHgJJ3OqlKYCcNkZtB1iLVQ==}
311
316
cpu: [arm64]
312
317
os: [darwin]
313
318
314
-
'@rollup/rollup-darwin-x64@4.46.1':
315
-
resolution: {integrity: sha512-ZaNH06O1KeTug9WI2+GRBE5Ujt9kZw4a1+OIwnBHal92I8PxSsl5KpsrPvthRynkhMck4XPdvY0z26Cym/b7oA==}
319
+
'@rollup/rollup-darwin-x64@4.53.0':
320
+
resolution: {integrity: sha512-QuZ5hYStB/vW7b8zQYtdIPpIfNNlUXtGk8zVTkoTMKzMhE2/6tVvcCWqdWqCVhx6eguJJjKjtZ9lAAG/D3yNeA==}
316
321
cpu: [x64]
317
322
os: [darwin]
318
323
319
-
'@rollup/rollup-freebsd-arm64@4.46.1':
320
-
resolution: {integrity: sha512-n4SLVebZP8uUlJ2r04+g2U/xFeiQlw09Me5UFqny8HGbARl503LNH5CqFTb5U5jNxTouhRjai6qPT0CR5c/Iig==}
324
+
'@rollup/rollup-freebsd-arm64@4.53.0':
325
+
resolution: {integrity: sha512-4yYPm1PJwK/HKI4FzElAPj2EAAFaaLUWzXV3S3edKy71JcEVzBCpgaXyEcDh3blBIjLml+aMkj6HEVGSuzpz+g==}
321
326
cpu: [arm64]
322
327
os: [freebsd]
323
328
324
-
'@rollup/rollup-freebsd-x64@4.46.1':
325
-
resolution: {integrity: sha512-8vu9c02F16heTqpvo3yeiu7Vi1REDEC/yES/dIfq3tSXe6mLndiwvYr3AAvd1tMNUqE9yeGYa5w7PRbI5QUV+w==}
329
+
'@rollup/rollup-freebsd-x64@4.53.0':
330
+
resolution: {integrity: sha512-1SvE5euwWV8JqFc4zEAqHbJbf2yJl00EoHVcnlFqLzjrIExYttLxfZeMDIXY6Yx+bskphrQakpChZKzE2JECEg==}
326
331
cpu: [x64]
327
332
os: [freebsd]
328
333
329
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.1':
330
-
resolution: {integrity: sha512-K4ncpWl7sQuyp6rWiGUvb6Q18ba8mzM0rjWJ5JgYKlIXAau1db7hZnR0ldJvqKWWJDxqzSLwGUhA4jp+KqgDtQ==}
334
+
'@rollup/rollup-linux-arm-gnueabihf@4.53.0':
335
+
resolution: {integrity: sha512-9tS4QyfU5NF5CdUugEi7kWbcGD7pbu6Fm8SunuePH6beeQgtcRZ9K9KVwKHEgfBHeeyrr5OvfV1qWs7PMDOf5w==}
331
336
cpu: [arm]
332
337
os: [linux]
333
338
334
-
'@rollup/rollup-linux-arm-musleabihf@4.46.1':
335
-
resolution: {integrity: sha512-YykPnXsjUjmXE6j6k2QBBGAn1YsJUix7pYaPLK3RVE0bQL2jfdbfykPxfF8AgBlqtYbfEnYHmLXNa6QETjdOjQ==}
339
+
'@rollup/rollup-linux-arm-musleabihf@4.53.0':
340
+
resolution: {integrity: sha512-U+0ovxGU9bVJIHfW+oALpHd0ho1YDwhj0yHASDzIj+bOeo+VzEpNtHxcjhFab0YcHUorIMoqyxckC98+81oTJw==}
336
341
cpu: [arm]
337
342
os: [linux]
338
343
339
-
'@rollup/rollup-linux-arm64-gnu@4.46.1':
340
-
resolution: {integrity: sha512-kKvqBGbZ8i9pCGW3a1FH3HNIVg49dXXTsChGFsHGXQaVJPLA4f/O+XmTxfklhccxdF5FefUn2hvkoGJH0ScWOA==}
344
+
'@rollup/rollup-linux-arm64-gnu@4.53.0':
345
+
resolution: {integrity: sha512-Cp/TQ+wLjRTqTuiVwLz4XPZMo3ROl7EJYMF8HhMp8Uf+9kOOATB3/p4gGZPpuQ4BP7qEXG29ET24u9+F0ERYkQ==}
341
346
cpu: [arm64]
342
347
os: [linux]
343
348
344
-
'@rollup/rollup-linux-arm64-musl@4.46.1':
345
-
resolution: {integrity: sha512-zzX5nTw1N1plmqC9RGC9vZHFuiM7ZP7oSWQGqpbmfjK7p947D518cVK1/MQudsBdcD84t6k70WNczJOct6+hdg==}
349
+
'@rollup/rollup-linux-arm64-musl@4.53.0':
350
+
resolution: {integrity: sha512-SuGoAwhsSonrSTEZTiQOGC3+XZfq7rc/qAdAOBrYYIp8pu+Wh4EFFXl6+QYYNbNrHL3DnVoWACLwnfwlTa0neA==}
346
351
cpu: [arm64]
347
352
os: [linux]
348
353
349
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.1':
350
-
resolution: {integrity: sha512-O8CwgSBo6ewPpktFfSDgB6SJN9XDcPSvuwxfejiddbIC/hn9Tg6Ai0f0eYDf3XvB/+PIWzOQL+7+TZoB8p9Yuw==}
354
+
'@rollup/rollup-linux-loong64-gnu@4.53.0':
355
+
resolution: {integrity: sha512-EOKej1x0WoePnJWfg7ZbnUqiuiQunshzsKZSIfTHFDiCY9pnsr3Weit1GjcpGnun7H5HuRREqkT2c9CcKxNwSg==}
351
356
cpu: [loong64]
352
357
os: [linux]
353
358
354
-
'@rollup/rollup-linux-ppc64-gnu@4.46.1':
355
-
resolution: {integrity: sha512-JnCfFVEKeq6G3h3z8e60kAp8Rd7QVnWCtPm7cxx+5OtP80g/3nmPtfdCXbVl063e3KsRnGSKDHUQMydmzc/wBA==}
359
+
'@rollup/rollup-linux-ppc64-gnu@4.53.0':
360
+
resolution: {integrity: sha512-YAvv2aMFlfiawJ97lutomuehG2Yowd4YgsAqI85XNiMK9eBA1vEMZHt3BShg8cUvak71BM+VFRHddqc+OrRdVA==}
356
361
cpu: [ppc64]
357
362
os: [linux]
358
363
359
-
'@rollup/rollup-linux-riscv64-gnu@4.46.1':
360
-
resolution: {integrity: sha512-dVxuDqS237eQXkbYzQQfdf/njgeNw6LZuVyEdUaWwRpKHhsLI+y4H/NJV8xJGU19vnOJCVwaBFgr936FHOnJsQ==}
364
+
'@rollup/rollup-linux-riscv64-gnu@4.53.0':
365
+
resolution: {integrity: sha512-DxZe/sMVaqN+s5kVk3Iq619Rgyl1JCTob7xOLSNC84mbzg3NYTSheqqrtVllYjLYo4wm9YyqjVS57miuzNyXbQ==}
361
366
cpu: [riscv64]
362
367
os: [linux]
363
368
364
-
'@rollup/rollup-linux-riscv64-musl@4.46.1':
365
-
resolution: {integrity: sha512-CvvgNl2hrZrTR9jXK1ye0Go0HQRT6ohQdDfWR47/KFKiLd5oN5T14jRdUVGF4tnsN8y9oSfMOqH6RuHh+ck8+w==}
369
+
'@rollup/rollup-linux-riscv64-musl@4.53.0':
370
+
resolution: {integrity: sha512-N7+iZ0jEhwLY1FEsjbCR9lAxIZP0k+3Cghx9vSQWn+rcW8SgN8VcCmwJDoPDaGKTzWWB791U1s79BSLnEhUa0Q==}
366
371
cpu: [riscv64]
367
372
os: [linux]
368
373
369
-
'@rollup/rollup-linux-s390x-gnu@4.46.1':
370
-
resolution: {integrity: sha512-x7ANt2VOg2565oGHJ6rIuuAon+A8sfe1IeUx25IKqi49OjSr/K3awoNqr9gCwGEJo9OuXlOn+H2p1VJKx1psxA==}
374
+
'@rollup/rollup-linux-s390x-gnu@4.53.0':
375
+
resolution: {integrity: sha512-MA/NVneZyIskjvXdh2NR9YcPi7eHWBlQOWP2X8OymzyeUEB0JfUpmbKQZngHmOlyleV2IoR5nHIgMSRjLskOnA==}
371
376
cpu: [s390x]
372
377
os: [linux]
373
378
374
-
'@rollup/rollup-linux-x64-gnu@4.46.1':
375
-
resolution: {integrity: sha512-9OADZYryz/7E8/qt0vnaHQgmia2Y0wrjSSn1V/uL+zw/i7NUhxbX4cHXdEQ7dnJgzYDS81d8+tf6nbIdRFZQoQ==}
379
+
'@rollup/rollup-linux-x64-gnu@4.53.0':
380
+
resolution: {integrity: sha512-iYEYzYpfaSCkunVD0LOYrD9OMc357be7+rBuCxW1qvsjCGl+95iWnYAFfyEoxAm6koasNN3tFxFYze5MKl5S3A==}
376
381
cpu: [x64]
377
382
os: [linux]
378
383
379
-
'@rollup/rollup-linux-x64-musl@4.46.1':
380
-
resolution: {integrity: sha512-NuvSCbXEKY+NGWHyivzbjSVJi68Xfq1VnIvGmsuXs6TCtveeoDRKutI5vf2ntmNnVq64Q4zInet0UDQ+yMB6tA==}
384
+
'@rollup/rollup-linux-x64-musl@4.53.0':
385
+
resolution: {integrity: sha512-FoRekOqhRUKbJMsB5LvhQchDeFeNlS6UGUwi0p3860sxE4zE+lp07FnkuR+yQH0rSn6iLXsnr44jnorgl8mGlQ==}
381
386
cpu: [x64]
382
387
os: [linux]
383
388
384
-
'@rollup/rollup-win32-arm64-msvc@4.46.1':
385
-
resolution: {integrity: sha512-mWz+6FSRb82xuUMMV1X3NGiaPFqbLN9aIueHleTZCc46cJvwTlvIh7reQLk4p97dv0nddyewBhwzryBHH7wtPw==}
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==}
386
396
cpu: [arm64]
387
397
os: [win32]
388
398
389
-
'@rollup/rollup-win32-ia32-msvc@4.46.1':
390
-
resolution: {integrity: sha512-7Thzy9TMXDw9AU4f4vsLNBxh7/VOKuXi73VH3d/kHGr0tZ3x/ewgL9uC7ojUKmH1/zvmZe2tLapYcZllk3SO8Q==}
399
+
'@rollup/rollup-win32-ia32-msvc@4.53.0':
400
+
resolution: {integrity: sha512-93mJ8Hm9+vbhtu+A1VtmwptSqCYojtMQkBGDjLytCWC8muxmZLGo/MA/4CMAWf6+QpKlxTTMDAHdTC+kxn9ZcQ==}
391
401
cpu: [ia32]
392
402
os: [win32]
393
403
394
-
'@rollup/rollup-win32-x64-msvc@4.46.1':
395
-
resolution: {integrity: sha512-7GVB4luhFmGUNXXJhH2jJwZCFB3pIOixv2E3s17GQHBFUOQaISlt7aGcQgqvCaDSxTZJUzlK/QJ1FN8S94MrzQ==}
404
+
'@rollup/rollup-win32-x64-gnu@4.53.0':
405
+
resolution: {integrity: sha512-1OrYs0p/deXEFLUW1gvyjIabmsJKY3I/9fCUA1K6demaNc4iEhXDW6RnyPv/BWqb7NRmQ9+i+SKoi1HgJxWcwg==}
396
406
cpu: [x64]
397
407
os: [win32]
398
408
399
-
'@tauri-apps/api@2.7.0':
400
-
resolution: {integrity: sha512-v7fVE8jqBl8xJFOcBafDzXFc8FnicoH3j8o8DNNs0tHuEBmXUDqrCOAzMRX0UkfpwqZLqvrvK0GNQ45DfnoVDg==}
409
+
'@rollup/rollup-win32-x64-msvc@4.53.0':
410
+
resolution: {integrity: sha512-xtSei8paPcLy3GzeeOjoRrllJn6EN8PB+/bXnhZ4R0AaviJsRwtKxFZRVnfFXNZTTp0nLeDo+BcEuIfdZS14/A==}
411
+
cpu: [x64]
412
+
os: [win32]
401
413
402
-
'@tauri-apps/api@2.8.0':
403
-
resolution: {integrity: sha512-ga7zdhbS2GXOMTIZRT0mYjKJtR9fivsXzsyq5U3vjDL0s6DTMwYRm0UHNjzTY5dh4+LSC68Sm/7WEiimbQNYlw==}
414
+
'@tauri-apps/api@2.9.0':
415
+
resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==}
404
416
405
-
'@tauri-apps/cli-darwin-arm64@2.7.1':
406
-
resolution: {integrity: sha512-j2NXQN6+08G03xYiyKDKqbCV2Txt+hUKg0a8hYr92AmoCU8fgCjHyva/p16lGFGUG3P2Yu0xiNe1hXL9ZuRMzA==}
417
+
'@tauri-apps/cli-darwin-arm64@2.9.3':
418
+
resolution: {integrity: sha512-W8FQXZXQmQ0Fmj9UJXNrm2mLdIaLLriKVY7o/FzmizyIKTPIvHjfZALTNybbpTQRbJvKoGHLrW1DNzAWVDWJYg==}
407
419
engines: {node: '>= 10'}
408
420
cpu: [arm64]
409
421
os: [darwin]
410
422
411
-
'@tauri-apps/cli-darwin-x64@2.7.1':
412
-
resolution: {integrity: sha512-CdYAefeM35zKsc91qIyKzbaO7FhzTyWKsE8hj7tEJ1INYpoh1NeNNyL/NSEA3Nebi5ilugioJ5tRK8ZXG8y3gw==}
423
+
'@tauri-apps/cli-darwin-x64@2.9.3':
424
+
resolution: {integrity: sha512-zDwu40rlshijt3TU6aRvzPUyVpapsx1sNfOlreDMTaMelQLHl6YoQzSRpLHYwrHrhimxyX2uDqnKIiuGel0Lhg==}
413
425
engines: {node: '>= 10'}
414
426
cpu: [x64]
415
427
os: [darwin]
416
428
417
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.7.1':
418
-
resolution: {integrity: sha512-dnvyJrTA1UJxJjQ8q1N/gWomjP8Twij1BUQu2fdcT3OPpqlrbOk5R1yT0oD/721xoKNjroB5BXCsmmlykllxNg==}
429
+
'@tauri-apps/cli-linux-arm-gnueabihf@2.9.3':
430
+
resolution: {integrity: sha512-+Oc2OfcTRwYtW93VJqd/HOk77buORwC9IToj/qsEvM7bTMq6Kda4alpZprzwrCHYANSw+zD8PgjJdljTpe4p+g==}
419
431
engines: {node: '>= 10'}
420
432
cpu: [arm]
421
433
os: [linux]
422
434
423
-
'@tauri-apps/cli-linux-arm64-gnu@2.7.1':
424
-
resolution: {integrity: sha512-FtBW6LJPNRTws3qyUc294AqCWU91l/H0SsFKq6q4Q45MSS4x6wxLxou8zB53tLDGEPx3JSoPLcDaSfPlSbyujQ==}
435
+
'@tauri-apps/cli-linux-arm64-gnu@2.9.3':
436
+
resolution: {integrity: sha512-59GqU/J1n9wFyAtleoQOaU0oVIo+kwQynEw4meFDoKRXszKGor6lTsbsS3r0QKLSPbc0o/yYGJhqqCtkYjb/eg==}
425
437
engines: {node: '>= 10'}
426
438
cpu: [arm64]
427
439
os: [linux]
428
440
429
-
'@tauri-apps/cli-linux-arm64-musl@2.7.1':
430
-
resolution: {integrity: sha512-/HXY0t4FHkpFzjeYS5c16mlA6z0kzn5uKLWptTLTdFSnYpr8FCnOP4Sdkvm2TDQPF2ERxXtNCd+WR/jQugbGnA==}
441
+
'@tauri-apps/cli-linux-arm64-musl@2.9.3':
442
+
resolution: {integrity: sha512-fzvG+jEn5/iYGNH6Z2IRMheYFC4pJdXa19BR9fFm6Bdn2cuajRLDKdUcEME/DCtwqclphXtFZTrT4oezY5vI/A==}
431
443
engines: {node: '>= 10'}
432
444
cpu: [arm64]
433
445
os: [linux]
434
446
435
-
'@tauri-apps/cli-linux-riscv64-gnu@2.7.1':
436
-
resolution: {integrity: sha512-GeW5lVI2GhhnaYckiDzstG2j2Jwlud5d2XefRGwlOK+C/bVGLT1le8MNPYK8wgRlpeK8fG1WnJJYD6Ke7YQ8bg==}
447
+
'@tauri-apps/cli-linux-riscv64-gnu@2.9.3':
448
+
resolution: {integrity: sha512-qV8DZXI/fZwawk6T3Th1g6smiNC2KeQTk7XFgKvqZ6btC01z3UTsQmNGvI602zwm3Ld1TBZb4+rEWu2QmQimmw==}
437
449
engines: {node: '>= 10'}
438
450
cpu: [riscv64]
439
451
os: [linux]
440
452
441
-
'@tauri-apps/cli-linux-x64-gnu@2.7.1':
442
-
resolution: {integrity: sha512-DprxKQkPxIPYwUgg+cscpv2lcIUhn2nxEPlk0UeaiV9vATxCXyytxr1gLcj3xgjGyNPlM0MlJyYaPy1JmRg1cA==}
453
+
'@tauri-apps/cli-linux-x64-gnu@2.9.3':
454
+
resolution: {integrity: sha512-tquyEONCNRfqEBWEe4eAHnxFN5yY5lFkCuD4w79XLIovUxVftQ684+xLp7zkhntkt4y20SMj2AgJa/+MOlx4Kg==}
443
455
engines: {node: '>= 10'}
444
456
cpu: [x64]
445
457
os: [linux]
446
458
447
-
'@tauri-apps/cli-linux-x64-musl@2.7.1':
448
-
resolution: {integrity: sha512-KLlq3kOK7OUyDR757c0zQjPULpGZpLhNB0lZmZpHXvoOUcqZoCXJHh4dT/mryWZJp5ilrem5l8o9ngrDo0X1AA==}
459
+
'@tauri-apps/cli-linux-x64-musl@2.9.3':
460
+
resolution: {integrity: sha512-v2cBIB/6ji8DL+aiL5QUykU3ZO8OoJGyx50/qv2HQVzkf85KdaYSis3D/oVRemN/pcDz+vyCnnL3XnzFnDl4JQ==}
449
461
engines: {node: '>= 10'}
450
462
cpu: [x64]
451
463
os: [linux]
452
464
453
-
'@tauri-apps/cli-win32-arm64-msvc@2.7.1':
454
-
resolution: {integrity: sha512-dH7KUjKkSypCeWPiainHyXoES3obS+JIZVoSwSZfKq2gWgs48FY3oT0hQNYrWveE+VR4VoR3b/F3CPGbgFvksA==}
465
+
'@tauri-apps/cli-win32-arm64-msvc@2.9.3':
466
+
resolution: {integrity: sha512-ZGvBy7nvrHPbE0HeKp/ioaiw8bNgAHxWnb7JRZ4/G0A+oFj0SeSFxl9k5uU6FKnM7bHM23Gd1oeaDex9g5Fceg==}
455
467
engines: {node: '>= 10'}
456
468
cpu: [arm64]
457
469
os: [win32]
458
470
459
-
'@tauri-apps/cli-win32-ia32-msvc@2.7.1':
460
-
resolution: {integrity: sha512-1oeibfyWQPVcijOrTg709qhbXArjX3x1MPjrmA5anlygwrbByxLBcLXvotcOeULFcnH2FYUMMLLant8kgvwE5A==}
471
+
'@tauri-apps/cli-win32-ia32-msvc@2.9.3':
472
+
resolution: {integrity: sha512-UsgIwOnpCoY9NK9/65QiwgmWVIE80LE7SwRYVblGtmlY9RYfsYvpbItwsovA/AcHMTiO+OCvS/q9yLeqS3m6Sg==}
461
473
engines: {node: '>= 10'}
462
474
cpu: [ia32]
463
475
os: [win32]
464
476
465
-
'@tauri-apps/cli-win32-x64-msvc@2.7.1':
466
-
resolution: {integrity: sha512-D7Q9kDObutuirCNLxYQ7KAg2Xxg99AjcdYz/KuMw5HvyEPbkC9Q7JL0vOrQOrHEHxIQ2lYzFOZvKKoC2yyqXcg==}
477
+
'@tauri-apps/cli-win32-x64-msvc@2.9.3':
478
+
resolution: {integrity: sha512-fmw7NrrHE5m49idCvJAx9T9bsupjdJ0a3p3DPCNCZRGANU6R1tA1L+KTlVuUtdAldX2NqU/9UPo2SCslYKgJHQ==}
467
479
engines: {node: '>= 10'}
468
480
cpu: [x64]
469
481
os: [win32]
470
482
471
-
'@tauri-apps/cli@2.7.1':
472
-
resolution: {integrity: sha512-RcGWR4jOUEl92w3uvI0h61Llkfj9lwGD1iwvDRD2isMrDhOzjeeeVn9aGzeW1jubQ/kAbMYfydcA4BA0Cy733Q==}
483
+
'@tauri-apps/cli@2.9.3':
484
+
resolution: {integrity: sha512-BQ7iLUXTQcyG1PpzLWeVSmBCedYDpnA/6Cm/kRFGtqjTf/eVUlyYO5S2ee07tLum3nWwDBWTGFZeruO8yEukfA==}
473
485
engines: {node: '>= 10'}
474
486
hasBin: true
475
487
476
-
'@tauri-apps/plugin-dialog@2.4.0':
477
-
resolution: {integrity: sha512-OvXkrEBfWwtd8tzVCEXIvRfNEX87qs2jv6SqmVPiHcJjBhSF/GUvjqUNIDmKByb5N8nvDqVUM7+g1sXwdC/S9w==}
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==}
478
496
479
-
'@tauri-apps/plugin-opener@2.4.0':
480
-
resolution: {integrity: sha512-43VyN8JJtvKWJY72WI/KNZszTpDpzHULFxQs0CJBIYUdCRowQ6Q1feWTDb979N7nldqSuDOaBupZ6wz2nvuWwQ==}
497
+
'@tauri-apps/plugin-os@2.3.2':
498
+
resolution: {integrity: sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==}
481
499
482
500
'@types/animejs@3.1.13':
483
501
resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==}
···
491
509
'@types/babel__template@7.4.4':
492
510
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
493
511
494
-
'@types/babel__traverse@7.20.7':
495
-
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
512
+
'@types/babel__traverse@7.28.0':
513
+
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
496
514
497
515
'@types/estree@1.0.8':
498
516
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
499
517
500
-
animejs@4.1.2:
501
-
resolution: {integrity: sha512-QojQzHzN4ZCOGk4Seir5CWPHGKFPpMAsen3KEj/BHsIKDceH0xKd3FBWflyKiNefKG2fn3+ofpY9jD/UXhpY6A==}
518
+
animejs@4.2.2:
519
+
resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==}
502
520
503
-
babel-plugin-jsx-dom-expressions@0.39.8:
504
-
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==}
521
+
babel-plugin-jsx-dom-expressions@0.40.3:
522
+
resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==}
505
523
peerDependencies:
506
524
'@babel/core': ^7.20.12
507
525
508
-
babel-preset-solid@1.9.6:
509
-
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==}
526
+
babel-preset-solid@1.9.10:
527
+
resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==}
510
528
peerDependencies:
511
529
'@babel/core': ^7.0.0
530
+
solid-js: ^1.9.10
531
+
peerDependenciesMeta:
532
+
solid-js:
533
+
optional: true
512
534
513
-
browserslist@4.25.1:
514
-
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
535
+
baseline-browser-mapping@2.8.25:
536
+
resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
537
+
hasBin: true
538
+
539
+
browserslist@4.27.0:
540
+
resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
515
541
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
516
542
hasBin: true
517
543
518
-
caniuse-lite@1.0.30001731:
519
-
resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==}
544
+
caniuse-lite@1.0.30001754:
545
+
resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==}
520
546
521
547
convert-source-map@2.0.0:
522
548
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
···
524
550
csstype@3.1.3:
525
551
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
526
552
527
-
debug@4.4.1:
528
-
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
553
+
debug@4.4.3:
554
+
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
529
555
engines: {node: '>=6.0'}
530
556
peerDependencies:
531
557
supports-color: '*'
···
533
559
supports-color:
534
560
optional: true
535
561
536
-
electron-to-chromium@1.5.192:
537
-
resolution: {integrity: sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==}
562
+
electron-to-chromium@1.5.248:
563
+
resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==}
538
564
539
565
entities@6.0.1:
540
566
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
541
567
engines: {node: '>=0.12'}
542
568
543
-
esbuild@0.25.8:
544
-
resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==}
569
+
esbuild@0.25.12:
570
+
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
545
571
engines: {node: '>=18'}
546
572
hasBin: true
547
573
···
549
575
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
550
576
engines: {node: '>=6'}
551
577
552
-
fdir@6.4.6:
553
-
resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
578
+
fdir@6.5.0:
579
+
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
580
+
engines: {node: '>=12.0.0'}
554
581
peerDependencies:
555
582
picomatch: ^3 || ^4
556
583
peerDependenciesMeta:
···
601
628
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
602
629
hasBin: true
603
630
604
-
node-releases@2.0.19:
605
-
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
631
+
node-releases@2.0.27:
632
+
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
606
633
607
634
parse5@7.3.0:
608
635
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
618
645
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
619
646
engines: {node: ^10 || ^12 || >=14}
620
647
621
-
rollup@4.46.1:
622
-
resolution: {integrity: sha512-33xGNBsDJAkzt0PvninskHlWnTIPgDtTwhg0U38CUoNP/7H6wI2Cz6dUeoNPbjdTdsYTGuiFFASuUOWovH0SyQ==}
648
+
rollup@4.53.0:
649
+
resolution: {integrity: sha512-43Z5T+4YTdfYkkA6CStU2DUYh7Ha9dLtvK+K3n0yEE/QS+4i28vSxrQsM59KqpvmT4tbOwJsFnRGMj/tvmQwWw==}
623
650
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
624
651
hasBin: true
625
652
···
627
654
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
628
655
hasBin: true
629
656
630
-
seroval-plugins@1.3.2:
631
-
resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==}
657
+
seroval-plugins@1.3.3:
658
+
resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==}
632
659
engines: {node: '>=10'}
633
660
peerDependencies:
634
661
seroval: ^1.0
···
637
664
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
638
665
engines: {node: '>=10'}
639
666
640
-
solid-js@1.9.7:
641
-
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==}
667
+
solid-js@1.9.10:
668
+
resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==}
642
669
643
670
solid-refresh@0.6.3:
644
671
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
649
676
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
650
677
engines: {node: '>=0.10.0'}
651
678
652
-
tinyglobby@0.2.14:
653
-
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
679
+
tinyglobby@0.2.15:
680
+
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
654
681
engines: {node: '>=12.0.0'}
655
682
656
683
typescript@5.6.3:
···
658
685
engines: {node: '>=14.17'}
659
686
hasBin: true
660
687
661
-
update-browserslist-db@1.1.3:
662
-
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
688
+
update-browserslist-db@1.1.4:
689
+
resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
663
690
hasBin: true
664
691
peerDependencies:
665
692
browserslist: '>= 4.21.0'
666
693
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==}
694
+
vite-plugin-solid@2.11.10:
695
+
resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==}
672
696
peerDependencies:
673
697
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
674
698
solid-js: ^1.7.2
···
677
701
'@testing-library/jest-dom':
678
702
optional: true
679
703
680
-
vite@6.3.5:
681
-
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
704
+
vite@6.4.1:
705
+
resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
682
706
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
683
707
hasBin: true
684
708
peerDependencies:
···
730
754
731
755
snapshots:
732
756
733
-
'@ampproject/remapping@2.3.0':
734
-
dependencies:
735
-
'@jridgewell/gen-mapping': 0.3.12
736
-
'@jridgewell/trace-mapping': 0.3.29
737
-
738
757
'@babel/code-frame@7.27.1':
739
758
dependencies:
740
-
'@babel/helper-validator-identifier': 7.27.1
759
+
'@babel/helper-validator-identifier': 7.28.5
741
760
js-tokens: 4.0.0
742
761
picocolors: 1.1.1
743
762
744
-
'@babel/compat-data@7.28.0': {}
763
+
'@babel/compat-data@7.28.5': {}
745
764
746
-
'@babel/core@7.28.0':
765
+
'@babel/core@7.28.5':
747
766
dependencies:
748
-
'@ampproject/remapping': 2.3.0
749
767
'@babel/code-frame': 7.27.1
750
-
'@babel/generator': 7.28.0
768
+
'@babel/generator': 7.28.5
751
769
'@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
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
755
773
'@babel/template': 7.27.2
756
-
'@babel/traverse': 7.28.0
757
-
'@babel/types': 7.28.2
774
+
'@babel/traverse': 7.28.5
775
+
'@babel/types': 7.28.5
776
+
'@jridgewell/remapping': 2.3.5
758
777
convert-source-map: 2.0.0
759
-
debug: 4.4.1
778
+
debug: 4.4.3
760
779
gensync: 1.0.0-beta.2
761
780
json5: 2.2.3
762
781
semver: 6.3.1
763
782
transitivePeerDependencies:
764
783
- supports-color
765
784
766
-
'@babel/generator@7.28.0':
785
+
'@babel/generator@7.28.5':
767
786
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
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
772
791
jsesc: 3.1.0
773
792
774
793
'@babel/helper-compilation-targets@7.27.2':
775
794
dependencies:
776
-
'@babel/compat-data': 7.28.0
795
+
'@babel/compat-data': 7.28.5
777
796
'@babel/helper-validator-option': 7.27.1
778
-
browserslist: 4.25.1
797
+
browserslist: 4.27.0
779
798
lru-cache: 5.1.1
780
799
semver: 6.3.1
781
800
···
783
802
784
803
'@babel/helper-module-imports@7.18.6':
785
804
dependencies:
786
-
'@babel/types': 7.28.2
805
+
'@babel/types': 7.28.5
787
806
788
807
'@babel/helper-module-imports@7.27.1':
789
808
dependencies:
790
-
'@babel/traverse': 7.28.0
791
-
'@babel/types': 7.28.2
809
+
'@babel/traverse': 7.28.5
810
+
'@babel/types': 7.28.5
792
811
transitivePeerDependencies:
793
812
- supports-color
794
813
795
-
'@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
814
+
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
796
815
dependencies:
797
-
'@babel/core': 7.28.0
816
+
'@babel/core': 7.28.5
798
817
'@babel/helper-module-imports': 7.27.1
799
-
'@babel/helper-validator-identifier': 7.27.1
800
-
'@babel/traverse': 7.28.0
818
+
'@babel/helper-validator-identifier': 7.28.5
819
+
'@babel/traverse': 7.28.5
801
820
transitivePeerDependencies:
802
821
- supports-color
803
822
···
805
824
806
825
'@babel/helper-string-parser@7.27.1': {}
807
826
808
-
'@babel/helper-validator-identifier@7.27.1': {}
827
+
'@babel/helper-validator-identifier@7.28.5': {}
809
828
810
829
'@babel/helper-validator-option@7.27.1': {}
811
830
812
-
'@babel/helpers@7.28.2':
831
+
'@babel/helpers@7.28.4':
813
832
dependencies:
814
833
'@babel/template': 7.27.2
815
-
'@babel/types': 7.28.2
834
+
'@babel/types': 7.28.5
816
835
817
-
'@babel/parser@7.28.0':
836
+
'@babel/parser@7.28.5':
818
837
dependencies:
819
-
'@babel/types': 7.28.2
838
+
'@babel/types': 7.28.5
820
839
821
-
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
840
+
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
822
841
dependencies:
823
-
'@babel/core': 7.28.0
842
+
'@babel/core': 7.28.5
824
843
'@babel/helper-plugin-utils': 7.27.1
825
844
826
845
'@babel/template@7.27.2':
827
846
dependencies:
828
847
'@babel/code-frame': 7.27.1
829
-
'@babel/parser': 7.28.0
830
-
'@babel/types': 7.28.2
848
+
'@babel/parser': 7.28.5
849
+
'@babel/types': 7.28.5
831
850
832
-
'@babel/traverse@7.28.0':
851
+
'@babel/traverse@7.28.5':
833
852
dependencies:
834
853
'@babel/code-frame': 7.27.1
835
-
'@babel/generator': 7.28.0
854
+
'@babel/generator': 7.28.5
836
855
'@babel/helper-globals': 7.28.0
837
-
'@babel/parser': 7.28.0
856
+
'@babel/parser': 7.28.5
838
857
'@babel/template': 7.27.2
839
-
'@babel/types': 7.28.2
840
-
debug: 4.4.1
858
+
'@babel/types': 7.28.5
859
+
debug: 4.4.3
841
860
transitivePeerDependencies:
842
861
- supports-color
843
862
844
-
'@babel/types@7.28.2':
863
+
'@babel/types@7.28.5':
845
864
dependencies:
846
865
'@babel/helper-string-parser': 7.27.1
847
-
'@babel/helper-validator-identifier': 7.27.1
866
+
'@babel/helper-validator-identifier': 7.28.5
848
867
849
-
'@esbuild/aix-ppc64@0.25.8':
868
+
'@esbuild/aix-ppc64@0.25.12':
850
869
optional: true
851
870
852
-
'@esbuild/android-arm64@0.25.8':
871
+
'@esbuild/android-arm64@0.25.12':
853
872
optional: true
854
873
855
-
'@esbuild/android-arm@0.25.8':
874
+
'@esbuild/android-arm@0.25.12':
856
875
optional: true
857
876
858
-
'@esbuild/android-x64@0.25.8':
877
+
'@esbuild/android-x64@0.25.12':
859
878
optional: true
860
879
861
-
'@esbuild/darwin-arm64@0.25.8':
880
+
'@esbuild/darwin-arm64@0.25.12':
862
881
optional: true
863
882
864
-
'@esbuild/darwin-x64@0.25.8':
883
+
'@esbuild/darwin-x64@0.25.12':
865
884
optional: true
866
885
867
-
'@esbuild/freebsd-arm64@0.25.8':
886
+
'@esbuild/freebsd-arm64@0.25.12':
868
887
optional: true
869
888
870
-
'@esbuild/freebsd-x64@0.25.8':
889
+
'@esbuild/freebsd-x64@0.25.12':
871
890
optional: true
872
891
873
-
'@esbuild/linux-arm64@0.25.8':
892
+
'@esbuild/linux-arm64@0.25.12':
874
893
optional: true
875
894
876
-
'@esbuild/linux-arm@0.25.8':
895
+
'@esbuild/linux-arm@0.25.12':
877
896
optional: true
878
897
879
-
'@esbuild/linux-ia32@0.25.8':
898
+
'@esbuild/linux-ia32@0.25.12':
880
899
optional: true
881
900
882
-
'@esbuild/linux-loong64@0.25.8':
901
+
'@esbuild/linux-loong64@0.25.12':
883
902
optional: true
884
903
885
-
'@esbuild/linux-mips64el@0.25.8':
904
+
'@esbuild/linux-mips64el@0.25.12':
886
905
optional: true
887
906
888
-
'@esbuild/linux-ppc64@0.25.8':
907
+
'@esbuild/linux-ppc64@0.25.12':
889
908
optional: true
890
909
891
-
'@esbuild/linux-riscv64@0.25.8':
910
+
'@esbuild/linux-riscv64@0.25.12':
892
911
optional: true
893
912
894
-
'@esbuild/linux-s390x@0.25.8':
913
+
'@esbuild/linux-s390x@0.25.12':
895
914
optional: true
896
915
897
-
'@esbuild/linux-x64@0.25.8':
916
+
'@esbuild/linux-x64@0.25.12':
898
917
optional: true
899
918
900
-
'@esbuild/netbsd-arm64@0.25.8':
919
+
'@esbuild/netbsd-arm64@0.25.12':
901
920
optional: true
902
921
903
-
'@esbuild/netbsd-x64@0.25.8':
922
+
'@esbuild/netbsd-x64@0.25.12':
904
923
optional: true
905
924
906
-
'@esbuild/openbsd-arm64@0.25.8':
925
+
'@esbuild/openbsd-arm64@0.25.12':
907
926
optional: true
908
927
909
-
'@esbuild/openbsd-x64@0.25.8':
928
+
'@esbuild/openbsd-x64@0.25.12':
910
929
optional: true
911
930
912
-
'@esbuild/openharmony-arm64@0.25.8':
931
+
'@esbuild/openharmony-arm64@0.25.12':
913
932
optional: true
914
933
915
-
'@esbuild/sunos-x64@0.25.8':
934
+
'@esbuild/sunos-x64@0.25.12':
916
935
optional: true
917
936
918
-
'@esbuild/win32-arm64@0.25.8':
937
+
'@esbuild/win32-arm64@0.25.12':
919
938
optional: true
920
939
921
-
'@esbuild/win32-ia32@0.25.8':
940
+
'@esbuild/win32-ia32@0.25.12':
922
941
optional: true
923
942
924
-
'@esbuild/win32-x64@0.25.8':
943
+
'@esbuild/win32-x64@0.25.12':
925
944
optional: true
926
945
927
-
'@jridgewell/gen-mapping@0.3.12':
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':
928
952
dependencies:
929
-
'@jridgewell/sourcemap-codec': 1.5.4
930
-
'@jridgewell/trace-mapping': 0.3.29
953
+
'@jridgewell/gen-mapping': 0.3.13
954
+
'@jridgewell/trace-mapping': 0.3.31
931
955
932
956
'@jridgewell/resolve-uri@3.1.2': {}
933
957
934
-
'@jridgewell/sourcemap-codec@1.5.4': {}
958
+
'@jridgewell/sourcemap-codec@1.5.5': {}
935
959
936
-
'@jridgewell/trace-mapping@0.3.29':
960
+
'@jridgewell/trace-mapping@0.3.31':
937
961
dependencies:
938
962
'@jridgewell/resolve-uri': 3.1.2
939
-
'@jridgewell/sourcemap-codec': 1.5.4
963
+
'@jridgewell/sourcemap-codec': 1.5.5
940
964
941
-
'@rollup/rollup-android-arm-eabi@4.46.1':
965
+
'@rollup/rollup-android-arm-eabi@4.53.0':
942
966
optional: true
943
967
944
-
'@rollup/rollup-android-arm64@4.46.1':
968
+
'@rollup/rollup-android-arm64@4.53.0':
945
969
optional: true
946
970
947
-
'@rollup/rollup-darwin-arm64@4.46.1':
971
+
'@rollup/rollup-darwin-arm64@4.53.0':
948
972
optional: true
949
973
950
-
'@rollup/rollup-darwin-x64@4.46.1':
974
+
'@rollup/rollup-darwin-x64@4.53.0':
951
975
optional: true
952
976
953
-
'@rollup/rollup-freebsd-arm64@4.46.1':
977
+
'@rollup/rollup-freebsd-arm64@4.53.0':
954
978
optional: true
955
979
956
-
'@rollup/rollup-freebsd-x64@4.46.1':
980
+
'@rollup/rollup-freebsd-x64@4.53.0':
957
981
optional: true
958
982
959
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.1':
983
+
'@rollup/rollup-linux-arm-gnueabihf@4.53.0':
960
984
optional: true
961
985
962
-
'@rollup/rollup-linux-arm-musleabihf@4.46.1':
986
+
'@rollup/rollup-linux-arm-musleabihf@4.53.0':
963
987
optional: true
964
988
965
-
'@rollup/rollup-linux-arm64-gnu@4.46.1':
989
+
'@rollup/rollup-linux-arm64-gnu@4.53.0':
966
990
optional: true
967
991
968
-
'@rollup/rollup-linux-arm64-musl@4.46.1':
992
+
'@rollup/rollup-linux-arm64-musl@4.53.0':
969
993
optional: true
970
994
971
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.1':
995
+
'@rollup/rollup-linux-loong64-gnu@4.53.0':
972
996
optional: true
973
997
974
-
'@rollup/rollup-linux-ppc64-gnu@4.46.1':
998
+
'@rollup/rollup-linux-ppc64-gnu@4.53.0':
975
999
optional: true
976
1000
977
-
'@rollup/rollup-linux-riscv64-gnu@4.46.1':
1001
+
'@rollup/rollup-linux-riscv64-gnu@4.53.0':
978
1002
optional: true
979
1003
980
-
'@rollup/rollup-linux-riscv64-musl@4.46.1':
1004
+
'@rollup/rollup-linux-riscv64-musl@4.53.0':
981
1005
optional: true
982
1006
983
-
'@rollup/rollup-linux-s390x-gnu@4.46.1':
1007
+
'@rollup/rollup-linux-s390x-gnu@4.53.0':
984
1008
optional: true
985
1009
986
-
'@rollup/rollup-linux-x64-gnu@4.46.1':
1010
+
'@rollup/rollup-linux-x64-gnu@4.53.0':
987
1011
optional: true
988
1012
989
-
'@rollup/rollup-linux-x64-musl@4.46.1':
1013
+
'@rollup/rollup-linux-x64-musl@4.53.0':
990
1014
optional: true
991
1015
992
-
'@rollup/rollup-win32-arm64-msvc@4.46.1':
1016
+
'@rollup/rollup-openharmony-arm64@4.53.0':
993
1017
optional: true
994
1018
995
-
'@rollup/rollup-win32-ia32-msvc@4.46.1':
1019
+
'@rollup/rollup-win32-arm64-msvc@4.53.0':
1020
+
optional: true
1021
+
1022
+
'@rollup/rollup-win32-ia32-msvc@4.53.0':
996
1023
optional: true
997
1024
998
-
'@rollup/rollup-win32-x64-msvc@4.46.1':
1025
+
'@rollup/rollup-win32-x64-gnu@4.53.0':
999
1026
optional: true
1000
1027
1001
-
'@tauri-apps/api@2.7.0': {}
1028
+
'@rollup/rollup-win32-x64-msvc@4.53.0':
1029
+
optional: true
1002
1030
1003
-
'@tauri-apps/api@2.8.0': {}
1031
+
'@tauri-apps/api@2.9.0': {}
1004
1032
1005
-
'@tauri-apps/cli-darwin-arm64@2.7.1':
1033
+
'@tauri-apps/cli-darwin-arm64@2.9.3':
1006
1034
optional: true
1007
1035
1008
-
'@tauri-apps/cli-darwin-x64@2.7.1':
1036
+
'@tauri-apps/cli-darwin-x64@2.9.3':
1009
1037
optional: true
1010
1038
1011
-
'@tauri-apps/cli-linux-arm-gnueabihf@2.7.1':
1039
+
'@tauri-apps/cli-linux-arm-gnueabihf@2.9.3':
1012
1040
optional: true
1013
1041
1014
-
'@tauri-apps/cli-linux-arm64-gnu@2.7.1':
1042
+
'@tauri-apps/cli-linux-arm64-gnu@2.9.3':
1015
1043
optional: true
1016
1044
1017
-
'@tauri-apps/cli-linux-arm64-musl@2.7.1':
1045
+
'@tauri-apps/cli-linux-arm64-musl@2.9.3':
1018
1046
optional: true
1019
1047
1020
-
'@tauri-apps/cli-linux-riscv64-gnu@2.7.1':
1048
+
'@tauri-apps/cli-linux-riscv64-gnu@2.9.3':
1021
1049
optional: true
1022
1050
1023
-
'@tauri-apps/cli-linux-x64-gnu@2.7.1':
1051
+
'@tauri-apps/cli-linux-x64-gnu@2.9.3':
1024
1052
optional: true
1025
1053
1026
-
'@tauri-apps/cli-linux-x64-musl@2.7.1':
1054
+
'@tauri-apps/cli-linux-x64-musl@2.9.3':
1027
1055
optional: true
1028
1056
1029
-
'@tauri-apps/cli-win32-arm64-msvc@2.7.1':
1057
+
'@tauri-apps/cli-win32-arm64-msvc@2.9.3':
1030
1058
optional: true
1031
1059
1032
-
'@tauri-apps/cli-win32-ia32-msvc@2.7.1':
1060
+
'@tauri-apps/cli-win32-ia32-msvc@2.9.3':
1033
1061
optional: true
1034
1062
1035
-
'@tauri-apps/cli-win32-x64-msvc@2.7.1':
1063
+
'@tauri-apps/cli-win32-x64-msvc@2.9.3':
1036
1064
optional: true
1037
1065
1038
-
'@tauri-apps/cli@2.7.1':
1066
+
'@tauri-apps/cli@2.9.3':
1039
1067
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
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
1051
1087
1052
-
'@tauri-apps/plugin-dialog@2.4.0':
1088
+
'@tauri-apps/plugin-opener@2.5.2':
1053
1089
dependencies:
1054
-
'@tauri-apps/api': 2.8.0
1090
+
'@tauri-apps/api': 2.9.0
1055
1091
1056
-
'@tauri-apps/plugin-opener@2.4.0':
1092
+
'@tauri-apps/plugin-os@2.3.2':
1057
1093
dependencies:
1058
-
'@tauri-apps/api': 2.7.0
1094
+
'@tauri-apps/api': 2.9.0
1059
1095
1060
1096
'@types/animejs@3.1.13': {}
1061
1097
1062
1098
'@types/babel__core@7.20.5':
1063
1099
dependencies:
1064
-
'@babel/parser': 7.28.0
1065
-
'@babel/types': 7.28.2
1100
+
'@babel/parser': 7.28.5
1101
+
'@babel/types': 7.28.5
1066
1102
'@types/babel__generator': 7.27.0
1067
1103
'@types/babel__template': 7.4.4
1068
-
'@types/babel__traverse': 7.20.7
1104
+
'@types/babel__traverse': 7.28.0
1069
1105
1070
1106
'@types/babel__generator@7.27.0':
1071
1107
dependencies:
1072
-
'@babel/types': 7.28.2
1108
+
'@babel/types': 7.28.5
1073
1109
1074
1110
'@types/babel__template@7.4.4':
1075
1111
dependencies:
1076
-
'@babel/parser': 7.28.0
1077
-
'@babel/types': 7.28.2
1112
+
'@babel/parser': 7.28.5
1113
+
'@babel/types': 7.28.5
1078
1114
1079
-
'@types/babel__traverse@7.20.7':
1115
+
'@types/babel__traverse@7.28.0':
1080
1116
dependencies:
1081
-
'@babel/types': 7.28.2
1117
+
'@babel/types': 7.28.5
1082
1118
1083
1119
'@types/estree@1.0.8': {}
1084
1120
1085
-
animejs@4.1.2: {}
1121
+
animejs@4.2.2: {}
1086
1122
1087
-
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0):
1123
+
babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.28.5):
1088
1124
dependencies:
1089
-
'@babel/core': 7.28.0
1125
+
'@babel/core': 7.28.5
1090
1126
'@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
1127
+
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
1128
+
'@babel/types': 7.28.5
1093
1129
html-entities: 2.3.3
1094
1130
parse5: 7.3.0
1095
-
validate-html-nesting: 1.2.3
1096
1131
1097
-
babel-preset-solid@1.9.6(@babel/core@7.28.0):
1132
+
babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10):
1098
1133
dependencies:
1099
-
'@babel/core': 7.28.0
1100
-
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0)
1134
+
'@babel/core': 7.28.5
1135
+
babel-plugin-jsx-dom-expressions: 0.40.3(@babel/core@7.28.5)
1136
+
optionalDependencies:
1137
+
solid-js: 1.9.10
1101
1138
1102
-
browserslist@4.25.1:
1139
+
baseline-browser-mapping@2.8.25: {}
1140
+
1141
+
browserslist@4.27.0:
1103
1142
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)
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)
1108
1148
1109
-
caniuse-lite@1.0.30001731: {}
1149
+
caniuse-lite@1.0.30001754: {}
1110
1150
1111
1151
convert-source-map@2.0.0: {}
1112
1152
1113
1153
csstype@3.1.3: {}
1114
1154
1115
-
debug@4.4.1:
1155
+
debug@4.4.3:
1116
1156
dependencies:
1117
1157
ms: 2.1.3
1118
1158
1119
-
electron-to-chromium@1.5.192: {}
1159
+
electron-to-chromium@1.5.248: {}
1120
1160
1121
1161
entities@6.0.1: {}
1122
1162
1123
-
esbuild@0.25.8:
1163
+
esbuild@0.25.12:
1124
1164
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
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
1151
1191
1152
1192
escalade@3.2.0: {}
1153
1193
1154
-
fdir@6.4.6(picomatch@4.0.3):
1194
+
fdir@6.5.0(picomatch@4.0.3):
1155
1195
optionalDependencies:
1156
1196
picomatch: 4.0.3
1157
1197
···
1182
1222
1183
1223
nanoid@3.3.11: {}
1184
1224
1185
-
node-releases@2.0.19: {}
1225
+
node-releases@2.0.27: {}
1186
1226
1187
1227
parse5@7.3.0:
1188
1228
dependencies:
···
1198
1238
picocolors: 1.1.1
1199
1239
source-map-js: 1.2.1
1200
1240
1201
-
rollup@4.46.1:
1241
+
rollup@4.53.0:
1202
1242
dependencies:
1203
1243
'@types/estree': 1.0.8
1204
1244
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
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
1225
1267
fsevents: 2.3.3
1226
1268
1227
1269
semver@6.3.1: {}
1228
1270
1229
-
seroval-plugins@1.3.2(seroval@1.3.2):
1271
+
seroval-plugins@1.3.3(seroval@1.3.2):
1230
1272
dependencies:
1231
1273
seroval: 1.3.2
1232
1274
1233
1275
seroval@1.3.2: {}
1234
1276
1235
-
solid-js@1.9.7:
1277
+
solid-js@1.9.10:
1236
1278
dependencies:
1237
1279
csstype: 3.1.3
1238
1280
seroval: 1.3.2
1239
-
seroval-plugins: 1.3.2(seroval@1.3.2)
1281
+
seroval-plugins: 1.3.3(seroval@1.3.2)
1240
1282
1241
-
solid-refresh@0.6.3(solid-js@1.9.7):
1283
+
solid-refresh@0.6.3(solid-js@1.9.10):
1242
1284
dependencies:
1243
-
'@babel/generator': 7.28.0
1285
+
'@babel/generator': 7.28.5
1244
1286
'@babel/helper-module-imports': 7.27.1
1245
-
'@babel/types': 7.28.2
1246
-
solid-js: 1.9.7
1287
+
'@babel/types': 7.28.5
1288
+
solid-js: 1.9.10
1247
1289
transitivePeerDependencies:
1248
1290
- supports-color
1249
1291
1250
1292
source-map-js@1.2.1: {}
1251
1293
1252
-
tinyglobby@0.2.14:
1294
+
tinyglobby@0.2.15:
1253
1295
dependencies:
1254
-
fdir: 6.4.6(picomatch@4.0.3)
1296
+
fdir: 6.5.0(picomatch@4.0.3)
1255
1297
picomatch: 4.0.3
1256
1298
1257
1299
typescript@5.6.3: {}
1258
1300
1259
-
update-browserslist-db@1.1.3(browserslist@4.25.1):
1301
+
update-browserslist-db@1.1.4(browserslist@4.27.0):
1260
1302
dependencies:
1261
-
browserslist: 4.25.1
1303
+
browserslist: 4.27.0
1262
1304
escalade: 3.2.0
1263
1305
picocolors: 1.1.1
1264
1306
1265
-
validate-html-nesting@1.2.3: {}
1266
-
1267
-
vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@6.3.5):
1307
+
vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@6.4.1):
1268
1308
dependencies:
1269
-
'@babel/core': 7.28.0
1309
+
'@babel/core': 7.28.5
1270
1310
'@types/babel__core': 7.20.5
1271
-
babel-preset-solid: 1.9.6(@babel/core@7.28.0)
1311
+
babel-preset-solid: 1.9.10(@babel/core@7.28.5)(solid-js@1.9.10)
1272
1312
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)
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)
1277
1317
transitivePeerDependencies:
1278
1318
- supports-color
1279
1319
1280
-
vite@6.3.5:
1320
+
vite@6.4.1:
1281
1321
dependencies:
1282
-
esbuild: 0.25.8
1283
-
fdir: 6.4.6(picomatch@4.0.3)
1322
+
esbuild: 0.25.12
1323
+
fdir: 6.5.0(picomatch@4.0.3)
1284
1324
picomatch: 4.0.3
1285
1325
postcss: 8.5.6
1286
-
rollup: 4.46.1
1287
-
tinyglobby: 0.2.14
1326
+
rollup: 4.53.0
1327
+
tinyglobby: 0.2.15
1288
1328
optionalDependencies:
1289
1329
fsevents: 2.3.3
1290
1330
1291
-
vitefu@1.1.1(vite@6.3.5):
1331
+
vitefu@1.1.1(vite@6.4.1):
1292
1332
optionalDependencies:
1293
-
vite: 6.3.5
1333
+
vite: 6.4.1
1294
1334
1295
1335
yallist@3.1.1: {}
+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";
1
+
import { createEffect, createSignal, onCleanup, onMount } from "solid-js";
2
2
import "./App.css";
3
3
import { renderBackgroundGrid, renderContextMenu, renderNodes, renderNullTab, renderTempDrawing } from "./renderer";
4
4
import { lerp } from "./utils/lerp";
5
-
import { Node, NodeIO, NodeIOResolveAnyTypes } from "./structs/node";
5
+
import { Node, NodeIO, NodeIOCanCast, NodeIOResolveAnyTypes } from "./structs/node";
6
6
import { isPointInRect, isPointInRectApplyOffset, screenToWorldSpace } from "./utils/interections";
7
7
import { ControlBar } from "./components/ControlBar";
8
8
import { CanvasContextMenu } from "./ContextMenu/Canvas";
···
12
12
import { TabMenu } from "./components/TabMenu";
13
13
import { ConfirmationPopup } from "./components/ConfirmationPopup";
14
14
15
-
let App = () => {
16
-
// TODO: Delete selected node when delete key is pressed
17
-
// TODO: Keybind system
18
-
// TODO: Add undo / redo -ing
15
+
import * as keybinds from './keybinds';
16
+
import { listen } from "@tauri-apps/api/event";
19
17
20
-
let [ selectedNode, setSelectedNode ] = createSignal<Node | null>(null);
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 ]);
21
23
22
24
let canvas!: HTMLCanvasElement;
23
25
let ctx: CanvasRenderingContext2D;
···
58
60
visible: false
59
61
}
60
62
61
-
onMount(() => {
62
-
NodeManager.Instance.HookTabChange(() => setSelectedNode(null));
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([]));
63
75
64
76
ctx = canvas.getContext('2d')!;
65
77
···
102
114
}
103
115
104
116
if(clickedNode){
105
-
contextMenu.items = NodeContextMenu(clickedNode);
117
+
contextMenu.items = NodeContextMenu(clickedNode, selectedNodes, setSelectedNodes);
106
118
} else{
107
119
contextMenu.items = CanvasContextMenu;
108
120
}
···
111
123
contextMenu.visible = true;
112
124
}
113
125
126
+
let isShiftClick = false;
114
127
canvas.onmousedown = ( e ) => {
128
+
isShiftClick = e.shiftKey;
129
+
115
130
if(
116
131
e.clientY < 60 ||
117
132
e.clientX < 220 ||
···
157
172
158
173
if(nodes){
159
174
nodes.map(node => {
160
-
node.selected = false;
161
-
162
175
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
163
176
e.clientX, e.clientY,
164
-
node.x, node.y, node.w, node.h
177
+
node.x - 20, node.y, node.w + 40, node.h
165
178
)){
166
179
node.outputs.map(( output, i ) => {
167
180
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
168
181
e.clientX, e.clientY,
169
-
node.x + (node.w - 30),
182
+
node.x + (node.w - 10),
170
183
node.y + 50 + (30 * i),
171
184
20, 20
172
185
)){
173
186
output.index = i;
174
187
175
-
drawingTo = [ node.x + (node.w - 30), node.y + 50 + (30 * i) ];
188
+
drawingTo = [
189
+
node.x + (node.w - 10),
190
+
node.y + 50 + (30 * i)
191
+
];
176
192
drawingFrom = output;
177
193
178
194
isDrawing = true;
···
183
199
node.inputs.map(( input, i ) => {
184
200
if(isPointInRectApplyOffset(canvas, { x: offset[0], y: offset[1], scale },
185
201
e.clientX, e.clientY,
186
-
node.x + 10,
202
+
node.x - 10,
187
203
node.y + 50 + (30 * i),
188
204
20, 20
189
205
)){
···
213
229
}
214
230
215
231
movingNode = clickedNode;
216
-
217
-
if(clickedNode){
218
-
clickedNode.selected = true;
219
-
setSelectedNode(clickedNode);
220
-
}
221
232
222
233
isMouseDown = true;
223
234
mouseStartPos = [ e.clientX, e.clientY ];
235
+
mouseMovePos = [ e.clientX, e.clientY ];
224
236
}
225
237
226
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
+
227
274
if(isMouseDown){
228
275
if(isDrawing){
229
276
drawingTo = screenToWorldSpace(canvas, { x: offset[0], y: offset[1], scale }, e.clientX - 10 * scale, e.clientY - 10 * scale) as [ number, number ];
230
277
} else if(movingNode){
231
-
movingNode.x = movingNode.x - (mouseStartPos[0] - e.clientX) / scale;
232
-
movingNode.y = movingNode.y - (mouseStartPos[1] - e.clientY) / scale;
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
+
}
233
284
234
-
mouseStartPos = [ e.clientX, e.clientY ];
285
+
mouseMovePos = [ e.clientX, e.clientY ];
235
286
NodeManager.Instance.UpdateConfig();
236
287
} else{
237
-
offsetTarget = [ offsetTarget[0] - (mouseStartPos[0] - e.clientX) / scale, offsetTarget[1] - (mouseStartPos[1] - e.clientY) / scale ];
238
-
mouseStartPos = [ e.clientX, e.clientY ];
288
+
offsetTarget = [ offsetTarget[0] - (mouseMovePos[0] - e.clientX) / scale, offsetTarget[1] - (mouseMovePos[1] - e.clientY) / scale ];
289
+
mouseMovePos = [ e.clientX, e.clientY ];
239
290
240
291
screenMoved = true;
241
292
}
···
279
330
280
331
canvas.onmouseup = ( e ) => {
281
332
let nodes = NodeManager.Instance.GetNodes();
333
+
let clickedNode;
282
334
283
335
if(nodes){
284
336
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);
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);
295
353
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!);
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!);
305
363
306
-
NodeManager.Instance.UpdateConfig();
364
+
NodeManager.Instance.UpdateConfig();
365
+
}
307
366
}
308
367
}
309
-
}
310
-
})
368
+
})
369
+
}
311
370
})
312
371
}
313
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
+
314
403
isDrawing = false;
315
404
isMouseDown = false;
316
405
}
317
406
407
+
keybinds.load(canvas, mousePos, selectedNodes, setSelectedNodes);
318
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
+
});
319
425
});
320
426
321
427
let update = () => {
322
428
if(stopRender)return;
323
-
324
429
scale = lerp(scale, targetScale, 0.25);
325
430
326
431
offset[0] = lerp(offset[0], offsetTarget[0], 0.5);
···
345
450
346
451
let isMouseDown = false;
347
452
let mouseStartPos = [ 0, 0 ];
453
+
let mouseMovePos = [ 0, 0 ];
348
454
349
455
let interval = setInterval(() => {
350
456
if(screenMoved){
···
354
460
}
355
461
}, 1000);
356
462
357
-
onCleanup(() => {
358
-
stopRender = true;
359
-
window.clearInterval(interval);
360
-
});
361
-
362
463
return (
363
464
<>
364
465
<ConfirmationPopup />
365
466
<TabMenu />
366
-
<ControlBar node={selectedNode} lockMovement={( lock ) => lockMovement = lock} />
467
+
<ControlBar node={selectedNodes} lockMovement={( lock ) => lockMovement = lock} />
367
468
<canvas ref={canvas}/>
368
469
</>
369
470
);
+14
-2
src/ContextMenu/Node.tsx
+14
-2
src/ContextMenu/Node.tsx
···
1
+
import { Accessor, Setter } from "solid-js";
1
2
import { NodeManager } from "../Mangers/NodeManager";
2
3
import { PositionInfo } from "../renderer";
3
4
import { Node } from "../structs/node";
4
5
5
-
export let NodeContextMenu = ( clickedNode: Node ) => [
6
+
export let NodeContextMenu = ( clickedNode: Node, selectedNode: Accessor<Node[]>, setSelectedNode: Setter<Node[]> ) => [
6
7
{
7
8
text: "Delete Node",
8
9
clicked: ( _e: MouseEvent, _canvas: HTMLCanvasElement, _position: PositionInfo ) => {
···
18
19
})
19
20
})
20
21
21
-
// TODO: If node is currently selected, deselect it.
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
+
22
34
NodeManager.Instance.RemoveNode(clickedNode!)
23
35
},
24
36
hovered: false
+86
-40
src/Mangers/NodeManager.tsx
+86
-40
src/Mangers/NodeManager.tsx
···
7
7
import { NodesByID } from "../Nodes/Nodes";
8
8
import { save } from "@tauri-apps/plugin-dialog";
9
9
import { ConfirmationManager } from "./ConfirmationManager";
10
-
import { getCurrentWindow } from "@tauri-apps/api/window";
10
+
import { platform } from "@tauri-apps/plugin-os";
11
11
12
12
export interface TabHashMap {
13
13
[details: string] : Tab;
···
24
24
constructor(){
25
25
NodeManager.Instance = this;
26
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
+
27
42
listen('load_new_tab', ( ev: any ) => {
28
43
this._loadFromConfig(ev.payload.path, null, ev.payload.graph);
29
44
});
···
32
47
let version = await getVersion();
33
48
34
49
for(let tab of Object.entries<any>(tabs)){
35
-
console.log(tab);
36
-
37
-
await this._loadFromConfig(tab[1][2], tab[0], JSON.stringify({
50
+
let loaded_tab = await this._loadFromConfig(tab[1][2], tab[0], JSON.stringify({
38
51
tab_name: tab[1][1],
39
52
version,
40
53
graph: tab[1][0]
41
54
}));
55
+
56
+
if(loaded_tab)
57
+
loaded_tab.setNeedsSave(tab[1][3]);
42
58
};
59
+
60
+
this.UpdateConfig();
43
61
});
44
62
45
-
(async () => {
46
-
let window = await getCurrentWindow();
63
+
listen('prompt_to_close', async _ => {
64
+
let tabs = Object.values(this._tabs);
65
+
let tabsNeedingSaving = tabs.filter(x => x.needsSave());
47
66
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(); }
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();
68
78
}
69
-
]
70
-
)
71
-
});
72
-
}
73
-
});
74
-
})();
79
+
},
80
+
{
81
+
text: 'Don\'t Save',
82
+
callback: async () => {
83
+
res();
84
+
}
85
+
}
86
+
]
87
+
)
88
+
});
89
+
}
90
+
91
+
invoke('close_app');
92
+
});
75
93
}
76
94
77
95
78
96
private _tabUpdateHook: ( tabs: TabHashMap ) => void = () => {};
79
97
private _tabChangeHook: () => void = () => {};
98
+
99
+
public CurrentTab(): Tab | null{
100
+
if(!this._selectedTab)return null
101
+
return this._tabs[this._selectedTab] || null;
102
+
}
80
103
81
104
public async AddTab( name: string, id: string | null = null ): Promise<Tab>{
82
105
let [ selected, setSelected ] = createSignal(false);
···
94
117
needsSave,
95
118
setNeedsSave,
96
119
97
-
refuseSync: false
120
+
needSync: false
98
121
};
99
122
100
123
this._tabs[tab.id] = tab;
···
189
212
}
190
213
}
191
214
192
-
public async SaveTab( tab: Tab ){
215
+
public async SaveTab( tab: Tab, ignoreSaveLocation: boolean = false ){
193
216
let path =
194
-
tab.saveLocation ||
217
+
tab.saveLocation && !ignoreSaveLocation ?
218
+
tab.saveLocation :
195
219
await save({ defaultPath: tab.name + '.macro', filters: [ { name: 'Macro Files', extensions: [ 'macro' ] } ] });
196
220
197
221
if(!path)throw new Error("Cannot save");
···
246
270
let tab = this._tabs[this._selectedTab];
247
271
if(!tab)return;
248
272
249
-
if(tab.refuseSync)return;
250
-
invoke('sync_tab', { graph: this._generateTabGraph(tab.id)[0], id: tab.id, name: tab.name, location: tab.saveLocation });
273
+
tab.nodes = this._nodes;
274
+
tab.needSync = true;
251
275
252
276
if(needsSave)tab.setNeedsSave(true);
253
277
}
···
262
286
)return;
263
287
264
288
let tab = await this.AddTab(json.tab_name, id);
265
-
tab.refuseSync = true;
289
+
tab.needSync = false;
266
290
tab.saveLocation = path;
267
291
268
292
this._nodes = [];
···
293
317
let input = output.connections[k];
294
318
let node = this._nodes.find(x => x.id === input.node)!;
295
319
320
+
if(!node)continue;
321
+
296
322
let realInput = node.inputs.find(x => x.index === input.index);
297
323
let realOutput = outputParentNode.outputs[j];
298
324
···
318
344
tab.setNeedsSave(false);
319
345
tab.nodes = this._nodes;
320
346
321
-
tab.refuseSync = false;
322
-
this.UpdateConfig(false);
347
+
tab.needSync = false;
348
+
if(!id)this.UpdateConfig(false);
349
+
350
+
return tab;
323
351
}
324
352
325
353
private _generateTabGraph( tabId: string | null ): [ any, Tab | null ]{
···
335
363
let node = tab.nodes[i];
336
364
337
365
let nodeOutputs = [];
366
+
let nodeInputs = [];
338
367
339
368
for (let j = 0; j < node.outputs.length; j++) {
340
369
let output = node.outputs[j];
···
351
380
})
352
381
}
353
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
+
354
398
nodesToSave.push({
355
399
name: node.name,
356
400
id: node.id,
357
401
typeId: node.typeId,
358
402
pos: [ node.x, node.y ],
359
403
outputs: nodeOutputs,
404
+
inputs: nodeInputs,
360
405
statics: node.statics
361
406
})
362
407
}
···
371
416
invoke('save_graph', { graph: JSON.stringify({
372
417
tab_name: tab.name,
373
418
version: await getVersion(),
419
+
platform: platform(),
374
420
graph: nodesToSave
375
421
}), path });
376
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
1
import { Node, NodeStatic, NodeType } from "../structs/node";
2
+
import { platform } from '@tauri-apps/plugin-os';
2
3
3
4
import { NodeConditional } from "./Conditional";
4
5
import { NodeDebug } from "./Debug";
5
6
import { NodeOSCActions } from "./OSCActions";
6
7
import { NodeOSCTrigger } from "./OSCTrigger";
8
+
import { NodePressKey } from "./PressKey";
7
9
import { NodeStatics } from "./Statics";
10
+
import { NodeShellCommand } from "./Shell";
8
11
9
12
export interface NodeDefinition{
13
+
os: string,
10
14
isSingle: boolean,
11
15
name: string,
12
16
typeId?: string,
13
17
onStaticsUpdate?: ( node: Node ) => Promise<void>,
14
18
// build?: ( pos: [ number, number ], onStaticsUpdate: ( node: Node ) => void ) => Promise<Node>,
15
19
w?: number,
16
-
h?: number,
17
20
statics?: NodeStatic[],
18
21
inputs?: { name: string, type: NodeType }[],
19
22
outputs?: { name: string, type: NodeType }[],
···
25
28
[details: string] : NodeDefinition;
26
29
}
27
30
28
-
export let Nodes: NodeDefinition[] = [
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 = [
29
41
NodeOSCTrigger,
30
42
NodeConditional,
31
43
NodeStatics,
32
44
NodeOSCActions,
33
-
NodeDebug
45
+
NodeDebug,
46
+
NodePressKey,
47
+
NodeShellCommand
34
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
+
}
35
56
36
57
export let NodesByID: NodeDefinitionHashMap = {}
37
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
5
import { NodeDefinition } from "./Nodes";
6
6
7
7
export let NodeOSCTrigger: NodeDefinition = {
8
+
os: 'any',
9
+
8
10
isSingle: true,
9
11
name: 'OSC Trigger',
10
12
typeId: 'osctrigger',
11
13
12
14
w: 200,
13
-
h: 50,
14
15
15
16
statics: [
16
17
{
···
39
40
}
40
41
}
41
42
42
-
node.outputs.map(output => {
43
-
output.connections.map(partner => {
44
-
partner.connections = partner.connections.filter(x => x != output);
45
-
})
46
-
})
47
-
node.outputs = [];
43
+
let tempOutputs = [];
48
44
49
-
node.outputs.push({
45
+
tempOutputs.push({
50
46
name: 'Flow',
51
47
type: NodeType.Flow,
52
48
connections: [],
···
73
69
}
74
70
75
71
if(type){
76
-
node.outputs.push({
72
+
tempOutputs.push({
77
73
name: dat.desc === '' ? dat.type : dat.desc,
78
74
type: type,
79
75
connections: [],
···
83
79
}
84
80
});
85
81
86
-
node.h = 60 + (parameters.length + 1) * 30;
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
+
87
104
NodeManager.Instance.UpdateConfig();
88
105
}
89
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
2
import { NodeDefinition } from "../Nodes";
3
3
4
4
export let NodeStaticsFloat: NodeDefinition = {
5
+
os: 'any',
6
+
5
7
isSingle: true,
6
8
name: 'Float',
7
9
typeId: 'staticfloat',
8
10
9
11
w: 200,
10
-
h: 85,
11
12
12
13
statics: [{
13
14
type: NodeType.Float,
14
15
name: 'Value',
15
-
value: null
16
+
value: 0.0
16
17
}],
17
18
18
19
outputs: [{ name: "Float", type: NodeType.Float }],
+3
-2
src/Nodes/Statics/Int.tsx
+3
-2
src/Nodes/Statics/Int.tsx
···
2
2
import { NodeDefinition } from "../Nodes";
3
3
4
4
export let NodeStaticsInt: NodeDefinition = {
5
+
os: 'any',
6
+
5
7
isSingle: true,
6
8
name: 'Int',
7
9
typeId: 'staticint',
8
10
9
11
w: 200,
10
-
h: 85,
11
12
12
13
statics: [{
13
14
type: NodeType.Int,
14
15
name: 'Value',
15
-
value: null
16
+
value: 0
16
17
}],
17
18
18
19
outputs: [{ name: "Int", type: NodeType.Int }],
+3
-2
src/Nodes/Statics/String.tsx
+3
-2
src/Nodes/Statics/String.tsx
···
2
2
import { NodeDefinition } from "../Nodes";
3
3
4
4
export let NodeStaticsString: NodeDefinition = {
5
+
os: 'any',
6
+
5
7
isSingle: true,
6
8
name: 'String',
7
9
typeId: 'staticstring',
8
10
9
11
w: 200,
10
-
h: 85,
11
12
12
13
statics: [{
13
14
type: NodeType.String,
14
15
name: 'Value',
15
-
value: null
16
+
value: 'Hello World!'
16
17
}],
17
18
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
1
import './ControlBar.css';
2
2
3
-
import { Accessor, createEffect, createSignal, For, Match, Show, Switch } from 'solid-js';
3
+
import { Accessor, createSignal, For, Match, Show, Switch } from 'solid-js';
4
4
import { Node, NodeType } from '../structs/node';
5
5
import { TextInput } from './TextInput';
6
6
import { invoke } from '@tauri-apps/api/core';
···
9
9
import { NodeManager } from '../Mangers/NodeManager';
10
10
11
11
export interface ControlBarProps{
12
-
node: Accessor<Node | null>,
12
+
node: Accessor<Node[]>,
13
13
lockMovement: ( lock: boolean ) => void
14
14
}
15
15
16
16
export let ControlBar = ( props: ControlBarProps ) => {
17
-
createEffect(() => {
18
-
console.log(props.node());
19
-
})
20
-
21
17
return (
22
18
<div class="control-bar">
23
-
<For each={props.node()?.statics}>
19
+
<For each={props.node()[0]?.statics}>
24
20
{ ( item ) => {
25
21
let [ popupOpen, setPopupOpen ] = createSignal(false);
26
22
···
36
32
value={item.value || ''}
37
33
onChange={( el ) => {
38
34
let value = el.target.value;
39
-
let node = props.node()!;
35
+
let node = props.node()[0]!;
40
36
41
37
item.value = value;
42
38
node.onStaticsUpdate(node);
···
54
50
value={item.value !== undefined ? item.value : ''}
55
51
onChange={( el ) => {
56
52
let value = el.target.value;
57
-
let node = props.node()!;
53
+
let node = props.node()[0]!;
58
54
59
55
item.value = parseInt(value);
60
56
node.onStaticsUpdate(node);
···
72
68
value={item.value !== undefined ? item.value : ''}
73
69
onChange={( el ) => {
74
70
let value = el.target.value;
75
-
let node = props.node()!;
71
+
let node = props.node()[0]!;
76
72
77
73
item.value = parseFloat(value);
78
74
node.onStaticsUpdate(node);
···
92
88
return addresses.map(x => x.address).filter(x => x.toLowerCase().includes(text.toLowerCase()));
93
89
}}
94
90
change={( text ) => {
95
-
let node = props.node()!;
91
+
let node = props.node()[0]!;
96
92
97
93
item.value = text;
98
94
node.onStaticsUpdate(node);
···
118
114
}}
119
115
value={item.value}
120
116
changed={( value ) => {
121
-
let node = props.node()!;
117
+
let node = props.node()[0]!;
122
118
123
119
item.value = value;
124
120
node.onStaticsUpdate(node);
+23
src/components/ParameterList.css
+23
src/components/ParameterList.css
···
59
59
60
60
.parameter-list-button-dropdown > div:hover{
61
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;
62
85
}
+12
-1
src/components/ParameterList.tsx
+12
-1
src/components/ParameterList.tsx
···
22
22
</div>
23
23
<div class="parameter-list-content">
24
24
<For each={parameters()}>
25
-
{ i => <div>{ JSON.stringify(i) }</div>}
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>}
26
37
</For>
27
38
<div class="button" onClick={() => { setAddParametersOpen(!addParametersOpen()) }}>Add Parameter + </div>
28
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
12
overflow-y: auto;
13
13
}
14
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
+
15
22
.tab{
16
23
border-radius: 10px;
17
24
padding: 8px 10px;
···
95
102
transform: translate(-10px, 35px);
96
103
border-radius: 10px;
97
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;
98
127
}
+69
-50
src/components/TabMenu.tsx
+69
-50
src/components/TabMenu.tsx
···
1
-
import { createSignal, For, onMount, Show } from 'solid-js';
2
1
import './TabMenu.css';
2
+
3
+
import { createSignal, For, onMount, Show } from 'solid-js';
3
4
import { NodeManager } from '../Mangers/NodeManager';
4
5
import { Tab } from '../structs/Tab';
6
+
import { SettingsMenu } from './SettingsMenu';
7
+
import { openUrl } from '@tauri-apps/plugin-opener';
5
8
6
9
export let TabMenu = () => {
7
10
let [ tabImportOpen, setTabImportOpen ] = createSignal(false);
8
11
let [ tabs, setTabs ] = createSignal<Tab[]>([], { equals: false });
12
+
13
+
let [ settingsOpen, setSettingsOpen ] = createSignal(false);
9
14
10
15
let closeTabImportMenu = () => {
11
16
window.removeEventListener('click', closeTabImportMenu);
···
17
22
});
18
23
19
24
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>
25
+
<>
26
+
<Show when={settingsOpen()}>
27
+
<SettingsMenu close={() => setSettingsOpen(false)} />
28
+
</Show>
37
29
38
-
</div>
39
-
<div class="tab-meta" onDblClick={( e ) => {
40
-
let input = <input class="tab-meta-input" value={ e.target.innerHTML } /> as HTMLInputElement;
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>
41
70
42
-
e.target.innerHTML = '';
43
-
e.target.appendChild(input);
71
+
<div class="tab" onClick={() => {
72
+
NodeManager.Instance.AddTab("Untitled");
73
+
}} onContextMenu={( e ) => {
74
+
e.preventDefault();
75
+
setTabImportOpen(true);
44
76
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>
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>
56
85
</div>
57
-
}
58
-
</For>
86
+
</div>
59
87
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>
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')} />
71
92
</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
93
</div>
75
-
</div>
94
+
</>
76
95
)
77
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
63
let nodeX = Math.round(node.x / 10) * 10;
64
64
let nodeY = Math.round(node.y / 10) * 10;
65
65
66
-
ctx.fillStyle = '#1f2129';
67
-
ctx.strokeStyle = node.selected ? '#004696ff' : '#fff5';
66
+
ctx.fillStyle = '#343742ff';
67
+
ctx.strokeStyle = node.selected ? '#004696ff' : '#fff0';
68
68
ctx.lineWidth = 5 * position.scale;
69
69
70
70
// Draw Node Box
···
74
74
node.w * position.scale,
75
75
node.h * position.scale,
76
76
10 * position.scale);
77
+
78
+
ctx.shadowColor = '#0005';
79
+
ctx.shadowBlur = 10;
77
80
78
81
ctx.stroke();
79
82
ctx.fill();
80
83
84
+
ctx.shadowBlur = 0;
85
+
81
86
// Draw Node Name
82
87
ctx.fillStyle = '#fff';
83
-
ctx.font = (25 * position.scale) + 'px Comic Mono';
88
+
ctx.font = (25 * position.scale) + 'px Rubik';
84
89
ctx.textAlign = 'center';
85
90
86
91
ctx.fillText(node.name,
···
89
94
);
90
95
91
96
// Draw Inputs
92
-
ctx.font = (15 * position.scale) + 'px Comic Mono';
97
+
ctx.font = (15 * position.scale) + 'px Rubik';
93
98
ctx.textAlign = 'left';
94
99
95
100
node.inputs.map(( input, i ) => {
96
101
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.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();
102
112
103
113
ctx.fillText(input.name,
104
-
(nodeX + 35 + startX + position.x) * position.scale,
114
+
(nodeX + 15 + startX + position.x) * position.scale,
105
115
(nodeY + 53 + (30 * i) + startY + position.y) * position.scale,
106
116
)
107
117
})
···
111
121
112
122
node.outputs.map(( output, i ) => {
113
123
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
-
)
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();
119
134
120
135
ctx.fillText(output.name,
121
-
(nodeX + (node.w - 35) + startX + position.x) * position.scale,
136
+
(nodeX + (node.w - 15) + startX + position.x) * position.scale,
122
137
(nodeY + 53 + (30 * i) + startY + position.y) * position.scale,
123
138
)
124
139
})
···
130
145
131
146
node.outputs.map(( output, i ) => {
132
147
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
-
);
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);
140
163
ctx.stroke();
141
164
})
142
165
})
···
148
171
contextMenu: ContextMenu
149
172
) => {
150
173
if(contextMenu.visible){
151
-
ctx.font = '20px Arial';
174
+
ctx.font = '20px Rubik';
152
175
ctx.textBaseline = 'top';
153
176
ctx.textAlign = 'left';
154
177
···
192
215
let startX = canvas.width / -2;
193
216
let startY = canvas.height / -2;
194
217
195
-
ctx.fillStyle = '#f00';
218
+
// DEBUG STUFF
219
+
// ctx.fillStyle = '#f00';
196
220
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
-
);
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
+
// );
202
226
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
-
);
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
+
// );
208
232
209
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
+
210
239
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,
240
+
(nodeX + (drawingFrom.parent.w - 10) + 10 + startX + position.x) * position.scale,
241
+
(nodeY + 50 + (30 * drawingFrom.index) + 10 + startY + position.y) * position.scale,
213
242
(drawingTo[0] + 10 + startX + position.x) * position.scale,
214
243
(drawingTo[1] + 10 + startY + position.y) * position.scale,
215
244
);
···
239
268
) => {
240
269
ctx.fillStyle = '#fff';
241
270
242
-
ctx.font = '20px Arial';
271
+
ctx.font = '20px Rubik';
243
272
ctx.textBaseline = 'middle';
244
273
ctx.textAlign = 'center';
245
274
246
275
let textX = lerp((canvas.width / -2) + 200, canvas.width / 2, 0.5);
247
276
let textY = lerp((canvas.height / -2) + 40, canvas.height / 2, 0.5);
248
277
249
-
ctx.font = '40px Arial';
278
+
ctx.font = '40px Rubik';
250
279
ctx.fillText('Welcome to VRCMacros', textX, textY);
251
280
252
-
ctx.font = '20px Arial';
281
+
ctx.font = '20px Rubik';
253
282
ctx.fillText('Create a new tab to get started!', textX, textY + 40);
254
283
}
255
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
20
this.typeId = node.typeId!;
21
21
this.x = pos[0];
22
22
this.y = pos[1];
23
-
this.w = node.w!;
24
-
this.h = node.h!;
25
23
26
24
this.inputs = node.inputs ? node.inputs.map(( x, indx ) => {
27
25
return {
···
43
41
}
44
42
}) : [];
45
43
44
+
this.w = node.w || 200;
45
+
this.h = 50 + Math.max(this.outputs.length, this.inputs.length) * 30;
46
+
46
47
this.selected = false;
47
48
this.statics = node.statics!,
48
49
this.onStaticsUpdate = node.onStaticsUpdate!;
49
50
}
51
+
52
+
updateSize(){
53
+
this.h = 50 + Math.max(this.outputs.length, this.inputs.length) * 30;
54
+
}
50
55
}
51
56
52
57
export interface NodeIO{
···
74
79
ParameterList = 10
75
80
}
76
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
+
77
102
export let NodeIOResolveAnyTypes = ( nodeio: NodeIO ): NodeType | null => {
78
103
if(nodeio.type > 0 && nodeio.type < 6){
79
104
// It's a base type
···
105
130
return null;
106
131
}
107
132
108
-
export let NodeIOLinkColours = ( nodeio: NodeIO ) => {
133
+
export let NodeIOLinkColours = ( nodeio: NodeIO, output?: NodeIO ) => {
109
134
let cols: any = {
110
135
1: '#ffff9f',
111
136
2: '#cda0cb',
···
115
140
}
116
141
117
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
+
118
156
return type ? cols[type] : '#fff5';
119
157
}
120
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
7
version = "0.1.0"
8
8
dependencies = [
9
9
"anyhow",
10
+
"chrono",
10
11
"crossbeam-channel",
11
12
"dirs",
13
+
"enigo",
12
14
"flate2",
13
15
"serde",
14
16
"serde_json",
15
17
"tauri",
16
18
"tauri-build",
19
+
"tauri-plugin-clipboard-manager",
17
20
"tauri-plugin-dialog",
18
21
"tauri-plugin-opener",
22
+
"tauri-plugin-os",
19
23
"tokio",
20
24
]
21
25
22
26
[[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
27
name = "adler2"
33
28
version = "2.0.1"
34
29
source = "registry+https://github.com/rust-lang/crates.io-index"
···
36
31
37
32
[[package]]
38
33
name = "aho-corasick"
39
-
version = "1.1.3"
34
+
version = "1.1.4"
40
35
source = "registry+https://github.com/rust-lang/crates.io-index"
41
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
36
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
42
37
dependencies = [
43
38
"memchr",
44
39
]
···
59
54
]
60
55
61
56
[[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
57
name = "android_system_properties"
69
58
version = "0.1.5"
70
59
source = "registry+https://github.com/rust-lang/crates.io-index"
···
75
64
76
65
[[package]]
77
66
name = "anyhow"
78
-
version = "1.0.99"
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"
79
74
source = "registry+https://github.com/rust-lang/crates.io-index"
80
-
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
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
+
]
81
91
82
92
[[package]]
83
93
name = "ashpd"
···
126
136
127
137
[[package]]
128
138
name = "async-executor"
129
-
version = "1.13.2"
139
+
version = "1.13.3"
130
140
source = "registry+https://github.com/rust-lang/crates.io-index"
131
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
141
+
checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
132
142
dependencies = [
133
143
"async-task",
134
144
"concurrent-queue",
···
140
150
141
151
[[package]]
142
152
name = "async-io"
143
-
version = "2.5.0"
153
+
version = "2.6.0"
144
154
source = "registry+https://github.com/rust-lang/crates.io-index"
145
-
checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
155
+
checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
146
156
dependencies = [
147
-
"async-lock",
157
+
"autocfg",
148
158
"cfg-if",
149
159
"concurrent-queue",
150
160
"futures-io",
151
161
"futures-lite",
152
162
"parking",
153
163
"polling",
154
-
"rustix",
164
+
"rustix 1.1.2",
155
165
"slab",
156
-
"windows-sys 0.60.2",
166
+
"windows-sys 0.61.2",
157
167
]
158
168
159
169
[[package]]
160
170
name = "async-lock"
161
-
version = "3.4.0"
171
+
version = "3.4.1"
162
172
source = "registry+https://github.com/rust-lang/crates.io-index"
163
-
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
173
+
checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
164
174
dependencies = [
165
175
"event-listener",
166
176
"event-listener-strategy",
···
169
179
170
180
[[package]]
171
181
name = "async-process"
172
-
version = "2.4.0"
182
+
version = "2.5.0"
173
183
source = "registry+https://github.com/rust-lang/crates.io-index"
174
-
checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
184
+
checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
175
185
dependencies = [
176
186
"async-channel",
177
187
"async-io",
···
182
192
"cfg-if",
183
193
"event-listener",
184
194
"futures-lite",
185
-
"rustix",
195
+
"rustix 1.1.2",
186
196
]
187
197
188
198
[[package]]
···
193
203
dependencies = [
194
204
"proc-macro2",
195
205
"quote",
196
-
"syn 2.0.104",
206
+
"syn 2.0.109",
197
207
]
198
208
199
209
[[package]]
200
210
name = "async-signal"
201
-
version = "0.2.12"
211
+
version = "0.2.13"
202
212
source = "registry+https://github.com/rust-lang/crates.io-index"
203
-
checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
213
+
checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
204
214
dependencies = [
205
215
"async-io",
206
216
"async-lock",
···
208
218
"cfg-if",
209
219
"futures-core",
210
220
"futures-io",
211
-
"rustix",
221
+
"rustix 1.1.2",
212
222
"signal-hook-registry",
213
223
"slab",
214
-
"windows-sys 0.60.2",
224
+
"windows-sys 0.61.2",
215
225
]
216
226
217
227
[[package]]
···
222
232
223
233
[[package]]
224
234
name = "async-trait"
225
-
version = "0.1.88"
235
+
version = "0.1.89"
226
236
source = "registry+https://github.com/rust-lang/crates.io-index"
227
-
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
237
+
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
228
238
dependencies = [
229
239
"proc-macro2",
230
240
"quote",
231
-
"syn 2.0.104",
241
+
"syn 2.0.109",
232
242
]
233
243
234
244
[[package]]
···
267
277
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
268
278
269
279
[[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
280
name = "base64"
286
281
version = "0.21.7"
287
282
source = "registry+https://github.com/rust-lang/crates.io-index"
···
301
296
302
297
[[package]]
303
298
name = "bitflags"
304
-
version = "2.9.1"
299
+
version = "2.10.0"
305
300
source = "registry+https://github.com/rust-lang/crates.io-index"
306
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
301
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
307
302
dependencies = [
308
-
"serde",
303
+
"serde_core",
309
304
]
310
305
311
306
[[package]]
···
328
323
329
324
[[package]]
330
325
name = "block2"
331
-
version = "0.6.1"
326
+
version = "0.6.2"
332
327
source = "registry+https://github.com/rust-lang/crates.io-index"
333
-
checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
328
+
checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
334
329
dependencies = [
335
-
"objc2 0.6.1",
330
+
"objc2 0.6.3",
336
331
]
337
332
338
333
[[package]]
···
350
345
351
346
[[package]]
352
347
name = "brotli"
353
-
version = "8.0.1"
348
+
version = "8.0.2"
354
349
source = "registry+https://github.com/rust-lang/crates.io-index"
355
-
checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
350
+
checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
356
351
dependencies = [
357
352
"alloc-no-stdlib",
358
353
"alloc-stdlib",
···
377
372
378
373
[[package]]
379
374
name = "bytemuck"
380
-
version = "1.23.1"
375
+
version = "1.24.0"
381
376
source = "registry+https://github.com/rust-lang/crates.io-index"
382
-
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
377
+
checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
383
378
384
379
[[package]]
385
380
name = "byteorder"
386
381
version = "1.5.0"
387
382
source = "registry+https://github.com/rust-lang/crates.io-index"
388
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"
389
390
390
391
[[package]]
391
392
name = "bytes"
···
402
403
source = "registry+https://github.com/rust-lang/crates.io-index"
403
404
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
404
405
dependencies = [
405
-
"bitflags 2.9.1",
406
+
"bitflags 2.10.0",
406
407
"cairo-sys-rs",
407
408
"glib",
408
409
"libc",
···
423
424
424
425
[[package]]
425
426
name = "camino"
426
-
version = "1.1.10"
427
+
version = "1.2.1"
427
428
source = "registry+https://github.com/rust-lang/crates.io-index"
428
-
checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
429
+
checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609"
429
430
dependencies = [
430
-
"serde",
431
+
"serde_core",
431
432
]
432
433
433
434
[[package]]
···
450
451
"semver",
451
452
"serde",
452
453
"serde_json",
453
-
"thiserror 2.0.12",
454
+
"thiserror 2.0.17",
454
455
]
455
456
456
457
[[package]]
···
460
461
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
461
462
dependencies = [
462
463
"serde",
463
-
"toml 0.9.3",
464
+
"toml 0.9.8",
464
465
]
465
466
466
467
[[package]]
467
468
name = "cc"
468
-
version = "1.2.30"
469
+
version = "1.2.45"
469
470
source = "registry+https://github.com/rust-lang/crates.io-index"
470
-
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
471
+
checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe"
471
472
dependencies = [
473
+
"find-msvc-tools",
472
474
"shlex",
473
475
]
474
476
···
501
503
502
504
[[package]]
503
505
name = "cfg-if"
504
-
version = "1.0.1"
506
+
version = "1.0.4"
505
507
source = "registry+https://github.com/rust-lang/crates.io-index"
506
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
508
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
507
509
508
510
[[package]]
509
511
name = "cfg_aliases"
···
513
515
514
516
[[package]]
515
517
name = "chrono"
516
-
version = "0.4.41"
518
+
version = "0.4.42"
517
519
source = "registry+https://github.com/rust-lang/crates.io-index"
518
-
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
520
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
519
521
dependencies = [
520
-
"android-tzdata",
521
522
"iana-time-zone",
523
+
"js-sys",
522
524
"num-traits",
523
525
"serde",
524
-
"windows-link",
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",
525
537
]
526
538
527
539
[[package]]
···
581
593
source = "registry+https://github.com/rust-lang/crates.io-index"
582
594
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
583
595
dependencies = [
584
-
"bitflags 2.9.1",
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",
585
610
"core-foundation",
586
611
"core-graphics-types",
587
612
"foreign-types",
···
594
619
source = "registry+https://github.com/rust-lang/crates.io-index"
595
620
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
596
621
dependencies = [
597
-
"bitflags 2.9.1",
622
+
"bitflags 2.10.0",
598
623
"core-foundation",
599
624
"libc",
600
625
]
···
633
658
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
634
659
635
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]]
636
667
name = "crypto-common"
637
668
version = "0.1.6"
638
669
source = "registry+https://github.com/rust-lang/crates.io-index"
···
666
697
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
667
698
dependencies = [
668
699
"quote",
669
-
"syn 2.0.104",
700
+
"syn 2.0.109",
670
701
]
671
702
672
703
[[package]]
···
676
707
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
677
708
dependencies = [
678
709
"quote",
679
-
"syn 2.0.104",
710
+
"syn 2.0.109",
680
711
]
681
712
682
713
[[package]]
683
714
name = "darling"
684
-
version = "0.20.11"
715
+
version = "0.21.3"
685
716
source = "registry+https://github.com/rust-lang/crates.io-index"
686
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
717
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
687
718
dependencies = [
688
719
"darling_core",
689
720
"darling_macro",
···
691
722
692
723
[[package]]
693
724
name = "darling_core"
694
-
version = "0.20.11"
725
+
version = "0.21.3"
695
726
source = "registry+https://github.com/rust-lang/crates.io-index"
696
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
727
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
697
728
dependencies = [
698
729
"fnv",
699
730
"ident_case",
700
731
"proc-macro2",
701
732
"quote",
702
733
"strsim",
703
-
"syn 2.0.104",
734
+
"syn 2.0.109",
704
735
]
705
736
706
737
[[package]]
707
738
name = "darling_macro"
708
-
version = "0.20.11"
739
+
version = "0.21.3"
709
740
source = "registry+https://github.com/rust-lang/crates.io-index"
710
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
741
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
711
742
dependencies = [
712
743
"darling_core",
713
744
"quote",
714
-
"syn 2.0.104",
745
+
"syn 2.0.109",
715
746
]
716
747
717
748
[[package]]
718
749
name = "deranged"
719
-
version = "0.4.0"
750
+
version = "0.5.5"
720
751
source = "registry+https://github.com/rust-lang/crates.io-index"
721
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
752
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
722
753
dependencies = [
723
754
"powerfmt",
724
-
"serde",
755
+
"serde_core",
725
756
]
726
757
727
758
[[package]]
···
734
765
"proc-macro2",
735
766
"quote",
736
767
"rustc_version",
737
-
"syn 2.0.104",
768
+
"syn 2.0.109",
738
769
]
739
770
740
771
[[package]]
···
765
796
"libc",
766
797
"option-ext",
767
798
"redox_users",
768
-
"windows-sys 0.60.2",
799
+
"windows-sys 0.61.2",
769
800
]
770
801
771
802
[[package]]
···
780
811
source = "registry+https://github.com/rust-lang/crates.io-index"
781
812
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
782
813
dependencies = [
783
-
"bitflags 2.9.1",
784
-
"block2 0.6.1",
814
+
"bitflags 2.10.0",
815
+
"block2 0.6.2",
785
816
"libc",
786
-
"objc2 0.6.1",
817
+
"objc2 0.6.3",
787
818
]
788
819
789
820
[[package]]
···
794
825
dependencies = [
795
826
"proc-macro2",
796
827
"quote",
797
-
"syn 2.0.104",
828
+
"syn 2.0.109",
798
829
]
799
830
800
831
[[package]]
···
803
834
source = "registry+https://github.com/rust-lang/crates.io-index"
804
835
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
805
836
dependencies = [
806
-
"libloading",
837
+
"libloading 0.8.9",
807
838
]
808
839
809
840
[[package]]
810
841
name = "dlopen2"
811
-
version = "0.7.0"
842
+
version = "0.8.0"
812
843
source = "registry+https://github.com/rust-lang/crates.io-index"
813
-
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
844
+
checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff"
814
845
dependencies = [
815
846
"dlopen2_derive",
816
847
"libc",
···
826
857
dependencies = [
827
858
"proc-macro2",
828
859
"quote",
829
-
"syn 2.0.104",
860
+
"syn 2.0.109",
830
861
]
831
862
832
863
[[package]]
···
873
904
874
905
[[package]]
875
906
name = "embed-resource"
876
-
version = "3.0.5"
907
+
version = "3.0.6"
877
908
source = "registry+https://github.com/rust-lang/crates.io-index"
878
-
checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38"
909
+
checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e"
879
910
dependencies = [
880
911
"cc",
881
912
"memchr",
882
913
"rustc_version",
883
-
"toml 0.9.3",
914
+
"toml 0.9.8",
884
915
"vswhom",
885
916
"winreg",
886
917
]
···
898
929
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
899
930
900
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]]
901
953
name = "enumflags2"
902
954
version = "0.7.12"
903
955
source = "registry+https://github.com/rust-lang/crates.io-index"
···
915
967
dependencies = [
916
968
"proc-macro2",
917
969
"quote",
918
-
"syn 2.0.104",
970
+
"syn 2.0.109",
919
971
]
920
972
921
973
[[package]]
···
926
978
927
979
[[package]]
928
980
name = "erased-serde"
929
-
version = "0.4.6"
981
+
version = "0.4.9"
930
982
source = "registry+https://github.com/rust-lang/crates.io-index"
931
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
983
+
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
932
984
dependencies = [
933
985
"serde",
986
+
"serde_core",
934
987
"typeid",
935
988
]
936
989
937
990
[[package]]
938
991
name = "errno"
939
-
version = "0.3.13"
992
+
version = "0.3.14"
940
993
source = "registry+https://github.com/rust-lang/crates.io-index"
941
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
994
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
942
995
dependencies = [
943
996
"libc",
944
-
"windows-sys 0.60.2",
997
+
"windows-sys 0.61.2",
945
998
]
946
999
947
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]]
948
1007
name = "event-listener"
949
-
version = "5.4.0"
1008
+
version = "5.4.1"
950
1009
source = "registry+https://github.com/rust-lang/crates.io-index"
951
-
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
1010
+
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
952
1011
dependencies = [
953
1012
"concurrent-queue",
954
1013
"parking",
···
972
1031
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
973
1032
974
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]]
975
1054
name = "fdeflate"
976
1055
version = "0.3.7"
977
1056
source = "registry+https://github.com/rust-lang/crates.io-index"
···
991
1070
]
992
1071
993
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]]
994
1085
name = "flate2"
995
-
version = "1.1.2"
1086
+
version = "1.1.5"
996
1087
source = "registry+https://github.com/rust-lang/crates.io-index"
997
-
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
1088
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
998
1089
dependencies = [
999
1090
"crc32fast",
1000
1091
"miniz_oxide",
···
1007
1098
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1008
1099
1009
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]]
1010
1107
name = "foreign-types"
1011
1108
version = "0.5.0"
1012
1109
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1024
1121
dependencies = [
1025
1122
"proc-macro2",
1026
1123
"quote",
1027
-
"syn 2.0.104",
1124
+
"syn 2.0.109",
1028
1125
]
1029
1126
1030
1127
[[package]]
···
1035
1132
1036
1133
[[package]]
1037
1134
name = "form_urlencoded"
1038
-
version = "1.2.1"
1135
+
version = "1.2.2"
1039
1136
source = "registry+https://github.com/rust-lang/crates.io-index"
1040
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
1137
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1041
1138
dependencies = [
1042
1139
"percent-encoding",
1043
1140
]
···
1086
1183
1087
1184
[[package]]
1088
1185
name = "futures-lite"
1089
-
version = "2.6.0"
1186
+
version = "2.6.1"
1090
1187
source = "registry+https://github.com/rust-lang/crates.io-index"
1091
-
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
1188
+
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1092
1189
dependencies = [
1093
1190
"fastrand",
1094
1191
"futures-core",
···
1105
1202
dependencies = [
1106
1203
"proc-macro2",
1107
1204
"quote",
1108
-
"syn 2.0.104",
1205
+
"syn 2.0.109",
1109
1206
]
1110
1207
1111
1208
[[package]]
···
1247
1344
1248
1345
[[package]]
1249
1346
name = "generic-array"
1250
-
version = "0.14.7"
1347
+
version = "0.14.9"
1251
1348
source = "registry+https://github.com/rust-lang/crates.io-index"
1252
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1349
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
1253
1350
dependencies = [
1254
1351
"typenum",
1255
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",
1256
1363
]
1257
1364
1258
1365
[[package]]
···
1279
1386
1280
1387
[[package]]
1281
1388
name = "getrandom"
1282
-
version = "0.3.3"
1389
+
version = "0.3.4"
1283
1390
source = "registry+https://github.com/rust-lang/crates.io-index"
1284
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1391
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1285
1392
dependencies = [
1286
1393
"cfg-if",
1287
1394
"libc",
1288
1395
"r-efi",
1289
-
"wasi 0.14.2+wasi-0.2.4",
1396
+
"wasip2",
1290
1397
]
1291
1398
1292
1399
[[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
1400
name = "gio"
1300
1401
version = "0.18.4"
1301
1402
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1333
1434
source = "registry+https://github.com/rust-lang/crates.io-index"
1334
1435
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1335
1436
dependencies = [
1336
-
"bitflags 2.9.1",
1437
+
"bitflags 2.10.0",
1337
1438
"futures-channel",
1338
1439
"futures-core",
1339
1440
"futures-executor",
···
1357
1458
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1358
1459
dependencies = [
1359
1460
"heck 0.4.1",
1360
-
"proc-macro-crate 2.0.0",
1461
+
"proc-macro-crate 2.0.2",
1361
1462
"proc-macro-error",
1362
1463
"proc-macro2",
1363
1464
"quote",
1364
-
"syn 2.0.104",
1465
+
"syn 2.0.109",
1365
1466
]
1366
1467
1367
1468
[[package]]
···
1376
1477
1377
1478
[[package]]
1378
1479
name = "glob"
1379
-
version = "0.3.2"
1480
+
version = "0.3.3"
1380
1481
source = "registry+https://github.com/rust-lang/crates.io-index"
1381
-
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
1482
+
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
1382
1483
1383
1484
[[package]]
1384
1485
name = "gobject-sys"
···
1440
1541
"proc-macro-error",
1441
1542
"proc-macro2",
1442
1543
"quote",
1443
-
"syn 2.0.104",
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",
1444
1556
]
1445
1557
1446
1558
[[package]]
···
1451
1563
1452
1564
[[package]]
1453
1565
name = "hashbrown"
1454
-
version = "0.15.4"
1566
+
version = "0.15.5"
1455
1567
source = "registry+https://github.com/rust-lang/crates.io-index"
1456
-
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
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"
1457
1578
1458
1579
[[package]]
1459
1580
name = "heck"
···
1533
1654
1534
1655
[[package]]
1535
1656
name = "hyper"
1536
-
version = "1.6.0"
1657
+
version = "1.7.0"
1537
1658
source = "registry+https://github.com/rust-lang/crates.io-index"
1538
-
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1659
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
1539
1660
dependencies = [
1661
+
"atomic-waker",
1540
1662
"bytes",
1541
1663
"futures-channel",
1542
-
"futures-util",
1664
+
"futures-core",
1543
1665
"http",
1544
1666
"http-body",
1545
1667
"httparse",
1546
1668
"itoa",
1547
1669
"pin-project-lite",
1670
+
"pin-utils",
1548
1671
"smallvec",
1549
1672
"tokio",
1550
1673
"want",
···
1552
1675
1553
1676
[[package]]
1554
1677
name = "hyper-util"
1555
-
version = "0.1.16"
1678
+
version = "0.1.17"
1556
1679
source = "registry+https://github.com/rust-lang/crates.io-index"
1557
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1680
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
1558
1681
dependencies = [
1559
1682
"base64 0.22.1",
1560
1683
"bytes",
···
1576
1699
1577
1700
[[package]]
1578
1701
name = "iana-time-zone"
1579
-
version = "0.1.63"
1702
+
version = "0.1.64"
1580
1703
source = "registry+https://github.com/rust-lang/crates.io-index"
1581
-
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1704
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1582
1705
dependencies = [
1583
1706
"android_system_properties",
1584
1707
"core-foundation-sys",
···
1586
1709
"js-sys",
1587
1710
"log",
1588
1711
"wasm-bindgen",
1589
-
"windows-core",
1712
+
"windows-core 0.62.2",
1590
1713
]
1591
1714
1592
1715
[[package]]
···
1605
1728
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1606
1729
dependencies = [
1607
1730
"byteorder",
1608
-
"png",
1731
+
"png 0.17.16",
1609
1732
]
1610
1733
1611
1734
[[package]]
1612
1735
name = "icu_collections"
1613
-
version = "2.0.0"
1736
+
version = "2.1.1"
1614
1737
source = "registry+https://github.com/rust-lang/crates.io-index"
1615
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1738
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
1616
1739
dependencies = [
1617
1740
"displaydoc",
1618
1741
"potential_utf",
···
1623
1746
1624
1747
[[package]]
1625
1748
name = "icu_locale_core"
1626
-
version = "2.0.0"
1749
+
version = "2.1.1"
1627
1750
source = "registry+https://github.com/rust-lang/crates.io-index"
1628
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1751
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
1629
1752
dependencies = [
1630
1753
"displaydoc",
1631
1754
"litemap",
···
1636
1759
1637
1760
[[package]]
1638
1761
name = "icu_normalizer"
1639
-
version = "2.0.0"
1762
+
version = "2.1.1"
1640
1763
source = "registry+https://github.com/rust-lang/crates.io-index"
1641
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1764
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
1642
1765
dependencies = [
1643
-
"displaydoc",
1644
1766
"icu_collections",
1645
1767
"icu_normalizer_data",
1646
1768
"icu_properties",
···
1651
1773
1652
1774
[[package]]
1653
1775
name = "icu_normalizer_data"
1654
-
version = "2.0.0"
1776
+
version = "2.1.1"
1655
1777
source = "registry+https://github.com/rust-lang/crates.io-index"
1656
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1778
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
1657
1779
1658
1780
[[package]]
1659
1781
name = "icu_properties"
1660
-
version = "2.0.1"
1782
+
version = "2.1.1"
1661
1783
source = "registry+https://github.com/rust-lang/crates.io-index"
1662
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1784
+
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
1663
1785
dependencies = [
1664
-
"displaydoc",
1665
1786
"icu_collections",
1666
1787
"icu_locale_core",
1667
1788
"icu_properties_data",
1668
1789
"icu_provider",
1669
-
"potential_utf",
1670
1790
"zerotrie",
1671
1791
"zerovec",
1672
1792
]
1673
1793
1674
1794
[[package]]
1675
1795
name = "icu_properties_data"
1676
-
version = "2.0.1"
1796
+
version = "2.1.1"
1677
1797
source = "registry+https://github.com/rust-lang/crates.io-index"
1678
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1798
+
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
1679
1799
1680
1800
[[package]]
1681
1801
name = "icu_provider"
1682
-
version = "2.0.0"
1802
+
version = "2.1.1"
1683
1803
source = "registry+https://github.com/rust-lang/crates.io-index"
1684
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1804
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
1685
1805
dependencies = [
1686
1806
"displaydoc",
1687
1807
"icu_locale_core",
1688
-
"stable_deref_trait",
1689
-
"tinystr",
1690
1808
"writeable",
1691
1809
"yoke",
1692
1810
"zerofrom",
···
1702
1820
1703
1821
[[package]]
1704
1822
name = "idna"
1705
-
version = "1.0.3"
1823
+
version = "1.1.0"
1706
1824
source = "registry+https://github.com/rust-lang/crates.io-index"
1707
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
1825
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1708
1826
dependencies = [
1709
1827
"idna_adapter",
1710
1828
"smallvec",
···
1722
1840
]
1723
1841
1724
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]]
1725
1857
name = "indexmap"
1726
1858
version = "1.9.3"
1727
1859
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1734
1866
1735
1867
[[package]]
1736
1868
name = "indexmap"
1737
-
version = "2.10.0"
1869
+
version = "2.12.0"
1738
1870
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
-
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
1871
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
1740
1872
dependencies = [
1741
1873
"equivalent",
1742
-
"hashbrown 0.15.4",
1874
+
"hashbrown 0.16.0",
1743
1875
"serde",
1876
+
"serde_core",
1744
1877
]
1745
1878
1746
1879
[[package]]
···
1753
1886
]
1754
1887
1755
1888
[[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
1889
name = "ipnet"
1768
1890
version = "2.11.0"
1769
1891
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1771
1893
1772
1894
[[package]]
1773
1895
name = "iri-string"
1774
-
version = "0.7.8"
1896
+
version = "0.7.9"
1775
1897
source = "registry+https://github.com/rust-lang/crates.io-index"
1776
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1898
+
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
1777
1899
dependencies = [
1778
1900
"memchr",
1779
1901
"serde",
···
1851
1973
1852
1974
[[package]]
1853
1975
name = "js-sys"
1854
-
version = "0.3.77"
1976
+
version = "0.3.82"
1855
1977
source = "registry+https://github.com/rust-lang/crates.io-index"
1856
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1978
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
1857
1979
dependencies = [
1858
1980
"once_cell",
1859
1981
"wasm-bindgen",
···
1887
2009
source = "registry+https://github.com/rust-lang/crates.io-index"
1888
2010
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
1889
2011
dependencies = [
1890
-
"bitflags 2.9.1",
2012
+
"bitflags 2.10.0",
1891
2013
"serde",
1892
2014
"unicode-segmentation",
1893
2015
]
···
1900
2022
dependencies = [
1901
2023
"cssparser",
1902
2024
"html5ever",
1903
-
"indexmap 2.10.0",
2025
+
"indexmap 2.12.0",
1904
2026
"selectors",
1905
2027
]
1906
2028
···
1930
2052
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
1931
2053
dependencies = [
1932
2054
"gtk-sys",
1933
-
"libloading",
2055
+
"libloading 0.7.4",
1934
2056
"once_cell",
1935
2057
]
1936
2058
1937
2059
[[package]]
1938
2060
name = "libc"
1939
-
version = "0.2.174"
2061
+
version = "0.2.177"
1940
2062
source = "registry+https://github.com/rust-lang/crates.io-index"
1941
-
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
2063
+
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
1942
2064
1943
2065
[[package]]
1944
2066
name = "libloading"
···
1951
2073
]
1952
2074
1953
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]]
1954
2086
name = "libredox"
1955
-
version = "0.1.8"
2087
+
version = "0.1.10"
1956
2088
source = "registry+https://github.com/rust-lang/crates.io-index"
1957
-
checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7"
2089
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1958
2090
dependencies = [
1959
-
"bitflags 2.9.1",
2091
+
"bitflags 2.10.0",
1960
2092
"libc",
1961
2093
]
1962
2094
1963
2095
[[package]]
1964
2096
name = "linux-raw-sys"
1965
-
version = "0.9.4"
2097
+
version = "0.4.15"
1966
2098
source = "registry+https://github.com/rust-lang/crates.io-index"
1967
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
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"
1968
2106
1969
2107
[[package]]
1970
2108
name = "litemap"
1971
-
version = "0.8.0"
2109
+
version = "0.8.1"
1972
2110
source = "registry+https://github.com/rust-lang/crates.io-index"
1973
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
2111
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
1974
2112
1975
2113
[[package]]
1976
2114
name = "lock_api"
1977
-
version = "0.4.13"
2115
+
version = "0.4.14"
1978
2116
source = "registry+https://github.com/rust-lang/crates.io-index"
1979
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
2117
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1980
2118
dependencies = [
1981
-
"autocfg",
1982
2119
"scopeguard",
1983
2120
]
1984
2121
1985
2122
[[package]]
1986
2123
name = "log"
1987
-
version = "0.4.27"
2124
+
version = "0.4.28"
1988
2125
source = "registry+https://github.com/rust-lang/crates.io-index"
1989
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
2126
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1990
2127
1991
2128
[[package]]
1992
2129
name = "mac"
···
2016
2153
dependencies = [
2017
2154
"proc-macro2",
2018
2155
"quote",
2019
-
"syn 2.0.104",
2156
+
"syn 2.0.109",
2020
2157
]
2021
2158
2022
2159
[[package]]
···
2027
2164
2028
2165
[[package]]
2029
2166
name = "memchr"
2030
-
version = "2.7.5"
2167
+
version = "2.7.6"
2031
2168
source = "registry+https://github.com/rust-lang/crates.io-index"
2032
-
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
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
+
]
2033
2179
2034
2180
[[package]]
2035
2181
name = "memoffset"
···
2047
2193
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2048
2194
2049
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]]
2050
2202
name = "miniz_oxide"
2051
2203
version = "0.8.9"
2052
2204
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2058
2210
2059
2211
[[package]]
2060
2212
name = "mio"
2061
-
version = "1.0.4"
2213
+
version = "1.1.0"
2062
2214
source = "registry+https://github.com/rust-lang/crates.io-index"
2063
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2215
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
2064
2216
dependencies = [
2065
2217
"libc",
2066
2218
"wasi 0.11.1+wasi-snapshot-preview1",
2067
-
"windows-sys 0.59.0",
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",
2068
2230
]
2069
2231
2070
2232
[[package]]
2071
2233
name = "muda"
2072
-
version = "0.17.0"
2234
+
version = "0.17.1"
2073
2235
source = "registry+https://github.com/rust-lang/crates.io-index"
2074
-
checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988"
2236
+
checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a"
2075
2237
dependencies = [
2076
2238
"crossbeam-channel",
2077
2239
"dpi",
2078
2240
"gtk",
2079
2241
"keyboard-types",
2080
-
"objc2 0.6.1",
2242
+
"objc2 0.6.3",
2081
2243
"objc2-app-kit",
2082
2244
"objc2-core-foundation",
2083
-
"objc2-foundation 0.3.1",
2245
+
"objc2-foundation 0.3.2",
2084
2246
"once_cell",
2085
-
"png",
2247
+
"png 0.17.16",
2086
2248
"serde",
2087
-
"thiserror 2.0.12",
2088
-
"windows-sys 0.59.0",
2249
+
"thiserror 2.0.17",
2250
+
"windows-sys 0.60.2",
2089
2251
]
2090
2252
2091
2253
[[package]]
···
2094
2256
source = "registry+https://github.com/rust-lang/crates.io-index"
2095
2257
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2096
2258
dependencies = [
2097
-
"bitflags 2.9.1",
2259
+
"bitflags 2.10.0",
2098
2260
"jni-sys",
2099
2261
"log",
2100
2262
"ndk-sys",
···
2130
2292
source = "registry+https://github.com/rust-lang/crates.io-index"
2131
2293
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2132
2294
dependencies = [
2133
-
"bitflags 2.9.1",
2295
+
"bitflags 2.10.0",
2134
2296
"cfg-if",
2135
2297
"cfg_aliases",
2136
2298
"libc",
···
2144
2306
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2145
2307
2146
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]]
2147
2328
name = "num-conv"
2148
2329
version = "0.1.0"
2149
2330
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2160
2341
2161
2342
[[package]]
2162
2343
name = "num_enum"
2163
-
version = "0.7.4"
2344
+
version = "0.7.5"
2164
2345
source = "registry+https://github.com/rust-lang/crates.io-index"
2165
-
checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2346
+
checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
2166
2347
dependencies = [
2167
2348
"num_enum_derive",
2168
2349
"rustversion",
···
2170
2351
2171
2352
[[package]]
2172
2353
name = "num_enum_derive"
2173
-
version = "0.7.4"
2354
+
version = "0.7.5"
2174
2355
source = "registry+https://github.com/rust-lang/crates.io-index"
2175
-
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2356
+
checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
2176
2357
dependencies = [
2177
-
"proc-macro-crate 3.3.0",
2358
+
"proc-macro-crate 3.4.0",
2178
2359
"proc-macro2",
2179
2360
"quote",
2180
-
"syn 2.0.104",
2361
+
"syn 2.0.109",
2181
2362
]
2182
2363
2183
2364
[[package]]
···
2198
2379
2199
2380
[[package]]
2200
2381
name = "objc2"
2201
-
version = "0.6.1"
2382
+
version = "0.6.3"
2202
2383
source = "registry+https://github.com/rust-lang/crates.io-index"
2203
-
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
2384
+
checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
2204
2385
dependencies = [
2205
2386
"objc2-encode",
2206
2387
"objc2-exception-helper",
···
2208
2389
2209
2390
[[package]]
2210
2391
name = "objc2-app-kit"
2211
-
version = "0.3.1"
2392
+
version = "0.3.2"
2212
2393
source = "registry+https://github.com/rust-lang/crates.io-index"
2213
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2394
+
checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
2214
2395
dependencies = [
2215
-
"bitflags 2.9.1",
2216
-
"block2 0.6.1",
2396
+
"bitflags 2.10.0",
2397
+
"block2 0.6.2",
2217
2398
"libc",
2218
-
"objc2 0.6.1",
2399
+
"objc2 0.6.3",
2219
2400
"objc2-cloud-kit",
2220
2401
"objc2-core-data",
2221
2402
"objc2-core-foundation",
2222
2403
"objc2-core-graphics",
2223
2404
"objc2-core-image",
2224
-
"objc2-foundation 0.3.1",
2225
-
"objc2-quartz-core 0.3.1",
2405
+
"objc2-core-text",
2406
+
"objc2-core-video",
2407
+
"objc2-foundation 0.3.2",
2408
+
"objc2-quartz-core 0.3.2",
2226
2409
]
2227
2410
2228
2411
[[package]]
2229
2412
name = "objc2-cloud-kit"
2230
-
version = "0.3.1"
2413
+
version = "0.3.2"
2231
2414
source = "registry+https://github.com/rust-lang/crates.io-index"
2232
-
checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d"
2415
+
checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
2233
2416
dependencies = [
2234
-
"bitflags 2.9.1",
2235
-
"objc2 0.6.1",
2236
-
"objc2-foundation 0.3.1",
2417
+
"bitflags 2.10.0",
2418
+
"objc2 0.6.3",
2419
+
"objc2-foundation 0.3.2",
2237
2420
]
2238
2421
2239
2422
[[package]]
2240
2423
name = "objc2-core-data"
2241
-
version = "0.3.1"
2424
+
version = "0.3.2"
2242
2425
source = "registry+https://github.com/rust-lang/crates.io-index"
2243
-
checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d"
2426
+
checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
2244
2427
dependencies = [
2245
-
"bitflags 2.9.1",
2246
-
"objc2 0.6.1",
2247
-
"objc2-foundation 0.3.1",
2428
+
"bitflags 2.10.0",
2429
+
"objc2 0.6.3",
2430
+
"objc2-foundation 0.3.2",
2248
2431
]
2249
2432
2250
2433
[[package]]
2251
2434
name = "objc2-core-foundation"
2252
-
version = "0.3.1"
2435
+
version = "0.3.2"
2253
2436
source = "registry+https://github.com/rust-lang/crates.io-index"
2254
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2437
+
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
2255
2438
dependencies = [
2256
-
"bitflags 2.9.1",
2439
+
"bitflags 2.10.0",
2257
2440
"dispatch2",
2258
-
"objc2 0.6.1",
2441
+
"objc2 0.6.3",
2259
2442
]
2260
2443
2261
2444
[[package]]
2262
2445
name = "objc2-core-graphics"
2263
-
version = "0.3.1"
2446
+
version = "0.3.2"
2264
2447
source = "registry+https://github.com/rust-lang/crates.io-index"
2265
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2448
+
checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
2266
2449
dependencies = [
2267
-
"bitflags 2.9.1",
2450
+
"bitflags 2.10.0",
2268
2451
"dispatch2",
2269
-
"objc2 0.6.1",
2452
+
"objc2 0.6.3",
2270
2453
"objc2-core-foundation",
2271
2454
"objc2-io-surface",
2272
2455
]
2273
2456
2274
2457
[[package]]
2275
2458
name = "objc2-core-image"
2276
-
version = "0.3.1"
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"
2277
2492
source = "registry+https://github.com/rust-lang/crates.io-index"
2278
-
checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e"
2493
+
checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
2279
2494
dependencies = [
2280
-
"objc2 0.6.1",
2281
-
"objc2-foundation 0.3.1",
2495
+
"bitflags 2.10.0",
2496
+
"objc2 0.6.3",
2497
+
"objc2-core-foundation",
2498
+
"objc2-core-graphics",
2499
+
"objc2-io-surface",
2282
2500
]
2283
2501
2284
2502
[[package]]
···
2302
2520
source = "registry+https://github.com/rust-lang/crates.io-index"
2303
2521
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2304
2522
dependencies = [
2305
-
"bitflags 2.9.1",
2523
+
"bitflags 2.10.0",
2306
2524
"block2 0.5.1",
2307
2525
"libc",
2308
2526
"objc2 0.5.2",
···
2310
2528
2311
2529
[[package]]
2312
2530
name = "objc2-foundation"
2313
-
version = "0.3.1"
2531
+
version = "0.3.2"
2314
2532
source = "registry+https://github.com/rust-lang/crates.io-index"
2315
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
2533
+
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2316
2534
dependencies = [
2317
-
"bitflags 2.9.1",
2318
-
"block2 0.6.1",
2535
+
"bitflags 2.10.0",
2536
+
"block2 0.6.2",
2319
2537
"libc",
2320
-
"objc2 0.6.1",
2538
+
"objc2 0.6.3",
2321
2539
"objc2-core-foundation",
2322
2540
]
2323
2541
2324
2542
[[package]]
2325
2543
name = "objc2-io-surface"
2326
-
version = "0.3.1"
2544
+
version = "0.3.2"
2327
2545
source = "registry+https://github.com/rust-lang/crates.io-index"
2328
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
2546
+
checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2329
2547
dependencies = [
2330
-
"bitflags 2.9.1",
2331
-
"objc2 0.6.1",
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",
2332
2560
"objc2-core-foundation",
2333
2561
]
2334
2562
···
2338
2566
source = "registry+https://github.com/rust-lang/crates.io-index"
2339
2567
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2340
2568
dependencies = [
2341
-
"bitflags 2.9.1",
2569
+
"bitflags 2.10.0",
2342
2570
"block2 0.5.1",
2343
2571
"objc2 0.5.2",
2344
2572
"objc2-foundation 0.2.2",
···
2350
2578
source = "registry+https://github.com/rust-lang/crates.io-index"
2351
2579
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2352
2580
dependencies = [
2353
-
"bitflags 2.9.1",
2581
+
"bitflags 2.10.0",
2354
2582
"block2 0.5.1",
2355
2583
"objc2 0.5.2",
2356
2584
"objc2-foundation 0.2.2",
···
2359
2587
2360
2588
[[package]]
2361
2589
name = "objc2-quartz-core"
2362
-
version = "0.3.1"
2590
+
version = "0.3.2"
2363
2591
source = "registry+https://github.com/rust-lang/crates.io-index"
2364
-
checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5"
2592
+
checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
2365
2593
dependencies = [
2366
-
"bitflags 2.9.1",
2367
-
"objc2 0.6.1",
2368
-
"objc2-foundation 0.3.1",
2594
+
"bitflags 2.10.0",
2595
+
"objc2 0.6.3",
2596
+
"objc2-core-foundation",
2597
+
"objc2-foundation 0.3.2",
2369
2598
]
2370
2599
2371
2600
[[package]]
2372
-
name = "objc2-ui-kit"
2373
-
version = "0.3.1"
2601
+
name = "objc2-security"
2602
+
version = "0.3.2"
2374
2603
source = "registry+https://github.com/rust-lang/crates.io-index"
2375
-
checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed"
2604
+
checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a"
2376
2605
dependencies = [
2377
-
"bitflags 2.9.1",
2378
-
"objc2 0.6.1",
2606
+
"bitflags 2.10.0",
2607
+
"objc2 0.6.3",
2379
2608
"objc2-core-foundation",
2380
-
"objc2-foundation 0.3.1",
2381
2609
]
2382
2610
2383
2611
[[package]]
2384
-
name = "objc2-web-kit"
2385
-
version = "0.3.1"
2612
+
name = "objc2-ui-kit"
2613
+
version = "0.3.2"
2386
2614
source = "registry+https://github.com/rust-lang/crates.io-index"
2387
-
checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad"
2615
+
checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
2388
2616
dependencies = [
2389
-
"bitflags 2.9.1",
2390
-
"block2 0.6.1",
2391
-
"objc2 0.6.1",
2392
-
"objc2-app-kit",
2617
+
"bitflags 2.10.0",
2618
+
"block2 0.6.2",
2619
+
"objc2 0.6.3",
2620
+
"objc2-cloud-kit",
2621
+
"objc2-core-data",
2393
2622
"objc2-core-foundation",
2394
-
"objc2-foundation 0.3.1",
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",
2395
2630
]
2396
2631
2397
2632
[[package]]
2398
-
name = "object"
2399
-
version = "0.36.7"
2633
+
name = "objc2-user-notifications"
2634
+
version = "0.3.2"
2400
2635
source = "registry+https://github.com/rust-lang/crates.io-index"
2401
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
2636
+
checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e"
2402
2637
dependencies = [
2403
-
"memchr",
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",
2404
2656
]
2405
2657
2406
2658
[[package]]
···
2438
2690
]
2439
2691
2440
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]]
2441
2719
name = "pango"
2442
2720
version = "0.18.3"
2443
2721
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2470
2748
2471
2749
[[package]]
2472
2750
name = "parking_lot"
2473
-
version = "0.12.4"
2751
+
version = "0.12.5"
2474
2752
source = "registry+https://github.com/rust-lang/crates.io-index"
2475
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
2753
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
2476
2754
dependencies = [
2477
2755
"lock_api",
2478
2756
"parking_lot_core",
···
2480
2758
2481
2759
[[package]]
2482
2760
name = "parking_lot_core"
2483
-
version = "0.9.11"
2761
+
version = "0.9.12"
2484
2762
source = "registry+https://github.com/rust-lang/crates.io-index"
2485
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2763
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
2486
2764
dependencies = [
2487
2765
"cfg-if",
2488
2766
"libc",
2489
2767
"redox_syscall",
2490
2768
"smallvec",
2491
-
"windows-targets 0.52.6",
2769
+
"windows-link 0.2.1",
2492
2770
]
2493
2771
2494
2772
[[package]]
···
2499
2777
2500
2778
[[package]]
2501
2779
name = "percent-encoding"
2502
-
version = "2.3.1"
2780
+
version = "2.3.2"
2503
2781
source = "registry+https://github.com/rust-lang/crates.io-index"
2504
-
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
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
+
]
2505
2794
2506
2795
[[package]]
2507
2796
name = "phf"
···
2607
2896
"phf_shared 0.11.3",
2608
2897
"proc-macro2",
2609
2898
"quote",
2610
-
"syn 2.0.104",
2899
+
"syn 2.0.109",
2611
2900
]
2612
2901
2613
2902
[[package]]
···
2668
2957
2669
2958
[[package]]
2670
2959
name = "plist"
2671
-
version = "1.7.4"
2960
+
version = "1.8.0"
2672
2961
source = "registry+https://github.com/rust-lang/crates.io-index"
2673
-
checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1"
2962
+
checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
2674
2963
dependencies = [
2675
2964
"base64 0.22.1",
2676
-
"indexmap 2.10.0",
2677
-
"quick-xml 0.38.0",
2965
+
"indexmap 2.12.0",
2966
+
"quick-xml 0.38.3",
2678
2967
"serde",
2679
2968
"time",
2680
2969
]
···
2693
2982
]
2694
2983
2695
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]]
2696
2998
name = "polling"
2697
-
version = "3.9.0"
2999
+
version = "3.11.0"
2698
3000
source = "registry+https://github.com/rust-lang/crates.io-index"
2699
-
checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7"
3001
+
checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
2700
3002
dependencies = [
2701
3003
"cfg-if",
2702
3004
"concurrent-queue",
2703
3005
"hermit-abi",
2704
3006
"pin-project-lite",
2705
-
"rustix",
2706
-
"windows-sys 0.60.2",
3007
+
"rustix 1.1.2",
3008
+
"windows-sys 0.61.2",
2707
3009
]
2708
3010
2709
3011
[[package]]
2710
3012
name = "potential_utf"
2711
-
version = "0.1.2"
3013
+
version = "0.1.4"
2712
3014
source = "registry+https://github.com/rust-lang/crates.io-index"
2713
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
3015
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
2714
3016
dependencies = [
2715
3017
"zerovec",
2716
3018
]
···
2748
3050
2749
3051
[[package]]
2750
3052
name = "proc-macro-crate"
2751
-
version = "2.0.0"
3053
+
version = "2.0.2"
2752
3054
source = "registry+https://github.com/rust-lang/crates.io-index"
2753
-
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
3055
+
checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
2754
3056
dependencies = [
2755
-
"toml_edit 0.20.7",
3057
+
"toml_datetime 0.6.3",
3058
+
"toml_edit 0.20.2",
2756
3059
]
2757
3060
2758
3061
[[package]]
2759
3062
name = "proc-macro-crate"
2760
-
version = "3.3.0"
3063
+
version = "3.4.0"
2761
3064
source = "registry+https://github.com/rust-lang/crates.io-index"
2762
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
3065
+
checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
2763
3066
dependencies = [
2764
-
"toml_edit 0.22.27",
3067
+
"toml_edit 0.23.7",
2765
3068
]
2766
3069
2767
3070
[[package]]
···
2796
3099
2797
3100
[[package]]
2798
3101
name = "proc-macro2"
2799
-
version = "1.0.95"
3102
+
version = "1.0.103"
2800
3103
source = "registry+https://github.com/rust-lang/crates.io-index"
2801
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
3104
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
2802
3105
dependencies = [
2803
3106
"unicode-ident",
2804
3107
]
2805
3108
2806
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]]
2807
3125
name = "quick-xml"
2808
3126
version = "0.37.5"
2809
3127
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2814
3132
2815
3133
[[package]]
2816
3134
name = "quick-xml"
2817
-
version = "0.38.0"
3135
+
version = "0.38.3"
2818
3136
source = "registry+https://github.com/rust-lang/crates.io-index"
2819
-
checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b"
3137
+
checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89"
2820
3138
dependencies = [
2821
3139
"memchr",
2822
3140
]
2823
3141
2824
3142
[[package]]
2825
3143
name = "quote"
2826
-
version = "1.0.40"
3144
+
version = "1.0.42"
2827
3145
source = "registry+https://github.com/rust-lang/crates.io-index"
2828
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
3146
+
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
2829
3147
dependencies = [
2830
3148
"proc-macro2",
2831
3149
]
···
2925
3243
source = "registry+https://github.com/rust-lang/crates.io-index"
2926
3244
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
2927
3245
dependencies = [
2928
-
"getrandom 0.3.3",
3246
+
"getrandom 0.3.4",
2929
3247
]
2930
3248
2931
3249
[[package]]
···
2954
3272
2955
3273
[[package]]
2956
3274
name = "redox_syscall"
2957
-
version = "0.5.17"
3275
+
version = "0.5.18"
2958
3276
source = "registry+https://github.com/rust-lang/crates.io-index"
2959
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
3277
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2960
3278
dependencies = [
2961
-
"bitflags 2.9.1",
3279
+
"bitflags 2.10.0",
2962
3280
]
2963
3281
2964
3282
[[package]]
2965
3283
name = "redox_users"
2966
-
version = "0.5.0"
3284
+
version = "0.5.2"
2967
3285
source = "registry+https://github.com/rust-lang/crates.io-index"
2968
-
checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
3286
+
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
2969
3287
dependencies = [
2970
3288
"getrandom 0.2.16",
2971
3289
"libredox",
2972
-
"thiserror 2.0.12",
3290
+
"thiserror 2.0.17",
2973
3291
]
2974
3292
2975
3293
[[package]]
2976
3294
name = "ref-cast"
2977
-
version = "1.0.24"
3295
+
version = "1.0.25"
2978
3296
source = "registry+https://github.com/rust-lang/crates.io-index"
2979
-
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
3297
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
2980
3298
dependencies = [
2981
3299
"ref-cast-impl",
2982
3300
]
2983
3301
2984
3302
[[package]]
2985
3303
name = "ref-cast-impl"
2986
-
version = "1.0.24"
3304
+
version = "1.0.25"
2987
3305
source = "registry+https://github.com/rust-lang/crates.io-index"
2988
-
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
3306
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
2989
3307
dependencies = [
2990
3308
"proc-macro2",
2991
3309
"quote",
2992
-
"syn 2.0.104",
3310
+
"syn 2.0.109",
2993
3311
]
2994
3312
2995
3313
[[package]]
2996
3314
name = "regex"
2997
-
version = "1.11.1"
3315
+
version = "1.12.2"
2998
3316
source = "registry+https://github.com/rust-lang/crates.io-index"
2999
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
3317
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
3000
3318
dependencies = [
3001
3319
"aho-corasick",
3002
3320
"memchr",
···
3006
3324
3007
3325
[[package]]
3008
3326
name = "regex-automata"
3009
-
version = "0.4.9"
3327
+
version = "0.4.13"
3010
3328
source = "registry+https://github.com/rust-lang/crates.io-index"
3011
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
3329
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
3012
3330
dependencies = [
3013
3331
"aho-corasick",
3014
3332
"memchr",
···
3017
3335
3018
3336
[[package]]
3019
3337
name = "regex-syntax"
3020
-
version = "0.8.5"
3338
+
version = "0.8.8"
3021
3339
source = "registry+https://github.com/rust-lang/crates.io-index"
3022
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
3340
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
3023
3341
3024
3342
[[package]]
3025
3343
name = "reqwest"
3026
-
version = "0.12.22"
3344
+
version = "0.12.24"
3027
3345
source = "registry+https://github.com/rust-lang/crates.io-index"
3028
-
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
3346
+
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
3029
3347
dependencies = [
3030
3348
"base64 0.22.1",
3031
3349
"bytes",
···
3063
3381
checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed"
3064
3382
dependencies = [
3065
3383
"ashpd",
3066
-
"block2 0.6.1",
3384
+
"block2 0.6.2",
3067
3385
"dispatch2",
3068
3386
"glib-sys",
3069
3387
"gobject-sys",
3070
3388
"gtk-sys",
3071
3389
"js-sys",
3072
3390
"log",
3073
-
"objc2 0.6.1",
3391
+
"objc2 0.6.3",
3074
3392
"objc2-app-kit",
3075
3393
"objc2-core-foundation",
3076
-
"objc2-foundation 0.3.1",
3394
+
"objc2-foundation 0.3.2",
3077
3395
"raw-window-handle",
3078
3396
"wasm-bindgen",
3079
3397
"wasm-bindgen-futures",
3080
3398
"web-sys",
3081
3399
"windows-sys 0.59.0",
3082
3400
]
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
3401
3090
3402
[[package]]
3091
3403
name = "rustc_version"
···
3098
3410
3099
3411
[[package]]
3100
3412
name = "rustix"
3101
-
version = "1.0.8"
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"
3102
3427
source = "registry+https://github.com/rust-lang/crates.io-index"
3103
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
3428
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3104
3429
dependencies = [
3105
-
"bitflags 2.9.1",
3430
+
"bitflags 2.10.0",
3106
3431
"errno",
3107
3432
"libc",
3108
-
"linux-raw-sys",
3109
-
"windows-sys 0.60.2",
3433
+
"linux-raw-sys 0.11.0",
3434
+
"windows-sys 0.61.2",
3110
3435
]
3111
3436
3112
3437
[[package]]
3113
3438
name = "rustversion"
3114
-
version = "1.0.21"
3439
+
version = "1.0.22"
3115
3440
source = "registry+https://github.com/rust-lang/crates.io-index"
3116
-
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
3441
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3117
3442
3118
3443
[[package]]
3119
3444
name = "ryu"
···
3159
3484
3160
3485
[[package]]
3161
3486
name = "schemars"
3162
-
version = "1.0.4"
3487
+
version = "1.1.0"
3163
3488
source = "registry+https://github.com/rust-lang/crates.io-index"
3164
-
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
3489
+
checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
3165
3490
dependencies = [
3166
3491
"dyn-clone",
3167
3492
"ref-cast",
···
3178
3503
"proc-macro2",
3179
3504
"quote",
3180
3505
"serde_derive_internals",
3181
-
"syn 2.0.104",
3506
+
"syn 2.0.109",
3182
3507
]
3183
3508
3184
3509
[[package]]
···
3213
3538
3214
3539
[[package]]
3215
3540
name = "semver"
3216
-
version = "1.0.26"
3541
+
version = "1.0.27"
3217
3542
source = "registry+https://github.com/rust-lang/crates.io-index"
3218
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
3543
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
3219
3544
dependencies = [
3220
3545
"serde",
3546
+
"serde_core",
3221
3547
]
3222
3548
3223
3549
[[package]]
3224
3550
name = "serde"
3225
-
version = "1.0.219"
3551
+
version = "1.0.228"
3226
3552
source = "registry+https://github.com/rust-lang/crates.io-index"
3227
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
3553
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
3228
3554
dependencies = [
3555
+
"serde_core",
3229
3556
"serde_derive",
3230
3557
]
3231
3558
3232
3559
[[package]]
3233
3560
name = "serde-untagged"
3234
-
version = "0.1.7"
3561
+
version = "0.1.9"
3235
3562
source = "registry+https://github.com/rust-lang/crates.io-index"
3236
-
checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
3563
+
checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
3237
3564
dependencies = [
3238
3565
"erased-serde",
3239
3566
"serde",
3567
+
"serde_core",
3240
3568
"typeid",
3241
3569
]
3242
3570
3243
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]]
3244
3581
name = "serde_derive"
3245
-
version = "1.0.219"
3582
+
version = "1.0.228"
3246
3583
source = "registry+https://github.com/rust-lang/crates.io-index"
3247
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
3584
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
3248
3585
dependencies = [
3249
3586
"proc-macro2",
3250
3587
"quote",
3251
-
"syn 2.0.104",
3588
+
"syn 2.0.109",
3252
3589
]
3253
3590
3254
3591
[[package]]
···
3259
3596
dependencies = [
3260
3597
"proc-macro2",
3261
3598
"quote",
3262
-
"syn 2.0.104",
3599
+
"syn 2.0.109",
3263
3600
]
3264
3601
3265
3602
[[package]]
3266
3603
name = "serde_json"
3267
-
version = "1.0.141"
3604
+
version = "1.0.145"
3268
3605
source = "registry+https://github.com/rust-lang/crates.io-index"
3269
-
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
3606
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3270
3607
dependencies = [
3271
3608
"itoa",
3272
3609
"memchr",
3273
3610
"ryu",
3274
3611
"serde",
3612
+
"serde_core",
3275
3613
]
3276
3614
3277
3615
[[package]]
···
3282
3620
dependencies = [
3283
3621
"proc-macro2",
3284
3622
"quote",
3285
-
"syn 2.0.104",
3623
+
"syn 2.0.109",
3286
3624
]
3287
3625
3288
3626
[[package]]
···
3296
3634
3297
3635
[[package]]
3298
3636
name = "serde_spanned"
3299
-
version = "1.0.0"
3637
+
version = "1.0.3"
3300
3638
source = "registry+https://github.com/rust-lang/crates.io-index"
3301
-
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
3639
+
checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
3302
3640
dependencies = [
3303
-
"serde",
3641
+
"serde_core",
3304
3642
]
3305
3643
3306
3644
[[package]]
···
3317
3655
3318
3656
[[package]]
3319
3657
name = "serde_with"
3320
-
version = "3.14.0"
3658
+
version = "3.15.1"
3321
3659
source = "registry+https://github.com/rust-lang/crates.io-index"
3322
-
checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
3660
+
checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04"
3323
3661
dependencies = [
3324
3662
"base64 0.22.1",
3325
3663
"chrono",
3326
3664
"hex",
3327
3665
"indexmap 1.9.3",
3328
-
"indexmap 2.10.0",
3666
+
"indexmap 2.12.0",
3329
3667
"schemars 0.9.0",
3330
-
"schemars 1.0.4",
3331
-
"serde",
3332
-
"serde_derive",
3668
+
"schemars 1.1.0",
3669
+
"serde_core",
3333
3670
"serde_json",
3334
3671
"serde_with_macros",
3335
3672
"time",
···
3337
3674
3338
3675
[[package]]
3339
3676
name = "serde_with_macros"
3340
-
version = "3.14.0"
3677
+
version = "3.15.1"
3341
3678
source = "registry+https://github.com/rust-lang/crates.io-index"
3342
-
checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
3679
+
checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955"
3343
3680
dependencies = [
3344
3681
"darling",
3345
3682
"proc-macro2",
3346
3683
"quote",
3347
-
"syn 2.0.104",
3684
+
"syn 2.0.109",
3348
3685
]
3349
3686
3350
3687
[[package]]
3351
3688
name = "serialize-to-javascript"
3352
-
version = "0.1.1"
3689
+
version = "0.1.2"
3353
3690
source = "registry+https://github.com/rust-lang/crates.io-index"
3354
-
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
3691
+
checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
3355
3692
dependencies = [
3356
3693
"serde",
3357
3694
"serde_json",
···
3360
3697
3361
3698
[[package]]
3362
3699
name = "serialize-to-javascript-impl"
3363
-
version = "0.1.1"
3700
+
version = "0.1.2"
3364
3701
source = "registry+https://github.com/rust-lang/crates.io-index"
3365
-
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
3702
+
checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
3366
3703
dependencies = [
3367
3704
"proc-macro2",
3368
3705
"quote",
3369
-
"syn 1.0.109",
3706
+
"syn 2.0.109",
3370
3707
]
3371
3708
3372
3709
[[package]]
···
3398
3735
3399
3736
[[package]]
3400
3737
name = "signal-hook-registry"
3401
-
version = "1.4.5"
3738
+
version = "1.4.6"
3402
3739
source = "registry+https://github.com/rust-lang/crates.io-index"
3403
-
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
3740
+
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
3404
3741
dependencies = [
3405
3742
"libc",
3406
3743
]
···
3425
3762
3426
3763
[[package]]
3427
3764
name = "slab"
3428
-
version = "0.4.10"
3765
+
version = "0.4.11"
3429
3766
source = "registry+https://github.com/rust-lang/crates.io-index"
3430
-
checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
3767
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
3431
3768
3432
3769
[[package]]
3433
3770
name = "smallvec"
···
3437
3774
3438
3775
[[package]]
3439
3776
name = "socket2"
3440
-
version = "0.6.0"
3777
+
version = "0.6.1"
3441
3778
source = "registry+https://github.com/rust-lang/crates.io-index"
3442
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
3779
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
3443
3780
dependencies = [
3444
3781
"libc",
3445
-
"windows-sys 0.59.0",
3782
+
"windows-sys 0.60.2",
3446
3783
]
3447
3784
3448
3785
[[package]]
···
3453
3790
dependencies = [
3454
3791
"bytemuck",
3455
3792
"cfg_aliases",
3456
-
"core-graphics",
3793
+
"core-graphics 0.24.0",
3457
3794
"foreign-types",
3458
3795
"js-sys",
3459
3796
"log",
···
3495
3832
3496
3833
[[package]]
3497
3834
name = "stable_deref_trait"
3498
-
version = "1.2.0"
3835
+
version = "1.2.1"
3499
3836
source = "registry+https://github.com/rust-lang/crates.io-index"
3500
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
3837
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
3501
3838
3502
3839
[[package]]
3503
3840
name = "static_assertions"
···
3560
3897
3561
3898
[[package]]
3562
3899
name = "syn"
3563
-
version = "2.0.104"
3900
+
version = "2.0.109"
3564
3901
source = "registry+https://github.com/rust-lang/crates.io-index"
3565
-
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
3902
+
checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f"
3566
3903
dependencies = [
3567
3904
"proc-macro2",
3568
3905
"quote",
···
3586
3923
dependencies = [
3587
3924
"proc-macro2",
3588
3925
"quote",
3589
-
"syn 2.0.104",
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",
3590
3936
]
3591
3937
3592
3938
[[package]]
···
3598
3944
"cfg-expr",
3599
3945
"heck 0.5.0",
3600
3946
"pkg-config",
3601
-
"toml 0.8.23",
3947
+
"toml 0.8.2",
3602
3948
"version-compare",
3603
3949
]
3604
3950
3605
3951
[[package]]
3606
3952
name = "tao"
3607
-
version = "0.34.0"
3953
+
version = "0.34.5"
3608
3954
source = "registry+https://github.com/rust-lang/crates.io-index"
3609
-
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
3955
+
checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7"
3610
3956
dependencies = [
3611
-
"bitflags 2.9.1",
3957
+
"bitflags 2.10.0",
3958
+
"block2 0.6.2",
3612
3959
"core-foundation",
3613
-
"core-graphics",
3960
+
"core-graphics 0.24.0",
3614
3961
"crossbeam-channel",
3615
3962
"dispatch",
3616
3963
"dlopen2",
···
3625
3972
"ndk",
3626
3973
"ndk-context",
3627
3974
"ndk-sys",
3628
-
"objc2 0.6.1",
3975
+
"objc2 0.6.3",
3629
3976
"objc2-app-kit",
3630
-
"objc2-foundation 0.3.1",
3977
+
"objc2-foundation 0.3.2",
3631
3978
"once_cell",
3632
3979
"parking_lot",
3633
3980
"raw-window-handle",
···
3636
3983
"unicode-segmentation",
3637
3984
"url",
3638
3985
"windows",
3639
-
"windows-core",
3986
+
"windows-core 0.61.2",
3640
3987
"windows-version",
3641
3988
"x11-dl",
3642
3989
]
···
3649
3996
dependencies = [
3650
3997
"proc-macro2",
3651
3998
"quote",
3652
-
"syn 2.0.104",
3999
+
"syn 2.0.109",
3653
4000
]
3654
4001
3655
4002
[[package]]
···
3660
4007
3661
4008
[[package]]
3662
4009
name = "tauri"
3663
-
version = "2.7.0"
4010
+
version = "2.9.2"
3664
4011
source = "registry+https://github.com/rust-lang/crates.io-index"
3665
-
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
4012
+
checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5"
3666
4013
dependencies = [
3667
4014
"anyhow",
3668
4015
"bytes",
4016
+
"cookie",
3669
4017
"dirs",
3670
4018
"dunce",
3671
4019
"embed_plist",
3672
-
"getrandom 0.3.3",
4020
+
"getrandom 0.3.4",
3673
4021
"glob",
3674
4022
"gtk",
3675
4023
"heck 0.5.0",
3676
4024
"http",
4025
+
"image",
3677
4026
"jni",
3678
4027
"libc",
3679
4028
"log",
3680
4029
"mime",
3681
4030
"muda",
3682
-
"objc2 0.6.1",
4031
+
"objc2 0.6.3",
3683
4032
"objc2-app-kit",
3684
-
"objc2-foundation 0.3.1",
4033
+
"objc2-foundation 0.3.2",
3685
4034
"objc2-ui-kit",
4035
+
"objc2-web-kit",
3686
4036
"percent-encoding",
3687
4037
"plist",
3688
4038
"raw-window-handle",
···
3697
4047
"tauri-runtime",
3698
4048
"tauri-runtime-wry",
3699
4049
"tauri-utils",
3700
-
"thiserror 2.0.12",
4050
+
"thiserror 2.0.17",
3701
4051
"tokio",
3702
4052
"tray-icon",
3703
4053
"url",
3704
-
"urlpattern",
3705
4054
"webkit2gtk",
3706
4055
"webview2-com",
3707
4056
"window-vibrancy",
···
3710
4059
3711
4060
[[package]]
3712
4061
name = "tauri-build"
3713
-
version = "2.3.1"
4062
+
version = "2.5.1"
3714
4063
source = "registry+https://github.com/rust-lang/crates.io-index"
3715
-
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
4064
+
checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38"
3716
4065
dependencies = [
3717
4066
"anyhow",
3718
4067
"cargo_toml",
···
3726
4075
"serde_json",
3727
4076
"tauri-utils",
3728
4077
"tauri-winres",
3729
-
"toml 0.8.23",
4078
+
"toml 0.9.8",
3730
4079
"walkdir",
3731
4080
]
3732
4081
3733
4082
[[package]]
3734
4083
name = "tauri-codegen"
3735
-
version = "2.3.1"
4084
+
version = "2.5.0"
3736
4085
source = "registry+https://github.com/rust-lang/crates.io-index"
3737
-
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
4086
+
checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190"
3738
4087
dependencies = [
3739
4088
"base64 0.22.1",
3740
4089
"brotli",
3741
4090
"ico",
3742
4091
"json-patch",
3743
4092
"plist",
3744
-
"png",
4093
+
"png 0.17.16",
3745
4094
"proc-macro2",
3746
4095
"quote",
3747
4096
"semver",
3748
4097
"serde",
3749
4098
"serde_json",
3750
4099
"sha2",
3751
-
"syn 2.0.104",
4100
+
"syn 2.0.109",
3752
4101
"tauri-utils",
3753
-
"thiserror 2.0.12",
4102
+
"thiserror 2.0.17",
3754
4103
"time",
3755
4104
"url",
3756
4105
"uuid",
···
3759
4108
3760
4109
[[package]]
3761
4110
name = "tauri-macros"
3762
-
version = "2.3.2"
4111
+
version = "2.5.0"
3763
4112
source = "registry+https://github.com/rust-lang/crates.io-index"
3764
-
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
4113
+
checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f"
3765
4114
dependencies = [
3766
4115
"heck 0.5.0",
3767
4116
"proc-macro2",
3768
4117
"quote",
3769
-
"syn 2.0.104",
4118
+
"syn 2.0.109",
3770
4119
"tauri-codegen",
3771
4120
"tauri-utils",
3772
4121
]
3773
4122
3774
4123
[[package]]
3775
4124
name = "tauri-plugin"
3776
-
version = "2.3.1"
4125
+
version = "2.5.1"
3777
4126
source = "registry+https://github.com/rust-lang/crates.io-index"
3778
-
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
4127
+
checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d"
3779
4128
dependencies = [
3780
4129
"anyhow",
3781
4130
"glob",
···
3784
4133
"serde",
3785
4134
"serde_json",
3786
4135
"tauri-utils",
3787
-
"toml 0.8.23",
4136
+
"toml 0.9.8",
3788
4137
"walkdir",
3789
4138
]
3790
4139
3791
4140
[[package]]
3792
-
name = "tauri-plugin-dialog"
4141
+
name = "tauri-plugin-clipboard-manager"
3793
4142
version = "2.3.2"
3794
4143
source = "registry+https://github.com/rust-lang/crates.io-index"
3795
-
checksum = "37e5858cc7b455a73ab4ea2ebc08b5be33682c00ff1bf4cad5537d4fb62499d9"
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"
3796
4160
dependencies = [
3797
4161
"log",
3798
4162
"raw-window-handle",
···
3802
4166
"tauri",
3803
4167
"tauri-plugin",
3804
4168
"tauri-plugin-fs",
3805
-
"thiserror 2.0.12",
4169
+
"thiserror 2.0.17",
3806
4170
"url",
3807
4171
]
3808
4172
3809
4173
[[package]]
3810
4174
name = "tauri-plugin-fs"
3811
-
version = "2.4.1"
4175
+
version = "2.4.4"
3812
4176
source = "registry+https://github.com/rust-lang/crates.io-index"
3813
-
checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99"
4177
+
checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9"
3814
4178
dependencies = [
3815
4179
"anyhow",
3816
4180
"dunce",
···
3823
4187
"tauri",
3824
4188
"tauri-plugin",
3825
4189
"tauri-utils",
3826
-
"thiserror 2.0.12",
3827
-
"toml 0.8.23",
4190
+
"thiserror 2.0.17",
4191
+
"toml 0.9.8",
3828
4192
"url",
3829
4193
]
3830
4194
3831
4195
[[package]]
3832
4196
name = "tauri-plugin-opener"
3833
-
version = "2.4.0"
4197
+
version = "2.5.2"
3834
4198
source = "registry+https://github.com/rust-lang/crates.io-index"
3835
-
checksum = "ecee219f11cdac713ab32959db5d0cceec4810ba4f4458da992292ecf9660321"
4199
+
checksum = "c26b72571d25dee25667940027114e60f569fc3974f8cefbe50c2cbc5fd65e3b"
3836
4200
dependencies = [
3837
4201
"dunce",
3838
4202
"glob",
3839
4203
"objc2-app-kit",
3840
-
"objc2-foundation 0.3.1",
4204
+
"objc2-foundation 0.3.2",
3841
4205
"open",
3842
4206
"schemars 0.8.22",
3843
4207
"serde",
3844
4208
"serde_json",
3845
4209
"tauri",
3846
4210
"tauri-plugin",
3847
-
"thiserror 2.0.12",
4211
+
"thiserror 2.0.17",
3848
4212
"url",
3849
4213
"windows",
3850
4214
"zbus",
3851
4215
]
3852
4216
3853
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]]
3854
4236
name = "tauri-runtime"
3855
-
version = "2.7.1"
4237
+
version = "2.9.1"
3856
4238
source = "registry+https://github.com/rust-lang/crates.io-index"
3857
-
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
4239
+
checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926"
3858
4240
dependencies = [
3859
4241
"cookie",
3860
4242
"dpi",
3861
4243
"gtk",
3862
4244
"http",
3863
4245
"jni",
3864
-
"objc2 0.6.1",
4246
+
"objc2 0.6.3",
3865
4247
"objc2-ui-kit",
4248
+
"objc2-web-kit",
3866
4249
"raw-window-handle",
3867
4250
"serde",
3868
4251
"serde_json",
3869
4252
"tauri-utils",
3870
-
"thiserror 2.0.12",
4253
+
"thiserror 2.0.17",
3871
4254
"url",
4255
+
"webkit2gtk",
4256
+
"webview2-com",
3872
4257
"windows",
3873
4258
]
3874
4259
3875
4260
[[package]]
3876
4261
name = "tauri-runtime-wry"
3877
-
version = "2.7.2"
4262
+
version = "2.9.1"
3878
4263
source = "registry+https://github.com/rust-lang/crates.io-index"
3879
-
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
4264
+
checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93"
3880
4265
dependencies = [
3881
4266
"gtk",
3882
4267
"http",
3883
4268
"jni",
3884
4269
"log",
3885
-
"objc2 0.6.1",
4270
+
"objc2 0.6.3",
3886
4271
"objc2-app-kit",
3887
-
"objc2-foundation 0.3.1",
4272
+
"objc2-foundation 0.3.2",
3888
4273
"once_cell",
3889
4274
"percent-encoding",
3890
4275
"raw-window-handle",
···
3901
4286
3902
4287
[[package]]
3903
4288
name = "tauri-utils"
3904
-
version = "2.6.0"
4289
+
version = "2.8.0"
3905
4290
source = "registry+https://github.com/rust-lang/crates.io-index"
3906
-
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
4291
+
checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673"
3907
4292
dependencies = [
3908
4293
"anyhow",
3909
4294
"brotli",
···
3929
4314
"serde_json",
3930
4315
"serde_with",
3931
4316
"swift-rs",
3932
-
"thiserror 2.0.12",
3933
-
"toml 0.8.23",
4317
+
"thiserror 2.0.17",
4318
+
"toml 0.9.8",
3934
4319
"url",
3935
4320
"urlpattern",
3936
4321
"uuid",
···
3939
4324
3940
4325
[[package]]
3941
4326
name = "tauri-winres"
3942
-
version = "0.3.1"
4327
+
version = "0.3.3"
3943
4328
source = "registry+https://github.com/rust-lang/crates.io-index"
3944
-
checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4"
4329
+
checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074"
3945
4330
dependencies = [
3946
4331
"embed-resource",
3947
-
"indexmap 2.10.0",
3948
-
"toml 0.8.23",
4332
+
"toml 0.9.8",
3949
4333
]
3950
4334
3951
4335
[[package]]
3952
4336
name = "tempfile"
3953
-
version = "3.20.0"
4337
+
version = "3.23.0"
3954
4338
source = "registry+https://github.com/rust-lang/crates.io-index"
3955
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
4339
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
3956
4340
dependencies = [
3957
4341
"fastrand",
3958
-
"getrandom 0.3.3",
4342
+
"getrandom 0.3.4",
3959
4343
"once_cell",
3960
-
"rustix",
3961
-
"windows-sys 0.59.0",
4344
+
"rustix 1.1.2",
4345
+
"windows-sys 0.61.2",
3962
4346
]
3963
4347
3964
4348
[[package]]
···
3983
4367
3984
4368
[[package]]
3985
4369
name = "thiserror"
3986
-
version = "2.0.12"
4370
+
version = "2.0.17"
3987
4371
source = "registry+https://github.com/rust-lang/crates.io-index"
3988
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
4372
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
3989
4373
dependencies = [
3990
-
"thiserror-impl 2.0.12",
4374
+
"thiserror-impl 2.0.17",
3991
4375
]
3992
4376
3993
4377
[[package]]
···
3998
4382
dependencies = [
3999
4383
"proc-macro2",
4000
4384
"quote",
4001
-
"syn 2.0.104",
4385
+
"syn 2.0.109",
4002
4386
]
4003
4387
4004
4388
[[package]]
4005
4389
name = "thiserror-impl"
4006
-
version = "2.0.12"
4390
+
version = "2.0.17"
4007
4391
source = "registry+https://github.com/rust-lang/crates.io-index"
4008
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4392
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
4009
4393
dependencies = [
4010
4394
"proc-macro2",
4011
4395
"quote",
4012
-
"syn 2.0.104",
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",
4013
4411
]
4014
4412
4015
4413
[[package]]
4016
4414
name = "time"
4017
-
version = "0.3.41"
4415
+
version = "0.3.44"
4018
4416
source = "registry+https://github.com/rust-lang/crates.io-index"
4019
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
4417
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
4020
4418
dependencies = [
4021
4419
"deranged",
4022
4420
"itoa",
···
4029
4427
4030
4428
[[package]]
4031
4429
name = "time-core"
4032
-
version = "0.1.4"
4430
+
version = "0.1.6"
4033
4431
source = "registry+https://github.com/rust-lang/crates.io-index"
4034
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
4432
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
4035
4433
4036
4434
[[package]]
4037
4435
name = "time-macros"
4038
-
version = "0.2.22"
4436
+
version = "0.2.24"
4039
4437
source = "registry+https://github.com/rust-lang/crates.io-index"
4040
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
4438
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
4041
4439
dependencies = [
4042
4440
"num-conv",
4043
4441
"time-core",
···
4045
4443
4046
4444
[[package]]
4047
4445
name = "tinystr"
4048
-
version = "0.8.1"
4446
+
version = "0.8.2"
4049
4447
source = "registry+https://github.com/rust-lang/crates.io-index"
4050
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
4448
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
4051
4449
dependencies = [
4052
4450
"displaydoc",
4053
4451
"zerovec",
···
4055
4453
4056
4454
[[package]]
4057
4455
name = "tokio"
4058
-
version = "1.47.0"
4456
+
version = "1.48.0"
4059
4457
source = "registry+https://github.com/rust-lang/crates.io-index"
4060
-
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
4458
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
4061
4459
dependencies = [
4062
-
"backtrace",
4063
4460
"bytes",
4064
-
"io-uring",
4065
4461
"libc",
4066
4462
"mio",
4067
4463
"pin-project-lite",
4068
4464
"signal-hook-registry",
4069
-
"slab",
4070
4465
"socket2",
4071
4466
"tokio-macros",
4072
4467
"tracing",
4073
-
"windows-sys 0.59.0",
4468
+
"windows-sys 0.61.2",
4074
4469
]
4075
4470
4076
4471
[[package]]
4077
4472
name = "tokio-macros"
4078
-
version = "2.5.0"
4473
+
version = "2.6.0"
4079
4474
source = "registry+https://github.com/rust-lang/crates.io-index"
4080
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
4475
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
4081
4476
dependencies = [
4082
4477
"proc-macro2",
4083
4478
"quote",
4084
-
"syn 2.0.104",
4479
+
"syn 2.0.109",
4085
4480
]
4086
4481
4087
4482
[[package]]
4088
4483
name = "tokio-util"
4089
-
version = "0.7.15"
4484
+
version = "0.7.17"
4090
4485
source = "registry+https://github.com/rust-lang/crates.io-index"
4091
-
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
4486
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
4092
4487
dependencies = [
4093
4488
"bytes",
4094
4489
"futures-core",
···
4099
4494
4100
4495
[[package]]
4101
4496
name = "toml"
4102
-
version = "0.8.23"
4497
+
version = "0.8.2"
4103
4498
source = "registry+https://github.com/rust-lang/crates.io-index"
4104
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
4499
+
checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
4105
4500
dependencies = [
4106
4501
"serde",
4107
4502
"serde_spanned 0.6.9",
4108
-
"toml_datetime 0.6.11",
4109
-
"toml_edit 0.22.27",
4503
+
"toml_datetime 0.6.3",
4504
+
"toml_edit 0.20.2",
4110
4505
]
4111
4506
4112
4507
[[package]]
4113
4508
name = "toml"
4114
-
version = "0.9.3"
4509
+
version = "0.9.8"
4115
4510
source = "registry+https://github.com/rust-lang/crates.io-index"
4116
-
checksum = "e06723639aaded957e5a80be250c1f82f274b9d23ebb4d94163668470623461c"
4511
+
checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
4117
4512
dependencies = [
4118
-
"indexmap 2.10.0",
4119
-
"serde",
4120
-
"serde_spanned 1.0.0",
4121
-
"toml_datetime 0.7.0",
4513
+
"indexmap 2.12.0",
4514
+
"serde_core",
4515
+
"serde_spanned 1.0.3",
4516
+
"toml_datetime 0.7.3",
4122
4517
"toml_parser",
4123
4518
"toml_writer",
4124
-
"winnow 0.7.12",
4519
+
"winnow 0.7.13",
4125
4520
]
4126
4521
4127
4522
[[package]]
4128
4523
name = "toml_datetime"
4129
-
version = "0.6.11"
4524
+
version = "0.6.3"
4130
4525
source = "registry+https://github.com/rust-lang/crates.io-index"
4131
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
4526
+
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
4132
4527
dependencies = [
4133
4528
"serde",
4134
4529
]
4135
4530
4136
4531
[[package]]
4137
4532
name = "toml_datetime"
4138
-
version = "0.7.0"
4533
+
version = "0.7.3"
4139
4534
source = "registry+https://github.com/rust-lang/crates.io-index"
4140
-
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
4535
+
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
4141
4536
dependencies = [
4142
-
"serde",
4537
+
"serde_core",
4143
4538
]
4144
4539
4145
4540
[[package]]
···
4148
4543
source = "registry+https://github.com/rust-lang/crates.io-index"
4149
4544
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4150
4545
dependencies = [
4151
-
"indexmap 2.10.0",
4152
-
"toml_datetime 0.6.11",
4546
+
"indexmap 2.12.0",
4547
+
"toml_datetime 0.6.3",
4153
4548
"winnow 0.5.40",
4154
4549
]
4155
4550
4156
4551
[[package]]
4157
4552
name = "toml_edit"
4158
-
version = "0.20.7"
4553
+
version = "0.20.2"
4159
4554
source = "registry+https://github.com/rust-lang/crates.io-index"
4160
-
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
4555
+
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
4161
4556
dependencies = [
4162
-
"indexmap 2.10.0",
4163
-
"toml_datetime 0.6.11",
4557
+
"indexmap 2.12.0",
4558
+
"serde",
4559
+
"serde_spanned 0.6.9",
4560
+
"toml_datetime 0.6.3",
4164
4561
"winnow 0.5.40",
4165
4562
]
4166
4563
4167
4564
[[package]]
4168
4565
name = "toml_edit"
4169
-
version = "0.22.27"
4566
+
version = "0.23.7"
4170
4567
source = "registry+https://github.com/rust-lang/crates.io-index"
4171
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
4568
+
checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d"
4172
4569
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",
4570
+
"indexmap 2.12.0",
4571
+
"toml_datetime 0.7.3",
4572
+
"toml_parser",
4573
+
"winnow 0.7.13",
4179
4574
]
4180
4575
4181
4576
[[package]]
4182
4577
name = "toml_parser"
4183
-
version = "1.0.1"
4578
+
version = "1.0.4"
4184
4579
source = "registry+https://github.com/rust-lang/crates.io-index"
4185
-
checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30"
4580
+
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
4186
4581
dependencies = [
4187
-
"winnow 0.7.12",
4582
+
"winnow 0.7.13",
4188
4583
]
4189
4584
4190
4585
[[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
4586
name = "toml_writer"
4198
-
version = "1.0.2"
4587
+
version = "1.0.4"
4199
4588
source = "registry+https://github.com/rust-lang/crates.io-index"
4200
-
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
4589
+
checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
4201
4590
4202
4591
[[package]]
4203
4592
name = "tower"
···
4220
4609
source = "registry+https://github.com/rust-lang/crates.io-index"
4221
4610
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4222
4611
dependencies = [
4223
-
"bitflags 2.9.1",
4612
+
"bitflags 2.10.0",
4224
4613
"bytes",
4225
4614
"futures-util",
4226
4615
"http",
···
4263
4652
dependencies = [
4264
4653
"proc-macro2",
4265
4654
"quote",
4266
-
"syn 2.0.104",
4655
+
"syn 2.0.109",
4267
4656
]
4268
4657
4269
4658
[[package]]
···
4277
4666
4278
4667
[[package]]
4279
4668
name = "tray-icon"
4280
-
version = "0.21.0"
4669
+
version = "0.21.2"
4281
4670
source = "registry+https://github.com/rust-lang/crates.io-index"
4282
-
checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a"
4671
+
checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b"
4283
4672
dependencies = [
4284
4673
"crossbeam-channel",
4285
4674
"dirs",
4286
4675
"libappindicator",
4287
4676
"muda",
4288
-
"objc2 0.6.1",
4677
+
"objc2 0.6.3",
4289
4678
"objc2-app-kit",
4290
4679
"objc2-core-foundation",
4291
4680
"objc2-core-graphics",
4292
-
"objc2-foundation 0.3.1",
4681
+
"objc2-foundation 0.3.2",
4293
4682
"once_cell",
4294
-
"png",
4683
+
"png 0.17.16",
4295
4684
"serde",
4296
-
"thiserror 2.0.12",
4297
-
"windows-sys 0.59.0",
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",
4298
4698
]
4299
4699
4300
4700
[[package]]
···
4311
4711
4312
4712
[[package]]
4313
4713
name = "typenum"
4314
-
version = "1.18.0"
4714
+
version = "1.19.0"
4315
4715
source = "registry+https://github.com/rust-lang/crates.io-index"
4316
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
4716
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
4317
4717
4318
4718
[[package]]
4319
4719
name = "uds_windows"
···
4369
4769
4370
4770
[[package]]
4371
4771
name = "unicode-ident"
4372
-
version = "1.0.18"
4772
+
version = "1.0.22"
4373
4773
source = "registry+https://github.com/rust-lang/crates.io-index"
4374
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
4774
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
4375
4775
4376
4776
[[package]]
4377
4777
name = "unicode-segmentation"
···
4381
4781
4382
4782
[[package]]
4383
4783
name = "url"
4384
-
version = "2.5.4"
4784
+
version = "2.5.7"
4385
4785
source = "registry+https://github.com/rust-lang/crates.io-index"
4386
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
4786
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
4387
4787
dependencies = [
4388
4788
"form_urlencoded",
4389
4789
"idna",
···
4417
4817
4418
4818
[[package]]
4419
4819
name = "uuid"
4420
-
version = "1.17.0"
4820
+
version = "1.18.1"
4421
4821
source = "registry+https://github.com/rust-lang/crates.io-index"
4422
-
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
4822
+
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
4423
4823
dependencies = [
4424
-
"getrandom 0.3.3",
4824
+
"getrandom 0.3.4",
4425
4825
"js-sys",
4426
4826
"serde",
4427
4827
"wasm-bindgen",
···
4429
4829
4430
4830
[[package]]
4431
4831
name = "version-compare"
4432
-
version = "0.2.0"
4832
+
version = "0.2.1"
4433
4833
source = "registry+https://github.com/rust-lang/crates.io-index"
4434
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
4834
+
checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
4435
4835
4436
4836
[[package]]
4437
4837
name = "version_check"
···
4491
4891
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4492
4892
4493
4893
[[package]]
4494
-
name = "wasi"
4495
-
version = "0.14.2+wasi-0.2.4"
4894
+
name = "wasip2"
4895
+
version = "1.0.1+wasi-0.2.4"
4496
4896
source = "registry+https://github.com/rust-lang/crates.io-index"
4497
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
4897
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
4498
4898
dependencies = [
4499
-
"wit-bindgen-rt",
4899
+
"wit-bindgen",
4500
4900
]
4501
4901
4502
4902
[[package]]
4503
4903
name = "wasm-bindgen"
4504
-
version = "0.2.100"
4904
+
version = "0.2.105"
4505
4905
source = "registry+https://github.com/rust-lang/crates.io-index"
4506
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
4906
+
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
4507
4907
dependencies = [
4508
4908
"cfg-if",
4509
4909
"once_cell",
4510
4910
"rustversion",
4511
4911
"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
4912
"wasm-bindgen-shared",
4526
4913
]
4527
4914
4528
4915
[[package]]
4529
4916
name = "wasm-bindgen-futures"
4530
-
version = "0.4.50"
4917
+
version = "0.4.55"
4531
4918
source = "registry+https://github.com/rust-lang/crates.io-index"
4532
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
4919
+
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
4533
4920
dependencies = [
4534
4921
"cfg-if",
4535
4922
"js-sys",
···
4540
4927
4541
4928
[[package]]
4542
4929
name = "wasm-bindgen-macro"
4543
-
version = "0.2.100"
4930
+
version = "0.2.105"
4544
4931
source = "registry+https://github.com/rust-lang/crates.io-index"
4545
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
4932
+
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
4546
4933
dependencies = [
4547
4934
"quote",
4548
4935
"wasm-bindgen-macro-support",
···
4550
4937
4551
4938
[[package]]
4552
4939
name = "wasm-bindgen-macro-support"
4553
-
version = "0.2.100"
4940
+
version = "0.2.105"
4554
4941
source = "registry+https://github.com/rust-lang/crates.io-index"
4555
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
4942
+
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
4556
4943
dependencies = [
4944
+
"bumpalo",
4557
4945
"proc-macro2",
4558
4946
"quote",
4559
-
"syn 2.0.104",
4560
-
"wasm-bindgen-backend",
4947
+
"syn 2.0.109",
4561
4948
"wasm-bindgen-shared",
4562
4949
]
4563
4950
4564
4951
[[package]]
4565
4952
name = "wasm-bindgen-shared"
4566
-
version = "0.2.100"
4953
+
version = "0.2.105"
4567
4954
source = "registry+https://github.com/rust-lang/crates.io-index"
4568
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
4955
+
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
4569
4956
dependencies = [
4570
4957
"unicode-ident",
4571
4958
]
···
4591
4978
dependencies = [
4592
4979
"cc",
4593
4980
"downcast-rs",
4594
-
"rustix",
4981
+
"rustix 1.1.2",
4595
4982
"scoped-tls",
4596
4983
"smallvec",
4597
4984
"wayland-sys",
···
4603
4990
source = "registry+https://github.com/rust-lang/crates.io-index"
4604
4991
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
4605
4992
dependencies = [
4606
-
"bitflags 2.9.1",
4607
-
"rustix",
4993
+
"bitflags 2.10.0",
4994
+
"rustix 1.1.2",
4608
4995
"wayland-backend",
4609
4996
"wayland-scanner",
4610
4997
]
···
4615
5002
source = "registry+https://github.com/rust-lang/crates.io-index"
4616
5003
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
4617
5004
dependencies = [
4618
-
"bitflags 2.9.1",
5005
+
"bitflags 2.10.0",
4619
5006
"wayland-backend",
4620
5007
"wayland-client",
4621
5008
"wayland-scanner",
4622
5009
]
4623
5010
4624
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]]
4625
5025
name = "wayland-scanner"
4626
5026
version = "0.31.7"
4627
5027
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4645
5045
4646
5046
[[package]]
4647
5047
name = "web-sys"
4648
-
version = "0.3.77"
5048
+
version = "0.3.82"
4649
5049
source = "registry+https://github.com/rust-lang/crates.io-index"
4650
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
5050
+
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
4651
5051
dependencies = [
4652
5052
"js-sys",
4653
5053
"wasm-bindgen",
···
4706
5106
"webview2-com-macros",
4707
5107
"webview2-com-sys",
4708
5108
"windows",
4709
-
"windows-core",
5109
+
"windows-core 0.61.2",
4710
5110
"windows-implement",
4711
5111
"windows-interface",
4712
5112
]
···
4719
5119
dependencies = [
4720
5120
"proc-macro2",
4721
5121
"quote",
4722
-
"syn 2.0.104",
5122
+
"syn 2.0.109",
4723
5123
]
4724
5124
4725
5125
[[package]]
···
4728
5128
source = "registry+https://github.com/rust-lang/crates.io-index"
4729
5129
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
4730
5130
dependencies = [
4731
-
"thiserror 2.0.12",
5131
+
"thiserror 2.0.17",
4732
5132
"windows",
4733
-
"windows-core",
5133
+
"windows-core 0.61.2",
4734
5134
]
4735
5135
4736
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]]
4737
5143
name = "winapi"
4738
5144
version = "0.3.9"
4739
5145
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4751
5157
4752
5158
[[package]]
4753
5159
name = "winapi-util"
4754
-
version = "0.1.9"
5160
+
version = "0.1.11"
4755
5161
source = "registry+https://github.com/rust-lang/crates.io-index"
4756
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
5162
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
4757
5163
dependencies = [
4758
-
"windows-sys 0.59.0",
5164
+
"windows-sys 0.61.2",
4759
5165
]
4760
5166
4761
5167
[[package]]
···
4770
5176
source = "registry+https://github.com/rust-lang/crates.io-index"
4771
5177
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
4772
5178
dependencies = [
4773
-
"objc2 0.6.1",
5179
+
"objc2 0.6.3",
4774
5180
"objc2-app-kit",
4775
5181
"objc2-core-foundation",
4776
-
"objc2-foundation 0.3.1",
5182
+
"objc2-foundation 0.3.2",
4777
5183
"raw-window-handle",
4778
5184
"windows-sys 0.59.0",
4779
5185
"windows-version",
···
4786
5192
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4787
5193
dependencies = [
4788
5194
"windows-collections",
4789
-
"windows-core",
5195
+
"windows-core 0.61.2",
4790
5196
"windows-future",
4791
-
"windows-link",
5197
+
"windows-link 0.1.3",
4792
5198
"windows-numerics",
4793
5199
]
4794
5200
···
4798
5204
source = "registry+https://github.com/rust-lang/crates.io-index"
4799
5205
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4800
5206
dependencies = [
4801
-
"windows-core",
5207
+
"windows-core 0.61.2",
4802
5208
]
4803
5209
4804
5210
[[package]]
···
4809
5215
dependencies = [
4810
5216
"windows-implement",
4811
5217
"windows-interface",
4812
-
"windows-link",
4813
-
"windows-result",
4814
-
"windows-strings",
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",
4815
5234
]
4816
5235
4817
5236
[[package]]
···
4820
5239
source = "registry+https://github.com/rust-lang/crates.io-index"
4821
5240
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4822
5241
dependencies = [
4823
-
"windows-core",
4824
-
"windows-link",
5242
+
"windows-core 0.61.2",
5243
+
"windows-link 0.1.3",
4825
5244
"windows-threading",
4826
5245
]
4827
5246
4828
5247
[[package]]
4829
5248
name = "windows-implement"
4830
-
version = "0.60.0"
5249
+
version = "0.60.2"
4831
5250
source = "registry+https://github.com/rust-lang/crates.io-index"
4832
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
5251
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
4833
5252
dependencies = [
4834
5253
"proc-macro2",
4835
5254
"quote",
4836
-
"syn 2.0.104",
5255
+
"syn 2.0.109",
4837
5256
]
4838
5257
4839
5258
[[package]]
4840
5259
name = "windows-interface"
4841
-
version = "0.59.1"
5260
+
version = "0.59.3"
4842
5261
source = "registry+https://github.com/rust-lang/crates.io-index"
4843
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
5262
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
4844
5263
dependencies = [
4845
5264
"proc-macro2",
4846
5265
"quote",
4847
-
"syn 2.0.104",
5266
+
"syn 2.0.109",
4848
5267
]
4849
5268
4850
5269
[[package]]
···
4854
5273
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4855
5274
4856
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]]
4857
5282
name = "windows-numerics"
4858
5283
version = "0.2.0"
4859
5284
source = "registry+https://github.com/rust-lang/crates.io-index"
4860
5285
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4861
5286
dependencies = [
4862
-
"windows-core",
4863
-
"windows-link",
5287
+
"windows-core 0.61.2",
5288
+
"windows-link 0.1.3",
4864
5289
]
4865
5290
4866
5291
[[package]]
···
4869
5294
source = "registry+https://github.com/rust-lang/crates.io-index"
4870
5295
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4871
5296
dependencies = [
4872
-
"windows-link",
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",
4873
5307
]
4874
5308
4875
5309
[[package]]
···
4878
5312
source = "registry+https://github.com/rust-lang/crates.io-index"
4879
5313
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4880
5314
dependencies = [
4881
-
"windows-link",
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",
4882
5325
]
4883
5326
4884
5327
[[package]]
···
4905
5348
source = "registry+https://github.com/rust-lang/crates.io-index"
4906
5349
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
4907
5350
dependencies = [
4908
-
"windows-targets 0.53.3",
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",
4909
5361
]
4910
5362
4911
5363
[[package]]
···
4941
5393
4942
5394
[[package]]
4943
5395
name = "windows-targets"
4944
-
version = "0.53.3"
5396
+
version = "0.53.5"
4945
5397
source = "registry+https://github.com/rust-lang/crates.io-index"
4946
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
5398
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
4947
5399
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",
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",
4957
5409
]
4958
5410
4959
5411
[[package]]
···
4962
5414
source = "registry+https://github.com/rust-lang/crates.io-index"
4963
5415
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4964
5416
dependencies = [
4965
-
"windows-link",
5417
+
"windows-link 0.1.3",
4966
5418
]
4967
5419
4968
5420
[[package]]
4969
5421
name = "windows-version"
4970
-
version = "0.1.4"
5422
+
version = "0.1.7"
4971
5423
source = "registry+https://github.com/rust-lang/crates.io-index"
4972
-
checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
5424
+
checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
4973
5425
dependencies = [
4974
-
"windows-link",
5426
+
"windows-link 0.2.1",
4975
5427
]
4976
5428
4977
5429
[[package]]
···
4988
5440
4989
5441
[[package]]
4990
5442
name = "windows_aarch64_gnullvm"
4991
-
version = "0.53.0"
5443
+
version = "0.53.1"
4992
5444
source = "registry+https://github.com/rust-lang/crates.io-index"
4993
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
5445
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
4994
5446
4995
5447
[[package]]
4996
5448
name = "windows_aarch64_msvc"
···
5006
5458
5007
5459
[[package]]
5008
5460
name = "windows_aarch64_msvc"
5009
-
version = "0.53.0"
5461
+
version = "0.53.1"
5010
5462
source = "registry+https://github.com/rust-lang/crates.io-index"
5011
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
5463
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
5012
5464
5013
5465
[[package]]
5014
5466
name = "windows_i686_gnu"
···
5024
5476
5025
5477
[[package]]
5026
5478
name = "windows_i686_gnu"
5027
-
version = "0.53.0"
5479
+
version = "0.53.1"
5028
5480
source = "registry+https://github.com/rust-lang/crates.io-index"
5029
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
5481
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
5030
5482
5031
5483
[[package]]
5032
5484
name = "windows_i686_gnullvm"
···
5036
5488
5037
5489
[[package]]
5038
5490
name = "windows_i686_gnullvm"
5039
-
version = "0.53.0"
5491
+
version = "0.53.1"
5040
5492
source = "registry+https://github.com/rust-lang/crates.io-index"
5041
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
5493
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
5042
5494
5043
5495
[[package]]
5044
5496
name = "windows_i686_msvc"
···
5054
5506
5055
5507
[[package]]
5056
5508
name = "windows_i686_msvc"
5057
-
version = "0.53.0"
5509
+
version = "0.53.1"
5058
5510
source = "registry+https://github.com/rust-lang/crates.io-index"
5059
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
5511
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
5060
5512
5061
5513
[[package]]
5062
5514
name = "windows_x86_64_gnu"
···
5072
5524
5073
5525
[[package]]
5074
5526
name = "windows_x86_64_gnu"
5075
-
version = "0.53.0"
5527
+
version = "0.53.1"
5076
5528
source = "registry+https://github.com/rust-lang/crates.io-index"
5077
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
5529
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
5078
5530
5079
5531
[[package]]
5080
5532
name = "windows_x86_64_gnullvm"
···
5090
5542
5091
5543
[[package]]
5092
5544
name = "windows_x86_64_gnullvm"
5093
-
version = "0.53.0"
5545
+
version = "0.53.1"
5094
5546
source = "registry+https://github.com/rust-lang/crates.io-index"
5095
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
5547
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
5096
5548
5097
5549
[[package]]
5098
5550
name = "windows_x86_64_msvc"
···
5108
5560
5109
5561
[[package]]
5110
5562
name = "windows_x86_64_msvc"
5111
-
version = "0.53.0"
5563
+
version = "0.53.1"
5112
5564
source = "registry+https://github.com/rust-lang/crates.io-index"
5113
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
5565
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
5114
5566
5115
5567
[[package]]
5116
5568
name = "winnow"
···
5123
5575
5124
5576
[[package]]
5125
5577
name = "winnow"
5126
-
version = "0.7.12"
5578
+
version = "0.7.13"
5127
5579
source = "registry+https://github.com/rust-lang/crates.io-index"
5128
-
checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
5580
+
checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
5129
5581
dependencies = [
5130
5582
"memchr",
5131
5583
]
···
5141
5593
]
5142
5594
5143
5595
[[package]]
5144
-
name = "wit-bindgen-rt"
5145
-
version = "0.39.0"
5596
+
name = "wit-bindgen"
5597
+
version = "0.46.0"
5146
5598
source = "registry+https://github.com/rust-lang/crates.io-index"
5147
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
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"
5148
5606
dependencies = [
5149
-
"bitflags 2.9.1",
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",
5150
5618
]
5151
5619
5152
5620
[[package]]
5153
5621
name = "writeable"
5154
-
version = "0.6.1"
5622
+
version = "0.6.2"
5155
5623
source = "registry+https://github.com/rust-lang/crates.io-index"
5156
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
5624
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
5157
5625
5158
5626
[[package]]
5159
5627
name = "wry"
5160
-
version = "0.52.1"
5628
+
version = "0.53.5"
5161
5629
source = "registry+https://github.com/rust-lang/crates.io-index"
5162
-
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
5630
+
checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2"
5163
5631
dependencies = [
5164
5632
"base64 0.22.1",
5165
-
"block2 0.6.1",
5633
+
"block2 0.6.2",
5166
5634
"cookie",
5167
5635
"crossbeam-channel",
5636
+
"dirs",
5168
5637
"dpi",
5169
5638
"dunce",
5170
5639
"gdkx11",
···
5176
5645
"kuchikiki",
5177
5646
"libc",
5178
5647
"ndk",
5179
-
"objc2 0.6.1",
5648
+
"objc2 0.6.3",
5180
5649
"objc2-app-kit",
5181
5650
"objc2-core-foundation",
5182
-
"objc2-foundation 0.3.1",
5651
+
"objc2-foundation 0.3.2",
5183
5652
"objc2-ui-kit",
5184
5653
"objc2-web-kit",
5185
5654
"once_cell",
···
5188
5657
"sha2",
5189
5658
"soup3",
5190
5659
"tao-macros",
5191
-
"thiserror 2.0.12",
5660
+
"thiserror 2.0.17",
5192
5661
"url",
5193
5662
"webkit2gtk",
5194
5663
"webkit2gtk-sys",
5195
5664
"webview2-com",
5196
5665
"windows",
5197
-
"windows-core",
5666
+
"windows-core 0.61.2",
5198
5667
"windows-version",
5199
5668
"x11-dl",
5200
5669
]
···
5221
5690
]
5222
5691
5223
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]]
5224
5727
name = "yoke"
5225
-
version = "0.8.0"
5728
+
version = "0.8.1"
5226
5729
source = "registry+https://github.com/rust-lang/crates.io-index"
5227
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
5730
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
5228
5731
dependencies = [
5229
-
"serde",
5230
5732
"stable_deref_trait",
5231
5733
"yoke-derive",
5232
5734
"zerofrom",
···
5234
5736
5235
5737
[[package]]
5236
5738
name = "yoke-derive"
5237
-
version = "0.8.0"
5739
+
version = "0.8.1"
5238
5740
source = "registry+https://github.com/rust-lang/crates.io-index"
5239
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
5741
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
5240
5742
dependencies = [
5241
5743
"proc-macro2",
5242
5744
"quote",
5243
-
"syn 2.0.104",
5745
+
"syn 2.0.109",
5244
5746
"synstructure",
5245
5747
]
5246
5748
5247
5749
[[package]]
5248
5750
name = "zbus"
5249
-
version = "5.9.0"
5751
+
version = "5.12.0"
5250
5752
source = "registry+https://github.com/rust-lang/crates.io-index"
5251
-
checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
5753
+
checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91"
5252
5754
dependencies = [
5253
5755
"async-broadcast",
5254
5756
"async-executor",
···
5271
5773
"tokio",
5272
5774
"tracing",
5273
5775
"uds_windows",
5274
-
"windows-sys 0.59.0",
5275
-
"winnow 0.7.12",
5776
+
"uuid",
5777
+
"windows-sys 0.61.2",
5778
+
"winnow 0.7.13",
5276
5779
"zbus_macros",
5277
5780
"zbus_names",
5278
5781
"zvariant",
···
5280
5783
5281
5784
[[package]]
5282
5785
name = "zbus_macros"
5283
-
version = "5.9.0"
5786
+
version = "5.12.0"
5284
5787
source = "registry+https://github.com/rust-lang/crates.io-index"
5285
-
checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
5788
+
checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314"
5286
5789
dependencies = [
5287
-
"proc-macro-crate 3.3.0",
5790
+
"proc-macro-crate 3.4.0",
5288
5791
"proc-macro2",
5289
5792
"quote",
5290
-
"syn 2.0.104",
5793
+
"syn 2.0.109",
5291
5794
"zbus_names",
5292
5795
"zvariant",
5293
5796
"zvariant_utils",
···
5301
5804
dependencies = [
5302
5805
"serde",
5303
5806
"static_assertions",
5304
-
"winnow 0.7.12",
5807
+
"winnow 0.7.13",
5305
5808
"zvariant",
5306
5809
]
5307
5810
5308
5811
[[package]]
5309
5812
name = "zerocopy"
5310
-
version = "0.8.26"
5813
+
version = "0.8.27"
5311
5814
source = "registry+https://github.com/rust-lang/crates.io-index"
5312
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
5815
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
5313
5816
dependencies = [
5314
5817
"zerocopy-derive",
5315
5818
]
5316
5819
5317
5820
[[package]]
5318
5821
name = "zerocopy-derive"
5319
-
version = "0.8.26"
5822
+
version = "0.8.27"
5320
5823
source = "registry+https://github.com/rust-lang/crates.io-index"
5321
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
5824
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
5322
5825
dependencies = [
5323
5826
"proc-macro2",
5324
5827
"quote",
5325
-
"syn 2.0.104",
5828
+
"syn 2.0.109",
5326
5829
]
5327
5830
5328
5831
[[package]]
···
5342
5845
dependencies = [
5343
5846
"proc-macro2",
5344
5847
"quote",
5345
-
"syn 2.0.104",
5848
+
"syn 2.0.109",
5346
5849
"synstructure",
5347
5850
]
5348
5851
5349
5852
[[package]]
5350
5853
name = "zerotrie"
5351
-
version = "0.2.2"
5854
+
version = "0.2.3"
5352
5855
source = "registry+https://github.com/rust-lang/crates.io-index"
5353
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
5856
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
5354
5857
dependencies = [
5355
5858
"displaydoc",
5356
5859
"yoke",
···
5359
5862
5360
5863
[[package]]
5361
5864
name = "zerovec"
5362
-
version = "0.11.2"
5865
+
version = "0.11.5"
5363
5866
source = "registry+https://github.com/rust-lang/crates.io-index"
5364
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
5867
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
5365
5868
dependencies = [
5366
5869
"yoke",
5367
5870
"zerofrom",
···
5370
5873
5371
5874
[[package]]
5372
5875
name = "zerovec-derive"
5373
-
version = "0.11.1"
5876
+
version = "0.11.2"
5374
5877
source = "registry+https://github.com/rust-lang/crates.io-index"
5375
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
5878
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
5376
5879
dependencies = [
5377
5880
"proc-macro2",
5378
5881
"quote",
5379
-
"syn 2.0.104",
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",
5380
5898
]
5381
5899
5382
5900
[[package]]
5383
5901
name = "zvariant"
5384
-
version = "5.6.0"
5902
+
version = "5.8.0"
5385
5903
source = "registry+https://github.com/rust-lang/crates.io-index"
5386
-
checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
5904
+
checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c"
5387
5905
dependencies = [
5388
5906
"endi",
5389
5907
"enumflags2",
5390
5908
"serde",
5391
5909
"url",
5392
-
"winnow 0.7.12",
5910
+
"winnow 0.7.13",
5393
5911
"zvariant_derive",
5394
5912
"zvariant_utils",
5395
5913
]
5396
5914
5397
5915
[[package]]
5398
5916
name = "zvariant_derive"
5399
-
version = "5.6.0"
5917
+
version = "5.8.0"
5400
5918
source = "registry+https://github.com/rust-lang/crates.io-index"
5401
-
checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
5919
+
checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006"
5402
5920
dependencies = [
5403
-
"proc-macro-crate 3.3.0",
5921
+
"proc-macro-crate 3.4.0",
5404
5922
"proc-macro2",
5405
5923
"quote",
5406
-
"syn 2.0.104",
5924
+
"syn 2.0.109",
5407
5925
"zvariant_utils",
5408
5926
]
5409
5927
5410
5928
[[package]]
5411
5929
name = "zvariant_utils"
5412
-
version = "3.2.0"
5930
+
version = "3.2.1"
5413
5931
source = "registry+https://github.com/rust-lang/crates.io-index"
5414
-
checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
5932
+
checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
5415
5933
dependencies = [
5416
5934
"proc-macro2",
5417
5935
"quote",
5418
5936
"serde",
5419
-
"static_assertions",
5420
-
"syn 2.0.104",
5421
-
"winnow 0.7.12",
5937
+
"syn 2.0.109",
5938
+
"winnow 0.7.13",
5422
5939
]
+12
-6
src-tauri/Cargo.toml
+12
-6
src-tauri/Cargo.toml
···
18
18
tauri-build = { version = "2", features = [] }
19
19
20
20
[dependencies]
21
-
tauri = { version = "2", features = [] }
21
+
tauri = { version = "2", features = [ 'tray-icon', 'image-png' ] }
22
22
tauri-plugin-opener = "2"
23
23
serde = { version = "1", features = ["derive"] }
24
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"
25
+
tokio = { version = "1.47", features = [ "macros" ] }
26
+
dirs = "6.0"
27
+
anyhow = "1.0"
28
+
flate2 = "1.1"
29
29
tauri-plugin-dialog = "2"
30
-
crossbeam-channel = "0.5.15"
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"
31
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
1
use std::collections::HashMap;
2
2
3
-
use tauri::State;
3
+
use tauri::{State, Window};
4
4
5
-
use crate::{ structs::nodes::Node, utils::config::Config };
5
+
use crate::{structs::nodes::Node, utils::config::Config};
6
6
7
7
#[tauri::command]
8
-
pub fn load_previous_tabs( conf: State<Config> ) -> HashMap<String, ( Vec<Node>, String, Option<String> )> {
8
+
pub fn load_previous_tabs(
9
+
window: Window,
10
+
conf: State<Config>,
11
+
) -> HashMap<String, (Vec<Node>, String, Option<String>, bool)> {
9
12
let config = conf.store.lock().unwrap();
10
13
14
+
if !config.hide_editor_on_start {
15
+
window.show().unwrap();
16
+
}
17
+
11
18
let tabs = config.loaded_tabs.clone();
12
19
tabs
13
-
}
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
1
use std::{fs::File, io::Write, path::PathBuf};
2
2
3
3
use flate2::{write::GzEncoder, Compression};
4
+
use tauri::State;
5
+
6
+
use crate::utils::config::Config;
4
7
5
8
#[tauri::command]
6
-
pub fn save_graph( graph: String, path: PathBuf ) {
7
-
dbg!(&graph, &path);
8
-
9
+
pub fn save_graph(graph: String, path: PathBuf, conf: State<Config>) {
9
10
let file = File::create(&path).unwrap();
10
11
let mut encoder = GzEncoder::new(file, Compression::default());
11
12
12
13
encoder.write_all(graph.as_bytes()).unwrap();
13
14
encoder.finish().unwrap();
15
+
16
+
conf.save();
14
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 chrono::Utc;
1
2
use crossbeam_channel::Sender;
2
3
3
4
use tauri::State;
4
5
5
-
use crate::{ runtime::commands::RuntimeCommand, structs::nodes::Node, utils::config::Config };
6
+
use crate::{runtime::commands::RuntimeCommand, structs::nodes::Node, utils::config::Config};
6
7
7
8
#[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();
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();
10
21
11
22
let mut config = conf.store.lock().unwrap();
12
-
config.loaded_tabs.insert(id, ( graph, name, location ));
13
-
drop(config);
23
+
config.loaded_tabs.insert(id, (graph, name, location, save_state));
14
24
15
-
conf.save();
25
+
conf.save_prelocked(config);
16
26
}
17
27
18
28
#[tauri::command]
19
-
pub fn discard_tab( id: String, cmd: State<Sender<RuntimeCommand>>, conf: State<Config> ){
29
+
pub fn discard_tab(id: String, cmd: State<Sender<RuntimeCommand>>, conf: State<Config>) {
20
30
cmd.send(RuntimeCommand::RemoveTab(id.clone())).unwrap();
21
31
22
32
let mut config = conf.store.lock().unwrap();
23
33
config.loaded_tabs.remove(&id);
24
-
drop(config);
25
-
26
-
conf.save();
27
-
}
34
+
}
+15
-10
src-tauri/src/lib.rs
+15
-10
src-tauri/src/lib.rs
···
1
-
use std::{ fs, sync::Mutex };
1
+
use std::{fs, sync::Mutex};
2
2
3
3
use crossbeam_channel::bounded;
4
4
use frontend_calls::*;
5
5
6
-
use crate::{ osc::OSCMessage, setup::setup, utils::config::Config };
6
+
use crate::{osc::OSCMessage, setup::setup, utils::{config::Config, vrchat_builtin_parameters}};
7
7
8
8
mod frontend_calls;
9
9
mod osc;
10
+
mod runtime;
10
11
mod setup;
11
12
mod structs;
12
13
mod utils;
13
-
mod runtime;
14
14
15
15
#[cfg_attr(mobile, tauri::mobile_entry_point)]
16
16
#[tokio::main]
17
17
pub async fn run() {
18
-
// TODO: Impl background running by default
19
-
20
18
let container_folder = dirs::config_dir().unwrap().join("VRCMacros");
21
19
22
20
match fs::metadata(&container_folder) {
23
21
Ok(meta) => {
24
22
if meta.is_file() {
25
-
panic!(
26
-
"document.write('Cannot launch app as the container path is a file not a directory')"
27
-
);
23
+
panic!("Cannot launch app as the container path is a file not a directory");
28
24
}
29
25
}
30
26
Err(_) => {
···
37
33
38
34
static ADDRESSES: Mutex<Vec<OSCMessage>> = Mutex::new(Vec::new());
39
35
40
-
let ( runtime_sender, runtime_receiver ) = bounded(1024);
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
41
42
42
tauri::Builder::default()
43
+
.plugin(tauri_plugin_os::init())
44
+
.plugin(tauri_plugin_clipboard_manager::init())
43
45
.plugin(tauri_plugin_dialog::init())
44
46
.plugin(tauri_plugin_opener::init())
45
47
.invoke_handler(tauri::generate_handler![
···
47
49
save_graph::save_graph,
48
50
sync_tab::sync_tab,
49
51
sync_tab::discard_tab,
50
-
load_previous_tabs::load_previous_tabs
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,
51
56
])
52
57
.manage(conf)
53
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
···
1
-
use crate::{ osc::OSCMessage, structs::nodes::Node };
1
+
use crate::{osc::OSCMessage, structs::nodes::Node};
2
2
3
3
#[derive(Debug)]
4
-
pub enum RuntimeCommand{
4
+
pub enum RuntimeCommand {
5
5
OSCMessage(OSCMessage),
6
6
7
7
AddTab(Vec<Node>, String),
8
-
RemoveTab(String)
9
-
}
8
+
RemoveTab(String),
9
+
}
+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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct ConditionalIfEqual{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value1: ParameterType,
6
-
value2: ParameterType
6
+
pub struct ConditionalIfEqual {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
7
9
}
8
10
9
-
impl ConditionalIfEqual{
10
-
pub fn new( node: Node ) -> Box<Self>{
11
-
dbg!(&node);
12
-
11
+
impl ConditionalIfEqual {
12
+
pub fn new(node: Node) -> Box<Self> {
13
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,
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(),
20
26
})
21
27
}
22
28
}
23
29
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![]) }
30
+
impl RuntimeNode for ConditionalIfEqual {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
27
34
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
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
35
37
}
36
38
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
-
}
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
47
48
+
fn is_entrypoint(&self) -> bool {
48
49
false
49
50
}
50
-
51
-
fn is_entrypoint( &self ) -> bool { false }
52
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct ConditionalIfFalse{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
runtime_active: bool
6
+
pub struct ConditionalIfFalse {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
6
9
}
7
10
8
-
impl ConditionalIfFalse{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
11
+
impl ConditionalIfFalse {
12
+
pub fn new(node: Node) -> Box<Self> {
12
13
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
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(),
18
26
})
19
27
}
20
28
}
21
29
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![]) }
30
+
impl RuntimeNode for ConditionalIfFalse {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
25
34
26
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
27
-
Some(vec![ ParameterType::Flow(!self.runtime_active), ParameterType::Flow(self.runtime_active) ])
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
28
37
}
29
38
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
-
}
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
+
]
43
46
}
44
47
45
-
fn is_entrypoint( &self ) -> bool { false }
46
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct ConditionalIfTrue{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
runtime_active: bool
6
+
pub struct ConditionalIfTrue {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
6
9
}
7
10
8
-
impl ConditionalIfTrue{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
11
+
impl ConditionalIfTrue {
12
+
pub fn new(node: Node) -> Box<Self> {
12
13
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
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(),
18
26
})
19
27
}
20
28
}
21
29
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![]) }
30
+
impl RuntimeNode for ConditionalIfTrue {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
25
34
26
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
27
-
Some(vec![ ParameterType::Flow(self.runtime_active), ParameterType::Flow(!self.runtime_active) ])
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
28
37
}
29
38
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
-
}
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
+
]
43
46
}
44
47
45
-
fn is_entrypoint( &self ) -> bool { false }
46
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct Debug{
4
-
to_log: Option<ParameterType>
6
+
pub struct Debug {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>
5
9
}
6
10
7
-
impl Debug{
8
-
pub fn new( _: Node ) -> Box<Self>{
9
-
Box::new(Self { to_log: None })
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
+
})
10
27
}
11
28
}
12
29
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![]) }
30
+
impl RuntimeNode for Debug {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
16
34
17
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> {
18
-
dbg!(&self.to_log);
19
-
self.to_log = None;
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
20
38
21
-
None
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
dbg!(&args); // TODO: Debug to actual UI instead of console
41
+
vec![]
22
42
}
23
43
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
-
}
44
+
fn is_entrypoint(&self) -> bool {
45
+
false
31
46
}
32
-
33
-
fn is_entrypoint( &self ) -> bool { false }
34
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct OSCTrigger{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
address: Option<String>,
6
-
runtime_active: bool
7
-
}
6
+
pub struct OSCTrigger {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
8
9
9
-
impl OSCTrigger{
10
-
pub fn new( node: Node ) -> Box<Self>{
11
-
dbg!(&node);
10
+
address: Option<String>
11
+
}
12
12
13
+
impl OSCTrigger {
14
+
pub fn new(node: Node) -> Box<Self> {
13
15
let value = &node.statics[0].value;
14
16
15
17
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
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
+
},
22
36
})
23
37
}
24
38
}
25
39
26
-
impl RuntimeNode for OSCTrigger{
27
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
40
+
impl RuntimeNode for OSCTrigger {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
28
42
self.outputs.clone()
29
43
}
30
44
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
-
}
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 }
36
51
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.
52
+
let execute = if let Some(internal_address) = &self.address {
53
+
if let Ok(address) = args[0].as_string() {
54
+
address == *internal_address
45
55
} else{
46
-
self.runtime_active = false;
47
-
None
56
+
false
48
57
}
49
58
} else{
50
-
self.runtime_active = false;
51
-
None
52
-
}
59
+
false
60
+
};
61
+
62
+
args[0] = ParameterType::Flow(execute);
63
+
args
53
64
}
54
65
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) ])
66
+
fn is_entrypoint(&self) -> bool {
67
+
true
60
68
}
61
-
62
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
63
-
fn is_entrypoint( &self ) -> bool { true }
64
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct StaticFloat{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value: Option<f32>
6
+
pub struct StaticFloat {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<f32>,
6
11
}
7
12
8
-
impl StaticFloat{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
13
+
impl StaticFloat {
14
+
pub fn new(node: Node) -> Box<Self> {
12
15
let value = &node.statics[0].value;
13
16
14
17
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(),
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
+
}
20
36
})
21
37
}
22
38
}
23
39
24
-
impl RuntimeNode for StaticFloat{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
40
+
impl RuntimeNode for StaticFloat {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
26
42
self.outputs.clone()
27
43
}
28
44
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
-
}
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
35
47
}
36
48
37
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> { None }
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
+
}
38
56
39
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
40
-
fn is_entrypoint( &self ) -> bool { true }
41
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct StaticInt{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value: Option<i32>
6
+
pub struct StaticInt {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<i32>,
6
11
}
7
12
8
-
impl StaticInt{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
13
+
impl StaticInt {
14
+
pub fn new(node: Node) -> Box<Self> {
12
15
let value = &node.statics[0].value;
13
16
14
17
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(),
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
+
}
20
36
})
21
37
}
22
38
}
23
39
24
-
impl RuntimeNode for StaticInt{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
40
+
impl RuntimeNode for StaticInt {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
26
42
self.outputs.clone()
27
43
}
28
44
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
-
}
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
35
47
}
36
48
37
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> { None }
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
+
}
38
56
39
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
40
-
fn is_entrypoint( &self ) -> bool { true }
41
-
}
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 } };
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
2
5
3
-
pub struct StaticString{
4
-
outputs: Vec<Vec<( String, isize, isize )>>,
5
-
value: Option<String>
6
+
pub struct StaticString {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<String>,
6
11
}
7
12
8
-
impl StaticString{
9
-
pub fn new( node: Node ) -> Box<Self>{
10
-
dbg!(&node);
11
-
13
+
impl StaticString {
14
+
pub fn new(node: Node) -> Box<Self> {
12
15
let value = &node.statics[0].value;
13
16
14
17
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(),
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
+
}
20
36
})
21
37
}
22
38
}
23
39
24
-
impl RuntimeNode for StaticString{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
40
+
impl RuntimeNode for StaticString {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
26
42
self.outputs.clone()
27
43
}
28
44
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
-
}
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
35
47
}
36
48
37
-
fn execute( &mut self ) -> Option<Vec<ParameterType>> { None }
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
+
}
38
56
39
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
40
-
fn is_entrypoint( &self ) -> bool { true }
41
-
}
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;
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
+
};
2
17
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 } };
18
+
// #[cfg(target_os = "windows")]
19
+
use crate::runtime::nodes::press_key::PressKey;
4
20
21
+
mod conditional;
22
+
mod debug;
23
+
mod oscactions;
5
24
mod osctrigger;
6
-
mod debug;
7
25
mod statics;
8
-
mod conditional;
26
+
mod shell;
27
+
28
+
// #[cfg(target_os = "windows")]
29
+
mod press_key;
9
30
10
-
pub struct RuntimeNodeTree{
11
-
pub nodes: HashMap<String, Box<dyn RuntimeNode>>
31
+
pub struct RuntimeNodeTree {
32
+
pub nodes: HashMap<String, Box<dyn RuntimeNode>>,
12
33
}
13
34
14
-
unsafe impl Send for RuntimeNodeTree{}
35
+
unsafe impl Send for RuntimeNodeTree {}
15
36
16
-
impl RuntimeNodeTree{
17
-
pub fn from( tree: Vec<Node> ) -> Self{
37
+
impl RuntimeNodeTree {
38
+
pub fn from(tree: Vec<Node>, /*#[cfg(target_os = "windows")]*/ enigo: Arc<Mutex<Enigo>>) -> Self {
18
39
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)); }
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
+
}
22
55
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)); }
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
+
}
26
65
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)); }
66
+
"oscsendchatbox" => {
67
+
runtime_nodes.insert(node.id.clone(), OSCActionsSendChatbox::new(node));
68
+
}
30
69
31
-
"debug" => { runtime_nodes.insert(node.id.clone(), Debug::new(node)); }
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
+
32
83
_ => {}
33
84
}
34
85
}
35
86
36
-
Self { nodes: runtime_nodes }
87
+
Self {
88
+
nodes: runtime_nodes,
89
+
}
37
90
}
38
91
}
39
92
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;
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;
46
99
}
+65
-40
src-tauri/src/runtime.rs
+65
-40
src-tauri/src/runtime.rs
···
1
-
use anyhow::{ bail, Result };
1
+
use std::collections::HashMap;
2
+
3
+
use anyhow::{bail, Result};
2
4
3
-
use crate::{ runtime::nodes::RuntimeNodeTree, structs::parameter_types::ParameterType };
5
+
use crate::{runtime::nodes::RuntimeNodeTree, structs::parameter_types::ParameterType};
4
6
5
-
pub mod nodes;
6
7
pub mod commands;
8
+
pub mod nodes;
7
9
8
-
// This is horrible. I know, I'm sorry.
10
+
// TODO: Variables
9
11
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"); }
12
+
pub fn recurse_runtime(entry: String, tab: &mut RuntimeNodeTree, args: Vec<ParameterType>) -> Result<()>{
13
+
let ( out_args, output_map ) = runtime(entry, tab, args)?;
13
14
14
-
let node = node.unwrap();
15
+
let mut next_node_args: HashMap<String, Vec<ParameterType>> = HashMap::new();
15
16
16
-
let output_map = node.outputs();
17
-
let args = node.execute_dry(parameters);
17
+
for i in 0..out_args.len(){
18
+
if output_map.len() <= i { break; }
19
+
let links = &output_map[i];
18
20
19
-
if args.is_some(){
20
-
let args = args.unwrap();
21
+
for ( id, link_index, _ ) in links{
22
+
let link_index = link_index.clone() as usize;
21
23
22
-
for i in 0..args.len(){
23
-
let arg = &args[i];
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); }
24
27
25
-
for output in &output_map[i]{
26
-
if output.2 == 5{ break; } // Ignore flow outputs
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());
27
32
28
-
let next_node = tab.nodes.get_mut(&output.0);
29
-
if next_node.is_none(){ bail!("Cannot find node {}", output.0) }
33
+
next_node_args.insert(id.clone(), args);
34
+
}
35
+
}
36
+
}
30
37
31
-
let next_node = next_node.unwrap();
32
-
let can_update = next_node.update_arg(output.1 as usize, arg.clone());
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];
33
42
34
-
if can_update{
35
-
runtime_dry(output.0.clone(), &vec![], tab)?;
43
+
for ( id, _, _ ) in links{
44
+
let args = next_node_args.remove(id).unwrap();
45
+
recurse_runtime(id.clone(), tab, args)?;
36
46
}
37
47
}
38
48
}
···
41
51
Ok(())
42
52
}
43
53
44
-
pub fn runtime( entry: String, tab: &mut RuntimeNodeTree ) -> Result<()>{
54
+
pub fn runtime(entry: String, tab: &mut RuntimeNodeTree, mut args: Vec<ParameterType>) -> Result<(Vec<ParameterType>, Vec<Vec<(String, isize, isize)>>)> {
45
55
let node = tab.nodes.get_mut(&entry);
46
-
if node.is_none(){ bail!("Cannot find node"); }
56
+
if node.is_none() { bail!("Cannot find node"); }
47
57
48
58
let node = node.unwrap();
59
+
let inputs = node.inputs();
49
60
50
-
let next = node.execute();
51
-
if next.is_some(){
52
-
let next = next.unwrap();
61
+
let mut needed_input_nodes = HashMap::new();
53
62
54
-
let outputs = node.outputs();
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
+
}
55
74
56
-
for i in 0..next.len(){
57
-
let arg = &next[i];
58
-
if i >= outputs.len() { break; }
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];
59
80
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
-
}
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();
67
86
}
68
87
}
69
88
}
70
89
71
-
Ok(())
72
-
}
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 };
1
+
use crossbeam_channel::{bounded, Receiver};
2
+
use std::{
3
+
collections::HashMap,
4
+
fs::File,
5
+
io::Read,
6
+
sync::{Arc, Mutex},
7
+
};
3
8
4
9
use flate2::read::GzDecoder;
5
-
use serde_json::{ Map, Value };
6
-
use tauri::{ App, Emitter, Listener, Manager, State };
10
+
use serde_json::{Map, Value};
11
+
use tauri::{App, Emitter, Listener, Manager, WindowEvent};
7
12
8
-
use crate::{ osc::{ self, OSCMessage }, runtime::{ commands::RuntimeCommand, nodes::RuntimeNodeTree, runtime, runtime_dry }, structs::parameter_types::ParameterType, utils::config::Config };
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
+
};
9
16
10
17
pub fn setup(
11
18
app: &mut App,
12
19
addresses: &'static Mutex<Vec<OSCMessage>>,
13
-
mut runtime_command_receiver: Receiver<RuntimeCommand>
20
+
runtime_command_receiver: Receiver<RuntimeCommand>,
14
21
) {
15
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());
16
44
17
45
let handle = window.clone();
18
46
window.listen("tauri://drag-drop", move |ev| {
···
33
61
handle.emit("load_new_tab", Value::Object(map)).unwrap();
34
62
});
35
63
36
-
let ( sender, receiver ) = bounded(1024);
64
+
let (sender, receiver) = bounded(1024);
37
65
38
66
tokio::spawn(async move {
39
67
osc::start_server(sender, "127.0.0.1:9001");
40
68
});
41
69
42
-
let ( runtime_sender, runtime_receiver ) = bounded(1024);
70
+
let (runtime_sender, runtime_receiver) = bounded(1024);
43
71
44
72
let runtime_sender_1 = runtime_sender.clone();
45
73
tokio::spawn(async move {
···
57
85
58
86
let msg = message.clone();
59
87
let mut addrs = addresses.lock().unwrap();
60
-
if !addrs.contains(&msg) { addrs.push(msg); }
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
+
}
61
97
62
-
runtime_sender.send(RuntimeCommand::OSCMessage(message)).unwrap();
98
+
runtime_sender
99
+
.send(RuntimeCommand::OSCMessage(message))
100
+
.unwrap();
63
101
}
64
102
});
65
103
104
+
// TODO: Run tabs in seperate threads (really not looking forward to this... thanks rust)
105
+
66
106
tokio::spawn(async move {
67
107
let mut tabs: HashMap<String, RuntimeNodeTree> = HashMap::new();
68
108
109
+
// #[cfg(target_os = "windows")]
110
+
let enigo = Arc::new(Mutex::new(enigo::Enigo::new(&enigo::Settings::default()).unwrap()));
111
+
69
112
loop {
70
113
let cmd = runtime_receiver.recv().unwrap();
71
114
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();
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();
76
119
77
-
for id in keys.clone(){
120
+
for id in keys {
78
121
let entry = tab.nodes[&id].is_entrypoint();
79
122
80
-
if entry{
81
-
let args = vec![
82
-
vec![ ParameterType::String(msg.address.clone()) ], msg.values.clone()
83
-
].concat();
123
+
if entry {
124
+
let mut args = vec![ ParameterType::String(msg.address.clone())];
125
+
let mut values = msg.values.clone();
84
126
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);
127
+
args.append(&mut values);
128
+
let _ = recurse_runtime(id.clone(), &mut tab, args);
94
129
}
95
130
}
96
131
}
97
-
},
132
+
}
98
133
99
-
RuntimeCommand::AddTab( graph, id ) => {
100
-
tabs.insert(id, RuntimeNodeTree::from(graph));
101
-
},
102
-
RuntimeCommand::RemoveTab( id ) => {
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) => {
103
142
tabs.remove(&id);
104
143
}
105
144
}
106
145
}
107
146
});
108
-
}
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 };
1
+
use serde::{Deserialize, Serialize};
2
2
use serde_json::Value;
3
3
4
4
#[derive(Serialize, Deserialize, Debug, Clone)]
5
-
pub struct Node{
5
+
pub struct Node {
6
6
pub id: String,
7
7
pub name: String,
8
-
pub outputs: Vec<NodeOutput>,
9
-
pub pos: [ f32; 2 ],
8
+
pub outputs: Vec<NodeIO>,
9
+
pub inputs: Vec<NodeIO>,
10
+
pub pos: [f32; 2],
10
11
pub statics: Vec<NodeStatic>,
11
12
12
13
#[serde(rename = "typeId")]
13
-
pub type_id: String
14
+
pub type_id: String,
14
15
}
15
16
16
17
#[derive(Serialize, Deserialize, Debug, Clone)]
17
-
pub struct NodeStatic{
18
+
pub struct NodeStatic {
18
19
pub name: String,
19
20
20
21
#[serde(rename = "type")]
21
22
pub value_type: isize,
22
-
pub value: Value
23
+
pub value: Value,
23
24
}
24
25
25
26
#[derive(Serialize, Deserialize, Debug, Clone)]
26
-
pub struct NodeOutput{
27
+
pub struct NodeIO {
27
28
pub name: String,
28
29
29
30
#[serde(rename = "type")]
30
31
pub value_type: isize,
31
-
pub connections: Vec<NodeOutputConnections>
32
+
pub connections: Vec<NodeOutputConnections>,
32
33
}
33
34
34
35
#[derive(Serialize, Deserialize, Debug, Clone)]
35
-
pub struct NodeOutputConnections{
36
+
pub struct NodeOutputConnections {
36
37
pub name: String,
37
38
pub node: String,
38
39
pub index: isize,
39
40
40
41
#[serde(rename = "type")]
41
-
pub value_type: isize
42
-
}
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};
1
2
use serde::Serialize;
2
3
3
4
#[derive(Serialize, Clone, Debug, PartialEq)]
···
12
13
String(String),
13
14
Flow(bool),
14
15
15
-
None
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
+
}
16
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 };
1
+
use std::{
2
+
collections::HashMap,
3
+
fs::File,
4
+
io::{Read, Write},
5
+
path::PathBuf,
6
+
sync::{Mutex, MutexGuard},
7
+
};
2
8
3
-
use flate2::{ read::GzDecoder, write::GzEncoder, Compression };
4
-
use serde::{ Deserialize, Serialize };
9
+
use chrono::Utc;
10
+
use flate2::{read::GzDecoder, write::GzEncoder, Compression};
11
+
use serde::{Deserialize, Serialize};
5
12
6
13
use crate::structs::nodes::Node;
7
14
8
15
#[derive(Clone, Serialize, Deserialize, Debug)]
9
-
pub struct ConfigValues{
16
+
pub struct ConfigValues {
17
+
#[serde(default)]
18
+
pub loaded_tabs: HashMap<String, (Vec<Node>, String, Option<String>, bool)>,
19
+
10
20
#[serde(default)]
11
-
pub loaded_tabs: HashMap<String, ( Vec<Node>, String, Option<String> )>
21
+
pub hide_editor_on_start: bool,
12
22
}
13
23
14
24
pub struct Config {
···
37
47
}
38
48
39
49
pub fn save(&self) {
40
-
let dat = serde_json::to_string(&self.store.lock().unwrap().clone()).unwrap();
41
-
dbg!(&dat);
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();
42
63
43
64
let file = File::create(&self.path).unwrap();
44
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
+
}