+5
-1
.gitignore
+5
-1
.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>
+5
src/App.css
+5
src/App.css
+156
-55
src/App.tsx
+156
-55
src/App.tsx
···
1
-
import { createSignal, onCleanup, onMount } from "solid-js";
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
+109
-17
src/Mangers/NodeManager.tsx
+109
-17
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 { platform } from "@tauri-apps/plugin-os";
10
11
11
12
export interface TabHashMap {
12
13
[details: string] : Tab;
···
22
23
23
24
constructor(){
24
25
NodeManager.Instance = this;
26
+
27
+
setInterval(() => {
28
+
let tabs = Object.values(this._tabs).filter(x => x.needSync);
29
+
for(let tab of tabs){
30
+
invoke('sync_tab', {
31
+
graph: this._generateTabGraph(tab.id)[0],
32
+
id: tab.id,
33
+
name: tab.name,
34
+
location: tab.saveLocation,
35
+
saveState: tab.needsSave()
36
+
});
37
+
38
+
tab.needSync = false;
39
+
}
40
+
}, 1000);
25
41
26
42
listen('load_new_tab', ( ev: any ) => {
27
-
this._loadFromConfig(ev.payload.path, ev.payload.graph);
28
-
})
43
+
this._loadFromConfig(ev.payload.path, null, ev.payload.graph);
44
+
});
45
+
46
+
invoke('load_previous_tabs').then(async ( tabs: any ) => {
47
+
let version = await getVersion();
48
+
49
+
for(let tab of Object.entries<any>(tabs)){
50
+
let loaded_tab = await this._loadFromConfig(tab[1][2], tab[0], JSON.stringify({
51
+
tab_name: tab[1][1],
52
+
version,
53
+
graph: tab[1][0]
54
+
}));
55
+
56
+
if(loaded_tab)
57
+
loaded_tab.setNeedsSave(tab[1][3]);
58
+
};
59
+
60
+
this.UpdateConfig();
61
+
});
62
+
63
+
listen('prompt_to_close', async _ => {
64
+
let tabs = Object.values(this._tabs);
65
+
let tabsNeedingSaving = tabs.filter(x => x.needsSave());
66
+
67
+
for(let tab of tabsNeedingSaving){
68
+
await new Promise<void>(res => {
69
+
ConfirmationManager.Instance.ShowConfirmation(
70
+
`Discard Changes in ${tab.name}?`,
71
+
'If you close this tab without saving you will lose all changes.',
72
+
[
73
+
{
74
+
text: 'Save',
75
+
callback: async () => {
76
+
await this.SaveTab(tab);
77
+
res();
78
+
}
79
+
},
80
+
{
81
+
text: 'Don\'t Save',
82
+
callback: async () => {
83
+
res();
84
+
}
85
+
}
86
+
]
87
+
)
88
+
});
89
+
}
90
+
91
+
invoke('close_app');
92
+
});
29
93
}
30
94
31
95
32
96
private _tabUpdateHook: ( tabs: TabHashMap ) => void = () => {};
33
97
private _tabChangeHook: () => void = () => {};
34
98
35
-
public async AddTab( name: string ): Promise<Tab>{
99
+
public CurrentTab(): Tab | null{
100
+
if(!this._selectedTab)return null
101
+
return this._tabs[this._selectedTab] || null;
102
+
}
103
+
104
+
public async AddTab( name: string, id: string | null = null ): Promise<Tab>{
36
105
let [ selected, setSelected ] = createSignal(false);
37
106
let [ needsSave, setNeedsSave ] = createSignal(false);
38
107
39
108
let tab: Tab = {
40
109
name: name,
41
-
id: await NodeManager.Instance.GetNewNodeId(),
110
+
id: id || await NodeManager.Instance.GetNewNodeId(),
42
111
nodes: [],
43
112
saveLocation: null,
44
113
···
48
117
needsSave,
49
118
setNeedsSave,
50
119
51
-
refuseSync: false
120
+
needSync: false
52
121
};
53
122
54
123
this._tabs[tab.id] = tab;
···
143
212
}
144
213
}
145
214
146
-
public async SaveTab( tab: Tab ){
215
+
public async SaveTab( tab: Tab, ignoreSaveLocation: boolean = false ){
147
216
let path =
148
-
tab.saveLocation ||
217
+
tab.saveLocation && !ignoreSaveLocation ?
218
+
tab.saveLocation :
149
219
await save({ defaultPath: tab.name + '.macro', filters: [ { name: 'Macro Files', extensions: [ 'macro' ] } ] });
150
220
151
-
if(!path)return;
221
+
if(!path)throw new Error("Cannot save");
152
222
153
223
tab.saveLocation = path;
154
224
tab.setNeedsSave(false);
···
195
265
}
196
266
197
267
198
-
public UpdateConfig(){
268
+
public UpdateConfig( needsSave = true ){
199
269
if(!this._selectedTab)return;
200
270
let tab = this._tabs[this._selectedTab];
201
271
if(!tab)return;
202
272
203
-
if(tab.refuseSync)return;
204
-
invoke('sync_tab', { graph: this._generateTabGraph(tab.id)[0], id: tab.id });
273
+
tab.nodes = this._nodes;
274
+
tab.needSync = true;
205
275
206
-
tab.setNeedsSave(true);
276
+
if(needsSave)tab.setNeedsSave(true);
207
277
}
208
278
209
-
private async _loadFromConfig( path: string, config: string ){
279
+
private async _loadFromConfig( path: string | null, id: string | null, config: string ){
210
280
let json = JSON.parse(config);
211
281
212
282
if(
···
215
285
!json.graph
216
286
)return;
217
287
218
-
let tab = await this.AddTab(json.tab_name);
219
-
tab.refuseSync = true;
288
+
let tab = await this.AddTab(json.tab_name, id);
289
+
tab.needSync = false;
220
290
tab.saveLocation = path;
221
291
222
292
this._nodes = [];
···
247
317
let input = output.connections[k];
248
318
let node = this._nodes.find(x => x.id === input.node)!;
249
319
320
+
if(!node)continue;
321
+
250
322
let realInput = node.inputs.find(x => x.index === input.index);
251
323
let realOutput = outputParentNode.outputs[j];
252
324
···
272
344
tab.setNeedsSave(false);
273
345
tab.nodes = this._nodes;
274
346
275
-
tab.refuseSync = false;
276
-
this.UpdateConfig();
347
+
tab.needSync = false;
348
+
if(!id)this.UpdateConfig(false);
349
+
350
+
return tab;
277
351
}
278
352
279
353
private _generateTabGraph( tabId: string | null ): [ any, Tab | null ]{
···
289
363
let node = tab.nodes[i];
290
364
291
365
let nodeOutputs = [];
366
+
let nodeInputs = [];
292
367
293
368
for (let j = 0; j < node.outputs.length; j++) {
294
369
let output = node.outputs[j];
···
305
380
})
306
381
}
307
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
+
308
398
nodesToSave.push({
309
399
name: node.name,
310
400
id: node.id,
311
401
typeId: node.typeId,
312
402
pos: [ node.x, node.y ],
313
403
outputs: nodeOutputs,
404
+
inputs: nodeInputs,
314
405
statics: node.statics
315
406
})
316
407
}
···
325
416
invoke('save_graph', { graph: JSON.stringify({
326
417
tab_name: tab.name,
327
418
version: await getVersion(),
419
+
platform: platform(),
328
420
graph: nodesToSave
329
421
}), path });
330
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
+
};
+22
src/Nodes/Statics/Float.tsx
+22
src/Nodes/Statics/Float.tsx
···
1
+
import { Node, NodeType } from "../../structs/node";
2
+
import { NodeDefinition } from "../Nodes";
3
+
4
+
export let NodeStaticsFloat: NodeDefinition = {
5
+
os: 'any',
6
+
7
+
isSingle: true,
8
+
name: 'Float',
9
+
typeId: 'staticfloat',
10
+
11
+
w: 200,
12
+
13
+
statics: [{
14
+
type: NodeType.Float,
15
+
name: 'Value',
16
+
value: 0.0
17
+
}],
18
+
19
+
outputs: [{ name: "Float", type: NodeType.Float }],
20
+
21
+
onStaticsUpdate: async ( _node: Node ) => {}
22
+
}
+4
-3
src/Nodes/Statics/Int.tsx
+4
-3
src/Nodes/Statics/Int.tsx
···
2
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
-
typeId: 'ifelse',
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 }],
+5
-1
src/Nodes/Statics.tsx
+5
-1
src/Nodes/Statics.tsx
···
1
1
import { NodeDefinition } from "./Nodes";
2
+
import { NodeStaticsFloat } from "./Statics/Float";
2
3
3
4
import { NodeStaticsInt } from "./Statics/Int";
4
5
import { NodeStaticsString } from "./Statics/String";
5
6
6
7
export let NodeStatics: NodeDefinition = {
8
+
os: 'any',
9
+
7
10
isSingle: false,
8
11
name: 'Statics',
9
12
items: [
10
13
NodeStaticsInt,
11
-
NodeStaticsString
14
+
NodeStaticsString,
15
+
NodeStaticsFloat
12
16
]
13
17
}
+1
-1
src/components/ConfirmationPopup.tsx
+1
-1
src/components/ConfirmationPopup.tsx
+40
-4
src/components/ControlBar.tsx
+40
-4
src/components/ControlBar.tsx
···
9
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
17
return (
18
18
<div class="control-bar">
19
-
<For each={props.node()?.statics}>
19
+
<For each={props.node()[0]?.statics}>
20
20
{ ( item ) => {
21
21
let [ popupOpen, setPopupOpen ] = createSignal(false);
22
22
···
26
26
<Match when={item.type == NodeType.String}>
27
27
{ item.name }
28
28
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
29
+
<input
30
+
type="text"
31
+
placeholder='Enter Value...'
32
+
value={item.value || ''}
33
+
onChange={( el ) => {
34
+
let value = el.target.value;
35
+
let node = props.node()[0]!;
29
36
37
+
item.value = value;
38
+
node.onStaticsUpdate(node);
39
+
40
+
NodeManager.Instance.UpdateConfig();
41
+
}} />
30
42
</div>
31
43
</Match>
32
44
<Match when={item.type == NodeType.Int}>
33
45
{ item.name }
34
46
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
47
+
<input
48
+
type="number"
49
+
placeholder='Enter Value...'
50
+
value={item.value !== undefined ? item.value : ''}
51
+
onChange={( el ) => {
52
+
let value = el.target.value;
53
+
let node = props.node()[0]!;
35
54
55
+
item.value = parseInt(value);
56
+
node.onStaticsUpdate(node);
57
+
58
+
NodeManager.Instance.UpdateConfig();
59
+
}} />
36
60
</div>
37
61
</Match>
38
62
<Match when={item.type == NodeType.Float}>
39
63
{ item.name }
40
64
<div style={{ display: 'inline-block', 'margin-left': '10px' }}>
65
+
<input
66
+
type="number"
67
+
placeholder='Enter Value...'
68
+
value={item.value !== undefined ? item.value : ''}
69
+
onChange={( el ) => {
70
+
let value = el.target.value;
71
+
let node = props.node()[0]!;
41
72
73
+
item.value = parseFloat(value);
74
+
node.onStaticsUpdate(node);
75
+
76
+
NodeManager.Instance.UpdateConfig();
77
+
}} />
42
78
</div>
43
79
</Match>
44
80
<Match when={item.type == NodeType.OSCAddress}>
···
52
88
return addresses.map(x => x.address).filter(x => x.toLowerCase().includes(text.toLowerCase()));
53
89
}}
54
90
change={( text ) => {
55
-
let node = props.node()!;
91
+
let node = props.node()[0]!;
56
92
57
93
item.value = text;
58
94
node.onStaticsUpdate(node);
···
78
114
}}
79
115
value={item.value}
80
116
changed={( value ) => {
81
-
let node = props.node()!;
117
+
let node = props.node()[0]!;
82
118
83
119
item.value = value;
84
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
+
}
+31
src/components/TabMenu.css
+31
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;
···
53
60
.tab-meta{
54
61
width: calc(100% - 40px);
55
62
transform: translateY(1px);
63
+
display: flex;
64
+
align-items: center;
56
65
}
57
66
58
67
.tab-meta-input{
···
93
102
transform: translate(-10px, 35px);
94
103
border-radius: 10px;
95
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;
96
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
}
+11
src/components/TextInput.css
+11
src/components/TextInput.css
···
9
9
width: 400px;
10
10
}
11
11
12
+
input[type="number"]{
13
+
outline: none;
14
+
background: none;
15
+
border: none;
16
+
border-bottom: 2px solid #525252;
17
+
font-size: 15px;
18
+
font-family: Rubik, 'Courier New';
19
+
color: #fff;
20
+
width: 400px;
21
+
}
22
+
12
23
div[input-dropdown]{
13
24
position: absolute;
14
25
width: fit-content;
+1
-1
src/index.tsx
+1
-1
src/index.tsx
+94
src/keybinds.ts
+94
src/keybinds.ts
···
1
+
import { Accessor, Setter } from "solid-js";
2
+
import { NodeManager } from "./Mangers/NodeManager";
3
+
import { Node } from "./structs/node";
4
+
import { readText, writeText } from "@tauri-apps/plugin-clipboard-manager";
5
+
import { decodeNodeList, encodeNodeList } from "./utils/clipboard";
6
+
7
+
let isKeyDown: any = {};
8
+
9
+
export let load = ( canvas: HTMLCanvasElement, mousePos: Accessor<[ number, number ]>, selectedNode: Accessor<Node[]>, setSelectedNode: Setter<Node[]> ) => {
10
+
// TODO: Add undo / redo -ing
11
+
12
+
canvas.onkeydown = async ( e ) => {
13
+
switch(e.key){
14
+
case 'Delete':
15
+
let nodes = selectedNode();
16
+
for(let node of nodes){
17
+
node.inputs.map(input => {
18
+
input.connections.map(partner => {
19
+
partner.connections = partner.connections.filter(x => x != input);
20
+
})
21
+
})
22
+
23
+
node.outputs.map(output => {
24
+
output.connections.map(partner => {
25
+
partner.connections = partner.connections.filter(x => x != output);
26
+
})
27
+
})
28
+
29
+
NodeManager.Instance.RemoveNode(node);
30
+
}
31
+
32
+
setSelectedNode([]);
33
+
break;
34
+
}
35
+
}
36
+
37
+
window.onkeydown = async ( e ) => {
38
+
isKeyDown[e.key] = true;
39
+
40
+
switch(e.key){
41
+
case 's':
42
+
if(e.ctrlKey){
43
+
let currentTab = NodeManager.Instance.CurrentTab();
44
+
if(!currentTab)return;
45
+
46
+
// Save
47
+
NodeManager.Instance.SaveTab(currentTab);
48
+
}
49
+
break;
50
+
case 'S':
51
+
if(e.ctrlKey){
52
+
let currentTab = NodeManager.Instance.CurrentTab();
53
+
if(!currentTab)return;
54
+
55
+
// Save
56
+
NodeManager.Instance.SaveTab(currentTab, true);
57
+
}
58
+
break;
59
+
case 'c':
60
+
if(e.ctrlKey){
61
+
let nodes = selectedNode();
62
+
await writeText(encodeNodeList(nodes, mousePos()));
63
+
}
64
+
break;
65
+
case 'v':
66
+
if(e.ctrlKey){
67
+
let text = await readText();
68
+
69
+
let nodes = await decodeNodeList(text, mousePos());
70
+
if(!nodes)return;
71
+
72
+
for(let node of nodes)
73
+
NodeManager.Instance.AddNode(node);
74
+
75
+
setSelectedNode(nodes);
76
+
}
77
+
break;
78
+
case 'z':
79
+
if(e.ctrlKey){
80
+
console.log('undo');
81
+
}
82
+
break;
83
+
case 'y':
84
+
if(e.ctrlKey){
85
+
console.log('redo');
86
+
}
87
+
break;
88
+
}
89
+
}
90
+
91
+
window.onkeyup = ( e ) => {
92
+
isKeyDown[e.key] = false;
93
+
}
94
+
}
+69
-40
src/renderer.ts
+69
-40
src/renderer.ts
···
63
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
+
}
+1221
-703
src-tauri/Cargo.lock
+1221
-703
src-tauri/Cargo.lock
···
7
7
version = "0.1.0"
8
8
dependencies = [
9
9
"anyhow",
10
+
"chrono",
11
+
"crossbeam-channel",
10
12
"dirs",
13
+
"enigo",
11
14
"flate2",
12
15
"serde",
13
16
"serde_json",
14
17
"tauri",
15
18
"tauri-build",
19
+
"tauri-plugin-clipboard-manager",
16
20
"tauri-plugin-dialog",
17
21
"tauri-plugin-opener",
22
+
"tauri-plugin-os",
18
23
"tokio",
19
24
]
20
25
21
26
[[package]]
22
-
name = "addr2line"
23
-
version = "0.24.2"
24
-
source = "registry+https://github.com/rust-lang/crates.io-index"
25
-
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
26
-
dependencies = [
27
-
"gimli",
28
-
]
29
-
30
-
[[package]]
31
27
name = "adler2"
32
28
version = "2.0.1"
33
29
source = "registry+https://github.com/rust-lang/crates.io-index"
···
35
31
36
32
[[package]]
37
33
name = "aho-corasick"
38
-
version = "1.1.3"
34
+
version = "1.1.4"
39
35
source = "registry+https://github.com/rust-lang/crates.io-index"
40
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
36
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
41
37
dependencies = [
42
38
"memchr",
43
39
]
···
58
54
]
59
55
60
56
[[package]]
61
-
name = "android-tzdata"
62
-
version = "0.1.1"
63
-
source = "registry+https://github.com/rust-lang/crates.io-index"
64
-
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
65
-
66
-
[[package]]
67
57
name = "android_system_properties"
68
58
version = "0.1.5"
69
59
source = "registry+https://github.com/rust-lang/crates.io-index"
···
74
64
75
65
[[package]]
76
66
name = "anyhow"
77
-
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"
78
74
source = "registry+https://github.com/rust-lang/crates.io-index"
79
-
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
+
]
80
91
81
92
[[package]]
82
93
name = "ashpd"
···
125
136
126
137
[[package]]
127
138
name = "async-executor"
128
-
version = "1.13.2"
139
+
version = "1.13.3"
129
140
source = "registry+https://github.com/rust-lang/crates.io-index"
130
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
141
+
checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
131
142
dependencies = [
132
143
"async-task",
133
144
"concurrent-queue",
···
139
150
140
151
[[package]]
141
152
name = "async-io"
142
-
version = "2.5.0"
153
+
version = "2.6.0"
143
154
source = "registry+https://github.com/rust-lang/crates.io-index"
144
-
checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
155
+
checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
145
156
dependencies = [
146
-
"async-lock",
157
+
"autocfg",
147
158
"cfg-if",
148
159
"concurrent-queue",
149
160
"futures-io",
150
161
"futures-lite",
151
162
"parking",
152
163
"polling",
153
-
"rustix",
164
+
"rustix 1.1.2",
154
165
"slab",
155
-
"windows-sys 0.60.2",
166
+
"windows-sys 0.61.2",
156
167
]
157
168
158
169
[[package]]
159
170
name = "async-lock"
160
-
version = "3.4.0"
171
+
version = "3.4.1"
161
172
source = "registry+https://github.com/rust-lang/crates.io-index"
162
-
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
173
+
checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
163
174
dependencies = [
164
175
"event-listener",
165
176
"event-listener-strategy",
···
168
179
169
180
[[package]]
170
181
name = "async-process"
171
-
version = "2.4.0"
182
+
version = "2.5.0"
172
183
source = "registry+https://github.com/rust-lang/crates.io-index"
173
-
checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
184
+
checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
174
185
dependencies = [
175
186
"async-channel",
176
187
"async-io",
···
181
192
"cfg-if",
182
193
"event-listener",
183
194
"futures-lite",
184
-
"rustix",
195
+
"rustix 1.1.2",
185
196
]
186
197
187
198
[[package]]
···
192
203
dependencies = [
193
204
"proc-macro2",
194
205
"quote",
195
-
"syn 2.0.104",
206
+
"syn 2.0.109",
196
207
]
197
208
198
209
[[package]]
199
210
name = "async-signal"
200
-
version = "0.2.12"
211
+
version = "0.2.13"
201
212
source = "registry+https://github.com/rust-lang/crates.io-index"
202
-
checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
213
+
checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
203
214
dependencies = [
204
215
"async-io",
205
216
"async-lock",
···
207
218
"cfg-if",
208
219
"futures-core",
209
220
"futures-io",
210
-
"rustix",
221
+
"rustix 1.1.2",
211
222
"signal-hook-registry",
212
223
"slab",
213
-
"windows-sys 0.60.2",
224
+
"windows-sys 0.61.2",
214
225
]
215
226
216
227
[[package]]
···
221
232
222
233
[[package]]
223
234
name = "async-trait"
224
-
version = "0.1.88"
235
+
version = "0.1.89"
225
236
source = "registry+https://github.com/rust-lang/crates.io-index"
226
-
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
237
+
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
227
238
dependencies = [
228
239
"proc-macro2",
229
240
"quote",
230
-
"syn 2.0.104",
241
+
"syn 2.0.109",
231
242
]
232
243
233
244
[[package]]
···
266
277
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
267
278
268
279
[[package]]
269
-
name = "backtrace"
270
-
version = "0.3.75"
271
-
source = "registry+https://github.com/rust-lang/crates.io-index"
272
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
273
-
dependencies = [
274
-
"addr2line",
275
-
"cfg-if",
276
-
"libc",
277
-
"miniz_oxide",
278
-
"object",
279
-
"rustc-demangle",
280
-
"windows-targets 0.52.6",
281
-
]
282
-
283
-
[[package]]
284
280
name = "base64"
285
281
version = "0.21.7"
286
282
source = "registry+https://github.com/rust-lang/crates.io-index"
···
300
296
301
297
[[package]]
302
298
name = "bitflags"
303
-
version = "2.9.1"
299
+
version = "2.10.0"
304
300
source = "registry+https://github.com/rust-lang/crates.io-index"
305
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
301
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
306
302
dependencies = [
307
-
"serde",
303
+
"serde_core",
308
304
]
309
305
310
306
[[package]]
···
327
323
328
324
[[package]]
329
325
name = "block2"
330
-
version = "0.6.1"
326
+
version = "0.6.2"
331
327
source = "registry+https://github.com/rust-lang/crates.io-index"
332
-
checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
328
+
checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
333
329
dependencies = [
334
-
"objc2 0.6.1",
330
+
"objc2 0.6.3",
335
331
]
336
332
337
333
[[package]]
···
349
345
350
346
[[package]]
351
347
name = "brotli"
352
-
version = "8.0.1"
348
+
version = "8.0.2"
353
349
source = "registry+https://github.com/rust-lang/crates.io-index"
354
-
checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
350
+
checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
355
351
dependencies = [
356
352
"alloc-no-stdlib",
357
353
"alloc-stdlib",
···
376
372
377
373
[[package]]
378
374
name = "bytemuck"
379
-
version = "1.23.1"
375
+
version = "1.24.0"
380
376
source = "registry+https://github.com/rust-lang/crates.io-index"
381
-
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
377
+
checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
382
378
383
379
[[package]]
384
380
name = "byteorder"
···
387
383
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
388
384
389
385
[[package]]
386
+
name = "byteorder-lite"
387
+
version = "0.1.0"
388
+
source = "registry+https://github.com/rust-lang/crates.io-index"
389
+
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
390
+
391
+
[[package]]
390
392
name = "bytes"
391
393
version = "1.10.1"
392
394
source = "registry+https://github.com/rust-lang/crates.io-index"
···
401
403
source = "registry+https://github.com/rust-lang/crates.io-index"
402
404
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
403
405
dependencies = [
404
-
"bitflags 2.9.1",
406
+
"bitflags 2.10.0",
405
407
"cairo-sys-rs",
406
408
"glib",
407
409
"libc",
···
422
424
423
425
[[package]]
424
426
name = "camino"
425
-
version = "1.1.10"
427
+
version = "1.2.1"
426
428
source = "registry+https://github.com/rust-lang/crates.io-index"
427
-
checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
429
+
checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609"
428
430
dependencies = [
429
-
"serde",
431
+
"serde_core",
430
432
]
431
433
432
434
[[package]]
···
449
451
"semver",
450
452
"serde",
451
453
"serde_json",
452
-
"thiserror 2.0.12",
454
+
"thiserror 2.0.17",
453
455
]
454
456
455
457
[[package]]
···
459
461
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
460
462
dependencies = [
461
463
"serde",
462
-
"toml 0.9.3",
464
+
"toml 0.9.8",
463
465
]
464
466
465
467
[[package]]
466
468
name = "cc"
467
-
version = "1.2.30"
469
+
version = "1.2.45"
468
470
source = "registry+https://github.com/rust-lang/crates.io-index"
469
-
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
471
+
checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe"
470
472
dependencies = [
473
+
"find-msvc-tools",
471
474
"shlex",
472
475
]
473
476
···
500
503
501
504
[[package]]
502
505
name = "cfg-if"
503
-
version = "1.0.1"
506
+
version = "1.0.4"
504
507
source = "registry+https://github.com/rust-lang/crates.io-index"
505
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
508
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
506
509
507
510
[[package]]
508
511
name = "cfg_aliases"
···
512
515
513
516
[[package]]
514
517
name = "chrono"
515
-
version = "0.4.41"
518
+
version = "0.4.42"
516
519
source = "registry+https://github.com/rust-lang/crates.io-index"
517
-
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
520
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
518
521
dependencies = [
519
-
"android-tzdata",
520
522
"iana-time-zone",
523
+
"js-sys",
521
524
"num-traits",
522
525
"serde",
523
-
"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",
524
537
]
525
538
526
539
[[package]]
···
580
593
source = "registry+https://github.com/rust-lang/crates.io-index"
581
594
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
582
595
dependencies = [
583
-
"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",
584
610
"core-foundation",
585
611
"core-graphics-types",
586
612
"foreign-types",
···
593
619
source = "registry+https://github.com/rust-lang/crates.io-index"
594
620
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
595
621
dependencies = [
596
-
"bitflags 2.9.1",
622
+
"bitflags 2.10.0",
597
623
"core-foundation",
598
624
"libc",
599
625
]
···
632
658
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
633
659
634
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]]
635
667
name = "crypto-common"
636
668
version = "0.1.6"
637
669
source = "registry+https://github.com/rust-lang/crates.io-index"
···
665
697
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
666
698
dependencies = [
667
699
"quote",
668
-
"syn 2.0.104",
700
+
"syn 2.0.109",
669
701
]
670
702
671
703
[[package]]
···
675
707
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
676
708
dependencies = [
677
709
"quote",
678
-
"syn 2.0.104",
710
+
"syn 2.0.109",
679
711
]
680
712
681
713
[[package]]
682
714
name = "darling"
683
-
version = "0.20.11"
715
+
version = "0.21.3"
684
716
source = "registry+https://github.com/rust-lang/crates.io-index"
685
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
717
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
686
718
dependencies = [
687
719
"darling_core",
688
720
"darling_macro",
···
690
722
691
723
[[package]]
692
724
name = "darling_core"
693
-
version = "0.20.11"
725
+
version = "0.21.3"
694
726
source = "registry+https://github.com/rust-lang/crates.io-index"
695
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
727
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
696
728
dependencies = [
697
729
"fnv",
698
730
"ident_case",
699
731
"proc-macro2",
700
732
"quote",
701
733
"strsim",
702
-
"syn 2.0.104",
734
+
"syn 2.0.109",
703
735
]
704
736
705
737
[[package]]
706
738
name = "darling_macro"
707
-
version = "0.20.11"
739
+
version = "0.21.3"
708
740
source = "registry+https://github.com/rust-lang/crates.io-index"
709
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
741
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
710
742
dependencies = [
711
743
"darling_core",
712
744
"quote",
713
-
"syn 2.0.104",
745
+
"syn 2.0.109",
714
746
]
715
747
716
748
[[package]]
717
749
name = "deranged"
718
-
version = "0.4.0"
750
+
version = "0.5.5"
719
751
source = "registry+https://github.com/rust-lang/crates.io-index"
720
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
752
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
721
753
dependencies = [
722
754
"powerfmt",
723
-
"serde",
755
+
"serde_core",
724
756
]
725
757
726
758
[[package]]
···
733
765
"proc-macro2",
734
766
"quote",
735
767
"rustc_version",
736
-
"syn 2.0.104",
768
+
"syn 2.0.109",
737
769
]
738
770
739
771
[[package]]
···
764
796
"libc",
765
797
"option-ext",
766
798
"redox_users",
767
-
"windows-sys 0.60.2",
799
+
"windows-sys 0.61.2",
768
800
]
769
801
770
802
[[package]]
···
779
811
source = "registry+https://github.com/rust-lang/crates.io-index"
780
812
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
781
813
dependencies = [
782
-
"bitflags 2.9.1",
783
-
"block2 0.6.1",
814
+
"bitflags 2.10.0",
815
+
"block2 0.6.2",
784
816
"libc",
785
-
"objc2 0.6.1",
817
+
"objc2 0.6.3",
786
818
]
787
819
788
820
[[package]]
···
793
825
dependencies = [
794
826
"proc-macro2",
795
827
"quote",
796
-
"syn 2.0.104",
828
+
"syn 2.0.109",
797
829
]
798
830
799
831
[[package]]
···
802
834
source = "registry+https://github.com/rust-lang/crates.io-index"
803
835
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
804
836
dependencies = [
805
-
"libloading",
837
+
"libloading 0.8.9",
806
838
]
807
839
808
840
[[package]]
809
841
name = "dlopen2"
810
-
version = "0.7.0"
842
+
version = "0.8.0"
811
843
source = "registry+https://github.com/rust-lang/crates.io-index"
812
-
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
844
+
checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff"
813
845
dependencies = [
814
846
"dlopen2_derive",
815
847
"libc",
···
825
857
dependencies = [
826
858
"proc-macro2",
827
859
"quote",
828
-
"syn 2.0.104",
860
+
"syn 2.0.109",
829
861
]
830
862
831
863
[[package]]
···
872
904
873
905
[[package]]
874
906
name = "embed-resource"
875
-
version = "3.0.5"
907
+
version = "3.0.6"
876
908
source = "registry+https://github.com/rust-lang/crates.io-index"
877
-
checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38"
909
+
checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e"
878
910
dependencies = [
879
911
"cc",
880
912
"memchr",
881
913
"rustc_version",
882
-
"toml 0.9.3",
914
+
"toml 0.9.8",
883
915
"vswhom",
884
916
"winreg",
885
917
]
···
897
929
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
898
930
899
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]]
900
953
name = "enumflags2"
901
954
version = "0.7.12"
902
955
source = "registry+https://github.com/rust-lang/crates.io-index"
···
914
967
dependencies = [
915
968
"proc-macro2",
916
969
"quote",
917
-
"syn 2.0.104",
970
+
"syn 2.0.109",
918
971
]
919
972
920
973
[[package]]
···
925
978
926
979
[[package]]
927
980
name = "erased-serde"
928
-
version = "0.4.6"
981
+
version = "0.4.9"
929
982
source = "registry+https://github.com/rust-lang/crates.io-index"
930
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
983
+
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
931
984
dependencies = [
932
985
"serde",
986
+
"serde_core",
933
987
"typeid",
934
988
]
935
989
936
990
[[package]]
937
991
name = "errno"
938
-
version = "0.3.13"
992
+
version = "0.3.14"
939
993
source = "registry+https://github.com/rust-lang/crates.io-index"
940
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
994
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
941
995
dependencies = [
942
996
"libc",
943
-
"windows-sys 0.60.2",
997
+
"windows-sys 0.61.2",
944
998
]
945
999
946
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]]
947
1007
name = "event-listener"
948
-
version = "5.4.0"
1008
+
version = "5.4.1"
949
1009
source = "registry+https://github.com/rust-lang/crates.io-index"
950
-
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
1010
+
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
951
1011
dependencies = [
952
1012
"concurrent-queue",
953
1013
"parking",
···
971
1031
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
972
1032
973
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]]
974
1054
name = "fdeflate"
975
1055
version = "0.3.7"
976
1056
source = "registry+https://github.com/rust-lang/crates.io-index"
···
990
1070
]
991
1071
992
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]]
993
1085
name = "flate2"
994
-
version = "1.1.2"
1086
+
version = "1.1.5"
995
1087
source = "registry+https://github.com/rust-lang/crates.io-index"
996
-
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
1088
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
997
1089
dependencies = [
998
1090
"crc32fast",
999
1091
"miniz_oxide",
···
1006
1098
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1007
1099
1008
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]]
1009
1107
name = "foreign-types"
1010
1108
version = "0.5.0"
1011
1109
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1023
1121
dependencies = [
1024
1122
"proc-macro2",
1025
1123
"quote",
1026
-
"syn 2.0.104",
1124
+
"syn 2.0.109",
1027
1125
]
1028
1126
1029
1127
[[package]]
···
1034
1132
1035
1133
[[package]]
1036
1134
name = "form_urlencoded"
1037
-
version = "1.2.1"
1135
+
version = "1.2.2"
1038
1136
source = "registry+https://github.com/rust-lang/crates.io-index"
1039
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
1137
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1040
1138
dependencies = [
1041
1139
"percent-encoding",
1042
1140
]
···
1085
1183
1086
1184
[[package]]
1087
1185
name = "futures-lite"
1088
-
version = "2.6.0"
1186
+
version = "2.6.1"
1089
1187
source = "registry+https://github.com/rust-lang/crates.io-index"
1090
-
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
1188
+
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1091
1189
dependencies = [
1092
1190
"fastrand",
1093
1191
"futures-core",
···
1104
1202
dependencies = [
1105
1203
"proc-macro2",
1106
1204
"quote",
1107
-
"syn 2.0.104",
1205
+
"syn 2.0.109",
1108
1206
]
1109
1207
1110
1208
[[package]]
···
1246
1344
1247
1345
[[package]]
1248
1346
name = "generic-array"
1249
-
version = "0.14.7"
1347
+
version = "0.14.9"
1250
1348
source = "registry+https://github.com/rust-lang/crates.io-index"
1251
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1349
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
1252
1350
dependencies = [
1253
1351
"typenum",
1254
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",
1255
1363
]
1256
1364
1257
1365
[[package]]
···
1278
1386
1279
1387
[[package]]
1280
1388
name = "getrandom"
1281
-
version = "0.3.3"
1389
+
version = "0.3.4"
1282
1390
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1391
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1284
1392
dependencies = [
1285
1393
"cfg-if",
1286
1394
"libc",
1287
1395
"r-efi",
1288
-
"wasi 0.14.2+wasi-0.2.4",
1396
+
"wasip2",
1289
1397
]
1290
-
1291
-
[[package]]
1292
-
name = "gimli"
1293
-
version = "0.31.1"
1294
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1295
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1296
1398
1297
1399
[[package]]
1298
1400
name = "gio"
···
1332
1434
source = "registry+https://github.com/rust-lang/crates.io-index"
1333
1435
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1334
1436
dependencies = [
1335
-
"bitflags 2.9.1",
1437
+
"bitflags 2.10.0",
1336
1438
"futures-channel",
1337
1439
"futures-core",
1338
1440
"futures-executor",
···
1356
1458
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1357
1459
dependencies = [
1358
1460
"heck 0.4.1",
1359
-
"proc-macro-crate 2.0.0",
1461
+
"proc-macro-crate 2.0.2",
1360
1462
"proc-macro-error",
1361
1463
"proc-macro2",
1362
1464
"quote",
1363
-
"syn 2.0.104",
1465
+
"syn 2.0.109",
1364
1466
]
1365
1467
1366
1468
[[package]]
···
1375
1477
1376
1478
[[package]]
1377
1479
name = "glob"
1378
-
version = "0.3.2"
1480
+
version = "0.3.3"
1379
1481
source = "registry+https://github.com/rust-lang/crates.io-index"
1380
-
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
1482
+
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
1381
1483
1382
1484
[[package]]
1383
1485
name = "gobject-sys"
···
1439
1541
"proc-macro-error",
1440
1542
"proc-macro2",
1441
1543
"quote",
1442
-
"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",
1443
1556
]
1444
1557
1445
1558
[[package]]
···
1450
1563
1451
1564
[[package]]
1452
1565
name = "hashbrown"
1453
-
version = "0.15.4"
1566
+
version = "0.15.5"
1567
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1568
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1569
+
dependencies = [
1570
+
"foldhash",
1571
+
]
1572
+
1573
+
[[package]]
1574
+
name = "hashbrown"
1575
+
version = "0.16.0"
1454
1576
source = "registry+https://github.com/rust-lang/crates.io-index"
1455
-
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
1577
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1456
1578
1457
1579
[[package]]
1458
1580
name = "heck"
···
1532
1654
1533
1655
[[package]]
1534
1656
name = "hyper"
1535
-
version = "1.6.0"
1657
+
version = "1.7.0"
1536
1658
source = "registry+https://github.com/rust-lang/crates.io-index"
1537
-
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1659
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
1538
1660
dependencies = [
1661
+
"atomic-waker",
1539
1662
"bytes",
1540
1663
"futures-channel",
1541
-
"futures-util",
1664
+
"futures-core",
1542
1665
"http",
1543
1666
"http-body",
1544
1667
"httparse",
1545
1668
"itoa",
1546
1669
"pin-project-lite",
1670
+
"pin-utils",
1547
1671
"smallvec",
1548
1672
"tokio",
1549
1673
"want",
···
1551
1675
1552
1676
[[package]]
1553
1677
name = "hyper-util"
1554
-
version = "0.1.16"
1678
+
version = "0.1.17"
1555
1679
source = "registry+https://github.com/rust-lang/crates.io-index"
1556
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1680
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
1557
1681
dependencies = [
1558
1682
"base64 0.22.1",
1559
1683
"bytes",
···
1575
1699
1576
1700
[[package]]
1577
1701
name = "iana-time-zone"
1578
-
version = "0.1.63"
1702
+
version = "0.1.64"
1579
1703
source = "registry+https://github.com/rust-lang/crates.io-index"
1580
-
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1704
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1581
1705
dependencies = [
1582
1706
"android_system_properties",
1583
1707
"core-foundation-sys",
···
1585
1709
"js-sys",
1586
1710
"log",
1587
1711
"wasm-bindgen",
1588
-
"windows-core",
1712
+
"windows-core 0.62.2",
1589
1713
]
1590
1714
1591
1715
[[package]]
···
1604
1728
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1605
1729
dependencies = [
1606
1730
"byteorder",
1607
-
"png",
1731
+
"png 0.17.16",
1608
1732
]
1609
1733
1610
1734
[[package]]
1611
1735
name = "icu_collections"
1612
-
version = "2.0.0"
1736
+
version = "2.1.1"
1613
1737
source = "registry+https://github.com/rust-lang/crates.io-index"
1614
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1738
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
1615
1739
dependencies = [
1616
1740
"displaydoc",
1617
1741
"potential_utf",
···
1622
1746
1623
1747
[[package]]
1624
1748
name = "icu_locale_core"
1625
-
version = "2.0.0"
1749
+
version = "2.1.1"
1626
1750
source = "registry+https://github.com/rust-lang/crates.io-index"
1627
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1751
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
1628
1752
dependencies = [
1629
1753
"displaydoc",
1630
1754
"litemap",
···
1635
1759
1636
1760
[[package]]
1637
1761
name = "icu_normalizer"
1638
-
version = "2.0.0"
1762
+
version = "2.1.1"
1639
1763
source = "registry+https://github.com/rust-lang/crates.io-index"
1640
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1764
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
1641
1765
dependencies = [
1642
-
"displaydoc",
1643
1766
"icu_collections",
1644
1767
"icu_normalizer_data",
1645
1768
"icu_properties",
···
1650
1773
1651
1774
[[package]]
1652
1775
name = "icu_normalizer_data"
1653
-
version = "2.0.0"
1776
+
version = "2.1.1"
1654
1777
source = "registry+https://github.com/rust-lang/crates.io-index"
1655
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1778
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
1656
1779
1657
1780
[[package]]
1658
1781
name = "icu_properties"
1659
-
version = "2.0.1"
1782
+
version = "2.1.1"
1660
1783
source = "registry+https://github.com/rust-lang/crates.io-index"
1661
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1784
+
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
1662
1785
dependencies = [
1663
-
"displaydoc",
1664
1786
"icu_collections",
1665
1787
"icu_locale_core",
1666
1788
"icu_properties_data",
1667
1789
"icu_provider",
1668
-
"potential_utf",
1669
1790
"zerotrie",
1670
1791
"zerovec",
1671
1792
]
1672
1793
1673
1794
[[package]]
1674
1795
name = "icu_properties_data"
1675
-
version = "2.0.1"
1796
+
version = "2.1.1"
1676
1797
source = "registry+https://github.com/rust-lang/crates.io-index"
1677
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1798
+
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
1678
1799
1679
1800
[[package]]
1680
1801
name = "icu_provider"
1681
-
version = "2.0.0"
1802
+
version = "2.1.1"
1682
1803
source = "registry+https://github.com/rust-lang/crates.io-index"
1683
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1804
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
1684
1805
dependencies = [
1685
1806
"displaydoc",
1686
1807
"icu_locale_core",
1687
-
"stable_deref_trait",
1688
-
"tinystr",
1689
1808
"writeable",
1690
1809
"yoke",
1691
1810
"zerofrom",
···
1701
1820
1702
1821
[[package]]
1703
1822
name = "idna"
1704
-
version = "1.0.3"
1823
+
version = "1.1.0"
1705
1824
source = "registry+https://github.com/rust-lang/crates.io-index"
1706
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
1825
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1707
1826
dependencies = [
1708
1827
"idna_adapter",
1709
1828
"smallvec",
···
1721
1840
]
1722
1841
1723
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]]
1724
1857
name = "indexmap"
1725
1858
version = "1.9.3"
1726
1859
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1733
1866
1734
1867
[[package]]
1735
1868
name = "indexmap"
1736
-
version = "2.10.0"
1869
+
version = "2.12.0"
1737
1870
source = "registry+https://github.com/rust-lang/crates.io-index"
1738
-
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
1871
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
1739
1872
dependencies = [
1740
1873
"equivalent",
1741
-
"hashbrown 0.15.4",
1874
+
"hashbrown 0.16.0",
1742
1875
"serde",
1876
+
"serde_core",
1743
1877
]
1744
1878
1745
1879
[[package]]
···
1752
1886
]
1753
1887
1754
1888
[[package]]
1755
-
name = "io-uring"
1756
-
version = "0.7.9"
1757
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1758
-
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
1759
-
dependencies = [
1760
-
"bitflags 2.9.1",
1761
-
"cfg-if",
1762
-
"libc",
1763
-
]
1764
-
1765
-
[[package]]
1766
1889
name = "ipnet"
1767
1890
version = "2.11.0"
1768
1891
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1770
1893
1771
1894
[[package]]
1772
1895
name = "iri-string"
1773
-
version = "0.7.8"
1896
+
version = "0.7.9"
1774
1897
source = "registry+https://github.com/rust-lang/crates.io-index"
1775
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1898
+
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
1776
1899
dependencies = [
1777
1900
"memchr",
1778
1901
"serde",
···
1850
1973
1851
1974
[[package]]
1852
1975
name = "js-sys"
1853
-
version = "0.3.77"
1976
+
version = "0.3.82"
1854
1977
source = "registry+https://github.com/rust-lang/crates.io-index"
1855
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1978
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
1856
1979
dependencies = [
1857
1980
"once_cell",
1858
1981
"wasm-bindgen",
···
1886
2009
source = "registry+https://github.com/rust-lang/crates.io-index"
1887
2010
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
1888
2011
dependencies = [
1889
-
"bitflags 2.9.1",
2012
+
"bitflags 2.10.0",
1890
2013
"serde",
1891
2014
"unicode-segmentation",
1892
2015
]
···
1899
2022
dependencies = [
1900
2023
"cssparser",
1901
2024
"html5ever",
1902
-
"indexmap 2.10.0",
2025
+
"indexmap 2.12.0",
1903
2026
"selectors",
1904
2027
]
1905
2028
···
1929
2052
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
1930
2053
dependencies = [
1931
2054
"gtk-sys",
1932
-
"libloading",
2055
+
"libloading 0.7.4",
1933
2056
"once_cell",
1934
2057
]
1935
2058
1936
2059
[[package]]
1937
2060
name = "libc"
1938
-
version = "0.2.174"
2061
+
version = "0.2.177"
1939
2062
source = "registry+https://github.com/rust-lang/crates.io-index"
1940
-
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
2063
+
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
1941
2064
1942
2065
[[package]]
1943
2066
name = "libloading"
···
1950
2073
]
1951
2074
1952
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]]
1953
2086
name = "libredox"
1954
-
version = "0.1.8"
2087
+
version = "0.1.10"
1955
2088
source = "registry+https://github.com/rust-lang/crates.io-index"
1956
-
checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7"
2089
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1957
2090
dependencies = [
1958
-
"bitflags 2.9.1",
2091
+
"bitflags 2.10.0",
1959
2092
"libc",
1960
2093
]
1961
2094
1962
2095
[[package]]
1963
2096
name = "linux-raw-sys"
1964
-
version = "0.9.4"
2097
+
version = "0.4.15"
2098
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2099
+
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
2100
+
2101
+
[[package]]
2102
+
name = "linux-raw-sys"
2103
+
version = "0.11.0"
1965
2104
source = "registry+https://github.com/rust-lang/crates.io-index"
1966
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
2105
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1967
2106
1968
2107
[[package]]
1969
2108
name = "litemap"
1970
-
version = "0.8.0"
2109
+
version = "0.8.1"
1971
2110
source = "registry+https://github.com/rust-lang/crates.io-index"
1972
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
2111
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
1973
2112
1974
2113
[[package]]
1975
2114
name = "lock_api"
1976
-
version = "0.4.13"
2115
+
version = "0.4.14"
1977
2116
source = "registry+https://github.com/rust-lang/crates.io-index"
1978
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
2117
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1979
2118
dependencies = [
1980
-
"autocfg",
1981
2119
"scopeguard",
1982
2120
]
1983
2121
1984
2122
[[package]]
1985
2123
name = "log"
1986
-
version = "0.4.27"
2124
+
version = "0.4.28"
1987
2125
source = "registry+https://github.com/rust-lang/crates.io-index"
1988
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
2126
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1989
2127
1990
2128
[[package]]
1991
2129
name = "mac"
···
2015
2153
dependencies = [
2016
2154
"proc-macro2",
2017
2155
"quote",
2018
-
"syn 2.0.104",
2156
+
"syn 2.0.109",
2019
2157
]
2020
2158
2021
2159
[[package]]
···
2026
2164
2027
2165
[[package]]
2028
2166
name = "memchr"
2029
-
version = "2.7.5"
2167
+
version = "2.7.6"
2030
2168
source = "registry+https://github.com/rust-lang/crates.io-index"
2031
-
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
+
]
2032
2179
2033
2180
[[package]]
2034
2181
name = "memoffset"
···
2046
2193
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2047
2194
2048
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]]
2049
2202
name = "miniz_oxide"
2050
2203
version = "0.8.9"
2051
2204
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2057
2210
2058
2211
[[package]]
2059
2212
name = "mio"
2060
-
version = "1.0.4"
2213
+
version = "1.1.0"
2061
2214
source = "registry+https://github.com/rust-lang/crates.io-index"
2062
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2215
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
2063
2216
dependencies = [
2064
2217
"libc",
2065
2218
"wasi 0.11.1+wasi-snapshot-preview1",
2066
-
"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",
2067
2230
]
2068
2231
2069
2232
[[package]]
2070
2233
name = "muda"
2071
-
version = "0.17.0"
2234
+
version = "0.17.1"
2072
2235
source = "registry+https://github.com/rust-lang/crates.io-index"
2073
-
checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988"
2236
+
checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a"
2074
2237
dependencies = [
2075
2238
"crossbeam-channel",
2076
2239
"dpi",
2077
2240
"gtk",
2078
2241
"keyboard-types",
2079
-
"objc2 0.6.1",
2242
+
"objc2 0.6.3",
2080
2243
"objc2-app-kit",
2081
2244
"objc2-core-foundation",
2082
-
"objc2-foundation 0.3.1",
2245
+
"objc2-foundation 0.3.2",
2083
2246
"once_cell",
2084
-
"png",
2247
+
"png 0.17.16",
2085
2248
"serde",
2086
-
"thiserror 2.0.12",
2087
-
"windows-sys 0.59.0",
2249
+
"thiserror 2.0.17",
2250
+
"windows-sys 0.60.2",
2088
2251
]
2089
2252
2090
2253
[[package]]
···
2093
2256
source = "registry+https://github.com/rust-lang/crates.io-index"
2094
2257
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2095
2258
dependencies = [
2096
-
"bitflags 2.9.1",
2259
+
"bitflags 2.10.0",
2097
2260
"jni-sys",
2098
2261
"log",
2099
2262
"ndk-sys",
···
2129
2292
source = "registry+https://github.com/rust-lang/crates.io-index"
2130
2293
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2131
2294
dependencies = [
2132
-
"bitflags 2.9.1",
2295
+
"bitflags 2.10.0",
2133
2296
"cfg-if",
2134
2297
"cfg_aliases",
2135
2298
"libc",
···
2143
2306
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2144
2307
2145
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]]
2146
2328
name = "num-conv"
2147
2329
version = "0.1.0"
2148
2330
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2159
2341
2160
2342
[[package]]
2161
2343
name = "num_enum"
2162
-
version = "0.7.4"
2344
+
version = "0.7.5"
2163
2345
source = "registry+https://github.com/rust-lang/crates.io-index"
2164
-
checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2346
+
checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
2165
2347
dependencies = [
2166
2348
"num_enum_derive",
2167
2349
"rustversion",
···
2169
2351
2170
2352
[[package]]
2171
2353
name = "num_enum_derive"
2172
-
version = "0.7.4"
2354
+
version = "0.7.5"
2173
2355
source = "registry+https://github.com/rust-lang/crates.io-index"
2174
-
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2356
+
checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
2175
2357
dependencies = [
2176
-
"proc-macro-crate 3.3.0",
2358
+
"proc-macro-crate 3.4.0",
2177
2359
"proc-macro2",
2178
2360
"quote",
2179
-
"syn 2.0.104",
2361
+
"syn 2.0.109",
2180
2362
]
2181
2363
2182
2364
[[package]]
···
2197
2379
2198
2380
[[package]]
2199
2381
name = "objc2"
2200
-
version = "0.6.1"
2382
+
version = "0.6.3"
2201
2383
source = "registry+https://github.com/rust-lang/crates.io-index"
2202
-
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
2384
+
checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
2203
2385
dependencies = [
2204
2386
"objc2-encode",
2205
2387
"objc2-exception-helper",
···
2207
2389
2208
2390
[[package]]
2209
2391
name = "objc2-app-kit"
2210
-
version = "0.3.1"
2392
+
version = "0.3.2"
2211
2393
source = "registry+https://github.com/rust-lang/crates.io-index"
2212
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2394
+
checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
2213
2395
dependencies = [
2214
-
"bitflags 2.9.1",
2215
-
"block2 0.6.1",
2396
+
"bitflags 2.10.0",
2397
+
"block2 0.6.2",
2216
2398
"libc",
2217
-
"objc2 0.6.1",
2399
+
"objc2 0.6.3",
2218
2400
"objc2-cloud-kit",
2219
2401
"objc2-core-data",
2220
2402
"objc2-core-foundation",
2221
2403
"objc2-core-graphics",
2222
2404
"objc2-core-image",
2223
-
"objc2-foundation 0.3.1",
2224
-
"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",
2225
2409
]
2226
2410
2227
2411
[[package]]
2228
2412
name = "objc2-cloud-kit"
2229
-
version = "0.3.1"
2413
+
version = "0.3.2"
2230
2414
source = "registry+https://github.com/rust-lang/crates.io-index"
2231
-
checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d"
2415
+
checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
2232
2416
dependencies = [
2233
-
"bitflags 2.9.1",
2234
-
"objc2 0.6.1",
2235
-
"objc2-foundation 0.3.1",
2417
+
"bitflags 2.10.0",
2418
+
"objc2 0.6.3",
2419
+
"objc2-foundation 0.3.2",
2236
2420
]
2237
2421
2238
2422
[[package]]
2239
2423
name = "objc2-core-data"
2240
-
version = "0.3.1"
2424
+
version = "0.3.2"
2241
2425
source = "registry+https://github.com/rust-lang/crates.io-index"
2242
-
checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d"
2426
+
checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
2243
2427
dependencies = [
2244
-
"bitflags 2.9.1",
2245
-
"objc2 0.6.1",
2246
-
"objc2-foundation 0.3.1",
2428
+
"bitflags 2.10.0",
2429
+
"objc2 0.6.3",
2430
+
"objc2-foundation 0.3.2",
2247
2431
]
2248
2432
2249
2433
[[package]]
2250
2434
name = "objc2-core-foundation"
2251
-
version = "0.3.1"
2435
+
version = "0.3.2"
2252
2436
source = "registry+https://github.com/rust-lang/crates.io-index"
2253
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2437
+
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
2254
2438
dependencies = [
2255
-
"bitflags 2.9.1",
2439
+
"bitflags 2.10.0",
2256
2440
"dispatch2",
2257
-
"objc2 0.6.1",
2441
+
"objc2 0.6.3",
2258
2442
]
2259
2443
2260
2444
[[package]]
2261
2445
name = "objc2-core-graphics"
2262
-
version = "0.3.1"
2446
+
version = "0.3.2"
2263
2447
source = "registry+https://github.com/rust-lang/crates.io-index"
2264
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2448
+
checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
2265
2449
dependencies = [
2266
-
"bitflags 2.9.1",
2450
+
"bitflags 2.10.0",
2267
2451
"dispatch2",
2268
-
"objc2 0.6.1",
2452
+
"objc2 0.6.3",
2269
2453
"objc2-core-foundation",
2270
2454
"objc2-io-surface",
2271
2455
]
2272
2456
2273
2457
[[package]]
2274
2458
name = "objc2-core-image"
2275
-
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"
2276
2492
source = "registry+https://github.com/rust-lang/crates.io-index"
2277
-
checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e"
2493
+
checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
2278
2494
dependencies = [
2279
-
"objc2 0.6.1",
2280
-
"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",
2281
2500
]
2282
2501
2283
2502
[[package]]
···
2301
2520
source = "registry+https://github.com/rust-lang/crates.io-index"
2302
2521
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2303
2522
dependencies = [
2304
-
"bitflags 2.9.1",
2523
+
"bitflags 2.10.0",
2305
2524
"block2 0.5.1",
2306
2525
"libc",
2307
2526
"objc2 0.5.2",
···
2309
2528
2310
2529
[[package]]
2311
2530
name = "objc2-foundation"
2312
-
version = "0.3.1"
2531
+
version = "0.3.2"
2313
2532
source = "registry+https://github.com/rust-lang/crates.io-index"
2314
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
2533
+
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2315
2534
dependencies = [
2316
-
"bitflags 2.9.1",
2317
-
"block2 0.6.1",
2535
+
"bitflags 2.10.0",
2536
+
"block2 0.6.2",
2318
2537
"libc",
2319
-
"objc2 0.6.1",
2538
+
"objc2 0.6.3",
2320
2539
"objc2-core-foundation",
2321
2540
]
2322
2541
2323
2542
[[package]]
2324
2543
name = "objc2-io-surface"
2325
-
version = "0.3.1"
2544
+
version = "0.3.2"
2326
2545
source = "registry+https://github.com/rust-lang/crates.io-index"
2327
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
2546
+
checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2328
2547
dependencies = [
2329
-
"bitflags 2.9.1",
2330
-
"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",
2331
2560
"objc2-core-foundation",
2332
2561
]
2333
2562
···
2337
2566
source = "registry+https://github.com/rust-lang/crates.io-index"
2338
2567
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2339
2568
dependencies = [
2340
-
"bitflags 2.9.1",
2569
+
"bitflags 2.10.0",
2341
2570
"block2 0.5.1",
2342
2571
"objc2 0.5.2",
2343
2572
"objc2-foundation 0.2.2",
···
2349
2578
source = "registry+https://github.com/rust-lang/crates.io-index"
2350
2579
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2351
2580
dependencies = [
2352
-
"bitflags 2.9.1",
2581
+
"bitflags 2.10.0",
2353
2582
"block2 0.5.1",
2354
2583
"objc2 0.5.2",
2355
2584
"objc2-foundation 0.2.2",
···
2358
2587
2359
2588
[[package]]
2360
2589
name = "objc2-quartz-core"
2361
-
version = "0.3.1"
2590
+
version = "0.3.2"
2362
2591
source = "registry+https://github.com/rust-lang/crates.io-index"
2363
-
checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5"
2592
+
checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
2364
2593
dependencies = [
2365
-
"bitflags 2.9.1",
2366
-
"objc2 0.6.1",
2367
-
"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",
2368
2598
]
2369
2599
2370
2600
[[package]]
2371
-
name = "objc2-ui-kit"
2372
-
version = "0.3.1"
2601
+
name = "objc2-security"
2602
+
version = "0.3.2"
2373
2603
source = "registry+https://github.com/rust-lang/crates.io-index"
2374
-
checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed"
2604
+
checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a"
2375
2605
dependencies = [
2376
-
"bitflags 2.9.1",
2377
-
"objc2 0.6.1",
2606
+
"bitflags 2.10.0",
2607
+
"objc2 0.6.3",
2378
2608
"objc2-core-foundation",
2379
-
"objc2-foundation 0.3.1",
2380
2609
]
2381
2610
2382
2611
[[package]]
2383
-
name = "objc2-web-kit"
2384
-
version = "0.3.1"
2612
+
name = "objc2-ui-kit"
2613
+
version = "0.3.2"
2385
2614
source = "registry+https://github.com/rust-lang/crates.io-index"
2386
-
checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad"
2615
+
checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
2387
2616
dependencies = [
2388
-
"bitflags 2.9.1",
2389
-
"block2 0.6.1",
2390
-
"objc2 0.6.1",
2391
-
"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",
2392
2622
"objc2-core-foundation",
2393
-
"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",
2394
2630
]
2395
2631
2396
2632
[[package]]
2397
-
name = "object"
2398
-
version = "0.36.7"
2633
+
name = "objc2-user-notifications"
2634
+
version = "0.3.2"
2635
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2636
+
checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e"
2637
+
dependencies = [
2638
+
"objc2 0.6.3",
2639
+
"objc2-foundation 0.3.2",
2640
+
]
2641
+
2642
+
[[package]]
2643
+
name = "objc2-web-kit"
2644
+
version = "0.3.2"
2399
2645
source = "registry+https://github.com/rust-lang/crates.io-index"
2400
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
2646
+
checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f"
2401
2647
dependencies = [
2402
-
"memchr",
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",
2403
2656
]
2404
2657
2405
2658
[[package]]
···
2437
2690
]
2438
2691
2439
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]]
2440
2719
name = "pango"
2441
2720
version = "0.18.3"
2442
2721
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2469
2748
2470
2749
[[package]]
2471
2750
name = "parking_lot"
2472
-
version = "0.12.4"
2751
+
version = "0.12.5"
2473
2752
source = "registry+https://github.com/rust-lang/crates.io-index"
2474
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
2753
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
2475
2754
dependencies = [
2476
2755
"lock_api",
2477
2756
"parking_lot_core",
···
2479
2758
2480
2759
[[package]]
2481
2760
name = "parking_lot_core"
2482
-
version = "0.9.11"
2761
+
version = "0.9.12"
2483
2762
source = "registry+https://github.com/rust-lang/crates.io-index"
2484
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2763
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
2485
2764
dependencies = [
2486
2765
"cfg-if",
2487
2766
"libc",
2488
2767
"redox_syscall",
2489
2768
"smallvec",
2490
-
"windows-targets 0.52.6",
2769
+
"windows-link 0.2.1",
2491
2770
]
2492
2771
2493
2772
[[package]]
···
2498
2777
2499
2778
[[package]]
2500
2779
name = "percent-encoding"
2501
-
version = "2.3.1"
2780
+
version = "2.3.2"
2502
2781
source = "registry+https://github.com/rust-lang/crates.io-index"
2503
-
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
+
]
2504
2794
2505
2795
[[package]]
2506
2796
name = "phf"
···
2606
2896
"phf_shared 0.11.3",
2607
2897
"proc-macro2",
2608
2898
"quote",
2609
-
"syn 2.0.104",
2899
+
"syn 2.0.109",
2610
2900
]
2611
2901
2612
2902
[[package]]
···
2667
2957
2668
2958
[[package]]
2669
2959
name = "plist"
2670
-
version = "1.7.4"
2960
+
version = "1.8.0"
2671
2961
source = "registry+https://github.com/rust-lang/crates.io-index"
2672
-
checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1"
2962
+
checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
2673
2963
dependencies = [
2674
2964
"base64 0.22.1",
2675
-
"indexmap 2.10.0",
2676
-
"quick-xml 0.38.0",
2965
+
"indexmap 2.12.0",
2966
+
"quick-xml 0.38.3",
2677
2967
"serde",
2678
2968
"time",
2679
2969
]
···
2692
2982
]
2693
2983
2694
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]]
2695
2998
name = "polling"
2696
-
version = "3.9.0"
2999
+
version = "3.11.0"
2697
3000
source = "registry+https://github.com/rust-lang/crates.io-index"
2698
-
checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7"
3001
+
checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
2699
3002
dependencies = [
2700
3003
"cfg-if",
2701
3004
"concurrent-queue",
2702
3005
"hermit-abi",
2703
3006
"pin-project-lite",
2704
-
"rustix",
2705
-
"windows-sys 0.60.2",
3007
+
"rustix 1.1.2",
3008
+
"windows-sys 0.61.2",
2706
3009
]
2707
3010
2708
3011
[[package]]
2709
3012
name = "potential_utf"
2710
-
version = "0.1.2"
3013
+
version = "0.1.4"
2711
3014
source = "registry+https://github.com/rust-lang/crates.io-index"
2712
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
3015
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
2713
3016
dependencies = [
2714
3017
"zerovec",
2715
3018
]
···
2747
3050
2748
3051
[[package]]
2749
3052
name = "proc-macro-crate"
2750
-
version = "2.0.0"
3053
+
version = "2.0.2"
2751
3054
source = "registry+https://github.com/rust-lang/crates.io-index"
2752
-
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
3055
+
checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
2753
3056
dependencies = [
2754
-
"toml_edit 0.20.7",
3057
+
"toml_datetime 0.6.3",
3058
+
"toml_edit 0.20.2",
2755
3059
]
2756
3060
2757
3061
[[package]]
2758
3062
name = "proc-macro-crate"
2759
-
version = "3.3.0"
3063
+
version = "3.4.0"
2760
3064
source = "registry+https://github.com/rust-lang/crates.io-index"
2761
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
3065
+
checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
2762
3066
dependencies = [
2763
-
"toml_edit 0.22.27",
3067
+
"toml_edit 0.23.7",
2764
3068
]
2765
3069
2766
3070
[[package]]
···
2795
3099
2796
3100
[[package]]
2797
3101
name = "proc-macro2"
2798
-
version = "1.0.95"
3102
+
version = "1.0.103"
2799
3103
source = "registry+https://github.com/rust-lang/crates.io-index"
2800
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
3104
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
2801
3105
dependencies = [
2802
3106
"unicode-ident",
2803
3107
]
2804
3108
2805
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]]
2806
3125
name = "quick-xml"
2807
3126
version = "0.37.5"
2808
3127
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2813
3132
2814
3133
[[package]]
2815
3134
name = "quick-xml"
2816
-
version = "0.38.0"
3135
+
version = "0.38.3"
2817
3136
source = "registry+https://github.com/rust-lang/crates.io-index"
2818
-
checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b"
3137
+
checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89"
2819
3138
dependencies = [
2820
3139
"memchr",
2821
3140
]
2822
3141
2823
3142
[[package]]
2824
3143
name = "quote"
2825
-
version = "1.0.40"
3144
+
version = "1.0.42"
2826
3145
source = "registry+https://github.com/rust-lang/crates.io-index"
2827
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
3146
+
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
2828
3147
dependencies = [
2829
3148
"proc-macro2",
2830
3149
]
···
2924
3243
source = "registry+https://github.com/rust-lang/crates.io-index"
2925
3244
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
2926
3245
dependencies = [
2927
-
"getrandom 0.3.3",
3246
+
"getrandom 0.3.4",
2928
3247
]
2929
3248
2930
3249
[[package]]
···
2953
3272
2954
3273
[[package]]
2955
3274
name = "redox_syscall"
2956
-
version = "0.5.17"
3275
+
version = "0.5.18"
2957
3276
source = "registry+https://github.com/rust-lang/crates.io-index"
2958
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
3277
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2959
3278
dependencies = [
2960
-
"bitflags 2.9.1",
3279
+
"bitflags 2.10.0",
2961
3280
]
2962
3281
2963
3282
[[package]]
2964
3283
name = "redox_users"
2965
-
version = "0.5.0"
3284
+
version = "0.5.2"
2966
3285
source = "registry+https://github.com/rust-lang/crates.io-index"
2967
-
checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
3286
+
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
2968
3287
dependencies = [
2969
3288
"getrandom 0.2.16",
2970
3289
"libredox",
2971
-
"thiserror 2.0.12",
3290
+
"thiserror 2.0.17",
2972
3291
]
2973
3292
2974
3293
[[package]]
2975
3294
name = "ref-cast"
2976
-
version = "1.0.24"
3295
+
version = "1.0.25"
2977
3296
source = "registry+https://github.com/rust-lang/crates.io-index"
2978
-
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
3297
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
2979
3298
dependencies = [
2980
3299
"ref-cast-impl",
2981
3300
]
2982
3301
2983
3302
[[package]]
2984
3303
name = "ref-cast-impl"
2985
-
version = "1.0.24"
3304
+
version = "1.0.25"
2986
3305
source = "registry+https://github.com/rust-lang/crates.io-index"
2987
-
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
3306
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
2988
3307
dependencies = [
2989
3308
"proc-macro2",
2990
3309
"quote",
2991
-
"syn 2.0.104",
3310
+
"syn 2.0.109",
2992
3311
]
2993
3312
2994
3313
[[package]]
2995
3314
name = "regex"
2996
-
version = "1.11.1"
3315
+
version = "1.12.2"
2997
3316
source = "registry+https://github.com/rust-lang/crates.io-index"
2998
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
3317
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
2999
3318
dependencies = [
3000
3319
"aho-corasick",
3001
3320
"memchr",
···
3005
3324
3006
3325
[[package]]
3007
3326
name = "regex-automata"
3008
-
version = "0.4.9"
3327
+
version = "0.4.13"
3009
3328
source = "registry+https://github.com/rust-lang/crates.io-index"
3010
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
3329
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
3011
3330
dependencies = [
3012
3331
"aho-corasick",
3013
3332
"memchr",
···
3016
3335
3017
3336
[[package]]
3018
3337
name = "regex-syntax"
3019
-
version = "0.8.5"
3338
+
version = "0.8.8"
3020
3339
source = "registry+https://github.com/rust-lang/crates.io-index"
3021
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
3340
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
3022
3341
3023
3342
[[package]]
3024
3343
name = "reqwest"
3025
-
version = "0.12.22"
3344
+
version = "0.12.24"
3026
3345
source = "registry+https://github.com/rust-lang/crates.io-index"
3027
-
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
3346
+
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
3028
3347
dependencies = [
3029
3348
"base64 0.22.1",
3030
3349
"bytes",
···
3062
3381
checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed"
3063
3382
dependencies = [
3064
3383
"ashpd",
3065
-
"block2 0.6.1",
3384
+
"block2 0.6.2",
3066
3385
"dispatch2",
3067
3386
"glib-sys",
3068
3387
"gobject-sys",
3069
3388
"gtk-sys",
3070
3389
"js-sys",
3071
3390
"log",
3072
-
"objc2 0.6.1",
3391
+
"objc2 0.6.3",
3073
3392
"objc2-app-kit",
3074
3393
"objc2-core-foundation",
3075
-
"objc2-foundation 0.3.1",
3394
+
"objc2-foundation 0.3.2",
3076
3395
"raw-window-handle",
3077
3396
"wasm-bindgen",
3078
3397
"wasm-bindgen-futures",
···
3081
3400
]
3082
3401
3083
3402
[[package]]
3084
-
name = "rustc-demangle"
3085
-
version = "0.1.26"
3086
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3087
-
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
3088
-
3089
-
[[package]]
3090
3403
name = "rustc_version"
3091
3404
version = "0.4.1"
3092
3405
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3097
3410
3098
3411
[[package]]
3099
3412
name = "rustix"
3100
-
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"
3101
3427
source = "registry+https://github.com/rust-lang/crates.io-index"
3102
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
3428
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3103
3429
dependencies = [
3104
-
"bitflags 2.9.1",
3430
+
"bitflags 2.10.0",
3105
3431
"errno",
3106
3432
"libc",
3107
-
"linux-raw-sys",
3108
-
"windows-sys 0.60.2",
3433
+
"linux-raw-sys 0.11.0",
3434
+
"windows-sys 0.61.2",
3109
3435
]
3110
3436
3111
3437
[[package]]
3112
3438
name = "rustversion"
3113
-
version = "1.0.21"
3439
+
version = "1.0.22"
3114
3440
source = "registry+https://github.com/rust-lang/crates.io-index"
3115
-
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
3441
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3116
3442
3117
3443
[[package]]
3118
3444
name = "ryu"
···
3158
3484
3159
3485
[[package]]
3160
3486
name = "schemars"
3161
-
version = "1.0.4"
3487
+
version = "1.1.0"
3162
3488
source = "registry+https://github.com/rust-lang/crates.io-index"
3163
-
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
3489
+
checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
3164
3490
dependencies = [
3165
3491
"dyn-clone",
3166
3492
"ref-cast",
···
3177
3503
"proc-macro2",
3178
3504
"quote",
3179
3505
"serde_derive_internals",
3180
-
"syn 2.0.104",
3506
+
"syn 2.0.109",
3181
3507
]
3182
3508
3183
3509
[[package]]
···
3212
3538
3213
3539
[[package]]
3214
3540
name = "semver"
3215
-
version = "1.0.26"
3541
+
version = "1.0.27"
3216
3542
source = "registry+https://github.com/rust-lang/crates.io-index"
3217
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
3543
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
3218
3544
dependencies = [
3219
3545
"serde",
3546
+
"serde_core",
3220
3547
]
3221
3548
3222
3549
[[package]]
3223
3550
name = "serde"
3224
-
version = "1.0.219"
3551
+
version = "1.0.228"
3225
3552
source = "registry+https://github.com/rust-lang/crates.io-index"
3226
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
3553
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
3227
3554
dependencies = [
3555
+
"serde_core",
3228
3556
"serde_derive",
3229
3557
]
3230
3558
3231
3559
[[package]]
3232
3560
name = "serde-untagged"
3233
-
version = "0.1.7"
3561
+
version = "0.1.9"
3234
3562
source = "registry+https://github.com/rust-lang/crates.io-index"
3235
-
checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
3563
+
checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
3236
3564
dependencies = [
3237
3565
"erased-serde",
3238
3566
"serde",
3567
+
"serde_core",
3239
3568
"typeid",
3240
3569
]
3241
3570
3242
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]]
3243
3581
name = "serde_derive"
3244
-
version = "1.0.219"
3582
+
version = "1.0.228"
3245
3583
source = "registry+https://github.com/rust-lang/crates.io-index"
3246
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
3584
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
3247
3585
dependencies = [
3248
3586
"proc-macro2",
3249
3587
"quote",
3250
-
"syn 2.0.104",
3588
+
"syn 2.0.109",
3251
3589
]
3252
3590
3253
3591
[[package]]
···
3258
3596
dependencies = [
3259
3597
"proc-macro2",
3260
3598
"quote",
3261
-
"syn 2.0.104",
3599
+
"syn 2.0.109",
3262
3600
]
3263
3601
3264
3602
[[package]]
3265
3603
name = "serde_json"
3266
-
version = "1.0.141"
3604
+
version = "1.0.145"
3267
3605
source = "registry+https://github.com/rust-lang/crates.io-index"
3268
-
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
3606
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3269
3607
dependencies = [
3270
3608
"itoa",
3271
3609
"memchr",
3272
3610
"ryu",
3273
3611
"serde",
3612
+
"serde_core",
3274
3613
]
3275
3614
3276
3615
[[package]]
···
3281
3620
dependencies = [
3282
3621
"proc-macro2",
3283
3622
"quote",
3284
-
"syn 2.0.104",
3623
+
"syn 2.0.109",
3285
3624
]
3286
3625
3287
3626
[[package]]
···
3295
3634
3296
3635
[[package]]
3297
3636
name = "serde_spanned"
3298
-
version = "1.0.0"
3637
+
version = "1.0.3"
3299
3638
source = "registry+https://github.com/rust-lang/crates.io-index"
3300
-
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
3639
+
checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
3301
3640
dependencies = [
3302
-
"serde",
3641
+
"serde_core",
3303
3642
]
3304
3643
3305
3644
[[package]]
···
3316
3655
3317
3656
[[package]]
3318
3657
name = "serde_with"
3319
-
version = "3.14.0"
3658
+
version = "3.15.1"
3320
3659
source = "registry+https://github.com/rust-lang/crates.io-index"
3321
-
checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
3660
+
checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04"
3322
3661
dependencies = [
3323
3662
"base64 0.22.1",
3324
3663
"chrono",
3325
3664
"hex",
3326
3665
"indexmap 1.9.3",
3327
-
"indexmap 2.10.0",
3666
+
"indexmap 2.12.0",
3328
3667
"schemars 0.9.0",
3329
-
"schemars 1.0.4",
3330
-
"serde",
3331
-
"serde_derive",
3668
+
"schemars 1.1.0",
3669
+
"serde_core",
3332
3670
"serde_json",
3333
3671
"serde_with_macros",
3334
3672
"time",
···
3336
3674
3337
3675
[[package]]
3338
3676
name = "serde_with_macros"
3339
-
version = "3.14.0"
3677
+
version = "3.15.1"
3340
3678
source = "registry+https://github.com/rust-lang/crates.io-index"
3341
-
checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
3679
+
checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955"
3342
3680
dependencies = [
3343
3681
"darling",
3344
3682
"proc-macro2",
3345
3683
"quote",
3346
-
"syn 2.0.104",
3684
+
"syn 2.0.109",
3347
3685
]
3348
3686
3349
3687
[[package]]
3350
3688
name = "serialize-to-javascript"
3351
-
version = "0.1.1"
3689
+
version = "0.1.2"
3352
3690
source = "registry+https://github.com/rust-lang/crates.io-index"
3353
-
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
3691
+
checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
3354
3692
dependencies = [
3355
3693
"serde",
3356
3694
"serde_json",
···
3359
3697
3360
3698
[[package]]
3361
3699
name = "serialize-to-javascript-impl"
3362
-
version = "0.1.1"
3700
+
version = "0.1.2"
3363
3701
source = "registry+https://github.com/rust-lang/crates.io-index"
3364
-
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
3702
+
checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
3365
3703
dependencies = [
3366
3704
"proc-macro2",
3367
3705
"quote",
3368
-
"syn 1.0.109",
3706
+
"syn 2.0.109",
3369
3707
]
3370
3708
3371
3709
[[package]]
···
3397
3735
3398
3736
[[package]]
3399
3737
name = "signal-hook-registry"
3400
-
version = "1.4.5"
3738
+
version = "1.4.6"
3401
3739
source = "registry+https://github.com/rust-lang/crates.io-index"
3402
-
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
3740
+
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
3403
3741
dependencies = [
3404
3742
"libc",
3405
3743
]
···
3424
3762
3425
3763
[[package]]
3426
3764
name = "slab"
3427
-
version = "0.4.10"
3765
+
version = "0.4.11"
3428
3766
source = "registry+https://github.com/rust-lang/crates.io-index"
3429
-
checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
3767
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
3430
3768
3431
3769
[[package]]
3432
3770
name = "smallvec"
···
3436
3774
3437
3775
[[package]]
3438
3776
name = "socket2"
3439
-
version = "0.6.0"
3777
+
version = "0.6.1"
3440
3778
source = "registry+https://github.com/rust-lang/crates.io-index"
3441
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
3779
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
3442
3780
dependencies = [
3443
3781
"libc",
3444
-
"windows-sys 0.59.0",
3782
+
"windows-sys 0.60.2",
3445
3783
]
3446
3784
3447
3785
[[package]]
···
3452
3790
dependencies = [
3453
3791
"bytemuck",
3454
3792
"cfg_aliases",
3455
-
"core-graphics",
3793
+
"core-graphics 0.24.0",
3456
3794
"foreign-types",
3457
3795
"js-sys",
3458
3796
"log",
···
3494
3832
3495
3833
[[package]]
3496
3834
name = "stable_deref_trait"
3497
-
version = "1.2.0"
3835
+
version = "1.2.1"
3498
3836
source = "registry+https://github.com/rust-lang/crates.io-index"
3499
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
3837
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
3500
3838
3501
3839
[[package]]
3502
3840
name = "static_assertions"
···
3559
3897
3560
3898
[[package]]
3561
3899
name = "syn"
3562
-
version = "2.0.104"
3900
+
version = "2.0.109"
3563
3901
source = "registry+https://github.com/rust-lang/crates.io-index"
3564
-
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
3902
+
checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f"
3565
3903
dependencies = [
3566
3904
"proc-macro2",
3567
3905
"quote",
···
3585
3923
dependencies = [
3586
3924
"proc-macro2",
3587
3925
"quote",
3588
-
"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",
3589
3936
]
3590
3937
3591
3938
[[package]]
···
3597
3944
"cfg-expr",
3598
3945
"heck 0.5.0",
3599
3946
"pkg-config",
3600
-
"toml 0.8.23",
3947
+
"toml 0.8.2",
3601
3948
"version-compare",
3602
3949
]
3603
3950
3604
3951
[[package]]
3605
3952
name = "tao"
3606
-
version = "0.34.0"
3953
+
version = "0.34.5"
3607
3954
source = "registry+https://github.com/rust-lang/crates.io-index"
3608
-
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
3955
+
checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7"
3609
3956
dependencies = [
3610
-
"bitflags 2.9.1",
3957
+
"bitflags 2.10.0",
3958
+
"block2 0.6.2",
3611
3959
"core-foundation",
3612
-
"core-graphics",
3960
+
"core-graphics 0.24.0",
3613
3961
"crossbeam-channel",
3614
3962
"dispatch",
3615
3963
"dlopen2",
···
3624
3972
"ndk",
3625
3973
"ndk-context",
3626
3974
"ndk-sys",
3627
-
"objc2 0.6.1",
3975
+
"objc2 0.6.3",
3628
3976
"objc2-app-kit",
3629
-
"objc2-foundation 0.3.1",
3977
+
"objc2-foundation 0.3.2",
3630
3978
"once_cell",
3631
3979
"parking_lot",
3632
3980
"raw-window-handle",
···
3635
3983
"unicode-segmentation",
3636
3984
"url",
3637
3985
"windows",
3638
-
"windows-core",
3986
+
"windows-core 0.61.2",
3639
3987
"windows-version",
3640
3988
"x11-dl",
3641
3989
]
···
3648
3996
dependencies = [
3649
3997
"proc-macro2",
3650
3998
"quote",
3651
-
"syn 2.0.104",
3999
+
"syn 2.0.109",
3652
4000
]
3653
4001
3654
4002
[[package]]
···
3659
4007
3660
4008
[[package]]
3661
4009
name = "tauri"
3662
-
version = "2.7.0"
4010
+
version = "2.9.2"
3663
4011
source = "registry+https://github.com/rust-lang/crates.io-index"
3664
-
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
4012
+
checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5"
3665
4013
dependencies = [
3666
4014
"anyhow",
3667
4015
"bytes",
4016
+
"cookie",
3668
4017
"dirs",
3669
4018
"dunce",
3670
4019
"embed_plist",
3671
-
"getrandom 0.3.3",
4020
+
"getrandom 0.3.4",
3672
4021
"glob",
3673
4022
"gtk",
3674
4023
"heck 0.5.0",
3675
4024
"http",
4025
+
"image",
3676
4026
"jni",
3677
4027
"libc",
3678
4028
"log",
3679
4029
"mime",
3680
4030
"muda",
3681
-
"objc2 0.6.1",
4031
+
"objc2 0.6.3",
3682
4032
"objc2-app-kit",
3683
-
"objc2-foundation 0.3.1",
4033
+
"objc2-foundation 0.3.2",
3684
4034
"objc2-ui-kit",
4035
+
"objc2-web-kit",
3685
4036
"percent-encoding",
3686
4037
"plist",
3687
4038
"raw-window-handle",
···
3696
4047
"tauri-runtime",
3697
4048
"tauri-runtime-wry",
3698
4049
"tauri-utils",
3699
-
"thiserror 2.0.12",
4050
+
"thiserror 2.0.17",
3700
4051
"tokio",
3701
4052
"tray-icon",
3702
4053
"url",
3703
-
"urlpattern",
3704
4054
"webkit2gtk",
3705
4055
"webview2-com",
3706
4056
"window-vibrancy",
···
3709
4059
3710
4060
[[package]]
3711
4061
name = "tauri-build"
3712
-
version = "2.3.1"
4062
+
version = "2.5.1"
3713
4063
source = "registry+https://github.com/rust-lang/crates.io-index"
3714
-
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
4064
+
checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38"
3715
4065
dependencies = [
3716
4066
"anyhow",
3717
4067
"cargo_toml",
···
3725
4075
"serde_json",
3726
4076
"tauri-utils",
3727
4077
"tauri-winres",
3728
-
"toml 0.8.23",
4078
+
"toml 0.9.8",
3729
4079
"walkdir",
3730
4080
]
3731
4081
3732
4082
[[package]]
3733
4083
name = "tauri-codegen"
3734
-
version = "2.3.1"
4084
+
version = "2.5.0"
3735
4085
source = "registry+https://github.com/rust-lang/crates.io-index"
3736
-
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
4086
+
checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190"
3737
4087
dependencies = [
3738
4088
"base64 0.22.1",
3739
4089
"brotli",
3740
4090
"ico",
3741
4091
"json-patch",
3742
4092
"plist",
3743
-
"png",
4093
+
"png 0.17.16",
3744
4094
"proc-macro2",
3745
4095
"quote",
3746
4096
"semver",
3747
4097
"serde",
3748
4098
"serde_json",
3749
4099
"sha2",
3750
-
"syn 2.0.104",
4100
+
"syn 2.0.109",
3751
4101
"tauri-utils",
3752
-
"thiserror 2.0.12",
4102
+
"thiserror 2.0.17",
3753
4103
"time",
3754
4104
"url",
3755
4105
"uuid",
···
3758
4108
3759
4109
[[package]]
3760
4110
name = "tauri-macros"
3761
-
version = "2.3.2"
4111
+
version = "2.5.0"
3762
4112
source = "registry+https://github.com/rust-lang/crates.io-index"
3763
-
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
4113
+
checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f"
3764
4114
dependencies = [
3765
4115
"heck 0.5.0",
3766
4116
"proc-macro2",
3767
4117
"quote",
3768
-
"syn 2.0.104",
4118
+
"syn 2.0.109",
3769
4119
"tauri-codegen",
3770
4120
"tauri-utils",
3771
4121
]
3772
4122
3773
4123
[[package]]
3774
4124
name = "tauri-plugin"
3775
-
version = "2.3.1"
4125
+
version = "2.5.1"
3776
4126
source = "registry+https://github.com/rust-lang/crates.io-index"
3777
-
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
4127
+
checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d"
3778
4128
dependencies = [
3779
4129
"anyhow",
3780
4130
"glob",
···
3783
4133
"serde",
3784
4134
"serde_json",
3785
4135
"tauri-utils",
3786
-
"toml 0.8.23",
4136
+
"toml 0.9.8",
3787
4137
"walkdir",
3788
4138
]
3789
4139
3790
4140
[[package]]
3791
-
name = "tauri-plugin-dialog"
4141
+
name = "tauri-plugin-clipboard-manager"
3792
4142
version = "2.3.2"
3793
4143
source = "registry+https://github.com/rust-lang/crates.io-index"
3794
-
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"
3795
4160
dependencies = [
3796
4161
"log",
3797
4162
"raw-window-handle",
···
3801
4166
"tauri",
3802
4167
"tauri-plugin",
3803
4168
"tauri-plugin-fs",
3804
-
"thiserror 2.0.12",
4169
+
"thiserror 2.0.17",
3805
4170
"url",
3806
4171
]
3807
4172
3808
4173
[[package]]
3809
4174
name = "tauri-plugin-fs"
3810
-
version = "2.4.1"
4175
+
version = "2.4.4"
3811
4176
source = "registry+https://github.com/rust-lang/crates.io-index"
3812
-
checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99"
4177
+
checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9"
3813
4178
dependencies = [
3814
4179
"anyhow",
3815
4180
"dunce",
···
3822
4187
"tauri",
3823
4188
"tauri-plugin",
3824
4189
"tauri-utils",
3825
-
"thiserror 2.0.12",
3826
-
"toml 0.8.23",
4190
+
"thiserror 2.0.17",
4191
+
"toml 0.9.8",
3827
4192
"url",
3828
4193
]
3829
4194
3830
4195
[[package]]
3831
4196
name = "tauri-plugin-opener"
3832
-
version = "2.4.0"
4197
+
version = "2.5.2"
3833
4198
source = "registry+https://github.com/rust-lang/crates.io-index"
3834
-
checksum = "ecee219f11cdac713ab32959db5d0cceec4810ba4f4458da992292ecf9660321"
4199
+
checksum = "c26b72571d25dee25667940027114e60f569fc3974f8cefbe50c2cbc5fd65e3b"
3835
4200
dependencies = [
3836
4201
"dunce",
3837
4202
"glob",
3838
4203
"objc2-app-kit",
3839
-
"objc2-foundation 0.3.1",
4204
+
"objc2-foundation 0.3.2",
3840
4205
"open",
3841
4206
"schemars 0.8.22",
3842
4207
"serde",
3843
4208
"serde_json",
3844
4209
"tauri",
3845
4210
"tauri-plugin",
3846
-
"thiserror 2.0.12",
4211
+
"thiserror 2.0.17",
3847
4212
"url",
3848
4213
"windows",
3849
4214
"zbus",
3850
4215
]
3851
4216
3852
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]]
3853
4236
name = "tauri-runtime"
3854
-
version = "2.7.1"
4237
+
version = "2.9.1"
3855
4238
source = "registry+https://github.com/rust-lang/crates.io-index"
3856
-
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
4239
+
checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926"
3857
4240
dependencies = [
3858
4241
"cookie",
3859
4242
"dpi",
3860
4243
"gtk",
3861
4244
"http",
3862
4245
"jni",
3863
-
"objc2 0.6.1",
4246
+
"objc2 0.6.3",
3864
4247
"objc2-ui-kit",
4248
+
"objc2-web-kit",
3865
4249
"raw-window-handle",
3866
4250
"serde",
3867
4251
"serde_json",
3868
4252
"tauri-utils",
3869
-
"thiserror 2.0.12",
4253
+
"thiserror 2.0.17",
3870
4254
"url",
4255
+
"webkit2gtk",
4256
+
"webview2-com",
3871
4257
"windows",
3872
4258
]
3873
4259
3874
4260
[[package]]
3875
4261
name = "tauri-runtime-wry"
3876
-
version = "2.7.2"
4262
+
version = "2.9.1"
3877
4263
source = "registry+https://github.com/rust-lang/crates.io-index"
3878
-
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
4264
+
checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93"
3879
4265
dependencies = [
3880
4266
"gtk",
3881
4267
"http",
3882
4268
"jni",
3883
4269
"log",
3884
-
"objc2 0.6.1",
4270
+
"objc2 0.6.3",
3885
4271
"objc2-app-kit",
3886
-
"objc2-foundation 0.3.1",
4272
+
"objc2-foundation 0.3.2",
3887
4273
"once_cell",
3888
4274
"percent-encoding",
3889
4275
"raw-window-handle",
···
3900
4286
3901
4287
[[package]]
3902
4288
name = "tauri-utils"
3903
-
version = "2.6.0"
4289
+
version = "2.8.0"
3904
4290
source = "registry+https://github.com/rust-lang/crates.io-index"
3905
-
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
4291
+
checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673"
3906
4292
dependencies = [
3907
4293
"anyhow",
3908
4294
"brotli",
···
3928
4314
"serde_json",
3929
4315
"serde_with",
3930
4316
"swift-rs",
3931
-
"thiserror 2.0.12",
3932
-
"toml 0.8.23",
4317
+
"thiserror 2.0.17",
4318
+
"toml 0.9.8",
3933
4319
"url",
3934
4320
"urlpattern",
3935
4321
"uuid",
···
3938
4324
3939
4325
[[package]]
3940
4326
name = "tauri-winres"
3941
-
version = "0.3.1"
4327
+
version = "0.3.3"
3942
4328
source = "registry+https://github.com/rust-lang/crates.io-index"
3943
-
checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4"
4329
+
checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074"
3944
4330
dependencies = [
3945
4331
"embed-resource",
3946
-
"indexmap 2.10.0",
3947
-
"toml 0.8.23",
4332
+
"toml 0.9.8",
3948
4333
]
3949
4334
3950
4335
[[package]]
3951
4336
name = "tempfile"
3952
-
version = "3.20.0"
4337
+
version = "3.23.0"
3953
4338
source = "registry+https://github.com/rust-lang/crates.io-index"
3954
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
4339
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
3955
4340
dependencies = [
3956
4341
"fastrand",
3957
-
"getrandom 0.3.3",
4342
+
"getrandom 0.3.4",
3958
4343
"once_cell",
3959
-
"rustix",
3960
-
"windows-sys 0.59.0",
4344
+
"rustix 1.1.2",
4345
+
"windows-sys 0.61.2",
3961
4346
]
3962
4347
3963
4348
[[package]]
···
3982
4367
3983
4368
[[package]]
3984
4369
name = "thiserror"
3985
-
version = "2.0.12"
4370
+
version = "2.0.17"
3986
4371
source = "registry+https://github.com/rust-lang/crates.io-index"
3987
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
4372
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
3988
4373
dependencies = [
3989
-
"thiserror-impl 2.0.12",
4374
+
"thiserror-impl 2.0.17",
3990
4375
]
3991
4376
3992
4377
[[package]]
···
3997
4382
dependencies = [
3998
4383
"proc-macro2",
3999
4384
"quote",
4000
-
"syn 2.0.104",
4385
+
"syn 2.0.109",
4001
4386
]
4002
4387
4003
4388
[[package]]
4004
4389
name = "thiserror-impl"
4005
-
version = "2.0.12"
4390
+
version = "2.0.17"
4006
4391
source = "registry+https://github.com/rust-lang/crates.io-index"
4007
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4392
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
4008
4393
dependencies = [
4009
4394
"proc-macro2",
4010
4395
"quote",
4011
-
"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",
4012
4411
]
4013
4412
4014
4413
[[package]]
4015
4414
name = "time"
4016
-
version = "0.3.41"
4415
+
version = "0.3.44"
4017
4416
source = "registry+https://github.com/rust-lang/crates.io-index"
4018
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
4417
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
4019
4418
dependencies = [
4020
4419
"deranged",
4021
4420
"itoa",
···
4028
4427
4029
4428
[[package]]
4030
4429
name = "time-core"
4031
-
version = "0.1.4"
4430
+
version = "0.1.6"
4032
4431
source = "registry+https://github.com/rust-lang/crates.io-index"
4033
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
4432
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
4034
4433
4035
4434
[[package]]
4036
4435
name = "time-macros"
4037
-
version = "0.2.22"
4436
+
version = "0.2.24"
4038
4437
source = "registry+https://github.com/rust-lang/crates.io-index"
4039
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
4438
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
4040
4439
dependencies = [
4041
4440
"num-conv",
4042
4441
"time-core",
···
4044
4443
4045
4444
[[package]]
4046
4445
name = "tinystr"
4047
-
version = "0.8.1"
4446
+
version = "0.8.2"
4048
4447
source = "registry+https://github.com/rust-lang/crates.io-index"
4049
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
4448
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
4050
4449
dependencies = [
4051
4450
"displaydoc",
4052
4451
"zerovec",
···
4054
4453
4055
4454
[[package]]
4056
4455
name = "tokio"
4057
-
version = "1.47.0"
4456
+
version = "1.48.0"
4058
4457
source = "registry+https://github.com/rust-lang/crates.io-index"
4059
-
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
4458
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
4060
4459
dependencies = [
4061
-
"backtrace",
4062
4460
"bytes",
4063
-
"io-uring",
4064
4461
"libc",
4065
4462
"mio",
4066
4463
"pin-project-lite",
4067
4464
"signal-hook-registry",
4068
-
"slab",
4069
4465
"socket2",
4070
4466
"tokio-macros",
4071
4467
"tracing",
4072
-
"windows-sys 0.59.0",
4468
+
"windows-sys 0.61.2",
4073
4469
]
4074
4470
4075
4471
[[package]]
4076
4472
name = "tokio-macros"
4077
-
version = "2.5.0"
4473
+
version = "2.6.0"
4078
4474
source = "registry+https://github.com/rust-lang/crates.io-index"
4079
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
4475
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
4080
4476
dependencies = [
4081
4477
"proc-macro2",
4082
4478
"quote",
4083
-
"syn 2.0.104",
4479
+
"syn 2.0.109",
4084
4480
]
4085
4481
4086
4482
[[package]]
4087
4483
name = "tokio-util"
4088
-
version = "0.7.15"
4484
+
version = "0.7.17"
4089
4485
source = "registry+https://github.com/rust-lang/crates.io-index"
4090
-
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
4486
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
4091
4487
dependencies = [
4092
4488
"bytes",
4093
4489
"futures-core",
···
4098
4494
4099
4495
[[package]]
4100
4496
name = "toml"
4101
-
version = "0.8.23"
4497
+
version = "0.8.2"
4102
4498
source = "registry+https://github.com/rust-lang/crates.io-index"
4103
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
4499
+
checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
4104
4500
dependencies = [
4105
4501
"serde",
4106
4502
"serde_spanned 0.6.9",
4107
-
"toml_datetime 0.6.11",
4108
-
"toml_edit 0.22.27",
4503
+
"toml_datetime 0.6.3",
4504
+
"toml_edit 0.20.2",
4109
4505
]
4110
4506
4111
4507
[[package]]
4112
4508
name = "toml"
4113
-
version = "0.9.3"
4509
+
version = "0.9.8"
4114
4510
source = "registry+https://github.com/rust-lang/crates.io-index"
4115
-
checksum = "e06723639aaded957e5a80be250c1f82f274b9d23ebb4d94163668470623461c"
4511
+
checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
4116
4512
dependencies = [
4117
-
"indexmap 2.10.0",
4118
-
"serde",
4119
-
"serde_spanned 1.0.0",
4120
-
"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",
4121
4517
"toml_parser",
4122
4518
"toml_writer",
4123
-
"winnow 0.7.12",
4519
+
"winnow 0.7.13",
4124
4520
]
4125
4521
4126
4522
[[package]]
4127
4523
name = "toml_datetime"
4128
-
version = "0.6.11"
4524
+
version = "0.6.3"
4129
4525
source = "registry+https://github.com/rust-lang/crates.io-index"
4130
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
4526
+
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
4131
4527
dependencies = [
4132
4528
"serde",
4133
4529
]
4134
4530
4135
4531
[[package]]
4136
4532
name = "toml_datetime"
4137
-
version = "0.7.0"
4533
+
version = "0.7.3"
4138
4534
source = "registry+https://github.com/rust-lang/crates.io-index"
4139
-
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
4535
+
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
4140
4536
dependencies = [
4141
-
"serde",
4537
+
"serde_core",
4142
4538
]
4143
4539
4144
4540
[[package]]
···
4147
4543
source = "registry+https://github.com/rust-lang/crates.io-index"
4148
4544
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4149
4545
dependencies = [
4150
-
"indexmap 2.10.0",
4151
-
"toml_datetime 0.6.11",
4546
+
"indexmap 2.12.0",
4547
+
"toml_datetime 0.6.3",
4152
4548
"winnow 0.5.40",
4153
4549
]
4154
4550
4155
4551
[[package]]
4156
4552
name = "toml_edit"
4157
-
version = "0.20.7"
4553
+
version = "0.20.2"
4158
4554
source = "registry+https://github.com/rust-lang/crates.io-index"
4159
-
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
4555
+
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
4160
4556
dependencies = [
4161
-
"indexmap 2.10.0",
4162
-
"toml_datetime 0.6.11",
4557
+
"indexmap 2.12.0",
4558
+
"serde",
4559
+
"serde_spanned 0.6.9",
4560
+
"toml_datetime 0.6.3",
4163
4561
"winnow 0.5.40",
4164
4562
]
4165
4563
4166
4564
[[package]]
4167
4565
name = "toml_edit"
4168
-
version = "0.22.27"
4566
+
version = "0.23.7"
4169
4567
source = "registry+https://github.com/rust-lang/crates.io-index"
4170
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
4568
+
checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d"
4171
4569
dependencies = [
4172
-
"indexmap 2.10.0",
4173
-
"serde",
4174
-
"serde_spanned 0.6.9",
4175
-
"toml_datetime 0.6.11",
4176
-
"toml_write",
4177
-
"winnow 0.7.12",
4570
+
"indexmap 2.12.0",
4571
+
"toml_datetime 0.7.3",
4572
+
"toml_parser",
4573
+
"winnow 0.7.13",
4178
4574
]
4179
4575
4180
4576
[[package]]
4181
4577
name = "toml_parser"
4182
-
version = "1.0.1"
4578
+
version = "1.0.4"
4183
4579
source = "registry+https://github.com/rust-lang/crates.io-index"
4184
-
checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30"
4580
+
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
4185
4581
dependencies = [
4186
-
"winnow 0.7.12",
4582
+
"winnow 0.7.13",
4187
4583
]
4188
4584
4189
4585
[[package]]
4190
-
name = "toml_write"
4191
-
version = "0.1.2"
4192
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4193
-
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
4194
-
4195
-
[[package]]
4196
4586
name = "toml_writer"
4197
-
version = "1.0.2"
4587
+
version = "1.0.4"
4198
4588
source = "registry+https://github.com/rust-lang/crates.io-index"
4199
-
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
4589
+
checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
4200
4590
4201
4591
[[package]]
4202
4592
name = "tower"
···
4219
4609
source = "registry+https://github.com/rust-lang/crates.io-index"
4220
4610
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4221
4611
dependencies = [
4222
-
"bitflags 2.9.1",
4612
+
"bitflags 2.10.0",
4223
4613
"bytes",
4224
4614
"futures-util",
4225
4615
"http",
···
4262
4652
dependencies = [
4263
4653
"proc-macro2",
4264
4654
"quote",
4265
-
"syn 2.0.104",
4655
+
"syn 2.0.109",
4266
4656
]
4267
4657
4268
4658
[[package]]
···
4276
4666
4277
4667
[[package]]
4278
4668
name = "tray-icon"
4279
-
version = "0.21.0"
4669
+
version = "0.21.2"
4280
4670
source = "registry+https://github.com/rust-lang/crates.io-index"
4281
-
checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a"
4671
+
checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b"
4282
4672
dependencies = [
4283
4673
"crossbeam-channel",
4284
4674
"dirs",
4285
4675
"libappindicator",
4286
4676
"muda",
4287
-
"objc2 0.6.1",
4677
+
"objc2 0.6.3",
4288
4678
"objc2-app-kit",
4289
4679
"objc2-core-foundation",
4290
4680
"objc2-core-graphics",
4291
-
"objc2-foundation 0.3.1",
4681
+
"objc2-foundation 0.3.2",
4292
4682
"once_cell",
4293
-
"png",
4683
+
"png 0.17.16",
4294
4684
"serde",
4295
-
"thiserror 2.0.12",
4296
-
"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",
4297
4698
]
4298
4699
4299
4700
[[package]]
···
4310
4711
4311
4712
[[package]]
4312
4713
name = "typenum"
4313
-
version = "1.18.0"
4714
+
version = "1.19.0"
4314
4715
source = "registry+https://github.com/rust-lang/crates.io-index"
4315
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
4716
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
4316
4717
4317
4718
[[package]]
4318
4719
name = "uds_windows"
···
4368
4769
4369
4770
[[package]]
4370
4771
name = "unicode-ident"
4371
-
version = "1.0.18"
4772
+
version = "1.0.22"
4372
4773
source = "registry+https://github.com/rust-lang/crates.io-index"
4373
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
4774
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
4374
4775
4375
4776
[[package]]
4376
4777
name = "unicode-segmentation"
···
4380
4781
4381
4782
[[package]]
4382
4783
name = "url"
4383
-
version = "2.5.4"
4784
+
version = "2.5.7"
4384
4785
source = "registry+https://github.com/rust-lang/crates.io-index"
4385
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
4786
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
4386
4787
dependencies = [
4387
4788
"form_urlencoded",
4388
4789
"idna",
···
4416
4817
4417
4818
[[package]]
4418
4819
name = "uuid"
4419
-
version = "1.17.0"
4820
+
version = "1.18.1"
4420
4821
source = "registry+https://github.com/rust-lang/crates.io-index"
4421
-
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
4822
+
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
4422
4823
dependencies = [
4423
-
"getrandom 0.3.3",
4824
+
"getrandom 0.3.4",
4424
4825
"js-sys",
4425
4826
"serde",
4426
4827
"wasm-bindgen",
···
4428
4829
4429
4830
[[package]]
4430
4831
name = "version-compare"
4431
-
version = "0.2.0"
4832
+
version = "0.2.1"
4432
4833
source = "registry+https://github.com/rust-lang/crates.io-index"
4433
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
4834
+
checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
4434
4835
4435
4836
[[package]]
4436
4837
name = "version_check"
···
4490
4891
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4491
4892
4492
4893
[[package]]
4493
-
name = "wasi"
4494
-
version = "0.14.2+wasi-0.2.4"
4894
+
name = "wasip2"
4895
+
version = "1.0.1+wasi-0.2.4"
4495
4896
source = "registry+https://github.com/rust-lang/crates.io-index"
4496
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
4897
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
4497
4898
dependencies = [
4498
-
"wit-bindgen-rt",
4899
+
"wit-bindgen",
4499
4900
]
4500
4901
4501
4902
[[package]]
4502
4903
name = "wasm-bindgen"
4503
-
version = "0.2.100"
4904
+
version = "0.2.105"
4504
4905
source = "registry+https://github.com/rust-lang/crates.io-index"
4505
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
4906
+
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
4506
4907
dependencies = [
4507
4908
"cfg-if",
4508
4909
"once_cell",
4509
4910
"rustversion",
4510
4911
"wasm-bindgen-macro",
4511
-
]
4512
-
4513
-
[[package]]
4514
-
name = "wasm-bindgen-backend"
4515
-
version = "0.2.100"
4516
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4517
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
4518
-
dependencies = [
4519
-
"bumpalo",
4520
-
"log",
4521
-
"proc-macro2",
4522
-
"quote",
4523
-
"syn 2.0.104",
4524
4912
"wasm-bindgen-shared",
4525
4913
]
4526
4914
4527
4915
[[package]]
4528
4916
name = "wasm-bindgen-futures"
4529
-
version = "0.4.50"
4917
+
version = "0.4.55"
4530
4918
source = "registry+https://github.com/rust-lang/crates.io-index"
4531
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
4919
+
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
4532
4920
dependencies = [
4533
4921
"cfg-if",
4534
4922
"js-sys",
···
4539
4927
4540
4928
[[package]]
4541
4929
name = "wasm-bindgen-macro"
4542
-
version = "0.2.100"
4930
+
version = "0.2.105"
4543
4931
source = "registry+https://github.com/rust-lang/crates.io-index"
4544
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
4932
+
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
4545
4933
dependencies = [
4546
4934
"quote",
4547
4935
"wasm-bindgen-macro-support",
···
4549
4937
4550
4938
[[package]]
4551
4939
name = "wasm-bindgen-macro-support"
4552
-
version = "0.2.100"
4940
+
version = "0.2.105"
4553
4941
source = "registry+https://github.com/rust-lang/crates.io-index"
4554
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
4942
+
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
4555
4943
dependencies = [
4944
+
"bumpalo",
4556
4945
"proc-macro2",
4557
4946
"quote",
4558
-
"syn 2.0.104",
4559
-
"wasm-bindgen-backend",
4947
+
"syn 2.0.109",
4560
4948
"wasm-bindgen-shared",
4561
4949
]
4562
4950
4563
4951
[[package]]
4564
4952
name = "wasm-bindgen-shared"
4565
-
version = "0.2.100"
4953
+
version = "0.2.105"
4566
4954
source = "registry+https://github.com/rust-lang/crates.io-index"
4567
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
4955
+
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
4568
4956
dependencies = [
4569
4957
"unicode-ident",
4570
4958
]
···
4590
4978
dependencies = [
4591
4979
"cc",
4592
4980
"downcast-rs",
4593
-
"rustix",
4981
+
"rustix 1.1.2",
4594
4982
"scoped-tls",
4595
4983
"smallvec",
4596
4984
"wayland-sys",
···
4602
4990
source = "registry+https://github.com/rust-lang/crates.io-index"
4603
4991
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
4604
4992
dependencies = [
4605
-
"bitflags 2.9.1",
4606
-
"rustix",
4993
+
"bitflags 2.10.0",
4994
+
"rustix 1.1.2",
4607
4995
"wayland-backend",
4608
4996
"wayland-scanner",
4609
4997
]
···
4614
5002
source = "registry+https://github.com/rust-lang/crates.io-index"
4615
5003
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
4616
5004
dependencies = [
4617
-
"bitflags 2.9.1",
5005
+
"bitflags 2.10.0",
5006
+
"wayland-backend",
5007
+
"wayland-client",
5008
+
"wayland-scanner",
5009
+
]
5010
+
5011
+
[[package]]
5012
+
name = "wayland-protocols-wlr"
5013
+
version = "0.3.9"
5014
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5015
+
checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
5016
+
dependencies = [
5017
+
"bitflags 2.10.0",
4618
5018
"wayland-backend",
4619
5019
"wayland-client",
5020
+
"wayland-protocols",
4620
5021
"wayland-scanner",
4621
5022
]
4622
5023
···
4644
5045
4645
5046
[[package]]
4646
5047
name = "web-sys"
4647
-
version = "0.3.77"
5048
+
version = "0.3.82"
4648
5049
source = "registry+https://github.com/rust-lang/crates.io-index"
4649
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
5050
+
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
4650
5051
dependencies = [
4651
5052
"js-sys",
4652
5053
"wasm-bindgen",
···
4705
5106
"webview2-com-macros",
4706
5107
"webview2-com-sys",
4707
5108
"windows",
4708
-
"windows-core",
5109
+
"windows-core 0.61.2",
4709
5110
"windows-implement",
4710
5111
"windows-interface",
4711
5112
]
···
4718
5119
dependencies = [
4719
5120
"proc-macro2",
4720
5121
"quote",
4721
-
"syn 2.0.104",
5122
+
"syn 2.0.109",
4722
5123
]
4723
5124
4724
5125
[[package]]
···
4727
5128
source = "registry+https://github.com/rust-lang/crates.io-index"
4728
5129
checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
4729
5130
dependencies = [
4730
-
"thiserror 2.0.12",
5131
+
"thiserror 2.0.17",
4731
5132
"windows",
4732
-
"windows-core",
5133
+
"windows-core 0.61.2",
4733
5134
]
4734
5135
4735
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]]
4736
5143
name = "winapi"
4737
5144
version = "0.3.9"
4738
5145
source = "registry+https://github.com/rust-lang/crates.io-index"
···
4750
5157
4751
5158
[[package]]
4752
5159
name = "winapi-util"
4753
-
version = "0.1.9"
5160
+
version = "0.1.11"
4754
5161
source = "registry+https://github.com/rust-lang/crates.io-index"
4755
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
5162
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
4756
5163
dependencies = [
4757
-
"windows-sys 0.59.0",
5164
+
"windows-sys 0.61.2",
4758
5165
]
4759
5166
4760
5167
[[package]]
···
4769
5176
source = "registry+https://github.com/rust-lang/crates.io-index"
4770
5177
checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
4771
5178
dependencies = [
4772
-
"objc2 0.6.1",
5179
+
"objc2 0.6.3",
4773
5180
"objc2-app-kit",
4774
5181
"objc2-core-foundation",
4775
-
"objc2-foundation 0.3.1",
5182
+
"objc2-foundation 0.3.2",
4776
5183
"raw-window-handle",
4777
5184
"windows-sys 0.59.0",
4778
5185
"windows-version",
···
4785
5192
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4786
5193
dependencies = [
4787
5194
"windows-collections",
4788
-
"windows-core",
5195
+
"windows-core 0.61.2",
4789
5196
"windows-future",
4790
-
"windows-link",
5197
+
"windows-link 0.1.3",
4791
5198
"windows-numerics",
4792
5199
]
4793
5200
···
4797
5204
source = "registry+https://github.com/rust-lang/crates.io-index"
4798
5205
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4799
5206
dependencies = [
4800
-
"windows-core",
5207
+
"windows-core 0.61.2",
4801
5208
]
4802
5209
4803
5210
[[package]]
···
4808
5215
dependencies = [
4809
5216
"windows-implement",
4810
5217
"windows-interface",
4811
-
"windows-link",
4812
-
"windows-result",
4813
-
"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",
4814
5234
]
4815
5235
4816
5236
[[package]]
···
4819
5239
source = "registry+https://github.com/rust-lang/crates.io-index"
4820
5240
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4821
5241
dependencies = [
4822
-
"windows-core",
4823
-
"windows-link",
5242
+
"windows-core 0.61.2",
5243
+
"windows-link 0.1.3",
4824
5244
"windows-threading",
4825
5245
]
4826
5246
4827
5247
[[package]]
4828
5248
name = "windows-implement"
4829
-
version = "0.60.0"
5249
+
version = "0.60.2"
4830
5250
source = "registry+https://github.com/rust-lang/crates.io-index"
4831
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
5251
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
4832
5252
dependencies = [
4833
5253
"proc-macro2",
4834
5254
"quote",
4835
-
"syn 2.0.104",
5255
+
"syn 2.0.109",
4836
5256
]
4837
5257
4838
5258
[[package]]
4839
5259
name = "windows-interface"
4840
-
version = "0.59.1"
5260
+
version = "0.59.3"
4841
5261
source = "registry+https://github.com/rust-lang/crates.io-index"
4842
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
5262
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
4843
5263
dependencies = [
4844
5264
"proc-macro2",
4845
5265
"quote",
4846
-
"syn 2.0.104",
5266
+
"syn 2.0.109",
4847
5267
]
4848
5268
4849
5269
[[package]]
···
4853
5273
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4854
5274
4855
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]]
4856
5282
name = "windows-numerics"
4857
5283
version = "0.2.0"
4858
5284
source = "registry+https://github.com/rust-lang/crates.io-index"
4859
5285
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4860
5286
dependencies = [
4861
-
"windows-core",
4862
-
"windows-link",
5287
+
"windows-core 0.61.2",
5288
+
"windows-link 0.1.3",
4863
5289
]
4864
5290
4865
5291
[[package]]
···
4868
5294
source = "registry+https://github.com/rust-lang/crates.io-index"
4869
5295
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4870
5296
dependencies = [
4871
-
"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",
4872
5307
]
4873
5308
4874
5309
[[package]]
···
4877
5312
source = "registry+https://github.com/rust-lang/crates.io-index"
4878
5313
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4879
5314
dependencies = [
4880
-
"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",
4881
5325
]
4882
5326
4883
5327
[[package]]
···
4904
5348
source = "registry+https://github.com/rust-lang/crates.io-index"
4905
5349
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
4906
5350
dependencies = [
4907
-
"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",
4908
5361
]
4909
5362
4910
5363
[[package]]
···
4940
5393
4941
5394
[[package]]
4942
5395
name = "windows-targets"
4943
-
version = "0.53.3"
5396
+
version = "0.53.5"
4944
5397
source = "registry+https://github.com/rust-lang/crates.io-index"
4945
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
5398
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
4946
5399
dependencies = [
4947
-
"windows-link",
4948
-
"windows_aarch64_gnullvm 0.53.0",
4949
-
"windows_aarch64_msvc 0.53.0",
4950
-
"windows_i686_gnu 0.53.0",
4951
-
"windows_i686_gnullvm 0.53.0",
4952
-
"windows_i686_msvc 0.53.0",
4953
-
"windows_x86_64_gnu 0.53.0",
4954
-
"windows_x86_64_gnullvm 0.53.0",
4955
-
"windows_x86_64_msvc 0.53.0",
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",
4956
5409
]
4957
5410
4958
5411
[[package]]
···
4961
5414
source = "registry+https://github.com/rust-lang/crates.io-index"
4962
5415
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4963
5416
dependencies = [
4964
-
"windows-link",
5417
+
"windows-link 0.1.3",
4965
5418
]
4966
5419
4967
5420
[[package]]
4968
5421
name = "windows-version"
4969
-
version = "0.1.4"
5422
+
version = "0.1.7"
4970
5423
source = "registry+https://github.com/rust-lang/crates.io-index"
4971
-
checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
5424
+
checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
4972
5425
dependencies = [
4973
-
"windows-link",
5426
+
"windows-link 0.2.1",
4974
5427
]
4975
5428
4976
5429
[[package]]
···
4987
5440
4988
5441
[[package]]
4989
5442
name = "windows_aarch64_gnullvm"
4990
-
version = "0.53.0"
5443
+
version = "0.53.1"
4991
5444
source = "registry+https://github.com/rust-lang/crates.io-index"
4992
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
5445
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
4993
5446
4994
5447
[[package]]
4995
5448
name = "windows_aarch64_msvc"
···
5005
5458
5006
5459
[[package]]
5007
5460
name = "windows_aarch64_msvc"
5008
-
version = "0.53.0"
5461
+
version = "0.53.1"
5009
5462
source = "registry+https://github.com/rust-lang/crates.io-index"
5010
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
5463
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
5011
5464
5012
5465
[[package]]
5013
5466
name = "windows_i686_gnu"
···
5023
5476
5024
5477
[[package]]
5025
5478
name = "windows_i686_gnu"
5026
-
version = "0.53.0"
5479
+
version = "0.53.1"
5027
5480
source = "registry+https://github.com/rust-lang/crates.io-index"
5028
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
5481
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
5029
5482
5030
5483
[[package]]
5031
5484
name = "windows_i686_gnullvm"
···
5035
5488
5036
5489
[[package]]
5037
5490
name = "windows_i686_gnullvm"
5038
-
version = "0.53.0"
5491
+
version = "0.53.1"
5039
5492
source = "registry+https://github.com/rust-lang/crates.io-index"
5040
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
5493
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
5041
5494
5042
5495
[[package]]
5043
5496
name = "windows_i686_msvc"
···
5053
5506
5054
5507
[[package]]
5055
5508
name = "windows_i686_msvc"
5056
-
version = "0.53.0"
5509
+
version = "0.53.1"
5057
5510
source = "registry+https://github.com/rust-lang/crates.io-index"
5058
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
5511
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
5059
5512
5060
5513
[[package]]
5061
5514
name = "windows_x86_64_gnu"
···
5071
5524
5072
5525
[[package]]
5073
5526
name = "windows_x86_64_gnu"
5074
-
version = "0.53.0"
5527
+
version = "0.53.1"
5075
5528
source = "registry+https://github.com/rust-lang/crates.io-index"
5076
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
5529
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
5077
5530
5078
5531
[[package]]
5079
5532
name = "windows_x86_64_gnullvm"
···
5089
5542
5090
5543
[[package]]
5091
5544
name = "windows_x86_64_gnullvm"
5092
-
version = "0.53.0"
5545
+
version = "0.53.1"
5093
5546
source = "registry+https://github.com/rust-lang/crates.io-index"
5094
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
5547
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
5095
5548
5096
5549
[[package]]
5097
5550
name = "windows_x86_64_msvc"
···
5107
5560
5108
5561
[[package]]
5109
5562
name = "windows_x86_64_msvc"
5110
-
version = "0.53.0"
5563
+
version = "0.53.1"
5111
5564
source = "registry+https://github.com/rust-lang/crates.io-index"
5112
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
5565
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
5113
5566
5114
5567
[[package]]
5115
5568
name = "winnow"
···
5122
5575
5123
5576
[[package]]
5124
5577
name = "winnow"
5125
-
version = "0.7.12"
5578
+
version = "0.7.13"
5126
5579
source = "registry+https://github.com/rust-lang/crates.io-index"
5127
-
checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
5580
+
checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
5128
5581
dependencies = [
5129
5582
"memchr",
5130
5583
]
···
5140
5593
]
5141
5594
5142
5595
[[package]]
5143
-
name = "wit-bindgen-rt"
5144
-
version = "0.39.0"
5596
+
name = "wit-bindgen"
5597
+
version = "0.46.0"
5145
5598
source = "registry+https://github.com/rust-lang/crates.io-index"
5146
-
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"
5147
5606
dependencies = [
5148
-
"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",
5149
5618
]
5150
5619
5151
5620
[[package]]
5152
5621
name = "writeable"
5153
-
version = "0.6.1"
5622
+
version = "0.6.2"
5154
5623
source = "registry+https://github.com/rust-lang/crates.io-index"
5155
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
5624
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
5156
5625
5157
5626
[[package]]
5158
5627
name = "wry"
5159
-
version = "0.52.1"
5628
+
version = "0.53.5"
5160
5629
source = "registry+https://github.com/rust-lang/crates.io-index"
5161
-
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
5630
+
checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2"
5162
5631
dependencies = [
5163
5632
"base64 0.22.1",
5164
-
"block2 0.6.1",
5633
+
"block2 0.6.2",
5165
5634
"cookie",
5166
5635
"crossbeam-channel",
5636
+
"dirs",
5167
5637
"dpi",
5168
5638
"dunce",
5169
5639
"gdkx11",
···
5175
5645
"kuchikiki",
5176
5646
"libc",
5177
5647
"ndk",
5178
-
"objc2 0.6.1",
5648
+
"objc2 0.6.3",
5179
5649
"objc2-app-kit",
5180
5650
"objc2-core-foundation",
5181
-
"objc2-foundation 0.3.1",
5651
+
"objc2-foundation 0.3.2",
5182
5652
"objc2-ui-kit",
5183
5653
"objc2-web-kit",
5184
5654
"once_cell",
···
5187
5657
"sha2",
5188
5658
"soup3",
5189
5659
"tao-macros",
5190
-
"thiserror 2.0.12",
5660
+
"thiserror 2.0.17",
5191
5661
"url",
5192
5662
"webkit2gtk",
5193
5663
"webkit2gtk-sys",
5194
5664
"webview2-com",
5195
5665
"windows",
5196
-
"windows-core",
5666
+
"windows-core 0.61.2",
5197
5667
"windows-version",
5198
5668
"x11-dl",
5199
5669
]
···
5220
5690
]
5221
5691
5222
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]]
5223
5727
name = "yoke"
5224
-
version = "0.8.0"
5728
+
version = "0.8.1"
5225
5729
source = "registry+https://github.com/rust-lang/crates.io-index"
5226
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
5730
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
5227
5731
dependencies = [
5228
-
"serde",
5229
5732
"stable_deref_trait",
5230
5733
"yoke-derive",
5231
5734
"zerofrom",
···
5233
5736
5234
5737
[[package]]
5235
5738
name = "yoke-derive"
5236
-
version = "0.8.0"
5739
+
version = "0.8.1"
5237
5740
source = "registry+https://github.com/rust-lang/crates.io-index"
5238
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
5741
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
5239
5742
dependencies = [
5240
5743
"proc-macro2",
5241
5744
"quote",
5242
-
"syn 2.0.104",
5745
+
"syn 2.0.109",
5243
5746
"synstructure",
5244
5747
]
5245
5748
5246
5749
[[package]]
5247
5750
name = "zbus"
5248
-
version = "5.9.0"
5751
+
version = "5.12.0"
5249
5752
source = "registry+https://github.com/rust-lang/crates.io-index"
5250
-
checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
5753
+
checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91"
5251
5754
dependencies = [
5252
5755
"async-broadcast",
5253
5756
"async-executor",
···
5270
5773
"tokio",
5271
5774
"tracing",
5272
5775
"uds_windows",
5273
-
"windows-sys 0.59.0",
5274
-
"winnow 0.7.12",
5776
+
"uuid",
5777
+
"windows-sys 0.61.2",
5778
+
"winnow 0.7.13",
5275
5779
"zbus_macros",
5276
5780
"zbus_names",
5277
5781
"zvariant",
···
5279
5783
5280
5784
[[package]]
5281
5785
name = "zbus_macros"
5282
-
version = "5.9.0"
5786
+
version = "5.12.0"
5283
5787
source = "registry+https://github.com/rust-lang/crates.io-index"
5284
-
checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
5788
+
checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314"
5285
5789
dependencies = [
5286
-
"proc-macro-crate 3.3.0",
5790
+
"proc-macro-crate 3.4.0",
5287
5791
"proc-macro2",
5288
5792
"quote",
5289
-
"syn 2.0.104",
5793
+
"syn 2.0.109",
5290
5794
"zbus_names",
5291
5795
"zvariant",
5292
5796
"zvariant_utils",
···
5300
5804
dependencies = [
5301
5805
"serde",
5302
5806
"static_assertions",
5303
-
"winnow 0.7.12",
5807
+
"winnow 0.7.13",
5304
5808
"zvariant",
5305
5809
]
5306
5810
5307
5811
[[package]]
5308
5812
name = "zerocopy"
5309
-
version = "0.8.26"
5813
+
version = "0.8.27"
5310
5814
source = "registry+https://github.com/rust-lang/crates.io-index"
5311
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
5815
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
5312
5816
dependencies = [
5313
5817
"zerocopy-derive",
5314
5818
]
5315
5819
5316
5820
[[package]]
5317
5821
name = "zerocopy-derive"
5318
-
version = "0.8.26"
5822
+
version = "0.8.27"
5319
5823
source = "registry+https://github.com/rust-lang/crates.io-index"
5320
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
5824
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
5321
5825
dependencies = [
5322
5826
"proc-macro2",
5323
5827
"quote",
5324
-
"syn 2.0.104",
5828
+
"syn 2.0.109",
5325
5829
]
5326
5830
5327
5831
[[package]]
···
5341
5845
dependencies = [
5342
5846
"proc-macro2",
5343
5847
"quote",
5344
-
"syn 2.0.104",
5848
+
"syn 2.0.109",
5345
5849
"synstructure",
5346
5850
]
5347
5851
5348
5852
[[package]]
5349
5853
name = "zerotrie"
5350
-
version = "0.2.2"
5854
+
version = "0.2.3"
5351
5855
source = "registry+https://github.com/rust-lang/crates.io-index"
5352
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
5856
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
5353
5857
dependencies = [
5354
5858
"displaydoc",
5355
5859
"yoke",
···
5358
5862
5359
5863
[[package]]
5360
5864
name = "zerovec"
5361
-
version = "0.11.2"
5865
+
version = "0.11.5"
5362
5866
source = "registry+https://github.com/rust-lang/crates.io-index"
5363
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
5867
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
5364
5868
dependencies = [
5365
5869
"yoke",
5366
5870
"zerofrom",
···
5369
5873
5370
5874
[[package]]
5371
5875
name = "zerovec-derive"
5372
-
version = "0.11.1"
5876
+
version = "0.11.2"
5373
5877
source = "registry+https://github.com/rust-lang/crates.io-index"
5374
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
5878
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
5375
5879
dependencies = [
5376
5880
"proc-macro2",
5377
5881
"quote",
5378
-
"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",
5379
5898
]
5380
5899
5381
5900
[[package]]
5382
5901
name = "zvariant"
5383
-
version = "5.6.0"
5902
+
version = "5.8.0"
5384
5903
source = "registry+https://github.com/rust-lang/crates.io-index"
5385
-
checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
5904
+
checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c"
5386
5905
dependencies = [
5387
5906
"endi",
5388
5907
"enumflags2",
5389
5908
"serde",
5390
5909
"url",
5391
-
"winnow 0.7.12",
5910
+
"winnow 0.7.13",
5392
5911
"zvariant_derive",
5393
5912
"zvariant_utils",
5394
5913
]
5395
5914
5396
5915
[[package]]
5397
5916
name = "zvariant_derive"
5398
-
version = "5.6.0"
5917
+
version = "5.8.0"
5399
5918
source = "registry+https://github.com/rust-lang/crates.io-index"
5400
-
checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
5919
+
checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006"
5401
5920
dependencies = [
5402
-
"proc-macro-crate 3.3.0",
5921
+
"proc-macro-crate 3.4.0",
5403
5922
"proc-macro2",
5404
5923
"quote",
5405
-
"syn 2.0.104",
5924
+
"syn 2.0.109",
5406
5925
"zvariant_utils",
5407
5926
]
5408
5927
5409
5928
[[package]]
5410
5929
name = "zvariant_utils"
5411
-
version = "3.2.0"
5930
+
version = "3.2.1"
5412
5931
source = "registry+https://github.com/rust-lang/crates.io-index"
5413
-
checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
5932
+
checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
5414
5933
dependencies = [
5415
5934
"proc-macro2",
5416
5935
"quote",
5417
5936
"serde",
5418
-
"static_assertions",
5419
-
"syn 2.0.104",
5420
-
"winnow 0.7.12",
5937
+
"syn 2.0.109",
5938
+
"winnow 0.7.13",
5421
5939
]
+12
-5
src-tauri/Cargo.toml
+12
-5
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"
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"
30
37
+5
-1
src-tauri/capabilities/default.json
+5
-1
src-tauri/capabilities/default.json
+9
src-tauri/src/frontend_calls/close_app.rs
+9
src-tauri/src/frontend_calls/close_app.rs
+20
src-tauri/src/frontend_calls/load_previous_tabs.rs
+20
src-tauri/src/frontend_calls/load_previous_tabs.rs
···
1
+
use std::collections::HashMap;
2
+
3
+
use tauri::{State, Window};
4
+
5
+
use crate::{structs::nodes::Node, utils::config::Config};
6
+
7
+
#[tauri::command]
8
+
pub fn load_previous_tabs(
9
+
window: Window,
10
+
conf: State<Config>,
11
+
) -> HashMap<String, (Vec<Node>, String, Option<String>, bool)> {
12
+
let config = conf.store.lock().unwrap();
13
+
14
+
if !config.hide_editor_on_start {
15
+
window.show().unwrap();
16
+
}
17
+
18
+
let tabs = config.loaded_tabs.clone();
19
+
tabs
20
+
}
+4
-1
src-tauri/src/frontend_calls/mod.rs
+4
-1
src-tauri/src/frontend_calls/mod.rs
+6
-3
src-tauri/src/frontend_calls/save_graph.rs
+6
-3
src-tauri/src/frontend_calls/save_graph.rs
···
1
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
+
}
+26
-7
src-tauri/src/frontend_calls/sync_tab.rs
+26
-7
src-tauri/src/frontend_calls/sync_tab.rs
···
1
-
use std::sync::mpsc::Sender;
1
+
use chrono::Utc;
2
+
use crossbeam_channel::Sender;
2
3
3
4
use tauri::State;
4
5
5
-
use crate::{ runtime::commands::RuntimeCommand, structs::nodes::Node };
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, cmd: State<Sender<RuntimeCommand>> ) {
9
-
cmd.send(RuntimeCommand::AddTab(graph, id)).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();
21
+
22
+
let mut config = conf.store.lock().unwrap();
23
+
config.loaded_tabs.insert(id, (graph, name, location, save_state));
24
+
25
+
conf.save_prelocked(config);
10
26
}
11
27
12
28
#[tauri::command]
13
-
pub fn discard_tab( id: String, cmd: State<Sender<RuntimeCommand>> ) {
14
-
cmd.send(RuntimeCommand::RemoveTab(id)).unwrap();
15
-
}
29
+
pub fn discard_tab(id: String, cmd: State<Sender<RuntimeCommand>>, conf: State<Config>) {
30
+
cmd.send(RuntimeCommand::RemoveTab(id.clone())).unwrap();
31
+
32
+
let mut config = conf.store.lock().unwrap();
33
+
config.loaded_tabs.remove(&id);
34
+
}
+17
-8
src-tauri/src/lib.rs
+17
-8
src-tauri/src/lib.rs
···
1
-
use std::{collections::HashMap, fs, sync::{self, Arc, Mutex}};
1
+
use std::{fs, sync::Mutex};
2
2
3
+
use crossbeam_channel::bounded;
3
4
use frontend_calls::*;
4
5
5
-
use crate::{ osc::OSCMessage, runtime::nodes::RuntimeNodeTree, setup::setup, utils::config::Config };
6
+
use crate::{osc::OSCMessage, setup::setup, utils::{config::Config, vrchat_builtin_parameters}};
6
7
7
8
mod frontend_calls;
8
9
mod osc;
10
+
mod runtime;
9
11
mod setup;
10
12
mod structs;
11
13
mod utils;
12
-
mod runtime;
13
14
14
15
#[cfg_attr(mobile, tauri::mobile_entry_point)]
15
16
#[tokio::main]
···
19
20
match fs::metadata(&container_folder) {
20
21
Ok(meta) => {
21
22
if meta.is_file() {
22
-
panic!(
23
-
"document.write('Cannot launch app as the container path is a file not a directory')"
24
-
);
23
+
panic!("Cannot launch app as the container path is a file not a directory");
25
24
}
26
25
}
27
26
Err(_) => {
···
34
33
35
34
static ADDRESSES: Mutex<Vec<OSCMessage>> = Mutex::new(Vec::new());
36
35
37
-
let ( runtime_sender, runtime_receiver ) = sync::mpsc::channel();
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);
38
41
39
42
tauri::Builder::default()
43
+
.plugin(tauri_plugin_os::init())
44
+
.plugin(tauri_plugin_clipboard_manager::init())
40
45
.plugin(tauri_plugin_dialog::init())
41
46
.plugin(tauri_plugin_opener::init())
42
47
.invoke_handler(tauri::generate_handler![
43
48
get_addresses::get_addresses,
44
49
save_graph::save_graph,
45
50
sync_tab::sync_tab,
46
-
sync_tab::discard_tab
51
+
sync_tab::discard_tab,
52
+
load_previous_tabs::load_previous_tabs,
53
+
close_app::close_app,
54
+
settings::set_hide_editor_on_app_start,
55
+
settings::get_hide_editor_on_app_start,
47
56
])
48
57
.manage(conf)
49
58
.manage(&ADDRESSES)
+3
-1
src-tauri/src/main.rs
+3
-1
src-tauri/src/main.rs
+2
-3
src-tauri/src/osc.rs
+2
-3
src-tauri/src/osc.rs
···
1
1
// https://gist.github.com/phaze-the-dumb/634daacb5141eae2f846e20987dba7a8
2
-
3
-
use std::{net::UdpSocket, sync::mpsc::Sender};
2
+
use std::net::UdpSocket;
4
3
4
+
use crossbeam_channel::Sender;
5
5
use serde::Serialize;
6
6
7
7
use crate::structs::parameter_types::ParameterType;
···
160
160
}
161
161
}
162
162
163
-
println!("{:X?}", &buf);
164
163
socket.send_to(&buf, ip_addr).unwrap();
165
164
}
+5
-4
src-tauri/src/runtime/commands.rs
+5
-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
-
pub enum RuntimeCommand{
3
+
#[derive(Debug)]
4
+
pub enum RuntimeCommand {
4
5
OSCMessage(OSCMessage),
5
6
6
7
AddTab(Vec<Node>, String),
7
-
RemoveTab(String)
8
-
}
8
+
RemoveTab(String),
9
+
}
+51
src-tauri/src/runtime/nodes/conditional/ifequal.rs
+51
src-tauri/src/runtime/nodes/conditional/ifequal.rs
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct ConditionalIfEqual {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
}
10
+
11
+
impl ConditionalIfEqual {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for ConditionalIfEqual {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
let is_equal = args[1] == args[2];
41
+
42
+
vec![
43
+
ParameterType::Flow(is_equal),
44
+
ParameterType::Flow(!is_equal),
45
+
]
46
+
}
47
+
48
+
fn is_entrypoint(&self) -> bool {
49
+
false
50
+
}
51
+
}
+51
src-tauri/src/runtime/nodes/conditional/iffalse.rs
+51
src-tauri/src/runtime/nodes/conditional/iffalse.rs
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct ConditionalIfFalse {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
}
10
+
11
+
impl ConditionalIfFalse {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for ConditionalIfFalse {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
let is_false = !args[1].as_bool().unwrap();
41
+
42
+
vec![
43
+
ParameterType::Flow(is_false),
44
+
ParameterType::Flow(!is_false),
45
+
]
46
+
}
47
+
48
+
fn is_entrypoint(&self) -> bool {
49
+
false
50
+
}
51
+
}
+51
src-tauri/src/runtime/nodes/conditional/iftrue.rs
+51
src-tauri/src/runtime/nodes/conditional/iftrue.rs
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct ConditionalIfTrue {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
}
10
+
11
+
impl ConditionalIfTrue {
12
+
pub fn new(node: Node) -> Box<Self> {
13
+
Box::new(Self {
14
+
outputs: node.outputs.iter().map(|x| {
15
+
x.connections.iter()
16
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
17
+
18
+
inputs: node.inputs.iter().map(|x| {
19
+
let y = x.connections.get(0);
20
+
if let Some(y) = y{
21
+
Some((y.node.clone(), y.index, y.value_type))
22
+
} else{
23
+
None
24
+
}
25
+
}).collect(),
26
+
})
27
+
}
28
+
}
29
+
30
+
impl RuntimeNode for ConditionalIfTrue {
31
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
32
+
self.outputs.clone()
33
+
}
34
+
35
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
36
+
self.inputs.clone()
37
+
}
38
+
39
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
40
+
let is_true = args[1].as_bool().unwrap();
41
+
42
+
vec![
43
+
ParameterType::Flow(is_true),
44
+
ParameterType::Flow(!is_true),
45
+
]
46
+
}
47
+
48
+
fn is_entrypoint(&self) -> bool {
49
+
false
50
+
}
51
+
}
+3
src-tauri/src/runtime/nodes/conditional/mod.rs
+3
src-tauri/src/runtime/nodes/conditional/mod.rs
+36
-23
src-tauri/src/runtime/nodes/debug.rs
+36
-23
src-tauri/src/runtime/nodes/debug.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
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: 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 ) -> bool {
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
-
false
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
+
}
+51
-39
src-tauri/src/runtime/nodes/osctrigger.rs
+51
-39
src-tauri/src/runtime/nodes/osctrigger.rs
···
1
-
use crate::{ runtime::nodes::RuntimeNode, structs::{ nodes::Node, parameter_types::ParameterType } };
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: String,
6
-
runtime_active: bool
6
+
pub struct OSCTrigger {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
address: Option<String>
7
11
}
8
12
9
-
impl OSCTrigger{
10
-
pub fn new( node: Node ) -> Box<Self>{
11
-
dbg!(&node);
13
+
impl OSCTrigger {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
12
16
13
17
Box::new(Self {
14
-
address: node.statics[0].value.as_str().unwrap().to_owned(),
15
-
outputs: node.outputs.iter()
16
-
.map(| x | {
17
-
x.connections.iter().map(| x | { ( x.node.clone(), x.index, x.value_type ) }).collect()
18
-
}).collect(),
19
-
runtime_active: false
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
+
},
20
36
})
21
37
}
22
38
}
23
39
24
-
impl RuntimeNode for OSCTrigger{
25
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>> {
40
+
impl RuntimeNode for OSCTrigger {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
26
42
self.outputs.clone()
27
43
}
28
44
29
-
fn execute_dry( &mut self, msg: &Vec<ParameterType> ) -> Option<Vec<ParameterType>> {
30
-
if let ParameterType::String(address) = &msg[0]{
31
-
if *address == self.address{
32
-
self.runtime_active = true;
33
-
Some(msg.clone())
34
-
// The first value is technically the address value,
35
-
// but this value gets ignored as the first output of
36
-
// the osctrigger node is a flow output which gets ignored
37
-
// on dry runs.
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, mut args: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if args.len() == 0{ return args }
51
+
52
+
let execute = if let Some(internal_address) = &self.address {
53
+
if let Ok(address) = args[0].as_string() {
54
+
address == *internal_address
38
55
} else{
39
-
self.runtime_active = false;
40
-
None
56
+
false
41
57
}
42
58
} else{
43
-
self.runtime_active = false;
44
-
None
45
-
}
46
-
}
47
-
48
-
fn execute( &mut self ) -> bool {
49
-
let execute = self.runtime_active;
50
-
self.runtime_active = false;
59
+
false
60
+
};
51
61
52
-
execute
62
+
args[0] = ParameterType::Flow(execute);
63
+
args
53
64
}
54
65
55
-
fn update_arg( &mut self, _: usize, _: ParameterType ) -> bool { false }
56
-
fn is_entrypoint( &self ) -> bool { true }
57
-
}
66
+
fn is_entrypoint(&self) -> bool {
67
+
true
68
+
}
69
+
}
+73
src-tauri/src/runtime/nodes/press_key.rs
+73
src-tauri/src/runtime/nodes/press_key.rs
···
1
+
use std::sync::{Arc, Mutex};
2
+
3
+
use enigo::{Direction, Enigo, Key, Keyboard};
4
+
5
+
use crate::{
6
+
runtime::nodes::RuntimeNode,
7
+
structs::{nodes::Node, parameter_types::ParameterType},
8
+
};
9
+
10
+
pub struct PressKey {
11
+
outputs: Vec<Vec<(String, isize, isize)>>,
12
+
inputs: Vec<Option<(String, isize, isize)>>,
13
+
14
+
key: Option<char>,
15
+
enigo: Arc<Mutex<Enigo>>,
16
+
}
17
+
18
+
impl PressKey {
19
+
pub fn new(node: Node, enigo: Arc<Mutex<Enigo>>) -> Box<Self> {
20
+
let value = &node.statics[0].value;
21
+
22
+
Box::new(Self {
23
+
outputs: node.outputs.iter().map(|x| {
24
+
x.connections.iter()
25
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
26
+
27
+
inputs: node.inputs.iter().map(|x| {
28
+
let y = x.connections.get(0);
29
+
if let Some(y) = y{
30
+
Some((y.node.clone(), y.index, y.value_type))
31
+
} else{
32
+
None
33
+
}
34
+
}).collect(),
35
+
36
+
enigo,
37
+
key: if value.is_null() {
38
+
None
39
+
} else {
40
+
let string = value.as_str().unwrap().to_owned();
41
+
42
+
if string.len() == 1 {
43
+
Some(string.chars().nth(0).unwrap())
44
+
} else {
45
+
None
46
+
}
47
+
},
48
+
})
49
+
}
50
+
}
51
+
52
+
impl RuntimeNode for PressKey {
53
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
54
+
self.outputs.clone()
55
+
}
56
+
57
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
58
+
self.inputs.clone()
59
+
}
60
+
61
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
62
+
if self.key.is_some() {
63
+
let mut enigo = self.enigo.lock().unwrap();
64
+
enigo.key(Key::MediaPlayPause, Direction::Click).unwrap();
65
+
}
66
+
67
+
vec![]
68
+
}
69
+
70
+
fn is_entrypoint(&self) -> bool {
71
+
false
72
+
}
73
+
}
+70
src-tauri/src/runtime/nodes/shell.rs
+70
src-tauri/src/runtime/nodes/shell.rs
···
1
+
use std::{io::Stdin, process::{Command, Stdio}};
2
+
3
+
use crate::{
4
+
runtime::nodes::RuntimeNode,
5
+
structs::{nodes::Node, parameter_types::ParameterType},
6
+
};
7
+
8
+
pub struct ShellCommand {
9
+
outputs: Vec<Vec<(String, isize, isize)>>,
10
+
inputs: Vec<Option<(String, isize, isize)>>
11
+
}
12
+
13
+
impl ShellCommand {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
Box::new(Self {
16
+
outputs: node.outputs.iter().map(|x| {
17
+
x.connections.iter()
18
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
19
+
20
+
inputs: node.inputs.iter().map(|x| {
21
+
let y = x.connections.get(0);
22
+
if let Some(y) = y{
23
+
Some((y.node.clone(), y.index, y.value_type))
24
+
} else{
25
+
None
26
+
}
27
+
}).collect()
28
+
})
29
+
}
30
+
}
31
+
32
+
impl RuntimeNode for ShellCommand {
33
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
34
+
self.outputs.clone()
35
+
}
36
+
37
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
38
+
self.inputs.clone()
39
+
}
40
+
41
+
fn execute(&mut self, args: Vec<ParameterType>) -> Vec<ParameterType> {
42
+
if let Ok(cmd) = args[1].as_string(){
43
+
if cmd != ""{
44
+
let mut split_cmd = cmd.split(" ");
45
+
46
+
let mut cmd = Command::new(split_cmd.nth(0).unwrap());
47
+
if split_cmd.clone().count() > 0{ cmd.args(split_cmd); }
48
+
49
+
cmd.stdout(Stdio::piped());
50
+
cmd.stderr(Stdio::piped());
51
+
52
+
let child = cmd.spawn().unwrap();
53
+
let output = child.wait_with_output().unwrap();
54
+
55
+
vec![
56
+
ParameterType::Flow(true),
57
+
ParameterType::String(str::from_utf8(&output.stdout).unwrap().to_owned())
58
+
]
59
+
} else{
60
+
vec![ ParameterType::Flow(false) ]
61
+
}
62
+
} else{
63
+
vec![ ParameterType::Flow(false) ]
64
+
}
65
+
}
66
+
67
+
fn is_entrypoint(&self) -> bool {
68
+
false
69
+
}
70
+
}
+60
src-tauri/src/runtime/nodes/statics/float.rs
+60
src-tauri/src/runtime/nodes/statics/float.rs
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct StaticFloat {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<f32>,
11
+
}
12
+
13
+
impl StaticFloat {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
value: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_f64().unwrap() as f32)
35
+
}
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for StaticFloat {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if self.value.is_some() {
51
+
vec![ParameterType::Float(self.value.clone().unwrap())]
52
+
} else {
53
+
vec![ParameterType::Float(0.0)]
54
+
}
55
+
}
56
+
57
+
fn is_entrypoint(&self) -> bool {
58
+
false
59
+
}
60
+
}
+60
src-tauri/src/runtime/nodes/statics/int.rs
+60
src-tauri/src/runtime/nodes/statics/int.rs
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct StaticInt {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<i32>,
11
+
}
12
+
13
+
impl StaticInt {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
value: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_i64().unwrap() as i32)
35
+
}
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for StaticInt {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if self.value.is_some() {
51
+
vec![ParameterType::Int(self.value.clone().unwrap())]
52
+
} else {
53
+
vec![ParameterType::Int(0)]
54
+
}
55
+
}
56
+
57
+
fn is_entrypoint(&self) -> bool {
58
+
false
59
+
}
60
+
}
+3
src-tauri/src/runtime/nodes/statics/mod.rs
+3
src-tauri/src/runtime/nodes/statics/mod.rs
+60
src-tauri/src/runtime/nodes/statics/string.rs
+60
src-tauri/src/runtime/nodes/statics/string.rs
···
1
+
use crate::{
2
+
runtime::nodes::RuntimeNode,
3
+
structs::{nodes::Node, parameter_types::ParameterType},
4
+
};
5
+
6
+
pub struct StaticString {
7
+
outputs: Vec<Vec<(String, isize, isize)>>,
8
+
inputs: Vec<Option<(String, isize, isize)>>,
9
+
10
+
value: Option<String>,
11
+
}
12
+
13
+
impl StaticString {
14
+
pub fn new(node: Node) -> Box<Self> {
15
+
let value = &node.statics[0].value;
16
+
17
+
Box::new(Self {
18
+
outputs: node.outputs.iter().map(|x| {
19
+
x.connections.iter()
20
+
.map(|x| (x.node.clone(), x.index, x.value_type)).collect()}).collect(),
21
+
22
+
inputs: node.inputs.iter().map(|x| {
23
+
let y = x.connections.get(0);
24
+
if let Some(y) = y{
25
+
Some((y.node.clone(), y.index, y.value_type))
26
+
} else{
27
+
None
28
+
}
29
+
}).collect(),
30
+
31
+
value: if value.is_null() {
32
+
None
33
+
} else {
34
+
Some(value.as_str().unwrap().to_owned())
35
+
}
36
+
})
37
+
}
38
+
}
39
+
40
+
impl RuntimeNode for StaticString {
41
+
fn outputs(&self) -> Vec<Vec<(String, isize, isize)>> {
42
+
self.outputs.clone()
43
+
}
44
+
45
+
fn inputs(&self) -> Vec<Option<(String, isize, isize)>> {
46
+
self.inputs.clone()
47
+
}
48
+
49
+
fn execute(&mut self, _: Vec<ParameterType>) -> Vec<ParameterType> {
50
+
if self.value.is_some() {
51
+
vec![ParameterType::String(self.value.clone().unwrap())]
52
+
} else {
53
+
vec![ParameterType::String("".to_owned())]
54
+
}
55
+
}
56
+
57
+
fn is_entrypoint(&self) -> bool {
58
+
false
59
+
}
60
+
}
+85
-19
src-tauri/src/runtime/nodes.rs
+85
-19
src-tauri/src/runtime/nodes.rs
···
1
-
use std::{collections::HashMap, sync::Mutex};
1
+
use std::{
2
+
collections::HashMap,
3
+
sync::{Arc, Mutex},
4
+
};
2
5
3
-
use crate::{ runtime::nodes::{ debug::Debug, osctrigger::OSCTrigger }, structs::{ nodes::Node, parameter_types::ParameterType } };
6
+
// #[cfg(target_os = "windows")]
7
+
use enigo::Enigo;
4
8
5
-
mod osctrigger;
9
+
use crate::{
10
+
runtime::nodes::{
11
+
conditional::{
12
+
ifequal::ConditionalIfEqual, iffalse::ConditionalIfFalse, iftrue::ConditionalIfTrue,
13
+
}, debug::Debug, oscactions::sendchatbox::OSCActionsSendChatbox, osctrigger::OSCTrigger, shell::ShellCommand, statics::{float::StaticFloat, int::StaticInt, string::StaticString}
14
+
},
15
+
structs::{nodes::Node, parameter_types::ParameterType},
16
+
};
17
+
18
+
// #[cfg(target_os = "windows")]
19
+
use crate::runtime::nodes::press_key::PressKey;
20
+
21
+
mod conditional;
6
22
mod debug;
23
+
mod oscactions;
24
+
mod osctrigger;
25
+
mod statics;
26
+
mod shell;
7
27
8
-
pub struct RuntimeNodeTree{
9
-
pub nodes: HashMap<String, Mutex<Box<dyn RuntimeNode>>>
28
+
// #[cfg(target_os = "windows")]
29
+
mod press_key;
30
+
31
+
pub struct RuntimeNodeTree {
32
+
pub nodes: HashMap<String, Box<dyn RuntimeNode>>,
10
33
}
11
34
12
-
impl RuntimeNodeTree{
13
-
pub fn from( tree: Vec<Node> ) -> Self{
14
-
let mut runtime_nodes: HashMap<String, Mutex<Box<dyn RuntimeNode>>> = HashMap::new();
15
-
for node in tree{
16
-
match node.type_id.as_str(){
17
-
"osctrigger" => { runtime_nodes.insert(node.id.clone(), Mutex::new(OSCTrigger::new(node))); }
18
-
"debug" => { runtime_nodes.insert(node.id.clone(), Mutex::new(Debug::new(node))); }
35
+
unsafe impl Send for RuntimeNodeTree {}
36
+
37
+
impl RuntimeNodeTree {
38
+
pub fn from(tree: Vec<Node>, /*#[cfg(target_os = "windows")]*/ enigo: Arc<Mutex<Enigo>>) -> Self {
39
+
let mut runtime_nodes: HashMap<String, Box<dyn RuntimeNode>> = HashMap::new();
40
+
for node in tree {
41
+
match node.type_id.as_str() {
42
+
"osctrigger" => {
43
+
runtime_nodes.insert(node.id.clone(), OSCTrigger::new(node));
44
+
}
45
+
46
+
"staticstring" => {
47
+
runtime_nodes.insert(node.id.clone(), StaticString::new(node));
48
+
}
49
+
"staticint" => {
50
+
runtime_nodes.insert(node.id.clone(), StaticInt::new(node));
51
+
}
52
+
"staticfloat" => {
53
+
runtime_nodes.insert(node.id.clone(), StaticFloat::new(node));
54
+
}
55
+
56
+
"iftrue" => {
57
+
runtime_nodes.insert(node.id.clone(), ConditionalIfTrue::new(node));
58
+
}
59
+
"iffalse" => {
60
+
runtime_nodes.insert(node.id.clone(), ConditionalIfFalse::new(node));
61
+
}
62
+
"ifequal" => {
63
+
runtime_nodes.insert(node.id.clone(), ConditionalIfEqual::new(node));
64
+
}
65
+
66
+
"oscsendchatbox" => {
67
+
runtime_nodes.insert(node.id.clone(), OSCActionsSendChatbox::new(node));
68
+
}
69
+
70
+
"debug" => {
71
+
runtime_nodes.insert(node.id.clone(), Debug::new(node));
72
+
}
73
+
74
+
// #[cfg(target_os = "windows")]
75
+
"presskey" => {
76
+
runtime_nodes.insert(node.id.clone(), PressKey::new(node, enigo.clone()));
77
+
}
78
+
79
+
"shellcommand" => {
80
+
runtime_nodes.insert(node.id.clone(), ShellCommand::new(node));
81
+
}
82
+
19
83
_ => {}
20
84
}
21
85
}
22
86
23
-
Self { nodes: runtime_nodes }
87
+
Self {
88
+
nodes: runtime_nodes,
89
+
}
24
90
}
25
91
}
26
92
27
-
pub trait RuntimeNode{
28
-
fn outputs( &self ) -> Vec<Vec<( String, isize, isize )>>; // Node ID, input index, output value type
29
-
fn execute_dry( &mut self, msg: &Vec<ParameterType> ) -> Option<Vec<ParameterType>>; // Only update values on the first loop through
30
-
fn execute( &mut self ) -> bool; // Then call functions on the second loop
31
-
fn update_arg( &mut self, index: usize, value: ParameterType ) -> bool;
32
-
fn is_entrypoint( &self ) -> bool;
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;
33
99
}
+67
-45
src-tauri/src/runtime.rs
+67
-45
src-tauri/src/runtime.rs
···
1
-
use anyhow::{ bail, Result };
1
+
use std::collections::HashMap;
2
2
3
-
use crate::{ runtime::nodes::RuntimeNodeTree, structs::parameter_types::ParameterType };
4
-
5
-
pub mod nodes;
6
-
pub mod commands;
3
+
use anyhow::{bail, Result};
7
4
8
-
// This is horrible. I know, I'm sorry.
5
+
use crate::{runtime::nodes::RuntimeNodeTree, structs::parameter_types::ParameterType};
9
6
10
-
pub fn runtime_dry( entry: String, parameters: &Vec<ParameterType>, tab: &RuntimeNodeTree ) -> Result<()>{
11
-
let node = tab.nodes.get(&entry);
12
-
if node.is_none(){ bail!("Cannot find node"); }
7
+
pub mod commands;
8
+
pub mod nodes;
13
9
14
-
let mut node = node.unwrap().lock().unwrap();
10
+
// TODO: Variables
15
11
16
-
let output_map = node.outputs();
17
-
let args = node.execute_dry(parameters);
12
+
pub fn recurse_runtime(entry: String, tab: &mut RuntimeNodeTree, args: Vec<ParameterType>) -> Result<()>{
13
+
let ( out_args, output_map ) = runtime(entry, tab, args)?;
18
14
19
-
drop(node);
15
+
let mut next_node_args: HashMap<String, Vec<ParameterType>> = HashMap::new();
20
16
21
-
if args.is_some(){
22
-
let args = args.unwrap();
17
+
for i in 0..out_args.len(){
18
+
if output_map.len() <= i { break; }
19
+
let links = &output_map[i];
23
20
24
-
for i in 0..args.len(){
25
-
let arg = &args[i];
21
+
for ( id, link_index, _ ) in links{
22
+
let link_index = link_index.clone() as usize;
26
23
27
-
for output in &output_map[i]{
28
-
if output.2 == 5{ break; } // Ignore flow outputs
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); }
29
27
30
-
let next_node = tab.nodes.get(&output.0);
31
-
if next_node.is_none(){ bail!("Cannot find node {}", output.0) }
28
+
args.push(out_args[i].clone());
29
+
} else{
30
+
let mut args = vec![ParameterType::None; link_index];
31
+
args.push(out_args[i].clone());
32
32
33
-
let mut next_node = next_node.unwrap().lock().unwrap();
34
-
let can_update = next_node.update_arg(output.1 as usize, arg.clone());
33
+
next_node_args.insert(id.clone(), args);
34
+
}
35
+
}
36
+
}
35
37
36
-
if can_update{
37
-
drop(next_node);
38
-
// ^^ Drop this MutexGuard before we enter the runtime,
39
-
// as it blocks the runtime for gaining a lock on the node
40
-
// TODO: Please find a better way of making it mutable
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];
41
42
42
-
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)?;
43
46
}
44
47
}
45
48
}
···
48
51
Ok(())
49
52
}
50
53
54
+
pub fn runtime(entry: String, tab: &mut RuntimeNodeTree, mut args: Vec<ParameterType>) -> Result<(Vec<ParameterType>, Vec<Vec<(String, isize, isize)>>)> {
55
+
let node = tab.nodes.get_mut(&entry);
56
+
if node.is_none() { bail!("Cannot find node"); }
51
57
52
-
pub fn runtime( entry: String, tab: &RuntimeNodeTree ) -> Result<()>{
53
-
let node = tab.nodes.get(&entry);
54
-
if node.is_none(){ bail!("Cannot find node"); }
58
+
let node = node.unwrap();
59
+
let inputs = node.inputs();
55
60
56
-
let mut node = node.unwrap().lock().unwrap();
61
+
let mut needed_input_nodes = HashMap::new();
57
62
58
-
let next = node.execute();
59
-
if next{
60
-
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
+
}
61
74
62
-
drop(node);
75
+
for ( id, needed ) in needed_input_nodes{
76
+
let (out_args, _) = runtime(id, tab, vec![]).unwrap();
63
77
64
-
for outputs in outputs{
65
-
for output in outputs{
66
-
if output.2 == 5{
67
-
// This is a flow output, continue
68
-
runtime(output.0, &tab)?;
69
-
}
78
+
for ( output, input ) in needed{
79
+
let arg = &out_args[output as usize];
80
+
81
+
if args.len() >= input{
82
+
while args.len() < input{ args.push(ParameterType::None); }
83
+
args.push(arg.clone());
84
+
} else{
85
+
args[input] = arg.clone();
70
86
}
71
87
}
72
88
}
73
89
74
-
Ok(())
75
-
}
90
+
let node = tab.nodes.get_mut(&entry); // TODO: Find a way to only do this lookup once
91
+
if node.is_none() { bail!("Cannot find node"); }
92
+
93
+
let node = node.unwrap();
94
+
95
+
let output = node.execute(args);
96
+
Ok((output, node.outputs()))
97
+
}
-97
src-tauri/src/runtime.rs.old
-97
src-tauri/src/runtime.rs.old
···
1
-
use std::collections::HashMap;
2
-
3
-
use anyhow::bail;
4
-
5
-
use crate::{ osc::OSCMessage, structs::{ nodes::{ Node, Tab }, parameter_types::ParameterType } };
6
-
7
-
pub fn start_runtime(
8
-
tab: &Tab,
9
-
msg: &OSCMessage,
10
-
node_execution_table:
11
-
&HashMap<String, Box<dyn Fn(&Node, &OSCMessage, Vec<ParameterType>) -> Vec<ParameterType>>>
12
-
) -> anyhow::Result<()>{
13
-
for i in 0..tab.nodes.len(){
14
-
let node = &tab.nodes[i];
15
-
16
-
if node.type_id == "osctrigger"{
17
-
runtime(&tab.nodes, i, msg, node_execution_table)?;
18
-
}
19
-
}
20
-
21
-
Ok(())
22
-
}
23
-
24
-
fn runtime(
25
-
nodes: &Vec<Node>,
26
-
index: usize,
27
-
msg: &OSCMessage,
28
-
node_execution_table:
29
-
&HashMap<String, Box<dyn Fn(&Node, &OSCMessage, Vec<ParameterType>) -> Vec<ParameterType>>>
30
-
) -> anyhow::Result<()>{
31
-
let node = &nodes[index];
32
-
33
-
let execute_node = node_execution_table.get(&node.type_id);
34
-
if execute_node.is_none(){ bail!("Cannot find node in execution table."); }
35
-
36
-
let res = execute_node.unwrap()(node, msg, vec![]);
37
-
if res.len() == 0{ return Ok(()); }
38
-
39
-
let nodes_length = (&nodes).len();
40
-
41
-
for i in 0..res.len(){
42
-
let output = &node.outputs[i];
43
-
if output.value_type == 5 { // 5 - Flow Type
44
-
45
-
if let ParameterType::Flow(run) = res[i]{
46
-
47
-
if run{
48
-
let connections = &output.connections;
49
-
for connection in connections{
50
-
let mut found_node = None;
51
-
52
-
for i in 0..nodes_length{
53
-
let node = &nodes[i];
54
-
55
-
if node.id == connection.node{
56
-
found_node = Some(i);
57
-
break;
58
-
}
59
-
}
60
-
61
-
if found_node.is_some(){
62
-
runtime(nodes, found_node.unwrap(), msg, node_execution_table)?;
63
-
}
64
-
}
65
-
}
66
-
}
67
-
}
68
-
}
69
-
70
-
Ok(())
71
-
}
72
-
73
-
pub fn load_excecution_table(
74
-
node_execution_table:
75
-
&mut HashMap<String, Box<dyn Fn(&Node, &OSCMessage, Vec<ParameterType>) -> Vec<ParameterType>>>
76
-
){
77
-
node_execution_table.insert("osctrigger".into(), Box::new(| node, msg, _ |{
78
-
if node.statics[0].value.is_null(){ return vec![ ParameterType::Flow(false) ] }
79
-
80
-
let node_addr = node.statics[0].value.as_str().unwrap().to_owned();
81
-
if node_addr == msg.address{
82
-
let mut dat = vec![
83
-
ParameterType::Flow(true)
84
-
];
85
-
86
-
dat.extend(msg.values.clone());
87
-
dat
88
-
} else{
89
-
vec![ ParameterType::Flow(false) ]
90
-
}
91
-
}));
92
-
93
-
node_execution_table.insert("debug".into(), Box::new(| _, _, args |{
94
-
dbg!(&args[1]);
95
-
vec![]
96
-
}));
97
-
}
+74
-42
src-tauri/src/setup.rs
+74
-42
src-tauri/src/setup.rs
···
1
-
use std::{ collections::HashMap, fs::File, io::Read, sync::{ self, mpsc::Receiver, Mutex } };
1
+
use crossbeam_channel::{bounded, Receiver};
2
+
use std::{
3
+
collections::HashMap,
4
+
fs::File,
5
+
io::Read,
6
+
sync::{Arc, Mutex},
7
+
};
2
8
3
9
use flate2::read::GzDecoder;
4
-
use serde_json::{ Map, Value };
5
-
use tauri::{ App, Emitter, Listener, Manager };
10
+
use serde_json::{Map, Value};
11
+
use tauri::{App, Emitter, Listener, Manager, WindowEvent};
6
12
7
-
use crate::{ osc::{ self, OSCMessage }, runtime::{ commands::RuntimeCommand, nodes::RuntimeNodeTree, runtime, runtime_dry }, structs::parameter_types::ParameterType };
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
+
};
8
16
9
17
pub fn setup(
10
18
app: &mut App,
11
19
addresses: &'static Mutex<Vec<OSCMessage>>,
12
-
runtime_command_receiver: Receiver<RuntimeCommand>
20
+
runtime_command_receiver: Receiver<RuntimeCommand>,
13
21
) {
14
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());
15
44
16
45
let handle = window.clone();
17
46
window.listen("tauri://drag-drop", move |ev| {
···
32
61
handle.emit("load_new_tab", Value::Object(map)).unwrap();
33
62
});
34
63
35
-
let ( sender, receiver ) = sync::mpsc::channel();
64
+
let (sender, receiver) = bounded(1024);
36
65
37
66
tokio::spawn(async move {
38
67
osc::start_server(sender, "127.0.0.1:9001");
39
68
});
40
69
41
-
let ( runtime_sender, runtime_receiver ) = sync::mpsc::channel();
70
+
let (runtime_sender, runtime_receiver) = bounded(1024);
42
71
43
72
let runtime_sender_1 = runtime_sender.clone();
44
73
tokio::spawn(async move {
···
55
84
window.emit("osc-message", &message).unwrap();
56
85
57
86
let msg = message.clone();
58
-
let mut addresses = addresses.lock().unwrap();
59
-
if !addresses.contains(&msg) { addresses.push(msg); }
87
+
let mut addrs = addresses.lock().unwrap();
88
+
if !addrs.contains(&msg) {
89
+
addrs.push(msg);
90
+
}
60
91
61
-
runtime_sender.send(RuntimeCommand::OSCMessage(message)).unwrap();
92
+
if message.address == "/avatar/change".to_owned(){
93
+
*addrs = vrchat_builtin_parameters::get_read_addresses();
94
+
95
+
// TODO: Read avatar paramaters from file
96
+
}
97
+
98
+
runtime_sender
99
+
.send(RuntimeCommand::OSCMessage(message))
100
+
.unwrap();
62
101
}
63
102
});
64
103
104
+
// TODO: Run tabs in seperate threads (really not looking forward to this... thanks rust)
105
+
65
106
tokio::spawn(async move {
66
107
let mut tabs: HashMap<String, RuntimeNodeTree> = HashMap::new();
67
108
109
+
// #[cfg(target_os = "windows")]
110
+
let enigo = Arc::new(Mutex::new(enigo::Enigo::new(&enigo::Settings::default()).unwrap()));
111
+
68
112
loop {
69
113
let cmd = runtime_receiver.recv().unwrap();
70
114
71
-
match cmd{
72
-
RuntimeCommand::OSCMessage( msg ) => {
73
-
for ( _, tab ) in &mut tabs{
74
-
for ( id, node ) in &tab.nodes{
75
-
let node = node.lock().unwrap();
76
-
77
-
if node.is_entrypoint(){
78
-
let args = vec![
79
-
vec![ ParameterType::String(msg.address.clone()) ], msg.values.clone()
80
-
].concat();
81
-
82
-
drop(node);
83
-
// ^^ Drop this MutexGuard before we enter the runtime,
84
-
// as it blocks the runtime for gaining a lock on the node
85
-
// TODO: Please find a better way of making it mutable
86
-
87
-
runtime_dry(id.clone(), &args, tab).unwrap();
88
-
}
89
-
}
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();
90
119
91
-
for ( id, node ) in &tab.nodes{
92
-
let node = node.lock().unwrap();
120
+
for id in keys {
121
+
let entry = tab.nodes[&id].is_entrypoint();
93
122
94
-
if node.is_entrypoint(){
95
-
drop(node);
96
-
// ^^ Drop this MutexGuard before we enter the runtime,
97
-
// as it blocks the runtime for gaining a lock on the node
98
-
// TODO: Please find a better way of making it mutable
123
+
if entry {
124
+
let mut args = vec![ ParameterType::String(msg.address.clone())];
125
+
let mut values = msg.values.clone();
99
126
100
-
runtime(id.clone(), tab).unwrap();
127
+
args.append(&mut values);
128
+
let _ = recurse_runtime(id.clone(), &mut tab, args);
101
129
}
102
130
}
103
131
}
104
-
},
132
+
}
105
133
106
-
RuntimeCommand::AddTab( graph, id ) => {
107
-
tabs.insert(id, RuntimeNodeTree::from(graph));
108
-
},
109
-
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) => {
110
142
tabs.remove(&id);
111
143
}
112
144
}
+1
-1
src-tauri/src/structs/mod.rs
+1
-1
src-tauri/src/structs/mod.rs
+17
-20
src-tauri/src/structs/nodes.rs
+17
-20
src-tauri/src/structs/nodes.rs
···
1
-
use serde::{ Deserialize, Serialize };
1
+
use serde::{Deserialize, Serialize};
2
2
use serde_json::Value;
3
3
4
-
#[derive(Serialize, Deserialize, Debug)]
5
-
pub struct Node{
4
+
#[derive(Serialize, Deserialize, Debug, Clone)]
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
-
impl Node{
17
-
18
-
}
19
-
20
-
#[derive(Serialize, Deserialize, Debug)]
21
-
pub struct NodeStatic{
17
+
#[derive(Serialize, Deserialize, Debug, Clone)]
18
+
pub struct NodeStatic {
22
19
pub name: String,
23
20
24
21
#[serde(rename = "type")]
25
22
pub value_type: isize,
26
-
pub value: Value
23
+
pub value: Value,
27
24
}
28
25
29
-
#[derive(Serialize, Deserialize, Debug)]
30
-
pub struct NodeOutput{
26
+
#[derive(Serialize, Deserialize, Debug, Clone)]
27
+
pub struct NodeIO {
31
28
pub name: String,
32
29
33
30
#[serde(rename = "type")]
34
31
pub value_type: isize,
35
-
pub connections: Vec<NodeOutputConnections>
32
+
pub connections: Vec<NodeOutputConnections>,
36
33
}
37
34
38
-
#[derive(Serialize, Deserialize, Debug)]
39
-
pub struct NodeOutputConnections{
35
+
#[derive(Serialize, Deserialize, Debug, Clone)]
36
+
pub struct NodeOutputConnections {
40
37
pub name: String,
41
38
pub node: String,
42
39
pub index: isize,
43
40
44
41
#[serde(rename = "type")]
45
-
pub value_type: isize
46
-
}
42
+
pub value_type: isize,
43
+
}
+55
-1
src-tauri/src/structs/parameter_types.rs
+55
-1
src-tauri/src/structs/parameter_types.rs
···
1
+
use anyhow::{bail, Result};
1
2
use serde::Serialize;
2
3
3
-
#[derive(Serialize, Clone, Debug)]
4
+
#[derive(Serialize, Clone, Debug, PartialEq)]
4
5
#[serde(tag = "key", content = "value")]
5
6
pub enum ParameterType {
6
7
AnyType(String),
···
11
12
Boolean(bool),
12
13
String(String),
13
14
Flow(bool),
15
+
16
+
None,
17
+
}
18
+
19
+
impl ParameterType {
20
+
pub fn as_bool(&self) -> Result<bool> {
21
+
match self {
22
+
ParameterType::Boolean(val) => Ok(val.clone()),
23
+
ParameterType::Int(val) => {
24
+
if *val == 0 {
25
+
Ok(false)
26
+
} else {
27
+
Ok(true)
28
+
}
29
+
}
30
+
_ => bail!("Cannot cast to bool."),
31
+
}
32
+
}
33
+
34
+
pub fn as_int(&self) -> Result<i32> {
35
+
match self {
36
+
ParameterType::Boolean(val) => {
37
+
if *val {
38
+
Ok(1)
39
+
} else {
40
+
Ok(0)
41
+
}
42
+
}
43
+
ParameterType::Int(val) => Ok(val.clone()),
44
+
ParameterType::Float(val) => Ok(val.round().clone() as i32),
45
+
ParameterType::String(val) => Ok(val.clone().parse()?),
46
+
_ => bail!("Cannot cast to int."),
47
+
}
48
+
}
49
+
50
+
pub fn as_float(&self) -> Result<f32> {
51
+
match self {
52
+
ParameterType::Int(val) => Ok(val.clone() as f32),
53
+
ParameterType::Float(val) => Ok(val.clone()),
54
+
ParameterType::String(val) => Ok(val.clone().parse()?),
55
+
_ => bail!("Cannot cast to float."),
56
+
}
57
+
}
58
+
59
+
pub fn as_string(&self) -> Result<String> {
60
+
match self {
61
+
ParameterType::Boolean(val) => Ok(val.clone().to_string()),
62
+
ParameterType::Int(val) => Ok(val.clone().to_string()),
63
+
ParameterType::Float(val) => Ok(val.clone().to_string()),
64
+
ParameterType::String(val) => Ok(val.clone()),
65
+
_ => bail!("Cannot cast to string."),
66
+
}
67
+
}
14
68
}
+27
-26
src-tauri/src/utils/config.rs
+27
-26
src-tauri/src/utils/config.rs
···
3
3
fs::File,
4
4
io::{Read, Write},
5
5
path::PathBuf,
6
-
sync::Mutex,
6
+
sync::{Mutex, MutexGuard},
7
7
};
8
8
9
+
use chrono::Utc;
9
10
use flate2::{read::GzDecoder, write::GzEncoder, Compression};
10
-
use serde_json::Value;
11
+
use serde::{Deserialize, Serialize};
12
+
13
+
use crate::structs::nodes::Node;
14
+
15
+
#[derive(Clone, Serialize, Deserialize, Debug)]
16
+
pub struct ConfigValues {
17
+
#[serde(default)]
18
+
pub loaded_tabs: HashMap<String, (Vec<Node>, String, Option<String>, bool)>,
19
+
20
+
#[serde(default)]
21
+
pub hide_editor_on_start: bool,
22
+
}
11
23
12
24
pub struct Config {
13
-
store: Mutex<HashMap<String, Value>>,
25
+
pub store: Mutex<ConfigValues>,
14
26
path: PathBuf,
15
27
}
16
28
···
26
38
"{}".into()
27
39
};
28
40
29
-
let json: Value = serde_json::from_str(&json_string).unwrap();
30
-
31
-
let mut hashmap = HashMap::new();
32
-
33
-
let obj = json.as_object().unwrap();
34
-
for (key, val) in obj {
35
-
hashmap.insert(key.clone(), val.clone());
36
-
}
41
+
let json: ConfigValues = serde_json::from_str(&json_string).unwrap();
37
42
38
43
Config {
39
-
store: Mutex::new(hashmap),
44
+
store: Mutex::new(json),
40
45
path: path,
41
46
}
42
47
}
43
48
44
-
pub fn set(&self, key: &str, value: Value) {
45
-
self.store.lock().unwrap().insert(key.to_owned(), value);
46
-
}
49
+
pub fn save(&self) {
50
+
let mut dat = self.store.lock().unwrap();
47
51
48
-
pub fn get(&self, key: &str) -> Option<Value> {
49
-
let store = self.store.lock().unwrap();
50
-
let val = store.get(&key.to_owned());
52
+
let dat = serde_json::to_string(&*dat).unwrap();
51
53
52
-
if val.is_none() {
53
-
None
54
-
} else {
55
-
Some(val.unwrap().clone())
56
-
}
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();
57
59
}
58
60
59
-
pub fn save(&self) {
60
-
let dat = serde_json::to_string(&self.store.lock().unwrap().clone()).unwrap();
61
-
dbg!(&dat);
61
+
pub fn save_prelocked(&self, mut dat: MutexGuard<'_, ConfigValues>) {
62
+
let dat = serde_json::to_string(&*dat).unwrap();
62
63
63
64
let file = File::create(&self.path).unwrap();
64
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
+
}