initial commit
Seto committed
Oct 24, 2025 at 09:52 UTC
e136e6a1a6fd6f062da87a8d3fc0601027591ebc
65 files changed
+9491
.gitignore
new
+24
@@ -0,0 +1,24 @@
1
+# Logs
2
+logs
3
+*.log
4
+npm-debug.log*
5
+yarn-debug.log*
6
+yarn-error.log*
7
+pnpm-debug.log*
8
+lerna-debug.log*
9
+
10
+node_modules
11
+dist
12
+dist-ssr
13
+*.local
14
+
15
+# Editor directories and files
16
+.vscode/*
17
+!.vscode/extensions.json
18
+.idea
19
+.DS_Store
20
+*.suo
21
+*.ntvs*
22
+*.njsproj
23
+*.sln
24
+*.sw?
.vscode/extensions.json
new
+3
@@ -0,0 +1,3 @@
1
+{
2
+ "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
3
+}
README.md
new
+1
@@ -0,0 +1 @@
1
+# StreetCut
assets/app-icon-macos-debug.png
Binary files /dev/null and b/assets/app-icon-macos-debug.png differ
assets/app-icon-macos.png
Binary files /dev/null and b/assets/app-icon-macos.png differ
assets/app-icon.jpg
Binary files /dev/null and b/assets/app-icon.jpg differ
index.html
new
+16
@@ -0,0 +1,16 @@
1
+<!doctype html>
2
+<html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta
7
+ name="viewport"
8
+ content="width=device-width, initial-scale=1, viewport-fit=cover"
9
+ />
10
+ <title>StreetCut</title>
11
+ </head>
12
+ <body>
13
+ <div id="root"></div>
14
+ <script type="module" src="/src/main.tsx"></script>
15
+ </body>
16
+</html>
package.json
new
+34
@@ -0,0 +1,34 @@
1
+{
2
+ "name": "streetcut",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "preview": "vite preview",
10
+ "tauri": "tauri",
11
+ "gim": "./scripts/generate-icon-mobile.sh",
12
+ "gimas": "./scripts/generate-icon-mas.sh"
13
+ },
14
+ "dependencies": {
15
+ "@radix-ui/react-tooltip": "^1.0.6",
16
+ "@tauri-apps/api": "^2",
17
+ "@tauri-apps/plugin-haptics": "^2.3.0",
18
+ "@tauri-apps/plugin-opener": "^2",
19
+ "react": "^19.1.0",
20
+ "react-dom": "^19.1.0",
21
+ "react-router-dom": "^6.22.1"
22
+ },
23
+ "devDependencies": {
24
+ "@tauri-apps/cli": "^2",
25
+ "@types/react": "^19.1.8",
26
+ "@types/react-dom": "^19.1.6",
27
+ "@vitejs/plugin-react": "^4.6.0",
28
+ "autoprefixer": "^10.4.17",
29
+ "postcss": "^8.4.34",
30
+ "tailwindcss": "^3.4.1",
31
+ "typescript": "~5.8.3",
32
+ "vite": "^7.0.4"
33
+ }
34
+}
pnpm-lock.yaml
new
+2482
@@ -0,0 +1,2482 @@
1
+lockfileVersion: '9.0'
2
+
3
+settings:
4
+ autoInstallPeers: true
5
+ excludeLinksFromLockfile: false
6
+
7
+importers:
8
+
9
+ .:
10
+ dependencies:
11
+ '@radix-ui/react-tooltip':
12
+ specifier: ^1.0.6
13
+ version: 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
14
+ '@tauri-apps/api':
15
+ specifier: ^2
16
+ version: 2.8.0
17
+ '@tauri-apps/plugin-haptics':
18
+ specifier: ^2.3.0
19
+ version: 2.3.0
20
+ '@tauri-apps/plugin-opener':
21
+ specifier: ^2
22
+ version: 2.5.0
23
+ react:
24
+ specifier: ^19.1.0
25
+ version: 19.2.0
26
+ react-dom:
27
+ specifier: ^19.1.0
28
+ version: 19.2.0(react@19.2.0)
29
+ react-router-dom:
30
+ specifier: ^6.22.1
31
+ version: 6.30.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
32
+ devDependencies:
33
+ '@tauri-apps/cli':
34
+ specifier: ^2
35
+ version: 2.8.4
36
+ '@types/react':
37
+ specifier: ^19.1.8
38
+ version: 19.2.2
39
+ '@types/react-dom':
40
+ specifier: ^19.1.6
41
+ version: 19.2.1(@types/react@19.2.2)
42
+ '@vitejs/plugin-react':
43
+ specifier: ^4.6.0
44
+ version: 4.7.0(vite@7.1.9(jiti@1.21.7))
45
+ autoprefixer:
46
+ specifier: ^10.4.17
47
+ version: 10.4.21(postcss@8.5.6)
48
+ postcss:
49
+ specifier: ^8.4.34
50
+ version: 8.5.6
51
+ tailwindcss:
52
+ specifier: ^3.4.1
53
+ version: 3.4.18
54
+ typescript:
55
+ specifier: ~5.8.3
56
+ version: 5.8.3
57
+ vite:
58
+ specifier: ^7.0.4
59
+ version: 7.1.9(jiti@1.21.7)
60
+
61
+packages:
62
+
63
+ '@alloc/quick-lru@5.2.0':
64
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
65
+ engines: {node: '>=10'}
66
+
67
+ '@babel/code-frame@7.27.1':
68
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
69
+ engines: {node: '>=6.9.0'}
70
+
71
+ '@babel/compat-data@7.28.4':
72
+ resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
73
+ engines: {node: '>=6.9.0'}
74
+
75
+ '@babel/core@7.28.4':
76
+ resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
77
+ engines: {node: '>=6.9.0'}
78
+
79
+ '@babel/generator@7.28.3':
80
+ resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
81
+ engines: {node: '>=6.9.0'}
82
+
83
+ '@babel/helper-compilation-targets@7.27.2':
84
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
85
+ engines: {node: '>=6.9.0'}
86
+
87
+ '@babel/helper-globals@7.28.0':
88
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
89
+ engines: {node: '>=6.9.0'}
90
+
91
+ '@babel/helper-module-imports@7.27.1':
92
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
93
+ engines: {node: '>=6.9.0'}
94
+
95
+ '@babel/helper-module-transforms@7.28.3':
96
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
97
+ engines: {node: '>=6.9.0'}
98
+ peerDependencies:
99
+ '@babel/core': ^7.0.0
100
+
101
+ '@babel/helper-plugin-utils@7.27.1':
102
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
103
+ engines: {node: '>=6.9.0'}
104
+
105
+ '@babel/helper-string-parser@7.27.1':
106
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
107
+ engines: {node: '>=6.9.0'}
108
+
109
+ '@babel/helper-validator-identifier@7.27.1':
110
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
111
+ engines: {node: '>=6.9.0'}
112
+
113
+ '@babel/helper-validator-option@7.27.1':
114
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
115
+ engines: {node: '>=6.9.0'}
116
+
117
+ '@babel/helpers@7.28.4':
118
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
119
+ engines: {node: '>=6.9.0'}
120
+
121
+ '@babel/parser@7.28.4':
122
+ resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
123
+ engines: {node: '>=6.0.0'}
124
+ hasBin: true
125
+
126
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
127
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
128
+ engines: {node: '>=6.9.0'}
129
+ peerDependencies:
130
+ '@babel/core': ^7.0.0-0
131
+
132
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
133
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
134
+ engines: {node: '>=6.9.0'}
135
+ peerDependencies:
136
+ '@babel/core': ^7.0.0-0
137
+
138
+ '@babel/template@7.27.2':
139
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
140
+ engines: {node: '>=6.9.0'}
141
+
142
+ '@babel/traverse@7.28.4':
143
+ resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
144
+ engines: {node: '>=6.9.0'}
145
+
146
+ '@babel/types@7.28.4':
147
+ resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
148
+ engines: {node: '>=6.9.0'}
149
+
150
+ '@esbuild/aix-ppc64@0.25.10':
151
+ resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
152
+ engines: {node: '>=18'}
153
+ cpu: [ppc64]
154
+ os: [aix]
155
+
156
+ '@esbuild/android-arm64@0.25.10':
157
+ resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
158
+ engines: {node: '>=18'}
159
+ cpu: [arm64]
160
+ os: [android]
161
+
162
+ '@esbuild/android-arm@0.25.10':
163
+ resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
164
+ engines: {node: '>=18'}
165
+ cpu: [arm]
166
+ os: [android]
167
+
168
+ '@esbuild/android-x64@0.25.10':
169
+ resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
170
+ engines: {node: '>=18'}
171
+ cpu: [x64]
172
+ os: [android]
173
+
174
+ '@esbuild/darwin-arm64@0.25.10':
175
+ resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
176
+ engines: {node: '>=18'}
177
+ cpu: [arm64]
178
+ os: [darwin]
179
+
180
+ '@esbuild/darwin-x64@0.25.10':
181
+ resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
182
+ engines: {node: '>=18'}
183
+ cpu: [x64]
184
+ os: [darwin]
185
+
186
+ '@esbuild/freebsd-arm64@0.25.10':
187
+ resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
188
+ engines: {node: '>=18'}
189
+ cpu: [arm64]
190
+ os: [freebsd]
191
+
192
+ '@esbuild/freebsd-x64@0.25.10':
193
+ resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
194
+ engines: {node: '>=18'}
195
+ cpu: [x64]
196
+ os: [freebsd]
197
+
198
+ '@esbuild/linux-arm64@0.25.10':
199
+ resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
200
+ engines: {node: '>=18'}
201
+ cpu: [arm64]
202
+ os: [linux]
203
+
204
+ '@esbuild/linux-arm@0.25.10':
205
+ resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
206
+ engines: {node: '>=18'}
207
+ cpu: [arm]
208
+ os: [linux]
209
+
210
+ '@esbuild/linux-ia32@0.25.10':
211
+ resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
212
+ engines: {node: '>=18'}
213
+ cpu: [ia32]
214
+ os: [linux]
215
+
216
+ '@esbuild/linux-loong64@0.25.10':
217
+ resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
218
+ engines: {node: '>=18'}
219
+ cpu: [loong64]
220
+ os: [linux]
221
+
222
+ '@esbuild/linux-mips64el@0.25.10':
223
+ resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
224
+ engines: {node: '>=18'}
225
+ cpu: [mips64el]
226
+ os: [linux]
227
+
228
+ '@esbuild/linux-ppc64@0.25.10':
229
+ resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
230
+ engines: {node: '>=18'}
231
+ cpu: [ppc64]
232
+ os: [linux]
233
+
234
+ '@esbuild/linux-riscv64@0.25.10':
235
+ resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
236
+ engines: {node: '>=18'}
237
+ cpu: [riscv64]
238
+ os: [linux]
239
+
240
+ '@esbuild/linux-s390x@0.25.10':
241
+ resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
242
+ engines: {node: '>=18'}
243
+ cpu: [s390x]
244
+ os: [linux]
245
+
246
+ '@esbuild/linux-x64@0.25.10':
247
+ resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
248
+ engines: {node: '>=18'}
249
+ cpu: [x64]
250
+ os: [linux]
251
+
252
+ '@esbuild/netbsd-arm64@0.25.10':
253
+ resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
254
+ engines: {node: '>=18'}
255
+ cpu: [arm64]
256
+ os: [netbsd]
257
+
258
+ '@esbuild/netbsd-x64@0.25.10':
259
+ resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
260
+ engines: {node: '>=18'}
261
+ cpu: [x64]
262
+ os: [netbsd]
263
+
264
+ '@esbuild/openbsd-arm64@0.25.10':
265
+ resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
266
+ engines: {node: '>=18'}
267
+ cpu: [arm64]
268
+ os: [openbsd]
269
+
270
+ '@esbuild/openbsd-x64@0.25.10':
271
+ resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
272
+ engines: {node: '>=18'}
273
+ cpu: [x64]
274
+ os: [openbsd]
275
+
276
+ '@esbuild/openharmony-arm64@0.25.10':
277
+ resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
278
+ engines: {node: '>=18'}
279
+ cpu: [arm64]
280
+ os: [openharmony]
281
+
282
+ '@esbuild/sunos-x64@0.25.10':
283
+ resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
284
+ engines: {node: '>=18'}
285
+ cpu: [x64]
286
+ os: [sunos]
287
+
288
+ '@esbuild/win32-arm64@0.25.10':
289
+ resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
290
+ engines: {node: '>=18'}
291
+ cpu: [arm64]
292
+ os: [win32]
293
+
294
+ '@esbuild/win32-ia32@0.25.10':
295
+ resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
296
+ engines: {node: '>=18'}
297
+ cpu: [ia32]
298
+ os: [win32]
299
+
300
+ '@esbuild/win32-x64@0.25.10':
301
+ resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
302
+ engines: {node: '>=18'}
303
+ cpu: [x64]
304
+ os: [win32]
305
+
306
+ '@floating-ui/core@1.7.3':
307
+ resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
308
+
309
+ '@floating-ui/dom@1.7.4':
310
+ resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
311
+
312
+ '@floating-ui/react-dom@2.1.6':
313
+ resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
314
+ peerDependencies:
315
+ react: '>=16.8.0'
316
+ react-dom: '>=16.8.0'
317
+
318
+ '@floating-ui/utils@0.2.10':
319
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
320
+
321
+ '@isaacs/cliui@8.0.2':
322
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
323
+ engines: {node: '>=12'}
324
+
325
+ '@jridgewell/gen-mapping@0.3.13':
326
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
327
+
328
+ '@jridgewell/remapping@2.3.5':
329
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
330
+
331
+ '@jridgewell/resolve-uri@3.1.2':
332
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
333
+ engines: {node: '>=6.0.0'}
334
+
335
+ '@jridgewell/sourcemap-codec@1.5.5':
336
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
337
+
338
+ '@jridgewell/trace-mapping@0.3.31':
339
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
340
+
341
+ '@nodelib/fs.scandir@2.1.5':
342
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
343
+ engines: {node: '>= 8'}
344
+
345
+ '@nodelib/fs.stat@2.0.5':
346
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
347
+ engines: {node: '>= 8'}
348
+
349
+ '@nodelib/fs.walk@1.2.8':
350
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
351
+ engines: {node: '>= 8'}
352
+
353
+ '@pkgjs/parseargs@0.11.0':
354
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
355
+ engines: {node: '>=14'}
356
+
357
+ '@radix-ui/primitive@1.1.3':
358
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
359
+
360
+ '@radix-ui/react-arrow@1.1.7':
361
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
362
+ peerDependencies:
363
+ '@types/react': '*'
364
+ '@types/react-dom': '*'
365
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
366
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
367
+ peerDependenciesMeta:
368
+ '@types/react':
369
+ optional: true
370
+ '@types/react-dom':
371
+ optional: true
372
+
373
+ '@radix-ui/react-compose-refs@1.1.2':
374
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
375
+ peerDependencies:
376
+ '@types/react': '*'
377
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
378
+ peerDependenciesMeta:
379
+ '@types/react':
380
+ optional: true
381
+
382
+ '@radix-ui/react-context@1.1.2':
383
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
384
+ peerDependencies:
385
+ '@types/react': '*'
386
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
387
+ peerDependenciesMeta:
388
+ '@types/react':
389
+ optional: true
390
+
391
+ '@radix-ui/react-dismissable-layer@1.1.11':
392
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
393
+ peerDependencies:
394
+ '@types/react': '*'
395
+ '@types/react-dom': '*'
396
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
397
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
398
+ peerDependenciesMeta:
399
+ '@types/react':
400
+ optional: true
401
+ '@types/react-dom':
402
+ optional: true
403
+
404
+ '@radix-ui/react-id@1.1.1':
405
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
406
+ peerDependencies:
407
+ '@types/react': '*'
408
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
409
+ peerDependenciesMeta:
410
+ '@types/react':
411
+ optional: true
412
+
413
+ '@radix-ui/react-popper@1.2.8':
414
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
415
+ peerDependencies:
416
+ '@types/react': '*'
417
+ '@types/react-dom': '*'
418
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
419
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
420
+ peerDependenciesMeta:
421
+ '@types/react':
422
+ optional: true
423
+ '@types/react-dom':
424
+ optional: true
425
+
426
+ '@radix-ui/react-portal@1.1.9':
427
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
428
+ peerDependencies:
429
+ '@types/react': '*'
430
+ '@types/react-dom': '*'
431
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
432
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
433
+ peerDependenciesMeta:
434
+ '@types/react':
435
+ optional: true
436
+ '@types/react-dom':
437
+ optional: true
438
+
439
+ '@radix-ui/react-presence@1.1.5':
440
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
441
+ peerDependencies:
442
+ '@types/react': '*'
443
+ '@types/react-dom': '*'
444
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
445
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
446
+ peerDependenciesMeta:
447
+ '@types/react':
448
+ optional: true
449
+ '@types/react-dom':
450
+ optional: true
451
+
452
+ '@radix-ui/react-primitive@2.1.3':
453
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
454
+ peerDependencies:
455
+ '@types/react': '*'
456
+ '@types/react-dom': '*'
457
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
458
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
459
+ peerDependenciesMeta:
460
+ '@types/react':
461
+ optional: true
462
+ '@types/react-dom':
463
+ optional: true
464
+
465
+ '@radix-ui/react-slot@1.2.3':
466
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
467
+ peerDependencies:
468
+ '@types/react': '*'
469
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
470
+ peerDependenciesMeta:
471
+ '@types/react':
472
+ optional: true
473
+
474
+ '@radix-ui/react-tooltip@1.2.8':
475
+ resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
476
+ peerDependencies:
477
+ '@types/react': '*'
478
+ '@types/react-dom': '*'
479
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
480
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
481
+ peerDependenciesMeta:
482
+ '@types/react':
483
+ optional: true
484
+ '@types/react-dom':
485
+ optional: true
486
+
487
+ '@radix-ui/react-use-callback-ref@1.1.1':
488
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
489
+ peerDependencies:
490
+ '@types/react': '*'
491
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
492
+ peerDependenciesMeta:
493
+ '@types/react':
494
+ optional: true
495
+
496
+ '@radix-ui/react-use-controllable-state@1.2.2':
497
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
498
+ peerDependencies:
499
+ '@types/react': '*'
500
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
501
+ peerDependenciesMeta:
502
+ '@types/react':
503
+ optional: true
504
+
505
+ '@radix-ui/react-use-effect-event@0.0.2':
506
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
507
+ peerDependencies:
508
+ '@types/react': '*'
509
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
510
+ peerDependenciesMeta:
511
+ '@types/react':
512
+ optional: true
513
+
514
+ '@radix-ui/react-use-escape-keydown@1.1.1':
515
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
516
+ peerDependencies:
517
+ '@types/react': '*'
518
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
519
+ peerDependenciesMeta:
520
+ '@types/react':
521
+ optional: true
522
+
523
+ '@radix-ui/react-use-layout-effect@1.1.1':
524
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
525
+ peerDependencies:
526
+ '@types/react': '*'
527
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
528
+ peerDependenciesMeta:
529
+ '@types/react':
530
+ optional: true
531
+
532
+ '@radix-ui/react-use-rect@1.1.1':
533
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
534
+ peerDependencies:
535
+ '@types/react': '*'
536
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
537
+ peerDependenciesMeta:
538
+ '@types/react':
539
+ optional: true
540
+
541
+ '@radix-ui/react-use-size@1.1.1':
542
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
543
+ peerDependencies:
544
+ '@types/react': '*'
545
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
546
+ peerDependenciesMeta:
547
+ '@types/react':
548
+ optional: true
549
+
550
+ '@radix-ui/react-visually-hidden@1.2.3':
551
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
552
+ peerDependencies:
553
+ '@types/react': '*'
554
+ '@types/react-dom': '*'
555
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
556
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
557
+ peerDependenciesMeta:
558
+ '@types/react':
559
+ optional: true
560
+ '@types/react-dom':
561
+ optional: true
562
+
563
+ '@radix-ui/rect@1.1.1':
564
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
565
+
566
+ '@remix-run/router@1.23.0':
567
+ resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
568
+ engines: {node: '>=14.0.0'}
569
+
570
+ '@rolldown/pluginutils@1.0.0-beta.27':
571
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
572
+
573
+ '@rollup/rollup-android-arm-eabi@4.52.4':
574
+ resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==}
575
+ cpu: [arm]
576
+ os: [android]
577
+
578
+ '@rollup/rollup-android-arm64@4.52.4':
579
+ resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==}
580
+ cpu: [arm64]
581
+ os: [android]
582
+
583
+ '@rollup/rollup-darwin-arm64@4.52.4':
584
+ resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==}
585
+ cpu: [arm64]
586
+ os: [darwin]
587
+
588
+ '@rollup/rollup-darwin-x64@4.52.4':
589
+ resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==}
590
+ cpu: [x64]
591
+ os: [darwin]
592
+
593
+ '@rollup/rollup-freebsd-arm64@4.52.4':
594
+ resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==}
595
+ cpu: [arm64]
596
+ os: [freebsd]
597
+
598
+ '@rollup/rollup-freebsd-x64@4.52.4':
599
+ resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==}
600
+ cpu: [x64]
601
+ os: [freebsd]
602
+
603
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.4':
604
+ resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==}
605
+ cpu: [arm]
606
+ os: [linux]
607
+
608
+ '@rollup/rollup-linux-arm-musleabihf@4.52.4':
609
+ resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==}
610
+ cpu: [arm]
611
+ os: [linux]
612
+
613
+ '@rollup/rollup-linux-arm64-gnu@4.52.4':
614
+ resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==}
615
+ cpu: [arm64]
616
+ os: [linux]
617
+
618
+ '@rollup/rollup-linux-arm64-musl@4.52.4':
619
+ resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==}
620
+ cpu: [arm64]
621
+ os: [linux]
622
+
623
+ '@rollup/rollup-linux-loong64-gnu@4.52.4':
624
+ resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==}
625
+ cpu: [loong64]
626
+ os: [linux]
627
+
628
+ '@rollup/rollup-linux-ppc64-gnu@4.52.4':
629
+ resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==}
630
+ cpu: [ppc64]
631
+ os: [linux]
632
+
633
+ '@rollup/rollup-linux-riscv64-gnu@4.52.4':
634
+ resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==}
635
+ cpu: [riscv64]
636
+ os: [linux]
637
+
638
+ '@rollup/rollup-linux-riscv64-musl@4.52.4':
639
+ resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==}
640
+ cpu: [riscv64]
641
+ os: [linux]
642
+
643
+ '@rollup/rollup-linux-s390x-gnu@4.52.4':
644
+ resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==}
645
+ cpu: [s390x]
646
+ os: [linux]
647
+
648
+ '@rollup/rollup-linux-x64-gnu@4.52.4':
649
+ resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==}
650
+ cpu: [x64]
651
+ os: [linux]
652
+
653
+ '@rollup/rollup-linux-x64-musl@4.52.4':
654
+ resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==}
655
+ cpu: [x64]
656
+ os: [linux]
657
+
658
+ '@rollup/rollup-openharmony-arm64@4.52.4':
659
+ resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==}
660
+ cpu: [arm64]
661
+ os: [openharmony]
662
+
663
+ '@rollup/rollup-win32-arm64-msvc@4.52.4':
664
+ resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==}
665
+ cpu: [arm64]
666
+ os: [win32]
667
+
668
+ '@rollup/rollup-win32-ia32-msvc@4.52.4':
669
+ resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==}
670
+ cpu: [ia32]
671
+ os: [win32]
672
+
673
+ '@rollup/rollup-win32-x64-gnu@4.52.4':
674
+ resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==}
675
+ cpu: [x64]
676
+ os: [win32]
677
+
678
+ '@rollup/rollup-win32-x64-msvc@4.52.4':
679
+ resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==}
680
+ cpu: [x64]
681
+ os: [win32]
682
+
683
+ '@tauri-apps/api@2.8.0':
684
+ resolution: {integrity: sha512-ga7zdhbS2GXOMTIZRT0mYjKJtR9fivsXzsyq5U3vjDL0s6DTMwYRm0UHNjzTY5dh4+LSC68Sm/7WEiimbQNYlw==}
685
+
686
+ '@tauri-apps/cli-darwin-arm64@2.8.4':
687
+ resolution: {integrity: sha512-BKu8HRkYV01SMTa7r4fLx+wjgtRK8Vep7lmBdHDioP6b8XH3q2KgsAyPWfEZaZIkZ2LY4SqqGARaE9oilNe0oA==}
688
+ engines: {node: '>= 10'}
689
+ cpu: [arm64]
690
+ os: [darwin]
691
+
692
+ '@tauri-apps/cli-darwin-x64@2.8.4':
693
+ resolution: {integrity: sha512-imb9PfSd/7G6VAO7v1bQ2A3ZH4NOCbhGJFLchxzepGcXf9NKkfun157JH9mko29K6sqAwuJ88qtzbKCbWJTH9g==}
694
+ engines: {node: '>= 10'}
695
+ cpu: [x64]
696
+ os: [darwin]
697
+
698
+ '@tauri-apps/cli-linux-arm-gnueabihf@2.8.4':
699
+ resolution: {integrity: sha512-Ml215UnDdl7/fpOrF1CNovym/KjtUbCuPgrcZ4IhqUCnhZdXuphud/JT3E8X97Y03TZ40Sjz8raXYI2ET0exzw==}
700
+ engines: {node: '>= 10'}
701
+ cpu: [arm]
702
+ os: [linux]
703
+
704
+ '@tauri-apps/cli-linux-arm64-gnu@2.8.4':
705
+ resolution: {integrity: sha512-pbcgBpMyI90C83CxE5REZ9ODyIlmmAPkkJXtV398X3SgZEIYy5TACYqlyyv2z5yKgD8F8WH4/2fek7+jH+ZXAw==}
706
+ engines: {node: '>= 10'}
707
+ cpu: [arm64]
708
+ os: [linux]
709
+
710
+ '@tauri-apps/cli-linux-arm64-musl@2.8.4':
711
+ resolution: {integrity: sha512-zumFeaU1Ws5Ay872FTyIm7z8kfzEHu8NcIn8M6TxbJs0a7GRV21KBdpW1zNj2qy7HynnpQCqjAYXTUUmm9JAOw==}
712
+ engines: {node: '>= 10'}
713
+ cpu: [arm64]
714
+ os: [linux]
715
+
716
+ '@tauri-apps/cli-linux-riscv64-gnu@2.8.4':
717
+ resolution: {integrity: sha512-qiqbB3Zz6IyO201f+1ojxLj65WYj8mixL5cOMo63nlg8CIzsP23cPYUrx1YaDPsCLszKZo7tVs14pc7BWf+/aQ==}
718
+ engines: {node: '>= 10'}
719
+ cpu: [riscv64]
720
+ os: [linux]
721
+
722
+ '@tauri-apps/cli-linux-x64-gnu@2.8.4':
723
+ resolution: {integrity: sha512-TaqaDd9Oy6k45Hotx3pOf+pkbsxLaApv4rGd9mLuRM1k6YS/aw81YrsMryYPThrxrScEIUcmNIHaHsLiU4GMkw==}
724
+ engines: {node: '>= 10'}
725
+ cpu: [x64]
726
+ os: [linux]
727
+
728
+ '@tauri-apps/cli-linux-x64-musl@2.8.4':
729
+ resolution: {integrity: sha512-ot9STAwyezN8w+bBHZ+bqSQIJ0qPZFlz/AyscpGqB/JnJQVDFQcRDmUPFEaAtt2UUHSWzN3GoTJ5ypqLBp2WQA==}
730
+ engines: {node: '>= 10'}
731
+ cpu: [x64]
732
+ os: [linux]
733
+
734
+ '@tauri-apps/cli-win32-arm64-msvc@2.8.4':
735
+ resolution: {integrity: sha512-+2aJ/g90dhLiOLFSD1PbElXX3SoMdpO7HFPAZB+xot3CWlAZD1tReUFy7xe0L5GAR16ZmrxpIDM9v9gn5xRy/w==}
736
+ engines: {node: '>= 10'}
737
+ cpu: [arm64]
738
+ os: [win32]
739
+
740
+ '@tauri-apps/cli-win32-ia32-msvc@2.8.4':
741
+ resolution: {integrity: sha512-yj7WDxkL1t9Uzr2gufQ1Hl7hrHuFKTNEOyascbc109EoiAqCp0tgZ2IykQqOZmZOHU884UAWI1pVMqBhS/BfhA==}
742
+ engines: {node: '>= 10'}
743
+ cpu: [ia32]
744
+ os: [win32]
745
+
746
+ '@tauri-apps/cli-win32-x64-msvc@2.8.4':
747
+ resolution: {integrity: sha512-XuvGB4ehBdd7QhMZ9qbj/8icGEatDuBNxyYHbLKsTYh90ggUlPa/AtaqcC1Fo69lGkTmq9BOKrs1aWSi7xDonA==}
748
+ engines: {node: '>= 10'}
749
+ cpu: [x64]
750
+ os: [win32]
751
+
752
+ '@tauri-apps/cli@2.8.4':
753
+ resolution: {integrity: sha512-ejUZBzuQRcjFV+v/gdj/DcbyX/6T4unZQjMSBZwLzP/CymEjKcc2+Fc8xTORThebHDUvqoXMdsCZt8r+hyN15g==}
754
+ engines: {node: '>= 10'}
755
+ hasBin: true
756
+
757
+ '@tauri-apps/plugin-haptics@2.3.0':
758
+ resolution: {integrity: sha512-680QW0gNlkLIVpaAH0zhN1efSd971PBUXNPS6GU+zJYabZUB0MerymhaCeZKoiU4/53hlfw2QyaG7dNw3l5QgQ==}
759
+
760
+ '@tauri-apps/plugin-opener@2.5.0':
761
+ resolution: {integrity: sha512-B0LShOYae4CZjN8leiNDbnfjSrTwoZakqKaWpfoH6nXiJwt6Rgj6RnVIffG3DoJiKsffRhMkjmBV9VeilSb4TA==}
762
+
763
+ '@types/babel__core@7.20.5':
764
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
765
+
766
+ '@types/babel__generator@7.27.0':
767
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
768
+
769
+ '@types/babel__template@7.4.4':
770
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
771
+
772
+ '@types/babel__traverse@7.28.0':
773
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
774
+
775
+ '@types/estree@1.0.8':
776
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
777
+
778
+ '@types/react-dom@19.2.1':
779
+ resolution: {integrity: sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==}
780
+ peerDependencies:
781
+ '@types/react': ^19.2.0
782
+
783
+ '@types/react@19.2.2':
784
+ resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
785
+
786
+ '@vitejs/plugin-react@4.7.0':
787
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
788
+ engines: {node: ^14.18.0 || >=16.0.0}
789
+ peerDependencies:
790
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
791
+
792
+ ansi-regex@5.0.1:
793
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
794
+ engines: {node: '>=8'}
795
+
796
+ ansi-regex@6.2.2:
797
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
798
+ engines: {node: '>=12'}
799
+
800
+ ansi-styles@4.3.0:
801
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
802
+ engines: {node: '>=8'}
803
+
804
+ ansi-styles@6.2.3:
805
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
806
+ engines: {node: '>=12'}
807
+
808
+ any-promise@1.3.0:
809
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
810
+
811
+ anymatch@3.1.3:
812
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
813
+ engines: {node: '>= 8'}
814
+
815
+ arg@5.0.2:
816
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
817
+
818
+ autoprefixer@10.4.21:
819
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
820
+ engines: {node: ^10 || ^12 || >=14}
821
+ hasBin: true
822
+ peerDependencies:
823
+ postcss: ^8.1.0
824
+
825
+ balanced-match@1.0.2:
826
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
827
+
828
+ baseline-browser-mapping@2.8.15:
829
+ resolution: {integrity: sha512-qsJ8/X+UypqxHXN75M7dF88jNK37dLBRW7LeUzCPz+TNs37G8cfWy9nWzS+LS//g600zrt2le9KuXt0rWfDz5Q==}
830
+ hasBin: true
831
+
832
+ binary-extensions@2.3.0:
833
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
834
+ engines: {node: '>=8'}
835
+
836
+ brace-expansion@2.0.2:
837
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
838
+
839
+ braces@3.0.3:
840
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
841
+ engines: {node: '>=8'}
842
+
843
+ browserslist@4.26.3:
844
+ resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
845
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
846
+ hasBin: true
847
+
848
+ camelcase-css@2.0.1:
849
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
850
+ engines: {node: '>= 6'}
851
+
852
+ caniuse-lite@1.0.30001749:
853
+ resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==}
854
+
855
+ chokidar@3.6.0:
856
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
857
+ engines: {node: '>= 8.10.0'}
858
+
859
+ color-convert@2.0.1:
860
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
861
+ engines: {node: '>=7.0.0'}
862
+
863
+ color-name@1.1.4:
864
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
865
+
866
+ commander@4.1.1:
867
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
868
+ engines: {node: '>= 6'}
869
+
870
+ convert-source-map@2.0.0:
871
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
872
+
873
+ cross-spawn@7.0.6:
874
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
875
+ engines: {node: '>= 8'}
876
+
877
+ cssesc@3.0.0:
878
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
879
+ engines: {node: '>=4'}
880
+ hasBin: true
881
+
882
+ csstype@3.1.3:
883
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
884
+
885
+ debug@4.4.3:
886
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
887
+ engines: {node: '>=6.0'}
888
+ peerDependencies:
889
+ supports-color: '*'
890
+ peerDependenciesMeta:
891
+ supports-color:
892
+ optional: true
893
+
894
+ didyoumean@1.2.2:
895
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
896
+
897
+ dlv@1.1.3:
898
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
899
+
900
+ eastasianwidth@0.2.0:
901
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
902
+
903
+ electron-to-chromium@1.5.234:
904
+ resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==}
905
+
906
+ emoji-regex@8.0.0:
907
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
908
+
909
+ emoji-regex@9.2.2:
910
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
911
+
912
+ esbuild@0.25.10:
913
+ resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
914
+ engines: {node: '>=18'}
915
+ hasBin: true
916
+
917
+ escalade@3.2.0:
918
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
919
+ engines: {node: '>=6'}
920
+
921
+ fast-glob@3.3.3:
922
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
923
+ engines: {node: '>=8.6.0'}
924
+
925
+ fastq@1.19.1:
926
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
927
+
928
+ fdir@6.5.0:
929
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
930
+ engines: {node: '>=12.0.0'}
931
+ peerDependencies:
932
+ picomatch: ^3 || ^4
933
+ peerDependenciesMeta:
934
+ picomatch:
935
+ optional: true
936
+
937
+ fill-range@7.1.1:
938
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
939
+ engines: {node: '>=8'}
940
+
941
+ foreground-child@3.3.1:
942
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
943
+ engines: {node: '>=14'}
944
+
945
+ fraction.js@4.3.7:
946
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
947
+
948
+ fsevents@2.3.3:
949
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
950
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
951
+ os: [darwin]
952
+
953
+ function-bind@1.1.2:
954
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
955
+
956
+ gensync@1.0.0-beta.2:
957
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
958
+ engines: {node: '>=6.9.0'}
959
+
960
+ glob-parent@5.1.2:
961
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
962
+ engines: {node: '>= 6'}
963
+
964
+ glob-parent@6.0.2:
965
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
966
+ engines: {node: '>=10.13.0'}
967
+
968
+ glob@10.4.5:
969
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
970
+ hasBin: true
971
+
972
+ hasown@2.0.2:
973
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
974
+ engines: {node: '>= 0.4'}
975
+
976
+ is-binary-path@2.1.0:
977
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
978
+ engines: {node: '>=8'}
979
+
980
+ is-core-module@2.16.1:
981
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
982
+ engines: {node: '>= 0.4'}
983
+
984
+ is-extglob@2.1.1:
985
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
986
+ engines: {node: '>=0.10.0'}
987
+
988
+ is-fullwidth-code-point@3.0.0:
989
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
990
+ engines: {node: '>=8'}
991
+
992
+ is-glob@4.0.3:
993
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
994
+ engines: {node: '>=0.10.0'}
995
+
996
+ is-number@7.0.0:
997
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
998
+ engines: {node: '>=0.12.0'}
999
+
1000
+ isexe@2.0.0:
1001
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1002
+
1003
+ jackspeak@3.4.3:
1004
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1005
+
1006
+ jiti@1.21.7:
1007
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
1008
+ hasBin: true
1009
+
1010
+ js-tokens@4.0.0:
1011
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1012
+
1013
+ jsesc@3.1.0:
1014
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1015
+ engines: {node: '>=6'}
1016
+ hasBin: true
1017
+
1018
+ json5@2.2.3:
1019
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1020
+ engines: {node: '>=6'}
1021
+ hasBin: true
1022
+
1023
+ lilconfig@3.1.3:
1024
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
1025
+ engines: {node: '>=14'}
1026
+
1027
+ lines-and-columns@1.2.4:
1028
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1029
+
1030
+ lru-cache@10.4.3:
1031
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1032
+
1033
+ lru-cache@5.1.1:
1034
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1035
+
1036
+ merge2@1.4.1:
1037
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1038
+ engines: {node: '>= 8'}
1039
+
1040
+ micromatch@4.0.8:
1041
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1042
+ engines: {node: '>=8.6'}
1043
+
1044
+ minimatch@9.0.5:
1045
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1046
+ engines: {node: '>=16 || 14 >=14.17'}
1047
+
1048
+ minipass@7.1.2:
1049
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1050
+ engines: {node: '>=16 || 14 >=14.17'}
1051
+
1052
+ ms@2.1.3:
1053
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1054
+
1055
+ mz@2.7.0:
1056
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1057
+
1058
+ nanoid@3.3.11:
1059
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1060
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1061
+ hasBin: true
1062
+
1063
+ node-releases@2.0.23:
1064
+ resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==}
1065
+
1066
+ normalize-path@3.0.0:
1067
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1068
+ engines: {node: '>=0.10.0'}
1069
+
1070
+ normalize-range@0.1.2:
1071
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1072
+ engines: {node: '>=0.10.0'}
1073
+
1074
+ object-assign@4.1.1:
1075
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1076
+ engines: {node: '>=0.10.0'}
1077
+
1078
+ object-hash@3.0.0:
1079
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1080
+ engines: {node: '>= 6'}
1081
+
1082
+ package-json-from-dist@1.0.1:
1083
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1084
+
1085
+ path-key@3.1.1:
1086
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1087
+ engines: {node: '>=8'}
1088
+
1089
+ path-parse@1.0.7:
1090
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1091
+
1092
+ path-scurry@1.11.1:
1093
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1094
+ engines: {node: '>=16 || 14 >=14.18'}
1095
+
1096
+ picocolors@1.1.1:
1097
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1098
+
1099
+ picomatch@2.3.1:
1100
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1101
+ engines: {node: '>=8.6'}
1102
+
1103
+ picomatch@4.0.3:
1104
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
1105
+ engines: {node: '>=12'}
1106
+
1107
+ pify@2.3.0:
1108
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1109
+ engines: {node: '>=0.10.0'}
1110
+
1111
+ pirates@4.0.7:
1112
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
1113
+ engines: {node: '>= 6'}
1114
+
1115
+ postcss-import@15.1.0:
1116
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1117
+ engines: {node: '>=14.0.0'}
1118
+ peerDependencies:
1119
+ postcss: ^8.0.0
1120
+
1121
+ postcss-js@4.1.0:
1122
+ resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==}
1123
+ engines: {node: ^12 || ^14 || >= 16}
1124
+ peerDependencies:
1125
+ postcss: ^8.4.21
1126
+
1127
+ postcss-load-config@6.0.1:
1128
+ resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
1129
+ engines: {node: '>= 18'}
1130
+ peerDependencies:
1131
+ jiti: '>=1.21.0'
1132
+ postcss: '>=8.0.9'
1133
+ tsx: ^4.8.1
1134
+ yaml: ^2.4.2
1135
+ peerDependenciesMeta:
1136
+ jiti:
1137
+ optional: true
1138
+ postcss:
1139
+ optional: true
1140
+ tsx:
1141
+ optional: true
1142
+ yaml:
1143
+ optional: true
1144
+
1145
+ postcss-nested@6.2.0:
1146
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
1147
+ engines: {node: '>=12.0'}
1148
+ peerDependencies:
1149
+ postcss: ^8.2.14
1150
+
1151
+ postcss-selector-parser@6.1.2:
1152
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
1153
+ engines: {node: '>=4'}
1154
+
1155
+ postcss-value-parser@4.2.0:
1156
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1157
+
1158
+ postcss@8.5.6:
1159
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
1160
+ engines: {node: ^10 || ^12 || >=14}
1161
+
1162
+ queue-microtask@1.2.3:
1163
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1164
+
1165
+ react-dom@19.2.0:
1166
+ resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
1167
+ peerDependencies:
1168
+ react: ^19.2.0
1169
+
1170
+ react-refresh@0.17.0:
1171
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
1172
+ engines: {node: '>=0.10.0'}
1173
+
1174
+ react-router-dom@6.30.1:
1175
+ resolution: {integrity: sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==}
1176
+ engines: {node: '>=14.0.0'}
1177
+ peerDependencies:
1178
+ react: '>=16.8'
1179
+ react-dom: '>=16.8'
1180
+
1181
+ react-router@6.30.1:
1182
+ resolution: {integrity: sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==}
1183
+ engines: {node: '>=14.0.0'}
1184
+ peerDependencies:
1185
+ react: '>=16.8'
1186
+
1187
+ react@19.2.0:
1188
+ resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
1189
+ engines: {node: '>=0.10.0'}
1190
+
1191
+ read-cache@1.0.0:
1192
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1193
+
1194
+ readdirp@3.6.0:
1195
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1196
+ engines: {node: '>=8.10.0'}
1197
+
1198
+ resolve@1.22.10:
1199
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1200
+ engines: {node: '>= 0.4'}
1201
+ hasBin: true
1202
+
1203
+ reusify@1.1.0:
1204
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1205
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1206
+
1207
+ rollup@4.52.4:
1208
+ resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==}
1209
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1210
+ hasBin: true
1211
+
1212
+ run-parallel@1.2.0:
1213
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1214
+
1215
+ scheduler@0.27.0:
1216
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
1217
+
1218
+ semver@6.3.1:
1219
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1220
+ hasBin: true
1221
+
1222
+ shebang-command@2.0.0:
1223
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1224
+ engines: {node: '>=8'}
1225
+
1226
+ shebang-regex@3.0.0:
1227
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1228
+ engines: {node: '>=8'}
1229
+
1230
+ signal-exit@4.1.0:
1231
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1232
+ engines: {node: '>=14'}
1233
+
1234
+ source-map-js@1.2.1:
1235
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1236
+ engines: {node: '>=0.10.0'}
1237
+
1238
+ string-width@4.2.3:
1239
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1240
+ engines: {node: '>=8'}
1241
+
1242
+ string-width@5.1.2:
1243
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1244
+ engines: {node: '>=12'}
1245
+
1246
+ strip-ansi@6.0.1:
1247
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1248
+ engines: {node: '>=8'}
1249
+
1250
+ strip-ansi@7.1.2:
1251
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
1252
+ engines: {node: '>=12'}
1253
+
1254
+ sucrase@3.35.0:
1255
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1256
+ engines: {node: '>=16 || 14 >=14.17'}
1257
+ hasBin: true
1258
+
1259
+ supports-preserve-symlinks-flag@1.0.0:
1260
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1261
+ engines: {node: '>= 0.4'}
1262
+
1263
+ tailwindcss@3.4.18:
1264
+ resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==}
1265
+ engines: {node: '>=14.0.0'}
1266
+ hasBin: true
1267
+
1268
+ thenify-all@1.6.0:
1269
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1270
+ engines: {node: '>=0.8'}
1271
+
1272
+ thenify@3.3.1:
1273
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1274
+
1275
+ tinyglobby@0.2.15:
1276
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
1277
+ engines: {node: '>=12.0.0'}
1278
+
1279
+ to-regex-range@5.0.1:
1280
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1281
+ engines: {node: '>=8.0'}
1282
+
1283
+ ts-interface-checker@0.1.13:
1284
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1285
+
1286
+ typescript@5.8.3:
1287
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1288
+ engines: {node: '>=14.17'}
1289
+ hasBin: true
1290
+
1291
+ update-browserslist-db@1.1.3:
1292
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1293
+ hasBin: true
1294
+ peerDependencies:
1295
+ browserslist: '>= 4.21.0'
1296
+
1297
+ util-deprecate@1.0.2:
1298
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1299
+
1300
+ vite@7.1.9:
1301
+ resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==}
1302
+ engines: {node: ^20.19.0 || >=22.12.0}
1303
+ hasBin: true
1304
+ peerDependencies:
1305
+ '@types/node': ^20.19.0 || >=22.12.0
1306
+ jiti: '>=1.21.0'
1307
+ less: ^4.0.0
1308
+ lightningcss: ^1.21.0
1309
+ sass: ^1.70.0
1310
+ sass-embedded: ^1.70.0
1311
+ stylus: '>=0.54.8'
1312
+ sugarss: ^5.0.0
1313
+ terser: ^5.16.0
1314
+ tsx: ^4.8.1
1315
+ yaml: ^2.4.2
1316
+ peerDependenciesMeta:
1317
+ '@types/node':
1318
+ optional: true
1319
+ jiti:
1320
+ optional: true
1321
+ less:
1322
+ optional: true
1323
+ lightningcss:
1324
+ optional: true
1325
+ sass:
1326
+ optional: true
1327
+ sass-embedded:
1328
+ optional: true
1329
+ stylus:
1330
+ optional: true
1331
+ sugarss:
1332
+ optional: true
1333
+ terser:
1334
+ optional: true
1335
+ tsx:
1336
+ optional: true
1337
+ yaml:
1338
+ optional: true
1339
+
1340
+ which@2.0.2:
1341
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1342
+ engines: {node: '>= 8'}
1343
+ hasBin: true
1344
+
1345
+ wrap-ansi@7.0.0:
1346
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1347
+ engines: {node: '>=10'}
1348
+
1349
+ wrap-ansi@8.1.0:
1350
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1351
+ engines: {node: '>=12'}
1352
+
1353
+ yallist@3.1.1:
1354
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1355
+
1356
+snapshots:
1357
+
1358
+ '@alloc/quick-lru@5.2.0': {}
1359
+
1360
+ '@babel/code-frame@7.27.1':
1361
+ dependencies:
1362
+ '@babel/helper-validator-identifier': 7.27.1
1363
+ js-tokens: 4.0.0
1364
+ picocolors: 1.1.1
1365
+
1366
+ '@babel/compat-data@7.28.4': {}
1367
+
1368
+ '@babel/core@7.28.4':
1369
+ dependencies:
1370
+ '@babel/code-frame': 7.27.1
1371
+ '@babel/generator': 7.28.3
1372
+ '@babel/helper-compilation-targets': 7.27.2
1373
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
1374
+ '@babel/helpers': 7.28.4
1375
+ '@babel/parser': 7.28.4
1376
+ '@babel/template': 7.27.2
1377
+ '@babel/traverse': 7.28.4
1378
+ '@babel/types': 7.28.4
1379
+ '@jridgewell/remapping': 2.3.5
1380
+ convert-source-map: 2.0.0
1381
+ debug: 4.4.3
1382
+ gensync: 1.0.0-beta.2
1383
+ json5: 2.2.3
1384
+ semver: 6.3.1
1385
+ transitivePeerDependencies:
1386
+ - supports-color
1387
+
1388
+ '@babel/generator@7.28.3':
1389
+ dependencies:
1390
+ '@babel/parser': 7.28.4
1391
+ '@babel/types': 7.28.4
1392
+ '@jridgewell/gen-mapping': 0.3.13
1393
+ '@jridgewell/trace-mapping': 0.3.31
1394
+ jsesc: 3.1.0
1395
+
1396
+ '@babel/helper-compilation-targets@7.27.2':
1397
+ dependencies:
1398
+ '@babel/compat-data': 7.28.4
1399
+ '@babel/helper-validator-option': 7.27.1
1400
+ browserslist: 4.26.3
1401
+ lru-cache: 5.1.1
1402
+ semver: 6.3.1
1403
+
1404
+ '@babel/helper-globals@7.28.0': {}
1405
+
1406
+ '@babel/helper-module-imports@7.27.1':
1407
+ dependencies:
1408
+ '@babel/traverse': 7.28.4
1409
+ '@babel/types': 7.28.4
1410
+ transitivePeerDependencies:
1411
+ - supports-color
1412
+
1413
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
1414
+ dependencies:
1415
+ '@babel/core': 7.28.4
1416
+ '@babel/helper-module-imports': 7.27.1
1417
+ '@babel/helper-validator-identifier': 7.27.1
1418
+ '@babel/traverse': 7.28.4
1419
+ transitivePeerDependencies:
1420
+ - supports-color
1421
+
1422
+ '@babel/helper-plugin-utils@7.27.1': {}
1423
+
1424
+ '@babel/helper-string-parser@7.27.1': {}
1425
+
1426
+ '@babel/helper-validator-identifier@7.27.1': {}
1427
+
1428
+ '@babel/helper-validator-option@7.27.1': {}
1429
+
1430
+ '@babel/helpers@7.28.4':
1431
+ dependencies:
1432
+ '@babel/template': 7.27.2
1433
+ '@babel/types': 7.28.4
1434
+
1435
+ '@babel/parser@7.28.4':
1436
+ dependencies:
1437
+ '@babel/types': 7.28.4
1438
+
1439
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)':
1440
+ dependencies:
1441
+ '@babel/core': 7.28.4
1442
+ '@babel/helper-plugin-utils': 7.27.1
1443
+
1444
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)':
1445
+ dependencies:
1446
+ '@babel/core': 7.28.4
1447
+ '@babel/helper-plugin-utils': 7.27.1
1448
+
1449
+ '@babel/template@7.27.2':
1450
+ dependencies:
1451
+ '@babel/code-frame': 7.27.1
1452
+ '@babel/parser': 7.28.4
1453
+ '@babel/types': 7.28.4
1454
+
1455
+ '@babel/traverse@7.28.4':
1456
+ dependencies:
1457
+ '@babel/code-frame': 7.27.1
1458
+ '@babel/generator': 7.28.3
1459
+ '@babel/helper-globals': 7.28.0
1460
+ '@babel/parser': 7.28.4
1461
+ '@babel/template': 7.27.2
1462
+ '@babel/types': 7.28.4
1463
+ debug: 4.4.3
1464
+ transitivePeerDependencies:
1465
+ - supports-color
1466
+
1467
+ '@babel/types@7.28.4':
1468
+ dependencies:
1469
+ '@babel/helper-string-parser': 7.27.1
1470
+ '@babel/helper-validator-identifier': 7.27.1
1471
+
1472
+ '@esbuild/aix-ppc64@0.25.10':
1473
+ optional: true
1474
+
1475
+ '@esbuild/android-arm64@0.25.10':
1476
+ optional: true
1477
+
1478
+ '@esbuild/android-arm@0.25.10':
1479
+ optional: true
1480
+
1481
+ '@esbuild/android-x64@0.25.10':
1482
+ optional: true
1483
+
1484
+ '@esbuild/darwin-arm64@0.25.10':
1485
+ optional: true
1486
+
1487
+ '@esbuild/darwin-x64@0.25.10':
1488
+ optional: true
1489
+
1490
+ '@esbuild/freebsd-arm64@0.25.10':
1491
+ optional: true
1492
+
1493
+ '@esbuild/freebsd-x64@0.25.10':
1494
+ optional: true
1495
+
1496
+ '@esbuild/linux-arm64@0.25.10':
1497
+ optional: true
1498
+
1499
+ '@esbuild/linux-arm@0.25.10':
1500
+ optional: true
1501
+
1502
+ '@esbuild/linux-ia32@0.25.10':
1503
+ optional: true
1504
+
1505
+ '@esbuild/linux-loong64@0.25.10':
1506
+ optional: true
1507
+
1508
+ '@esbuild/linux-mips64el@0.25.10':
1509
+ optional: true
1510
+
1511
+ '@esbuild/linux-ppc64@0.25.10':
1512
+ optional: true
1513
+
1514
+ '@esbuild/linux-riscv64@0.25.10':
1515
+ optional: true
1516
+
1517
+ '@esbuild/linux-s390x@0.25.10':
1518
+ optional: true
1519
+
1520
+ '@esbuild/linux-x64@0.25.10':
1521
+ optional: true
1522
+
1523
+ '@esbuild/netbsd-arm64@0.25.10':
1524
+ optional: true
1525
+
1526
+ '@esbuild/netbsd-x64@0.25.10':
1527
+ optional: true
1528
+
1529
+ '@esbuild/openbsd-arm64@0.25.10':
1530
+ optional: true
1531
+
1532
+ '@esbuild/openbsd-x64@0.25.10':
1533
+ optional: true
1534
+
1535
+ '@esbuild/openharmony-arm64@0.25.10':
1536
+ optional: true
1537
+
1538
+ '@esbuild/sunos-x64@0.25.10':
1539
+ optional: true
1540
+
1541
+ '@esbuild/win32-arm64@0.25.10':
1542
+ optional: true
1543
+
1544
+ '@esbuild/win32-ia32@0.25.10':
1545
+ optional: true
1546
+
1547
+ '@esbuild/win32-x64@0.25.10':
1548
+ optional: true
1549
+
1550
+ '@floating-ui/core@1.7.3':
1551
+ dependencies:
1552
+ '@floating-ui/utils': 0.2.10
1553
+
1554
+ '@floating-ui/dom@1.7.4':
1555
+ dependencies:
1556
+ '@floating-ui/core': 1.7.3
1557
+ '@floating-ui/utils': 0.2.10
1558
+
1559
+ '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1560
+ dependencies:
1561
+ '@floating-ui/dom': 1.7.4
1562
+ react: 19.2.0
1563
+ react-dom: 19.2.0(react@19.2.0)
1564
+
1565
+ '@floating-ui/utils@0.2.10': {}
1566
+
1567
+ '@isaacs/cliui@8.0.2':
1568
+ dependencies:
1569
+ string-width: 5.1.2
1570
+ string-width-cjs: string-width@4.2.3
1571
+ strip-ansi: 7.1.2
1572
+ strip-ansi-cjs: strip-ansi@6.0.1
1573
+ wrap-ansi: 8.1.0
1574
+ wrap-ansi-cjs: wrap-ansi@7.0.0
1575
+
1576
+ '@jridgewell/gen-mapping@0.3.13':
1577
+ dependencies:
1578
+ '@jridgewell/sourcemap-codec': 1.5.5
1579
+ '@jridgewell/trace-mapping': 0.3.31
1580
+
1581
+ '@jridgewell/remapping@2.3.5':
1582
+ dependencies:
1583
+ '@jridgewell/gen-mapping': 0.3.13
1584
+ '@jridgewell/trace-mapping': 0.3.31
1585
+
1586
+ '@jridgewell/resolve-uri@3.1.2': {}
1587
+
1588
+ '@jridgewell/sourcemap-codec@1.5.5': {}
1589
+
1590
+ '@jridgewell/trace-mapping@0.3.31':
1591
+ dependencies:
1592
+ '@jridgewell/resolve-uri': 3.1.2
1593
+ '@jridgewell/sourcemap-codec': 1.5.5
1594
+
1595
+ '@nodelib/fs.scandir@2.1.5':
1596
+ dependencies:
1597
+ '@nodelib/fs.stat': 2.0.5
1598
+ run-parallel: 1.2.0
1599
+
1600
+ '@nodelib/fs.stat@2.0.5': {}
1601
+
1602
+ '@nodelib/fs.walk@1.2.8':
1603
+ dependencies:
1604
+ '@nodelib/fs.scandir': 2.1.5
1605
+ fastq: 1.19.1
1606
+
1607
+ '@pkgjs/parseargs@0.11.0':
1608
+ optional: true
1609
+
1610
+ '@radix-ui/primitive@1.1.3': {}
1611
+
1612
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1613
+ dependencies:
1614
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1615
+ react: 19.2.0
1616
+ react-dom: 19.2.0(react@19.2.0)
1617
+ optionalDependencies:
1618
+ '@types/react': 19.2.2
1619
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1620
+
1621
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.2.0)':
1622
+ dependencies:
1623
+ react: 19.2.0
1624
+ optionalDependencies:
1625
+ '@types/react': 19.2.2
1626
+
1627
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.2.0)':
1628
+ dependencies:
1629
+ react: 19.2.0
1630
+ optionalDependencies:
1631
+ '@types/react': 19.2.2
1632
+
1633
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1634
+ dependencies:
1635
+ '@radix-ui/primitive': 1.1.3
1636
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1637
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1638
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1639
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1640
+ react: 19.2.0
1641
+ react-dom: 19.2.0(react@19.2.0)
1642
+ optionalDependencies:
1643
+ '@types/react': 19.2.2
1644
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1645
+
1646
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.2.0)':
1647
+ dependencies:
1648
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1649
+ react: 19.2.0
1650
+ optionalDependencies:
1651
+ '@types/react': 19.2.2
1652
+
1653
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1654
+ dependencies:
1655
+ '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1656
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1657
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1658
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1659
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1660
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1661
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1662
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1663
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1664
+ '@radix-ui/rect': 1.1.1
1665
+ react: 19.2.0
1666
+ react-dom: 19.2.0(react@19.2.0)
1667
+ optionalDependencies:
1668
+ '@types/react': 19.2.2
1669
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1670
+
1671
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1672
+ dependencies:
1673
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1674
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1675
+ react: 19.2.0
1676
+ react-dom: 19.2.0(react@19.2.0)
1677
+ optionalDependencies:
1678
+ '@types/react': 19.2.2
1679
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1680
+
1681
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1682
+ dependencies:
1683
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1684
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1685
+ react: 19.2.0
1686
+ react-dom: 19.2.0(react@19.2.0)
1687
+ optionalDependencies:
1688
+ '@types/react': 19.2.2
1689
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1690
+
1691
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1692
+ dependencies:
1693
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
1694
+ react: 19.2.0
1695
+ react-dom: 19.2.0(react@19.2.0)
1696
+ optionalDependencies:
1697
+ '@types/react': 19.2.2
1698
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1699
+
1700
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.2.0)':
1701
+ dependencies:
1702
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1703
+ react: 19.2.0
1704
+ optionalDependencies:
1705
+ '@types/react': 19.2.2
1706
+
1707
+ '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1708
+ dependencies:
1709
+ '@radix-ui/primitive': 1.1.3
1710
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1711
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
1712
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1713
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1714
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1715
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1716
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1717
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1718
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
1719
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
1720
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1721
+ react: 19.2.0
1722
+ react-dom: 19.2.0(react@19.2.0)
1723
+ optionalDependencies:
1724
+ '@types/react': 19.2.2
1725
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1726
+
1727
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)':
1728
+ dependencies:
1729
+ react: 19.2.0
1730
+ optionalDependencies:
1731
+ '@types/react': 19.2.2
1732
+
1733
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.2.0)':
1734
+ dependencies:
1735
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0)
1736
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1737
+ react: 19.2.0
1738
+ optionalDependencies:
1739
+ '@types/react': 19.2.2
1740
+
1741
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.2.0)':
1742
+ dependencies:
1743
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1744
+ react: 19.2.0
1745
+ optionalDependencies:
1746
+ '@types/react': 19.2.2
1747
+
1748
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.2.0)':
1749
+ dependencies:
1750
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1751
+ react: 19.2.0
1752
+ optionalDependencies:
1753
+ '@types/react': 19.2.2
1754
+
1755
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.2.0)':
1756
+ dependencies:
1757
+ react: 19.2.0
1758
+ optionalDependencies:
1759
+ '@types/react': 19.2.2
1760
+
1761
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.2.0)':
1762
+ dependencies:
1763
+ '@radix-ui/rect': 1.1.1
1764
+ react: 19.2.0
1765
+ optionalDependencies:
1766
+ '@types/react': 19.2.2
1767
+
1768
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.2.0)':
1769
+ dependencies:
1770
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
1771
+ react: 19.2.0
1772
+ optionalDependencies:
1773
+ '@types/react': 19.2.2
1774
+
1775
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
1776
+ dependencies:
1777
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
1778
+ react: 19.2.0
1779
+ react-dom: 19.2.0(react@19.2.0)
1780
+ optionalDependencies:
1781
+ '@types/react': 19.2.2
1782
+ '@types/react-dom': 19.2.1(@types/react@19.2.2)
1783
+
1784
+ '@radix-ui/rect@1.1.1': {}
1785
+
1786
+ '@remix-run/router@1.23.0': {}
1787
+
1788
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
1789
+
1790
+ '@rollup/rollup-android-arm-eabi@4.52.4':
1791
+ optional: true
1792
+
1793
+ '@rollup/rollup-android-arm64@4.52.4':
1794
+ optional: true
1795
+
1796
+ '@rollup/rollup-darwin-arm64@4.52.4':
1797
+ optional: true
1798
+
1799
+ '@rollup/rollup-darwin-x64@4.52.4':
1800
+ optional: true
1801
+
1802
+ '@rollup/rollup-freebsd-arm64@4.52.4':
1803
+ optional: true
1804
+
1805
+ '@rollup/rollup-freebsd-x64@4.52.4':
1806
+ optional: true
1807
+
1808
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.4':
1809
+ optional: true
1810
+
1811
+ '@rollup/rollup-linux-arm-musleabihf@4.52.4':
1812
+ optional: true
1813
+
1814
+ '@rollup/rollup-linux-arm64-gnu@4.52.4':
1815
+ optional: true
1816
+
1817
+ '@rollup/rollup-linux-arm64-musl@4.52.4':
1818
+ optional: true
1819
+
1820
+ '@rollup/rollup-linux-loong64-gnu@4.52.4':
1821
+ optional: true
1822
+
1823
+ '@rollup/rollup-linux-ppc64-gnu@4.52.4':
1824
+ optional: true
1825
+
1826
+ '@rollup/rollup-linux-riscv64-gnu@4.52.4':
1827
+ optional: true
1828
+
1829
+ '@rollup/rollup-linux-riscv64-musl@4.52.4':
1830
+ optional: true
1831
+
1832
+ '@rollup/rollup-linux-s390x-gnu@4.52.4':
1833
+ optional: true
1834
+
1835
+ '@rollup/rollup-linux-x64-gnu@4.52.4':
1836
+ optional: true
1837
+
1838
+ '@rollup/rollup-linux-x64-musl@4.52.4':
1839
+ optional: true
1840
+
1841
+ '@rollup/rollup-openharmony-arm64@4.52.4':
1842
+ optional: true
1843
+
1844
+ '@rollup/rollup-win32-arm64-msvc@4.52.4':
1845
+ optional: true
1846
+
1847
+ '@rollup/rollup-win32-ia32-msvc@4.52.4':
1848
+ optional: true
1849
+
1850
+ '@rollup/rollup-win32-x64-gnu@4.52.4':
1851
+ optional: true
1852
+
1853
+ '@rollup/rollup-win32-x64-msvc@4.52.4':
1854
+ optional: true
1855
+
1856
+ '@tauri-apps/api@2.8.0': {}
1857
+
1858
+ '@tauri-apps/cli-darwin-arm64@2.8.4':
1859
+ optional: true
1860
+
1861
+ '@tauri-apps/cli-darwin-x64@2.8.4':
1862
+ optional: true
1863
+
1864
+ '@tauri-apps/cli-linux-arm-gnueabihf@2.8.4':
1865
+ optional: true
1866
+
1867
+ '@tauri-apps/cli-linux-arm64-gnu@2.8.4':
1868
+ optional: true
1869
+
1870
+ '@tauri-apps/cli-linux-arm64-musl@2.8.4':
1871
+ optional: true
1872
+
1873
+ '@tauri-apps/cli-linux-riscv64-gnu@2.8.4':
1874
+ optional: true
1875
+
1876
+ '@tauri-apps/cli-linux-x64-gnu@2.8.4':
1877
+ optional: true
1878
+
1879
+ '@tauri-apps/cli-linux-x64-musl@2.8.4':
1880
+ optional: true
1881
+
1882
+ '@tauri-apps/cli-win32-arm64-msvc@2.8.4':
1883
+ optional: true
1884
+
1885
+ '@tauri-apps/cli-win32-ia32-msvc@2.8.4':
1886
+ optional: true
1887
+
1888
+ '@tauri-apps/cli-win32-x64-msvc@2.8.4':
1889
+ optional: true
1890
+
1891
+ '@tauri-apps/cli@2.8.4':
1892
+ optionalDependencies:
1893
+ '@tauri-apps/cli-darwin-arm64': 2.8.4
1894
+ '@tauri-apps/cli-darwin-x64': 2.8.4
1895
+ '@tauri-apps/cli-linux-arm-gnueabihf': 2.8.4
1896
+ '@tauri-apps/cli-linux-arm64-gnu': 2.8.4
1897
+ '@tauri-apps/cli-linux-arm64-musl': 2.8.4
1898
+ '@tauri-apps/cli-linux-riscv64-gnu': 2.8.4
1899
+ '@tauri-apps/cli-linux-x64-gnu': 2.8.4
1900
+ '@tauri-apps/cli-linux-x64-musl': 2.8.4
1901
+ '@tauri-apps/cli-win32-arm64-msvc': 2.8.4
1902
+ '@tauri-apps/cli-win32-ia32-msvc': 2.8.4
1903
+ '@tauri-apps/cli-win32-x64-msvc': 2.8.4
1904
+
1905
+ '@tauri-apps/plugin-haptics@2.3.0':
1906
+ dependencies:
1907
+ '@tauri-apps/api': 2.8.0
1908
+
1909
+ '@tauri-apps/plugin-opener@2.5.0':
1910
+ dependencies:
1911
+ '@tauri-apps/api': 2.8.0
1912
+
1913
+ '@types/babel__core@7.20.5':
1914
+ dependencies:
1915
+ '@babel/parser': 7.28.4
1916
+ '@babel/types': 7.28.4
1917
+ '@types/babel__generator': 7.27.0
1918
+ '@types/babel__template': 7.4.4
1919
+ '@types/babel__traverse': 7.28.0
1920
+
1921
+ '@types/babel__generator@7.27.0':
1922
+ dependencies:
1923
+ '@babel/types': 7.28.4
1924
+
1925
+ '@types/babel__template@7.4.4':
1926
+ dependencies:
1927
+ '@babel/parser': 7.28.4
1928
+ '@babel/types': 7.28.4
1929
+
1930
+ '@types/babel__traverse@7.28.0':
1931
+ dependencies:
1932
+ '@babel/types': 7.28.4
1933
+
1934
+ '@types/estree@1.0.8': {}
1935
+
1936
+ '@types/react-dom@19.2.1(@types/react@19.2.2)':
1937
+ dependencies:
1938
+ '@types/react': 19.2.2
1939
+
1940
+ '@types/react@19.2.2':
1941
+ dependencies:
1942
+ csstype: 3.1.3
1943
+
1944
+ '@vitejs/plugin-react@4.7.0(vite@7.1.9(jiti@1.21.7))':
1945
+ dependencies:
1946
+ '@babel/core': 7.28.4
1947
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4)
1948
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4)
1949
+ '@rolldown/pluginutils': 1.0.0-beta.27
1950
+ '@types/babel__core': 7.20.5
1951
+ react-refresh: 0.17.0
1952
+ vite: 7.1.9(jiti@1.21.7)
1953
+ transitivePeerDependencies:
1954
+ - supports-color
1955
+
1956
+ ansi-regex@5.0.1: {}
1957
+
1958
+ ansi-regex@6.2.2: {}
1959
+
1960
+ ansi-styles@4.3.0:
1961
+ dependencies:
1962
+ color-convert: 2.0.1
1963
+
1964
+ ansi-styles@6.2.3: {}
1965
+
1966
+ any-promise@1.3.0: {}
1967
+
1968
+ anymatch@3.1.3:
1969
+ dependencies:
1970
+ normalize-path: 3.0.0
1971
+ picomatch: 2.3.1
1972
+
1973
+ arg@5.0.2: {}
1974
+
1975
+ autoprefixer@10.4.21(postcss@8.5.6):
1976
+ dependencies:
1977
+ browserslist: 4.26.3
1978
+ caniuse-lite: 1.0.30001749
1979
+ fraction.js: 4.3.7
1980
+ normalize-range: 0.1.2
1981
+ picocolors: 1.1.1
1982
+ postcss: 8.5.6
1983
+ postcss-value-parser: 4.2.0
1984
+
1985
+ balanced-match@1.0.2: {}
1986
+
1987
+ baseline-browser-mapping@2.8.15: {}
1988
+
1989
+ binary-extensions@2.3.0: {}
1990
+
1991
+ brace-expansion@2.0.2:
1992
+ dependencies:
1993
+ balanced-match: 1.0.2
1994
+
1995
+ braces@3.0.3:
1996
+ dependencies:
1997
+ fill-range: 7.1.1
1998
+
1999
+ browserslist@4.26.3:
2000
+ dependencies:
2001
+ baseline-browser-mapping: 2.8.15
2002
+ caniuse-lite: 1.0.30001749
2003
+ electron-to-chromium: 1.5.234
2004
+ node-releases: 2.0.23
2005
+ update-browserslist-db: 1.1.3(browserslist@4.26.3)
2006
+
2007
+ camelcase-css@2.0.1: {}
2008
+
2009
+ caniuse-lite@1.0.30001749: {}
2010
+
2011
+ chokidar@3.6.0:
2012
+ dependencies:
2013
+ anymatch: 3.1.3
2014
+ braces: 3.0.3
2015
+ glob-parent: 5.1.2
2016
+ is-binary-path: 2.1.0
2017
+ is-glob: 4.0.3
2018
+ normalize-path: 3.0.0
2019
+ readdirp: 3.6.0
2020
+ optionalDependencies:
2021
+ fsevents: 2.3.3
2022
+
2023
+ color-convert@2.0.1:
2024
+ dependencies:
2025
+ color-name: 1.1.4
2026
+
2027
+ color-name@1.1.4: {}
2028
+
2029
+ commander@4.1.1: {}
2030
+
2031
+ convert-source-map@2.0.0: {}
2032
+
2033
+ cross-spawn@7.0.6:
2034
+ dependencies:
2035
+ path-key: 3.1.1
2036
+ shebang-command: 2.0.0
2037
+ which: 2.0.2
2038
+
2039
+ cssesc@3.0.0: {}
2040
+
2041
+ csstype@3.1.3: {}
2042
+
2043
+ debug@4.4.3:
2044
+ dependencies:
2045
+ ms: 2.1.3
2046
+
2047
+ didyoumean@1.2.2: {}
2048
+
2049
+ dlv@1.1.3: {}
2050
+
2051
+ eastasianwidth@0.2.0: {}
2052
+
2053
+ electron-to-chromium@1.5.234: {}
2054
+
2055
+ emoji-regex@8.0.0: {}
2056
+
2057
+ emoji-regex@9.2.2: {}
2058
+
2059
+ esbuild@0.25.10:
2060
+ optionalDependencies:
2061
+ '@esbuild/aix-ppc64': 0.25.10
2062
+ '@esbuild/android-arm': 0.25.10
2063
+ '@esbuild/android-arm64': 0.25.10
2064
+ '@esbuild/android-x64': 0.25.10
2065
+ '@esbuild/darwin-arm64': 0.25.10
2066
+ '@esbuild/darwin-x64': 0.25.10
2067
+ '@esbuild/freebsd-arm64': 0.25.10
2068
+ '@esbuild/freebsd-x64': 0.25.10
2069
+ '@esbuild/linux-arm': 0.25.10
2070
+ '@esbuild/linux-arm64': 0.25.10
2071
+ '@esbuild/linux-ia32': 0.25.10
2072
+ '@esbuild/linux-loong64': 0.25.10
2073
+ '@esbuild/linux-mips64el': 0.25.10
2074
+ '@esbuild/linux-ppc64': 0.25.10
2075
+ '@esbuild/linux-riscv64': 0.25.10
2076
+ '@esbuild/linux-s390x': 0.25.10
2077
+ '@esbuild/linux-x64': 0.25.10
2078
+ '@esbuild/netbsd-arm64': 0.25.10
2079
+ '@esbuild/netbsd-x64': 0.25.10
2080
+ '@esbuild/openbsd-arm64': 0.25.10
2081
+ '@esbuild/openbsd-x64': 0.25.10
2082
+ '@esbuild/openharmony-arm64': 0.25.10
2083
+ '@esbuild/sunos-x64': 0.25.10
2084
+ '@esbuild/win32-arm64': 0.25.10
2085
+ '@esbuild/win32-ia32': 0.25.10
2086
+ '@esbuild/win32-x64': 0.25.10
2087
+
2088
+ escalade@3.2.0: {}
2089
+
2090
+ fast-glob@3.3.3:
2091
+ dependencies:
2092
+ '@nodelib/fs.stat': 2.0.5
2093
+ '@nodelib/fs.walk': 1.2.8
2094
+ glob-parent: 5.1.2
2095
+ merge2: 1.4.1
2096
+ micromatch: 4.0.8
2097
+
2098
+ fastq@1.19.1:
2099
+ dependencies:
2100
+ reusify: 1.1.0
2101
+
2102
+ fdir@6.5.0(picomatch@4.0.3):
2103
+ optionalDependencies:
2104
+ picomatch: 4.0.3
2105
+
2106
+ fill-range@7.1.1:
2107
+ dependencies:
2108
+ to-regex-range: 5.0.1
2109
+
2110
+ foreground-child@3.3.1:
2111
+ dependencies:
2112
+ cross-spawn: 7.0.6
2113
+ signal-exit: 4.1.0
2114
+
2115
+ fraction.js@4.3.7: {}
2116
+
2117
+ fsevents@2.3.3:
2118
+ optional: true
2119
+
2120
+ function-bind@1.1.2: {}
2121
+
2122
+ gensync@1.0.0-beta.2: {}
2123
+
2124
+ glob-parent@5.1.2:
2125
+ dependencies:
2126
+ is-glob: 4.0.3
2127
+
2128
+ glob-parent@6.0.2:
2129
+ dependencies:
2130
+ is-glob: 4.0.3
2131
+
2132
+ glob@10.4.5:
2133
+ dependencies:
2134
+ foreground-child: 3.3.1
2135
+ jackspeak: 3.4.3
2136
+ minimatch: 9.0.5
2137
+ minipass: 7.1.2
2138
+ package-json-from-dist: 1.0.1
2139
+ path-scurry: 1.11.1
2140
+
2141
+ hasown@2.0.2:
2142
+ dependencies:
2143
+ function-bind: 1.1.2
2144
+
2145
+ is-binary-path@2.1.0:
2146
+ dependencies:
2147
+ binary-extensions: 2.3.0
2148
+
2149
+ is-core-module@2.16.1:
2150
+ dependencies:
2151
+ hasown: 2.0.2
2152
+
2153
+ is-extglob@2.1.1: {}
2154
+
2155
+ is-fullwidth-code-point@3.0.0: {}
2156
+
2157
+ is-glob@4.0.3:
2158
+ dependencies:
2159
+ is-extglob: 2.1.1
2160
+
2161
+ is-number@7.0.0: {}
2162
+
2163
+ isexe@2.0.0: {}
2164
+
2165
+ jackspeak@3.4.3:
2166
+ dependencies:
2167
+ '@isaacs/cliui': 8.0.2
2168
+ optionalDependencies:
2169
+ '@pkgjs/parseargs': 0.11.0
2170
+
2171
+ jiti@1.21.7: {}
2172
+
2173
+ js-tokens@4.0.0: {}
2174
+
2175
+ jsesc@3.1.0: {}
2176
+
2177
+ json5@2.2.3: {}
2178
+
2179
+ lilconfig@3.1.3: {}
2180
+
2181
+ lines-and-columns@1.2.4: {}
2182
+
2183
+ lru-cache@10.4.3: {}
2184
+
2185
+ lru-cache@5.1.1:
2186
+ dependencies:
2187
+ yallist: 3.1.1
2188
+
2189
+ merge2@1.4.1: {}
2190
+
2191
+ micromatch@4.0.8:
2192
+ dependencies:
2193
+ braces: 3.0.3
2194
+ picomatch: 2.3.1
2195
+
2196
+ minimatch@9.0.5:
2197
+ dependencies:
2198
+ brace-expansion: 2.0.2
2199
+
2200
+ minipass@7.1.2: {}
2201
+
2202
+ ms@2.1.3: {}
2203
+
2204
+ mz@2.7.0:
2205
+ dependencies:
2206
+ any-promise: 1.3.0
2207
+ object-assign: 4.1.1
2208
+ thenify-all: 1.6.0
2209
+
2210
+ nanoid@3.3.11: {}
2211
+
2212
+ node-releases@2.0.23: {}
2213
+
2214
+ normalize-path@3.0.0: {}
2215
+
2216
+ normalize-range@0.1.2: {}
2217
+
2218
+ object-assign@4.1.1: {}
2219
+
2220
+ object-hash@3.0.0: {}
2221
+
2222
+ package-json-from-dist@1.0.1: {}
2223
+
2224
+ path-key@3.1.1: {}
2225
+
2226
+ path-parse@1.0.7: {}
2227
+
2228
+ path-scurry@1.11.1:
2229
+ dependencies:
2230
+ lru-cache: 10.4.3
2231
+ minipass: 7.1.2
2232
+
2233
+ picocolors@1.1.1: {}
2234
+
2235
+ picomatch@2.3.1: {}
2236
+
2237
+ picomatch@4.0.3: {}
2238
+
2239
+ pify@2.3.0: {}
2240
+
2241
+ pirates@4.0.7: {}
2242
+
2243
+ postcss-import@15.1.0(postcss@8.5.6):
2244
+ dependencies:
2245
+ postcss: 8.5.6
2246
+ postcss-value-parser: 4.2.0
2247
+ read-cache: 1.0.0
2248
+ resolve: 1.22.10
2249
+
2250
+ postcss-js@4.1.0(postcss@8.5.6):
2251
+ dependencies:
2252
+ camelcase-css: 2.0.1
2253
+ postcss: 8.5.6
2254
+
2255
+ postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6):
2256
+ dependencies:
2257
+ lilconfig: 3.1.3
2258
+ optionalDependencies:
2259
+ jiti: 1.21.7
2260
+ postcss: 8.5.6
2261
+
2262
+ postcss-nested@6.2.0(postcss@8.5.6):
2263
+ dependencies:
2264
+ postcss: 8.5.6
2265
+ postcss-selector-parser: 6.1.2
2266
+
2267
+ postcss-selector-parser@6.1.2:
2268
+ dependencies:
2269
+ cssesc: 3.0.0
2270
+ util-deprecate: 1.0.2
2271
+
2272
+ postcss-value-parser@4.2.0: {}
2273
+
2274
+ postcss@8.5.6:
2275
+ dependencies:
2276
+ nanoid: 3.3.11
2277
+ picocolors: 1.1.1
2278
+ source-map-js: 1.2.1
2279
+
2280
+ queue-microtask@1.2.3: {}
2281
+
2282
+ react-dom@19.2.0(react@19.2.0):
2283
+ dependencies:
2284
+ react: 19.2.0
2285
+ scheduler: 0.27.0
2286
+
2287
+ react-refresh@0.17.0: {}
2288
+
2289
+ react-router-dom@6.30.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
2290
+ dependencies:
2291
+ '@remix-run/router': 1.23.0
2292
+ react: 19.2.0
2293
+ react-dom: 19.2.0(react@19.2.0)
2294
+ react-router: 6.30.1(react@19.2.0)
2295
+
2296
+ react-router@6.30.1(react@19.2.0):
2297
+ dependencies:
2298
+ '@remix-run/router': 1.23.0
2299
+ react: 19.2.0
2300
+
2301
+ react@19.2.0: {}
2302
+
2303
+ read-cache@1.0.0:
2304
+ dependencies:
2305
+ pify: 2.3.0
2306
+
2307
+ readdirp@3.6.0:
2308
+ dependencies:
2309
+ picomatch: 2.3.1
2310
+
2311
+ resolve@1.22.10:
2312
+ dependencies:
2313
+ is-core-module: 2.16.1
2314
+ path-parse: 1.0.7
2315
+ supports-preserve-symlinks-flag: 1.0.0
2316
+
2317
+ reusify@1.1.0: {}
2318
+
2319
+ rollup@4.52.4:
2320
+ dependencies:
2321
+ '@types/estree': 1.0.8
2322
+ optionalDependencies:
2323
+ '@rollup/rollup-android-arm-eabi': 4.52.4
2324
+ '@rollup/rollup-android-arm64': 4.52.4
2325
+ '@rollup/rollup-darwin-arm64': 4.52.4
2326
+ '@rollup/rollup-darwin-x64': 4.52.4
2327
+ '@rollup/rollup-freebsd-arm64': 4.52.4
2328
+ '@rollup/rollup-freebsd-x64': 4.52.4
2329
+ '@rollup/rollup-linux-arm-gnueabihf': 4.52.4
2330
+ '@rollup/rollup-linux-arm-musleabihf': 4.52.4
2331
+ '@rollup/rollup-linux-arm64-gnu': 4.52.4
2332
+ '@rollup/rollup-linux-arm64-musl': 4.52.4
2333
+ '@rollup/rollup-linux-loong64-gnu': 4.52.4
2334
+ '@rollup/rollup-linux-ppc64-gnu': 4.52.4
2335
+ '@rollup/rollup-linux-riscv64-gnu': 4.52.4
2336
+ '@rollup/rollup-linux-riscv64-musl': 4.52.4
2337
+ '@rollup/rollup-linux-s390x-gnu': 4.52.4
2338
+ '@rollup/rollup-linux-x64-gnu': 4.52.4
2339
+ '@rollup/rollup-linux-x64-musl': 4.52.4
2340
+ '@rollup/rollup-openharmony-arm64': 4.52.4
2341
+ '@rollup/rollup-win32-arm64-msvc': 4.52.4
2342
+ '@rollup/rollup-win32-ia32-msvc': 4.52.4
2343
+ '@rollup/rollup-win32-x64-gnu': 4.52.4
2344
+ '@rollup/rollup-win32-x64-msvc': 4.52.4
2345
+ fsevents: 2.3.3
2346
+
2347
+ run-parallel@1.2.0:
2348
+ dependencies:
2349
+ queue-microtask: 1.2.3
2350
+
2351
+ scheduler@0.27.0: {}
2352
+
2353
+ semver@6.3.1: {}
2354
+
2355
+ shebang-command@2.0.0:
2356
+ dependencies:
2357
+ shebang-regex: 3.0.0
2358
+
2359
+ shebang-regex@3.0.0: {}
2360
+
2361
+ signal-exit@4.1.0: {}
2362
+
2363
+ source-map-js@1.2.1: {}
2364
+
2365
+ string-width@4.2.3:
2366
+ dependencies:
2367
+ emoji-regex: 8.0.0
2368
+ is-fullwidth-code-point: 3.0.0
2369
+ strip-ansi: 6.0.1
2370
+
2371
+ string-width@5.1.2:
2372
+ dependencies:
2373
+ eastasianwidth: 0.2.0
2374
+ emoji-regex: 9.2.2
2375
+ strip-ansi: 7.1.2
2376
+
2377
+ strip-ansi@6.0.1:
2378
+ dependencies:
2379
+ ansi-regex: 5.0.1
2380
+
2381
+ strip-ansi@7.1.2:
2382
+ dependencies:
2383
+ ansi-regex: 6.2.2
2384
+
2385
+ sucrase@3.35.0:
2386
+ dependencies:
2387
+ '@jridgewell/gen-mapping': 0.3.13
2388
+ commander: 4.1.1
2389
+ glob: 10.4.5
2390
+ lines-and-columns: 1.2.4
2391
+ mz: 2.7.0
2392
+ pirates: 4.0.7
2393
+ ts-interface-checker: 0.1.13
2394
+
2395
+ supports-preserve-symlinks-flag@1.0.0: {}
2396
+
2397
+ tailwindcss@3.4.18:
2398
+ dependencies:
2399
+ '@alloc/quick-lru': 5.2.0
2400
+ arg: 5.0.2
2401
+ chokidar: 3.6.0
2402
+ didyoumean: 1.2.2
2403
+ dlv: 1.1.3
2404
+ fast-glob: 3.3.3
2405
+ glob-parent: 6.0.2
2406
+ is-glob: 4.0.3
2407
+ jiti: 1.21.7
2408
+ lilconfig: 3.1.3
2409
+ micromatch: 4.0.8
2410
+ normalize-path: 3.0.0
2411
+ object-hash: 3.0.0
2412
+ picocolors: 1.1.1
2413
+ postcss: 8.5.6
2414
+ postcss-import: 15.1.0(postcss@8.5.6)
2415
+ postcss-js: 4.1.0(postcss@8.5.6)
2416
+ postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)
2417
+ postcss-nested: 6.2.0(postcss@8.5.6)
2418
+ postcss-selector-parser: 6.1.2
2419
+ resolve: 1.22.10
2420
+ sucrase: 3.35.0
2421
+ transitivePeerDependencies:
2422
+ - tsx
2423
+ - yaml
2424
+
2425
+ thenify-all@1.6.0:
2426
+ dependencies:
2427
+ thenify: 3.3.1
2428
+
2429
+ thenify@3.3.1:
2430
+ dependencies:
2431
+ any-promise: 1.3.0
2432
+
2433
+ tinyglobby@0.2.15:
2434
+ dependencies:
2435
+ fdir: 6.5.0(picomatch@4.0.3)
2436
+ picomatch: 4.0.3
2437
+
2438
+ to-regex-range@5.0.1:
2439
+ dependencies:
2440
+ is-number: 7.0.0
2441
+
2442
+ ts-interface-checker@0.1.13: {}
2443
+
2444
+ typescript@5.8.3: {}
2445
+
2446
+ update-browserslist-db@1.1.3(browserslist@4.26.3):
2447
+ dependencies:
2448
+ browserslist: 4.26.3
2449
+ escalade: 3.2.0
2450
+ picocolors: 1.1.1
2451
+
2452
+ util-deprecate@1.0.2: {}
2453
+
2454
+ vite@7.1.9(jiti@1.21.7):
2455
+ dependencies:
2456
+ esbuild: 0.25.10
2457
+ fdir: 6.5.0(picomatch@4.0.3)
2458
+ picomatch: 4.0.3
2459
+ postcss: 8.5.6
2460
+ rollup: 4.52.4
2461
+ tinyglobby: 0.2.15
2462
+ optionalDependencies:
2463
+ fsevents: 2.3.3
2464
+ jiti: 1.21.7
2465
+
2466
+ which@2.0.2:
2467
+ dependencies:
2468
+ isexe: 2.0.0
2469
+
2470
+ wrap-ansi@7.0.0:
2471
+ dependencies:
2472
+ ansi-styles: 4.3.0
2473
+ string-width: 4.2.3
2474
+ strip-ansi: 6.0.1
2475
+
2476
+ wrap-ansi@8.1.0:
2477
+ dependencies:
2478
+ ansi-styles: 6.2.3
2479
+ string-width: 5.1.2
2480
+ strip-ansi: 7.1.2
2481
+
2482
+ yallist@3.1.1: {}
pnpm-workspace.yaml
new
+2
@@ -0,0 +1,2 @@
1
+onlyBuiltDependencies:
2
+ - esbuild
postcss.config.cjs
new
+6
@@ -0,0 +1,6 @@
1
+module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+}
scripts/generate-icon-mas.sh
new
+10
@@ -0,0 +1,10 @@
1
+#!/usr/bin/env bash
2
+
3
+# This command should be run after the cargo tauri android|ios init.
4
+#
5
+# Generate icon for mobile platforms. The no-alpha version is used for iOS. Should update the script
6
+# if Android icon is broken.
7
+cargo tauri icon assets/app-icon-macos.png
8
+
9
+# Restore the icons directory to its original state.
10
+git restore 'src-tauri/icons/*' ':(exclude)src-tauri/icons/*.icns'
scripts/generate-icon-mobile.sh
new
+10
@@ -0,0 +1,10 @@
1
+#!/usr/bin/env bash
2
+
3
+# This command should be run after the cargo tauri android|ios init.
4
+#
5
+# Generate icon for mobile platforms. The no-alpha version is used for iOS. Should update the script
6
+# if Android icon is broken.
7
+cargo tauri icon assets/app-icon.jpg
8
+
9
+# Restore the icons directory to its original state.
10
+git restore src-tauri/icons
src-tauri/.gitignore
new
+7
@@ -0,0 +1,7 @@
1
+# Generated by Cargo
2
+# will have compiled files and executables
3
+/target/
4
+
5
+# Generated by Tauri
6
+# will have schema files for capabilities auto-completion
7
+/gen/
src-tauri/Cargo.lock
new
+5326
@@ -0,0 +1,5326 @@
1
+# This file is automatically @generated by Cargo.
2
+# It is not intended for manual editing.
3
+version = 4
4
+
5
+[[package]]
6
+name = "addr2line"
7
+version = "0.25.1"
8
+source = "registry+https://github.com/rust-lang/crates.io-index"
9
+checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
10
+dependencies = [
11
+ "gimli",
12
+]
13
+
14
+[[package]]
15
+name = "adler2"
16
+version = "2.0.1"
17
+source = "registry+https://github.com/rust-lang/crates.io-index"
18
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
19
+
20
+[[package]]
21
+name = "aho-corasick"
22
+version = "1.1.3"
23
+source = "registry+https://github.com/rust-lang/crates.io-index"
24
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
25
+dependencies = [
26
+ "memchr",
27
+]
28
+
29
+[[package]]
30
+name = "alloc-no-stdlib"
31
+version = "2.0.4"
32
+source = "registry+https://github.com/rust-lang/crates.io-index"
33
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
34
+
35
+[[package]]
36
+name = "alloc-stdlib"
37
+version = "0.2.2"
38
+source = "registry+https://github.com/rust-lang/crates.io-index"
39
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
40
+dependencies = [
41
+ "alloc-no-stdlib",
42
+]
43
+
44
+[[package]]
45
+name = "android_system_properties"
46
+version = "0.1.5"
47
+source = "registry+https://github.com/rust-lang/crates.io-index"
48
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
49
+dependencies = [
50
+ "libc",
51
+]
52
+
53
+[[package]]
54
+name = "anyhow"
55
+version = "1.0.100"
56
+source = "registry+https://github.com/rust-lang/crates.io-index"
57
+checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
58
+
59
+[[package]]
60
+name = "async-broadcast"
61
+version = "0.7.2"
62
+source = "registry+https://github.com/rust-lang/crates.io-index"
63
+checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
64
+dependencies = [
65
+ "event-listener",
66
+ "event-listener-strategy",
67
+ "futures-core",
68
+ "pin-project-lite",
69
+]
70
+
71
+[[package]]
72
+name = "async-channel"
73
+version = "2.5.0"
74
+source = "registry+https://github.com/rust-lang/crates.io-index"
75
+checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
76
+dependencies = [
77
+ "concurrent-queue",
78
+ "event-listener-strategy",
79
+ "futures-core",
80
+ "pin-project-lite",
81
+]
82
+
83
+[[package]]
84
+name = "async-executor"
85
+version = "1.13.3"
86
+source = "registry+https://github.com/rust-lang/crates.io-index"
87
+checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
88
+dependencies = [
89
+ "async-task",
90
+ "concurrent-queue",
91
+ "fastrand",
92
+ "futures-lite",
93
+ "pin-project-lite",
94
+ "slab",
95
+]
96
+
97
+[[package]]
98
+name = "async-io"
99
+version = "2.6.0"
100
+source = "registry+https://github.com/rust-lang/crates.io-index"
101
+checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
102
+dependencies = [
103
+ "autocfg",
104
+ "cfg-if",
105
+ "concurrent-queue",
106
+ "futures-io",
107
+ "futures-lite",
108
+ "parking",
109
+ "polling",
110
+ "rustix",
111
+ "slab",
112
+ "windows-sys 0.61.2",
113
+]
114
+
115
+[[package]]
116
+name = "async-lock"
117
+version = "3.4.1"
118
+source = "registry+https://github.com/rust-lang/crates.io-index"
119
+checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
120
+dependencies = [
121
+ "event-listener",
122
+ "event-listener-strategy",
123
+ "pin-project-lite",
124
+]
125
+
126
+[[package]]
127
+name = "async-process"
128
+version = "2.5.0"
129
+source = "registry+https://github.com/rust-lang/crates.io-index"
130
+checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
131
+dependencies = [
132
+ "async-channel",
133
+ "async-io",
134
+ "async-lock",
135
+ "async-signal",
136
+ "async-task",
137
+ "blocking",
138
+ "cfg-if",
139
+ "event-listener",
140
+ "futures-lite",
141
+ "rustix",
142
+]
143
+
144
+[[package]]
145
+name = "async-recursion"
146
+version = "1.1.1"
147
+source = "registry+https://github.com/rust-lang/crates.io-index"
148
+checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
149
+dependencies = [
150
+ "proc-macro2",
151
+ "quote",
152
+ "syn 2.0.106",
153
+]
154
+
155
+[[package]]
156
+name = "async-signal"
157
+version = "0.2.13"
158
+source = "registry+https://github.com/rust-lang/crates.io-index"
159
+checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
160
+dependencies = [
161
+ "async-io",
162
+ "async-lock",
163
+ "atomic-waker",
164
+ "cfg-if",
165
+ "futures-core",
166
+ "futures-io",
167
+ "rustix",
168
+ "signal-hook-registry",
169
+ "slab",
170
+ "windows-sys 0.61.2",
171
+]
172
+
173
+[[package]]
174
+name = "async-task"
175
+version = "4.7.1"
176
+source = "registry+https://github.com/rust-lang/crates.io-index"
177
+checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
178
+
179
+[[package]]
180
+name = "async-trait"
181
+version = "0.1.89"
182
+source = "registry+https://github.com/rust-lang/crates.io-index"
183
+checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
184
+dependencies = [
185
+ "proc-macro2",
186
+ "quote",
187
+ "syn 2.0.106",
188
+]
189
+
190
+[[package]]
191
+name = "atk"
192
+version = "0.18.2"
193
+source = "registry+https://github.com/rust-lang/crates.io-index"
194
+checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b"
195
+dependencies = [
196
+ "atk-sys",
197
+ "glib",
198
+ "libc",
199
+]
200
+
201
+[[package]]
202
+name = "atk-sys"
203
+version = "0.18.2"
204
+source = "registry+https://github.com/rust-lang/crates.io-index"
205
+checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086"
206
+dependencies = [
207
+ "glib-sys",
208
+ "gobject-sys",
209
+ "libc",
210
+ "system-deps",
211
+]
212
+
213
+[[package]]
214
+name = "atomic-waker"
215
+version = "1.1.2"
216
+source = "registry+https://github.com/rust-lang/crates.io-index"
217
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
218
+
219
+[[package]]
220
+name = "autocfg"
221
+version = "1.5.0"
222
+source = "registry+https://github.com/rust-lang/crates.io-index"
223
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
224
+
225
+[[package]]
226
+name = "backtrace"
227
+version = "0.3.76"
228
+source = "registry+https://github.com/rust-lang/crates.io-index"
229
+checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
230
+dependencies = [
231
+ "addr2line",
232
+ "cfg-if",
233
+ "libc",
234
+ "miniz_oxide",
235
+ "object",
236
+ "rustc-demangle",
237
+ "windows-link 0.2.1",
238
+]
239
+
240
+[[package]]
241
+name = "base64"
242
+version = "0.21.7"
243
+source = "registry+https://github.com/rust-lang/crates.io-index"
244
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
245
+
246
+[[package]]
247
+name = "base64"
248
+version = "0.22.1"
249
+source = "registry+https://github.com/rust-lang/crates.io-index"
250
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
251
+
252
+[[package]]
253
+name = "bitflags"
254
+version = "1.3.2"
255
+source = "registry+https://github.com/rust-lang/crates.io-index"
256
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
257
+
258
+[[package]]
259
+name = "bitflags"
260
+version = "2.9.4"
261
+source = "registry+https://github.com/rust-lang/crates.io-index"
262
+checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
263
+dependencies = [
264
+ "serde",
265
+]
266
+
267
+[[package]]
268
+name = "block-buffer"
269
+version = "0.10.4"
270
+source = "registry+https://github.com/rust-lang/crates.io-index"
271
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
272
+dependencies = [
273
+ "generic-array",
274
+]
275
+
276
+[[package]]
277
+name = "block2"
278
+version = "0.5.1"
279
+source = "registry+https://github.com/rust-lang/crates.io-index"
280
+checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
281
+dependencies = [
282
+ "objc2 0.5.2",
283
+]
284
+
285
+[[package]]
286
+name = "block2"
287
+version = "0.6.2"
288
+source = "registry+https://github.com/rust-lang/crates.io-index"
289
+checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
290
+dependencies = [
291
+ "objc2 0.6.3",
292
+]
293
+
294
+[[package]]
295
+name = "blocking"
296
+version = "1.6.2"
297
+source = "registry+https://github.com/rust-lang/crates.io-index"
298
+checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
299
+dependencies = [
300
+ "async-channel",
301
+ "async-task",
302
+ "futures-io",
303
+ "futures-lite",
304
+ "piper",
305
+]
306
+
307
+[[package]]
308
+name = "brotli"
309
+version = "8.0.2"
310
+source = "registry+https://github.com/rust-lang/crates.io-index"
311
+checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
312
+dependencies = [
313
+ "alloc-no-stdlib",
314
+ "alloc-stdlib",
315
+ "brotli-decompressor",
316
+]
317
+
318
+[[package]]
319
+name = "brotli-decompressor"
320
+version = "5.0.0"
321
+source = "registry+https://github.com/rust-lang/crates.io-index"
322
+checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
323
+dependencies = [
324
+ "alloc-no-stdlib",
325
+ "alloc-stdlib",
326
+]
327
+
328
+[[package]]
329
+name = "bumpalo"
330
+version = "3.19.0"
331
+source = "registry+https://github.com/rust-lang/crates.io-index"
332
+checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
333
+
334
+[[package]]
335
+name = "bytemuck"
336
+version = "1.24.0"
337
+source = "registry+https://github.com/rust-lang/crates.io-index"
338
+checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
339
+
340
+[[package]]
341
+name = "byteorder"
342
+version = "1.5.0"
343
+source = "registry+https://github.com/rust-lang/crates.io-index"
344
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
345
+
346
+[[package]]
347
+name = "bytes"
348
+version = "1.10.1"
349
+source = "registry+https://github.com/rust-lang/crates.io-index"
350
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
351
+dependencies = [
352
+ "serde",
353
+]
354
+
355
+[[package]]
356
+name = "cairo-rs"
357
+version = "0.18.5"
358
+source = "registry+https://github.com/rust-lang/crates.io-index"
359
+checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
360
+dependencies = [
361
+ "bitflags 2.9.4",
362
+ "cairo-sys-rs",
363
+ "glib",
364
+ "libc",
365
+ "once_cell",
366
+ "thiserror 1.0.69",
367
+]
368
+
369
+[[package]]
370
+name = "cairo-sys-rs"
371
+version = "0.18.2"
372
+source = "registry+https://github.com/rust-lang/crates.io-index"
373
+checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
374
+dependencies = [
375
+ "glib-sys",
376
+ "libc",
377
+ "system-deps",
378
+]
379
+
380
+[[package]]
381
+name = "camino"
382
+version = "1.2.1"
383
+source = "registry+https://github.com/rust-lang/crates.io-index"
384
+checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609"
385
+dependencies = [
386
+ "serde_core",
387
+]
388
+
389
+[[package]]
390
+name = "cargo-platform"
391
+version = "0.1.9"
392
+source = "registry+https://github.com/rust-lang/crates.io-index"
393
+checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
394
+dependencies = [
395
+ "serde",
396
+]
397
+
398
+[[package]]
399
+name = "cargo_metadata"
400
+version = "0.19.2"
401
+source = "registry+https://github.com/rust-lang/crates.io-index"
402
+checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba"
403
+dependencies = [
404
+ "camino",
405
+ "cargo-platform",
406
+ "semver",
407
+ "serde",
408
+ "serde_json",
409
+ "thiserror 2.0.17",
410
+]
411
+
412
+[[package]]
413
+name = "cargo_toml"
414
+version = "0.22.3"
415
+source = "registry+https://github.com/rust-lang/crates.io-index"
416
+checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
417
+dependencies = [
418
+ "serde",
419
+ "toml 0.9.7",
420
+]
421
+
422
+[[package]]
423
+name = "cc"
424
+version = "1.2.40"
425
+source = "registry+https://github.com/rust-lang/crates.io-index"
426
+checksum = "e1d05d92f4b1fd76aad469d46cdd858ca761576082cd37df81416691e50199fb"
427
+dependencies = [
428
+ "find-msvc-tools",
429
+ "shlex",
430
+]
431
+
432
+[[package]]
433
+name = "cesu8"
434
+version = "1.1.0"
435
+source = "registry+https://github.com/rust-lang/crates.io-index"
436
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
437
+
438
+[[package]]
439
+name = "cfb"
440
+version = "0.7.3"
441
+source = "registry+https://github.com/rust-lang/crates.io-index"
442
+checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
443
+dependencies = [
444
+ "byteorder",
445
+ "fnv",
446
+ "uuid",
447
+]
448
+
449
+[[package]]
450
+name = "cfg-expr"
451
+version = "0.15.8"
452
+source = "registry+https://github.com/rust-lang/crates.io-index"
453
+checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
454
+dependencies = [
455
+ "smallvec",
456
+ "target-lexicon",
457
+]
458
+
459
+[[package]]
460
+name = "cfg-if"
461
+version = "1.0.3"
462
+source = "registry+https://github.com/rust-lang/crates.io-index"
463
+checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
464
+
465
+[[package]]
466
+name = "cfg_aliases"
467
+version = "0.2.1"
468
+source = "registry+https://github.com/rust-lang/crates.io-index"
469
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
470
+
471
+[[package]]
472
+name = "chrono"
473
+version = "0.4.42"
474
+source = "registry+https://github.com/rust-lang/crates.io-index"
475
+checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
476
+dependencies = [
477
+ "iana-time-zone",
478
+ "num-traits",
479
+ "serde",
480
+ "windows-link 0.2.1",
481
+]
482
+
483
+[[package]]
484
+name = "combine"
485
+version = "4.6.7"
486
+source = "registry+https://github.com/rust-lang/crates.io-index"
487
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
488
+dependencies = [
489
+ "bytes",
490
+ "memchr",
491
+]
492
+
493
+[[package]]
494
+name = "concurrent-queue"
495
+version = "2.5.0"
496
+source = "registry+https://github.com/rust-lang/crates.io-index"
497
+checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
498
+dependencies = [
499
+ "crossbeam-utils",
500
+]
501
+
502
+[[package]]
503
+name = "convert_case"
504
+version = "0.4.0"
505
+source = "registry+https://github.com/rust-lang/crates.io-index"
506
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
507
+
508
+[[package]]
509
+name = "cookie"
510
+version = "0.18.1"
511
+source = "registry+https://github.com/rust-lang/crates.io-index"
512
+checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747"
513
+dependencies = [
514
+ "time",
515
+ "version_check",
516
+]
517
+
518
+[[package]]
519
+name = "core-foundation"
520
+version = "0.10.1"
521
+source = "registry+https://github.com/rust-lang/crates.io-index"
522
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
523
+dependencies = [
524
+ "core-foundation-sys",
525
+ "libc",
526
+]
527
+
528
+[[package]]
529
+name = "core-foundation-sys"
530
+version = "0.8.7"
531
+source = "registry+https://github.com/rust-lang/crates.io-index"
532
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
533
+
534
+[[package]]
535
+name = "core-graphics"
536
+version = "0.24.0"
537
+source = "registry+https://github.com/rust-lang/crates.io-index"
538
+checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
539
+dependencies = [
540
+ "bitflags 2.9.4",
541
+ "core-foundation",
542
+ "core-graphics-types",
543
+ "foreign-types",
544
+ "libc",
545
+]
546
+
547
+[[package]]
548
+name = "core-graphics-types"
549
+version = "0.2.0"
550
+source = "registry+https://github.com/rust-lang/crates.io-index"
551
+checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
552
+dependencies = [
553
+ "bitflags 2.9.4",
554
+ "core-foundation",
555
+ "libc",
556
+]
557
+
558
+[[package]]
559
+name = "cpufeatures"
560
+version = "0.2.17"
561
+source = "registry+https://github.com/rust-lang/crates.io-index"
562
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
563
+dependencies = [
564
+ "libc",
565
+]
566
+
567
+[[package]]
568
+name = "crc32fast"
569
+version = "1.5.0"
570
+source = "registry+https://github.com/rust-lang/crates.io-index"
571
+checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
572
+dependencies = [
573
+ "cfg-if",
574
+]
575
+
576
+[[package]]
577
+name = "crossbeam-channel"
578
+version = "0.5.15"
579
+source = "registry+https://github.com/rust-lang/crates.io-index"
580
+checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
581
+dependencies = [
582
+ "crossbeam-utils",
583
+]
584
+
585
+[[package]]
586
+name = "crossbeam-utils"
587
+version = "0.8.21"
588
+source = "registry+https://github.com/rust-lang/crates.io-index"
589
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
590
+
591
+[[package]]
592
+name = "crypto-common"
593
+version = "0.1.6"
594
+source = "registry+https://github.com/rust-lang/crates.io-index"
595
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
596
+dependencies = [
597
+ "generic-array",
598
+ "typenum",
599
+]
600
+
601
+[[package]]
602
+name = "cssparser"
603
+version = "0.29.6"
604
+source = "registry+https://github.com/rust-lang/crates.io-index"
605
+checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa"
606
+dependencies = [
607
+ "cssparser-macros",
608
+ "dtoa-short",
609
+ "itoa",
610
+ "matches",
611
+ "phf 0.10.1",
612
+ "proc-macro2",
613
+ "quote",
614
+ "smallvec",
615
+ "syn 1.0.109",
616
+]
617
+
618
+[[package]]
619
+name = "cssparser-macros"
620
+version = "0.6.1"
621
+source = "registry+https://github.com/rust-lang/crates.io-index"
622
+checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
623
+dependencies = [
624
+ "quote",
625
+ "syn 2.0.106",
626
+]
627
+
628
+[[package]]
629
+name = "ctor"
630
+version = "0.2.9"
631
+source = "registry+https://github.com/rust-lang/crates.io-index"
632
+checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
633
+dependencies = [
634
+ "quote",
635
+ "syn 2.0.106",
636
+]
637
+
638
+[[package]]
639
+name = "darling"
640
+version = "0.21.3"
641
+source = "registry+https://github.com/rust-lang/crates.io-index"
642
+checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
643
+dependencies = [
644
+ "darling_core",
645
+ "darling_macro",
646
+]
647
+
648
+[[package]]
649
+name = "darling_core"
650
+version = "0.21.3"
651
+source = "registry+https://github.com/rust-lang/crates.io-index"
652
+checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
653
+dependencies = [
654
+ "fnv",
655
+ "ident_case",
656
+ "proc-macro2",
657
+ "quote",
658
+ "strsim",
659
+ "syn 2.0.106",
660
+]
661
+
662
+[[package]]
663
+name = "darling_macro"
664
+version = "0.21.3"
665
+source = "registry+https://github.com/rust-lang/crates.io-index"
666
+checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
667
+dependencies = [
668
+ "darling_core",
669
+ "quote",
670
+ "syn 2.0.106",
671
+]
672
+
673
+[[package]]
674
+name = "deranged"
675
+version = "0.5.4"
676
+source = "registry+https://github.com/rust-lang/crates.io-index"
677
+checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071"
678
+dependencies = [
679
+ "powerfmt",
680
+ "serde_core",
681
+]
682
+
683
+[[package]]
684
+name = "derive_more"
685
+version = "0.99.20"
686
+source = "registry+https://github.com/rust-lang/crates.io-index"
687
+checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
688
+dependencies = [
689
+ "convert_case",
690
+ "proc-macro2",
691
+ "quote",
692
+ "rustc_version",
693
+ "syn 2.0.106",
694
+]
695
+
696
+[[package]]
697
+name = "digest"
698
+version = "0.10.7"
699
+source = "registry+https://github.com/rust-lang/crates.io-index"
700
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
701
+dependencies = [
702
+ "block-buffer",
703
+ "crypto-common",
704
+]
705
+
706
+[[package]]
707
+name = "dirs"
708
+version = "6.0.0"
709
+source = "registry+https://github.com/rust-lang/crates.io-index"
710
+checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
711
+dependencies = [
712
+ "dirs-sys",
713
+]
714
+
715
+[[package]]
716
+name = "dirs-sys"
717
+version = "0.5.0"
718
+source = "registry+https://github.com/rust-lang/crates.io-index"
719
+checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
720
+dependencies = [
721
+ "libc",
722
+ "option-ext",
723
+ "redox_users",
724
+ "windows-sys 0.61.2",
725
+]
726
+
727
+[[package]]
728
+name = "dispatch"
729
+version = "0.2.0"
730
+source = "registry+https://github.com/rust-lang/crates.io-index"
731
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
732
+
733
+[[package]]
734
+name = "dispatch2"
735
+version = "0.3.0"
736
+source = "registry+https://github.com/rust-lang/crates.io-index"
737
+checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
738
+dependencies = [
739
+ "bitflags 2.9.4",
740
+ "objc2 0.6.3",
741
+]
742
+
743
+[[package]]
744
+name = "displaydoc"
745
+version = "0.2.5"
746
+source = "registry+https://github.com/rust-lang/crates.io-index"
747
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
748
+dependencies = [
749
+ "proc-macro2",
750
+ "quote",
751
+ "syn 2.0.106",
752
+]
753
+
754
+[[package]]
755
+name = "dlopen2"
756
+version = "0.8.0"
757
+source = "registry+https://github.com/rust-lang/crates.io-index"
758
+checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff"
759
+dependencies = [
760
+ "dlopen2_derive",
761
+ "libc",
762
+ "once_cell",
763
+ "winapi",
764
+]
765
+
766
+[[package]]
767
+name = "dlopen2_derive"
768
+version = "0.4.1"
769
+source = "registry+https://github.com/rust-lang/crates.io-index"
770
+checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4"
771
+dependencies = [
772
+ "proc-macro2",
773
+ "quote",
774
+ "syn 2.0.106",
775
+]
776
+
777
+[[package]]
778
+name = "dpi"
779
+version = "0.1.2"
780
+source = "registry+https://github.com/rust-lang/crates.io-index"
781
+checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
782
+dependencies = [
783
+ "serde",
784
+]
785
+
786
+[[package]]
787
+name = "dtoa"
788
+version = "1.0.10"
789
+source = "registry+https://github.com/rust-lang/crates.io-index"
790
+checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
791
+
792
+[[package]]
793
+name = "dtoa-short"
794
+version = "0.3.5"
795
+source = "registry+https://github.com/rust-lang/crates.io-index"
796
+checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
797
+dependencies = [
798
+ "dtoa",
799
+]
800
+
801
+[[package]]
802
+name = "dunce"
803
+version = "1.0.5"
804
+source = "registry+https://github.com/rust-lang/crates.io-index"
805
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
806
+
807
+[[package]]
808
+name = "dyn-clone"
809
+version = "1.0.20"
810
+source = "registry+https://github.com/rust-lang/crates.io-index"
811
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
812
+
813
+[[package]]
814
+name = "embed-resource"
815
+version = "3.0.6"
816
+source = "registry+https://github.com/rust-lang/crates.io-index"
817
+checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e"
818
+dependencies = [
819
+ "cc",
820
+ "memchr",
821
+ "rustc_version",
822
+ "toml 0.9.7",
823
+ "vswhom",
824
+ "winreg",
825
+]
826
+
827
+[[package]]
828
+name = "embed_plist"
829
+version = "1.2.2"
830
+source = "registry+https://github.com/rust-lang/crates.io-index"
831
+checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
832
+
833
+[[package]]
834
+name = "endi"
835
+version = "1.1.0"
836
+source = "registry+https://github.com/rust-lang/crates.io-index"
837
+checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
838
+
839
+[[package]]
840
+name = "enumflags2"
841
+version = "0.7.12"
842
+source = "registry+https://github.com/rust-lang/crates.io-index"
843
+checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
844
+dependencies = [
845
+ "enumflags2_derive",
846
+ "serde",
847
+]
848
+
849
+[[package]]
850
+name = "enumflags2_derive"
851
+version = "0.7.12"
852
+source = "registry+https://github.com/rust-lang/crates.io-index"
853
+checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
854
+dependencies = [
855
+ "proc-macro2",
856
+ "quote",
857
+ "syn 2.0.106",
858
+]
859
+
860
+[[package]]
861
+name = "equivalent"
862
+version = "1.0.2"
863
+source = "registry+https://github.com/rust-lang/crates.io-index"
864
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
865
+
866
+[[package]]
867
+name = "erased-serde"
868
+version = "0.4.8"
869
+source = "registry+https://github.com/rust-lang/crates.io-index"
870
+checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b"
871
+dependencies = [
872
+ "serde",
873
+ "serde_core",
874
+ "typeid",
875
+]
876
+
877
+[[package]]
878
+name = "errno"
879
+version = "0.3.14"
880
+source = "registry+https://github.com/rust-lang/crates.io-index"
881
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
882
+dependencies = [
883
+ "libc",
884
+ "windows-sys 0.61.2",
885
+]
886
+
887
+[[package]]
888
+name = "event-listener"
889
+version = "5.4.1"
890
+source = "registry+https://github.com/rust-lang/crates.io-index"
891
+checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
892
+dependencies = [
893
+ "concurrent-queue",
894
+ "parking",
895
+ "pin-project-lite",
896
+]
897
+
898
+[[package]]
899
+name = "event-listener-strategy"
900
+version = "0.5.4"
901
+source = "registry+https://github.com/rust-lang/crates.io-index"
902
+checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
903
+dependencies = [
904
+ "event-listener",
905
+ "pin-project-lite",
906
+]
907
+
908
+[[package]]
909
+name = "fastrand"
910
+version = "2.3.0"
911
+source = "registry+https://github.com/rust-lang/crates.io-index"
912
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
913
+
914
+[[package]]
915
+name = "fdeflate"
916
+version = "0.3.7"
917
+source = "registry+https://github.com/rust-lang/crates.io-index"
918
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
919
+dependencies = [
920
+ "simd-adler32",
921
+]
922
+
923
+[[package]]
924
+name = "field-offset"
925
+version = "0.3.6"
926
+source = "registry+https://github.com/rust-lang/crates.io-index"
927
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
928
+dependencies = [
929
+ "memoffset",
930
+ "rustc_version",
931
+]
932
+
933
+[[package]]
934
+name = "find-msvc-tools"
935
+version = "0.1.3"
936
+source = "registry+https://github.com/rust-lang/crates.io-index"
937
+checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3"
938
+
939
+[[package]]
940
+name = "flate2"
941
+version = "1.1.4"
942
+source = "registry+https://github.com/rust-lang/crates.io-index"
943
+checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9"
944
+dependencies = [
945
+ "crc32fast",
946
+ "miniz_oxide",
947
+]
948
+
949
+[[package]]
950
+name = "fnv"
951
+version = "1.0.7"
952
+source = "registry+https://github.com/rust-lang/crates.io-index"
953
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
954
+
955
+[[package]]
956
+name = "foreign-types"
957
+version = "0.5.0"
958
+source = "registry+https://github.com/rust-lang/crates.io-index"
959
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
960
+dependencies = [
961
+ "foreign-types-macros",
962
+ "foreign-types-shared",
963
+]
964
+
965
+[[package]]
966
+name = "foreign-types-macros"
967
+version = "0.2.3"
968
+source = "registry+https://github.com/rust-lang/crates.io-index"
969
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
970
+dependencies = [
971
+ "proc-macro2",
972
+ "quote",
973
+ "syn 2.0.106",
974
+]
975
+
976
+[[package]]
977
+name = "foreign-types-shared"
978
+version = "0.3.1"
979
+source = "registry+https://github.com/rust-lang/crates.io-index"
980
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
981
+
982
+[[package]]
983
+name = "form_urlencoded"
984
+version = "1.2.2"
985
+source = "registry+https://github.com/rust-lang/crates.io-index"
986
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
987
+dependencies = [
988
+ "percent-encoding",
989
+]
990
+
991
+[[package]]
992
+name = "futf"
993
+version = "0.1.5"
994
+source = "registry+https://github.com/rust-lang/crates.io-index"
995
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
996
+dependencies = [
997
+ "mac",
998
+ "new_debug_unreachable",
999
+]
1000
+
1001
+[[package]]
1002
+name = "futures-channel"
1003
+version = "0.3.31"
1004
+source = "registry+https://github.com/rust-lang/crates.io-index"
1005
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
1006
+dependencies = [
1007
+ "futures-core",
1008
+]
1009
+
1010
+[[package]]
1011
+name = "futures-core"
1012
+version = "0.3.31"
1013
+source = "registry+https://github.com/rust-lang/crates.io-index"
1014
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
1015
+
1016
+[[package]]
1017
+name = "futures-executor"
1018
+version = "0.3.31"
1019
+source = "registry+https://github.com/rust-lang/crates.io-index"
1020
+checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
1021
+dependencies = [
1022
+ "futures-core",
1023
+ "futures-task",
1024
+ "futures-util",
1025
+]
1026
+
1027
+[[package]]
1028
+name = "futures-io"
1029
+version = "0.3.31"
1030
+source = "registry+https://github.com/rust-lang/crates.io-index"
1031
+checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
1032
+
1033
+[[package]]
1034
+name = "futures-lite"
1035
+version = "2.6.1"
1036
+source = "registry+https://github.com/rust-lang/crates.io-index"
1037
+checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1038
+dependencies = [
1039
+ "fastrand",
1040
+ "futures-core",
1041
+ "futures-io",
1042
+ "parking",
1043
+ "pin-project-lite",
1044
+]
1045
+
1046
+[[package]]
1047
+name = "futures-macro"
1048
+version = "0.3.31"
1049
+source = "registry+https://github.com/rust-lang/crates.io-index"
1050
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
1051
+dependencies = [
1052
+ "proc-macro2",
1053
+ "quote",
1054
+ "syn 2.0.106",
1055
+]
1056
+
1057
+[[package]]
1058
+name = "futures-sink"
1059
+version = "0.3.31"
1060
+source = "registry+https://github.com/rust-lang/crates.io-index"
1061
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
1062
+
1063
+[[package]]
1064
+name = "futures-task"
1065
+version = "0.3.31"
1066
+source = "registry+https://github.com/rust-lang/crates.io-index"
1067
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
1068
+
1069
+[[package]]
1070
+name = "futures-util"
1071
+version = "0.3.31"
1072
+source = "registry+https://github.com/rust-lang/crates.io-index"
1073
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
1074
+dependencies = [
1075
+ "futures-core",
1076
+ "futures-io",
1077
+ "futures-macro",
1078
+ "futures-sink",
1079
+ "futures-task",
1080
+ "memchr",
1081
+ "pin-project-lite",
1082
+ "pin-utils",
1083
+ "slab",
1084
+]
1085
+
1086
+[[package]]
1087
+name = "fxhash"
1088
+version = "0.2.1"
1089
+source = "registry+https://github.com/rust-lang/crates.io-index"
1090
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
1091
+dependencies = [
1092
+ "byteorder",
1093
+]
1094
+
1095
+[[package]]
1096
+name = "gdk"
1097
+version = "0.18.2"
1098
+source = "registry+https://github.com/rust-lang/crates.io-index"
1099
+checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691"
1100
+dependencies = [
1101
+ "cairo-rs",
1102
+ "gdk-pixbuf",
1103
+ "gdk-sys",
1104
+ "gio",
1105
+ "glib",
1106
+ "libc",
1107
+ "pango",
1108
+]
1109
+
1110
+[[package]]
1111
+name = "gdk-pixbuf"
1112
+version = "0.18.5"
1113
+source = "registry+https://github.com/rust-lang/crates.io-index"
1114
+checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec"
1115
+dependencies = [
1116
+ "gdk-pixbuf-sys",
1117
+ "gio",
1118
+ "glib",
1119
+ "libc",
1120
+ "once_cell",
1121
+]
1122
+
1123
+[[package]]
1124
+name = "gdk-pixbuf-sys"
1125
+version = "0.18.0"
1126
+source = "registry+https://github.com/rust-lang/crates.io-index"
1127
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
1128
+dependencies = [
1129
+ "gio-sys",
1130
+ "glib-sys",
1131
+ "gobject-sys",
1132
+ "libc",
1133
+ "system-deps",
1134
+]
1135
+
1136
+[[package]]
1137
+name = "gdk-sys"
1138
+version = "0.18.2"
1139
+source = "registry+https://github.com/rust-lang/crates.io-index"
1140
+checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7"
1141
+dependencies = [
1142
+ "cairo-sys-rs",
1143
+ "gdk-pixbuf-sys",
1144
+ "gio-sys",
1145
+ "glib-sys",
1146
+ "gobject-sys",
1147
+ "libc",
1148
+ "pango-sys",
1149
+ "pkg-config",
1150
+ "system-deps",
1151
+]
1152
+
1153
+[[package]]
1154
+name = "gdkwayland-sys"
1155
+version = "0.18.2"
1156
+source = "registry+https://github.com/rust-lang/crates.io-index"
1157
+checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69"
1158
+dependencies = [
1159
+ "gdk-sys",
1160
+ "glib-sys",
1161
+ "gobject-sys",
1162
+ "libc",
1163
+ "pkg-config",
1164
+ "system-deps",
1165
+]
1166
+
1167
+[[package]]
1168
+name = "gdkx11"
1169
+version = "0.18.2"
1170
+source = "registry+https://github.com/rust-lang/crates.io-index"
1171
+checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe"
1172
+dependencies = [
1173
+ "gdk",
1174
+ "gdkx11-sys",
1175
+ "gio",
1176
+ "glib",
1177
+ "libc",
1178
+ "x11",
1179
+]
1180
+
1181
+[[package]]
1182
+name = "gdkx11-sys"
1183
+version = "0.18.2"
1184
+source = "registry+https://github.com/rust-lang/crates.io-index"
1185
+checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d"
1186
+dependencies = [
1187
+ "gdk-sys",
1188
+ "glib-sys",
1189
+ "libc",
1190
+ "system-deps",
1191
+ "x11",
1192
+]
1193
+
1194
+[[package]]
1195
+name = "generic-array"
1196
+version = "0.14.7"
1197
+source = "registry+https://github.com/rust-lang/crates.io-index"
1198
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1199
+dependencies = [
1200
+ "typenum",
1201
+ "version_check",
1202
+]
1203
+
1204
+[[package]]
1205
+name = "getrandom"
1206
+version = "0.1.16"
1207
+source = "registry+https://github.com/rust-lang/crates.io-index"
1208
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
1209
+dependencies = [
1210
+ "cfg-if",
1211
+ "libc",
1212
+ "wasi 0.9.0+wasi-snapshot-preview1",
1213
+]
1214
+
1215
+[[package]]
1216
+name = "getrandom"
1217
+version = "0.2.16"
1218
+source = "registry+https://github.com/rust-lang/crates.io-index"
1219
+checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
1220
+dependencies = [
1221
+ "cfg-if",
1222
+ "libc",
1223
+ "wasi 0.11.1+wasi-snapshot-preview1",
1224
+]
1225
+
1226
+[[package]]
1227
+name = "getrandom"
1228
+version = "0.3.3"
1229
+source = "registry+https://github.com/rust-lang/crates.io-index"
1230
+checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1231
+dependencies = [
1232
+ "cfg-if",
1233
+ "libc",
1234
+ "r-efi",
1235
+ "wasi 0.14.7+wasi-0.2.4",
1236
+]
1237
+
1238
+[[package]]
1239
+name = "gimli"
1240
+version = "0.32.3"
1241
+source = "registry+https://github.com/rust-lang/crates.io-index"
1242
+checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
1243
+
1244
+[[package]]
1245
+name = "gio"
1246
+version = "0.18.4"
1247
+source = "registry+https://github.com/rust-lang/crates.io-index"
1248
+checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
1249
+dependencies = [
1250
+ "futures-channel",
1251
+ "futures-core",
1252
+ "futures-io",
1253
+ "futures-util",
1254
+ "gio-sys",
1255
+ "glib",
1256
+ "libc",
1257
+ "once_cell",
1258
+ "pin-project-lite",
1259
+ "smallvec",
1260
+ "thiserror 1.0.69",
1261
+]
1262
+
1263
+[[package]]
1264
+name = "gio-sys"
1265
+version = "0.18.1"
1266
+source = "registry+https://github.com/rust-lang/crates.io-index"
1267
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
1268
+dependencies = [
1269
+ "glib-sys",
1270
+ "gobject-sys",
1271
+ "libc",
1272
+ "system-deps",
1273
+ "winapi",
1274
+]
1275
+
1276
+[[package]]
1277
+name = "glib"
1278
+version = "0.18.5"
1279
+source = "registry+https://github.com/rust-lang/crates.io-index"
1280
+checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1281
+dependencies = [
1282
+ "bitflags 2.9.4",
1283
+ "futures-channel",
1284
+ "futures-core",
1285
+ "futures-executor",
1286
+ "futures-task",
1287
+ "futures-util",
1288
+ "gio-sys",
1289
+ "glib-macros",
1290
+ "glib-sys",
1291
+ "gobject-sys",
1292
+ "libc",
1293
+ "memchr",
1294
+ "once_cell",
1295
+ "smallvec",
1296
+ "thiserror 1.0.69",
1297
+]
1298
+
1299
+[[package]]
1300
+name = "glib-macros"
1301
+version = "0.18.5"
1302
+source = "registry+https://github.com/rust-lang/crates.io-index"
1303
+checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
1304
+dependencies = [
1305
+ "heck 0.4.1",
1306
+ "proc-macro-crate 2.0.2",
1307
+ "proc-macro-error",
1308
+ "proc-macro2",
1309
+ "quote",
1310
+ "syn 2.0.106",
1311
+]
1312
+
1313
+[[package]]
1314
+name = "glib-sys"
1315
+version = "0.18.1"
1316
+source = "registry+https://github.com/rust-lang/crates.io-index"
1317
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
1318
+dependencies = [
1319
+ "libc",
1320
+ "system-deps",
1321
+]
1322
+
1323
+[[package]]
1324
+name = "glob"
1325
+version = "0.3.3"
1326
+source = "registry+https://github.com/rust-lang/crates.io-index"
1327
+checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
1328
+
1329
+[[package]]
1330
+name = "gobject-sys"
1331
+version = "0.18.0"
1332
+source = "registry+https://github.com/rust-lang/crates.io-index"
1333
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
1334
+dependencies = [
1335
+ "glib-sys",
1336
+ "libc",
1337
+ "system-deps",
1338
+]
1339
+
1340
+[[package]]
1341
+name = "gtk"
1342
+version = "0.18.2"
1343
+source = "registry+https://github.com/rust-lang/crates.io-index"
1344
+checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a"
1345
+dependencies = [
1346
+ "atk",
1347
+ "cairo-rs",
1348
+ "field-offset",
1349
+ "futures-channel",
1350
+ "gdk",
1351
+ "gdk-pixbuf",
1352
+ "gio",
1353
+ "glib",
1354
+ "gtk-sys",
1355
+ "gtk3-macros",
1356
+ "libc",
1357
+ "pango",
1358
+ "pkg-config",
1359
+]
1360
+
1361
+[[package]]
1362
+name = "gtk-sys"
1363
+version = "0.18.2"
1364
+source = "registry+https://github.com/rust-lang/crates.io-index"
1365
+checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414"
1366
+dependencies = [
1367
+ "atk-sys",
1368
+ "cairo-sys-rs",
1369
+ "gdk-pixbuf-sys",
1370
+ "gdk-sys",
1371
+ "gio-sys",
1372
+ "glib-sys",
1373
+ "gobject-sys",
1374
+ "libc",
1375
+ "pango-sys",
1376
+ "system-deps",
1377
+]
1378
+
1379
+[[package]]
1380
+name = "gtk3-macros"
1381
+version = "0.18.2"
1382
+source = "registry+https://github.com/rust-lang/crates.io-index"
1383
+checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d"
1384
+dependencies = [
1385
+ "proc-macro-crate 1.3.1",
1386
+ "proc-macro-error",
1387
+ "proc-macro2",
1388
+ "quote",
1389
+ "syn 2.0.106",
1390
+]
1391
+
1392
+[[package]]
1393
+name = "hashbrown"
1394
+version = "0.12.3"
1395
+source = "registry+https://github.com/rust-lang/crates.io-index"
1396
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
1397
+
1398
+[[package]]
1399
+name = "hashbrown"
1400
+version = "0.16.0"
1401
+source = "registry+https://github.com/rust-lang/crates.io-index"
1402
+checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1403
+
1404
+[[package]]
1405
+name = "heck"
1406
+version = "0.4.1"
1407
+source = "registry+https://github.com/rust-lang/crates.io-index"
1408
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
1409
+
1410
+[[package]]
1411
+name = "heck"
1412
+version = "0.5.0"
1413
+source = "registry+https://github.com/rust-lang/crates.io-index"
1414
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1415
+
1416
+[[package]]
1417
+name = "hermit-abi"
1418
+version = "0.5.2"
1419
+source = "registry+https://github.com/rust-lang/crates.io-index"
1420
+checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
1421
+
1422
+[[package]]
1423
+name = "hex"
1424
+version = "0.4.3"
1425
+source = "registry+https://github.com/rust-lang/crates.io-index"
1426
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1427
+
1428
+[[package]]
1429
+name = "html5ever"
1430
+version = "0.29.1"
1431
+source = "registry+https://github.com/rust-lang/crates.io-index"
1432
+checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c"
1433
+dependencies = [
1434
+ "log",
1435
+ "mac",
1436
+ "markup5ever",
1437
+ "match_token",
1438
+]
1439
+
1440
+[[package]]
1441
+name = "http"
1442
+version = "1.3.1"
1443
+source = "registry+https://github.com/rust-lang/crates.io-index"
1444
+checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
1445
+dependencies = [
1446
+ "bytes",
1447
+ "fnv",
1448
+ "itoa",
1449
+]
1450
+
1451
+[[package]]
1452
+name = "http-body"
1453
+version = "1.0.1"
1454
+source = "registry+https://github.com/rust-lang/crates.io-index"
1455
+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
1456
+dependencies = [
1457
+ "bytes",
1458
+ "http",
1459
+]
1460
+
1461
+[[package]]
1462
+name = "http-body-util"
1463
+version = "0.1.3"
1464
+source = "registry+https://github.com/rust-lang/crates.io-index"
1465
+checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
1466
+dependencies = [
1467
+ "bytes",
1468
+ "futures-core",
1469
+ "http",
1470
+ "http-body",
1471
+ "pin-project-lite",
1472
+]
1473
+
1474
+[[package]]
1475
+name = "httparse"
1476
+version = "1.10.1"
1477
+source = "registry+https://github.com/rust-lang/crates.io-index"
1478
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
1479
+
1480
+[[package]]
1481
+name = "hyper"
1482
+version = "1.7.0"
1483
+source = "registry+https://github.com/rust-lang/crates.io-index"
1484
+checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
1485
+dependencies = [
1486
+ "atomic-waker",
1487
+ "bytes",
1488
+ "futures-channel",
1489
+ "futures-core",
1490
+ "http",
1491
+ "http-body",
1492
+ "httparse",
1493
+ "itoa",
1494
+ "pin-project-lite",
1495
+ "pin-utils",
1496
+ "smallvec",
1497
+ "tokio",
1498
+ "want",
1499
+]
1500
+
1501
+[[package]]
1502
+name = "hyper-util"
1503
+version = "0.1.17"
1504
+source = "registry+https://github.com/rust-lang/crates.io-index"
1505
+checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
1506
+dependencies = [
1507
+ "base64 0.22.1",
1508
+ "bytes",
1509
+ "futures-channel",
1510
+ "futures-core",
1511
+ "futures-util",
1512
+ "http",
1513
+ "http-body",
1514
+ "hyper",
1515
+ "ipnet",
1516
+ "libc",
1517
+ "percent-encoding",
1518
+ "pin-project-lite",
1519
+ "socket2",
1520
+ "tokio",
1521
+ "tower-service",
1522
+ "tracing",
1523
+]
1524
+
1525
+[[package]]
1526
+name = "iana-time-zone"
1527
+version = "0.1.64"
1528
+source = "registry+https://github.com/rust-lang/crates.io-index"
1529
+checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1530
+dependencies = [
1531
+ "android_system_properties",
1532
+ "core-foundation-sys",
1533
+ "iana-time-zone-haiku",
1534
+ "js-sys",
1535
+ "log",
1536
+ "wasm-bindgen",
1537
+ "windows-core 0.62.2",
1538
+]
1539
+
1540
+[[package]]
1541
+name = "iana-time-zone-haiku"
1542
+version = "0.1.2"
1543
+source = "registry+https://github.com/rust-lang/crates.io-index"
1544
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
1545
+dependencies = [
1546
+ "cc",
1547
+]
1548
+
1549
+[[package]]
1550
+name = "ico"
1551
+version = "0.4.0"
1552
+source = "registry+https://github.com/rust-lang/crates.io-index"
1553
+checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
1554
+dependencies = [
1555
+ "byteorder",
1556
+ "png",
1557
+]
1558
+
1559
+[[package]]
1560
+name = "icu_collections"
1561
+version = "2.0.0"
1562
+source = "registry+https://github.com/rust-lang/crates.io-index"
1563
+checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1564
+dependencies = [
1565
+ "displaydoc",
1566
+ "potential_utf",
1567
+ "yoke",
1568
+ "zerofrom",
1569
+ "zerovec",
1570
+]
1571
+
1572
+[[package]]
1573
+name = "icu_locale_core"
1574
+version = "2.0.0"
1575
+source = "registry+https://github.com/rust-lang/crates.io-index"
1576
+checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1577
+dependencies = [
1578
+ "displaydoc",
1579
+ "litemap",
1580
+ "tinystr",
1581
+ "writeable",
1582
+ "zerovec",
1583
+]
1584
+
1585
+[[package]]
1586
+name = "icu_normalizer"
1587
+version = "2.0.0"
1588
+source = "registry+https://github.com/rust-lang/crates.io-index"
1589
+checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1590
+dependencies = [
1591
+ "displaydoc",
1592
+ "icu_collections",
1593
+ "icu_normalizer_data",
1594
+ "icu_properties",
1595
+ "icu_provider",
1596
+ "smallvec",
1597
+ "zerovec",
1598
+]
1599
+
1600
+[[package]]
1601
+name = "icu_normalizer_data"
1602
+version = "2.0.0"
1603
+source = "registry+https://github.com/rust-lang/crates.io-index"
1604
+checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1605
+
1606
+[[package]]
1607
+name = "icu_properties"
1608
+version = "2.0.1"
1609
+source = "registry+https://github.com/rust-lang/crates.io-index"
1610
+checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1611
+dependencies = [
1612
+ "displaydoc",
1613
+ "icu_collections",
1614
+ "icu_locale_core",
1615
+ "icu_properties_data",
1616
+ "icu_provider",
1617
+ "potential_utf",
1618
+ "zerotrie",
1619
+ "zerovec",
1620
+]
1621
+
1622
+[[package]]
1623
+name = "icu_properties_data"
1624
+version = "2.0.1"
1625
+source = "registry+https://github.com/rust-lang/crates.io-index"
1626
+checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1627
+
1628
+[[package]]
1629
+name = "icu_provider"
1630
+version = "2.0.0"
1631
+source = "registry+https://github.com/rust-lang/crates.io-index"
1632
+checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1633
+dependencies = [
1634
+ "displaydoc",
1635
+ "icu_locale_core",
1636
+ "stable_deref_trait",
1637
+ "tinystr",
1638
+ "writeable",
1639
+ "yoke",
1640
+ "zerofrom",
1641
+ "zerotrie",
1642
+ "zerovec",
1643
+]
1644
+
1645
+[[package]]
1646
+name = "ident_case"
1647
+version = "1.0.1"
1648
+source = "registry+https://github.com/rust-lang/crates.io-index"
1649
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
1650
+
1651
+[[package]]
1652
+name = "idna"
1653
+version = "1.1.0"
1654
+source = "registry+https://github.com/rust-lang/crates.io-index"
1655
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1656
+dependencies = [
1657
+ "idna_adapter",
1658
+ "smallvec",
1659
+ "utf8_iter",
1660
+]
1661
+
1662
+[[package]]
1663
+name = "idna_adapter"
1664
+version = "1.2.1"
1665
+source = "registry+https://github.com/rust-lang/crates.io-index"
1666
+checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
1667
+dependencies = [
1668
+ "icu_normalizer",
1669
+ "icu_properties",
1670
+]
1671
+
1672
+[[package]]
1673
+name = "indexmap"
1674
+version = "1.9.3"
1675
+source = "registry+https://github.com/rust-lang/crates.io-index"
1676
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
1677
+dependencies = [
1678
+ "autocfg",
1679
+ "hashbrown 0.12.3",
1680
+ "serde",
1681
+]
1682
+
1683
+[[package]]
1684
+name = "indexmap"
1685
+version = "2.11.4"
1686
+source = "registry+https://github.com/rust-lang/crates.io-index"
1687
+checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
1688
+dependencies = [
1689
+ "equivalent",
1690
+ "hashbrown 0.16.0",
1691
+ "serde",
1692
+ "serde_core",
1693
+]
1694
+
1695
+[[package]]
1696
+name = "infer"
1697
+version = "0.19.0"
1698
+source = "registry+https://github.com/rust-lang/crates.io-index"
1699
+checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7"
1700
+dependencies = [
1701
+ "cfb",
1702
+]
1703
+
1704
+[[package]]
1705
+name = "io-uring"
1706
+version = "0.7.10"
1707
+source = "registry+https://github.com/rust-lang/crates.io-index"
1708
+checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
1709
+dependencies = [
1710
+ "bitflags 2.9.4",
1711
+ "cfg-if",
1712
+ "libc",
1713
+]
1714
+
1715
+[[package]]
1716
+name = "ipnet"
1717
+version = "2.11.0"
1718
+source = "registry+https://github.com/rust-lang/crates.io-index"
1719
+checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
1720
+
1721
+[[package]]
1722
+name = "iri-string"
1723
+version = "0.7.8"
1724
+source = "registry+https://github.com/rust-lang/crates.io-index"
1725
+checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1726
+dependencies = [
1727
+ "memchr",
1728
+ "serde",
1729
+]
1730
+
1731
+[[package]]
1732
+name = "is-docker"
1733
+version = "0.2.0"
1734
+source = "registry+https://github.com/rust-lang/crates.io-index"
1735
+checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3"
1736
+dependencies = [
1737
+ "once_cell",
1738
+]
1739
+
1740
+[[package]]
1741
+name = "is-wsl"
1742
+version = "0.4.0"
1743
+source = "registry+https://github.com/rust-lang/crates.io-index"
1744
+checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5"
1745
+dependencies = [
1746
+ "is-docker",
1747
+ "once_cell",
1748
+]
1749
+
1750
+[[package]]
1751
+name = "itoa"
1752
+version = "1.0.15"
1753
+source = "registry+https://github.com/rust-lang/crates.io-index"
1754
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1755
+
1756
+[[package]]
1757
+name = "javascriptcore-rs"
1758
+version = "1.1.2"
1759
+source = "registry+https://github.com/rust-lang/crates.io-index"
1760
+checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc"
1761
+dependencies = [
1762
+ "bitflags 1.3.2",
1763
+ "glib",
1764
+ "javascriptcore-rs-sys",
1765
+]
1766
+
1767
+[[package]]
1768
+name = "javascriptcore-rs-sys"
1769
+version = "1.1.1"
1770
+source = "registry+https://github.com/rust-lang/crates.io-index"
1771
+checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124"
1772
+dependencies = [
1773
+ "glib-sys",
1774
+ "gobject-sys",
1775
+ "libc",
1776
+ "system-deps",
1777
+]
1778
+
1779
+[[package]]
1780
+name = "jni"
1781
+version = "0.21.1"
1782
+source = "registry+https://github.com/rust-lang/crates.io-index"
1783
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
1784
+dependencies = [
1785
+ "cesu8",
1786
+ "cfg-if",
1787
+ "combine",
1788
+ "jni-sys",
1789
+ "log",
1790
+ "thiserror 1.0.69",
1791
+ "walkdir",
1792
+ "windows-sys 0.45.0",
1793
+]
1794
+
1795
+[[package]]
1796
+name = "jni-sys"
1797
+version = "0.3.0"
1798
+source = "registry+https://github.com/rust-lang/crates.io-index"
1799
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
1800
+
1801
+[[package]]
1802
+name = "js-sys"
1803
+version = "0.3.81"
1804
+source = "registry+https://github.com/rust-lang/crates.io-index"
1805
+checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
1806
+dependencies = [
1807
+ "once_cell",
1808
+ "wasm-bindgen",
1809
+]
1810
+
1811
+[[package]]
1812
+name = "json-patch"
1813
+version = "3.0.1"
1814
+source = "registry+https://github.com/rust-lang/crates.io-index"
1815
+checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08"
1816
+dependencies = [
1817
+ "jsonptr",
1818
+ "serde",
1819
+ "serde_json",
1820
+ "thiserror 1.0.69",
1821
+]
1822
+
1823
+[[package]]
1824
+name = "jsonptr"
1825
+version = "0.6.3"
1826
+source = "registry+https://github.com/rust-lang/crates.io-index"
1827
+checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70"
1828
+dependencies = [
1829
+ "serde",
1830
+ "serde_json",
1831
+]
1832
+
1833
+[[package]]
1834
+name = "keyboard-types"
1835
+version = "0.7.0"
1836
+source = "registry+https://github.com/rust-lang/crates.io-index"
1837
+checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
1838
+dependencies = [
1839
+ "bitflags 2.9.4",
1840
+ "serde",
1841
+ "unicode-segmentation",
1842
+]
1843
+
1844
+[[package]]
1845
+name = "kuchikiki"
1846
+version = "0.8.8-speedreader"
1847
+source = "registry+https://github.com/rust-lang/crates.io-index"
1848
+checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2"
1849
+dependencies = [
1850
+ "cssparser",
1851
+ "html5ever",
1852
+ "indexmap 2.11.4",
1853
+ "selectors",
1854
+]
1855
+
1856
+[[package]]
1857
+name = "lazy_static"
1858
+version = "1.5.0"
1859
+source = "registry+https://github.com/rust-lang/crates.io-index"
1860
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
1861
+
1862
+[[package]]
1863
+name = "libappindicator"
1864
+version = "0.9.0"
1865
+source = "registry+https://github.com/rust-lang/crates.io-index"
1866
+checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a"
1867
+dependencies = [
1868
+ "glib",
1869
+ "gtk",
1870
+ "gtk-sys",
1871
+ "libappindicator-sys",
1872
+ "log",
1873
+]
1874
+
1875
+[[package]]
1876
+name = "libappindicator-sys"
1877
+version = "0.9.0"
1878
+source = "registry+https://github.com/rust-lang/crates.io-index"
1879
+checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
1880
+dependencies = [
1881
+ "gtk-sys",
1882
+ "libloading",
1883
+ "once_cell",
1884
+]
1885
+
1886
+[[package]]
1887
+name = "libc"
1888
+version = "0.2.177"
1889
+source = "registry+https://github.com/rust-lang/crates.io-index"
1890
+checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
1891
+
1892
+[[package]]
1893
+name = "libloading"
1894
+version = "0.7.4"
1895
+source = "registry+https://github.com/rust-lang/crates.io-index"
1896
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
1897
+dependencies = [
1898
+ "cfg-if",
1899
+ "winapi",
1900
+]
1901
+
1902
+[[package]]
1903
+name = "libredox"
1904
+version = "0.1.10"
1905
+source = "registry+https://github.com/rust-lang/crates.io-index"
1906
+checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1907
+dependencies = [
1908
+ "bitflags 2.9.4",
1909
+ "libc",
1910
+]
1911
+
1912
+[[package]]
1913
+name = "linux-raw-sys"
1914
+version = "0.11.0"
1915
+source = "registry+https://github.com/rust-lang/crates.io-index"
1916
+checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1917
+
1918
+[[package]]
1919
+name = "litemap"
1920
+version = "0.8.0"
1921
+source = "registry+https://github.com/rust-lang/crates.io-index"
1922
+checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1923
+
1924
+[[package]]
1925
+name = "lock_api"
1926
+version = "0.4.14"
1927
+source = "registry+https://github.com/rust-lang/crates.io-index"
1928
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1929
+dependencies = [
1930
+ "scopeguard",
1931
+]
1932
+
1933
+[[package]]
1934
+name = "log"
1935
+version = "0.4.28"
1936
+source = "registry+https://github.com/rust-lang/crates.io-index"
1937
+checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1938
+
1939
+[[package]]
1940
+name = "mac"
1941
+version = "0.1.1"
1942
+source = "registry+https://github.com/rust-lang/crates.io-index"
1943
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
1944
+
1945
+[[package]]
1946
+name = "markup5ever"
1947
+version = "0.14.1"
1948
+source = "registry+https://github.com/rust-lang/crates.io-index"
1949
+checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18"
1950
+dependencies = [
1951
+ "log",
1952
+ "phf 0.11.3",
1953
+ "phf_codegen 0.11.3",
1954
+ "string_cache",
1955
+ "string_cache_codegen",
1956
+ "tendril",
1957
+]
1958
+
1959
+[[package]]
1960
+name = "match_token"
1961
+version = "0.1.0"
1962
+source = "registry+https://github.com/rust-lang/crates.io-index"
1963
+checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b"
1964
+dependencies = [
1965
+ "proc-macro2",
1966
+ "quote",
1967
+ "syn 2.0.106",
1968
+]
1969
+
1970
+[[package]]
1971
+name = "matches"
1972
+version = "0.1.10"
1973
+source = "registry+https://github.com/rust-lang/crates.io-index"
1974
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
1975
+
1976
+[[package]]
1977
+name = "memchr"
1978
+version = "2.7.6"
1979
+source = "registry+https://github.com/rust-lang/crates.io-index"
1980
+checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
1981
+
1982
+[[package]]
1983
+name = "memoffset"
1984
+version = "0.9.1"
1985
+source = "registry+https://github.com/rust-lang/crates.io-index"
1986
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1987
+dependencies = [
1988
+ "autocfg",
1989
+]
1990
+
1991
+[[package]]
1992
+name = "mime"
1993
+version = "0.3.17"
1994
+source = "registry+https://github.com/rust-lang/crates.io-index"
1995
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
1996
+
1997
+[[package]]
1998
+name = "miniz_oxide"
1999
+version = "0.8.9"
2000
+source = "registry+https://github.com/rust-lang/crates.io-index"
2001
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
2002
+dependencies = [
2003
+ "adler2",
2004
+ "simd-adler32",
2005
+]
2006
+
2007
+[[package]]
2008
+name = "mio"
2009
+version = "1.0.4"
2010
+source = "registry+https://github.com/rust-lang/crates.io-index"
2011
+checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2012
+dependencies = [
2013
+ "libc",
2014
+ "wasi 0.11.1+wasi-snapshot-preview1",
2015
+ "windows-sys 0.59.0",
2016
+]
2017
+
2018
+[[package]]
2019
+name = "muda"
2020
+version = "0.17.1"
2021
+source = "registry+https://github.com/rust-lang/crates.io-index"
2022
+checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a"
2023
+dependencies = [
2024
+ "crossbeam-channel",
2025
+ "dpi",
2026
+ "gtk",
2027
+ "keyboard-types",
2028
+ "objc2 0.6.3",
2029
+ "objc2-app-kit",
2030
+ "objc2-core-foundation",
2031
+ "objc2-foundation 0.3.2",
2032
+ "once_cell",
2033
+ "png",
2034
+ "serde",
2035
+ "thiserror 2.0.17",
2036
+ "windows-sys 0.60.2",
2037
+]
2038
+
2039
+[[package]]
2040
+name = "ndk"
2041
+version = "0.9.0"
2042
+source = "registry+https://github.com/rust-lang/crates.io-index"
2043
+checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2044
+dependencies = [
2045
+ "bitflags 2.9.4",
2046
+ "jni-sys",
2047
+ "log",
2048
+ "ndk-sys",
2049
+ "num_enum",
2050
+ "raw-window-handle",
2051
+ "thiserror 1.0.69",
2052
+]
2053
+
2054
+[[package]]
2055
+name = "ndk-context"
2056
+version = "0.1.1"
2057
+source = "registry+https://github.com/rust-lang/crates.io-index"
2058
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
2059
+
2060
+[[package]]
2061
+name = "ndk-sys"
2062
+version = "0.6.0+11769913"
2063
+source = "registry+https://github.com/rust-lang/crates.io-index"
2064
+checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
2065
+dependencies = [
2066
+ "jni-sys",
2067
+]
2068
+
2069
+[[package]]
2070
+name = "new_debug_unreachable"
2071
+version = "1.0.6"
2072
+source = "registry+https://github.com/rust-lang/crates.io-index"
2073
+checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
2074
+
2075
+[[package]]
2076
+name = "nix"
2077
+version = "0.30.1"
2078
+source = "registry+https://github.com/rust-lang/crates.io-index"
2079
+checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2080
+dependencies = [
2081
+ "bitflags 2.9.4",
2082
+ "cfg-if",
2083
+ "cfg_aliases",
2084
+ "libc",
2085
+ "memoffset",
2086
+]
2087
+
2088
+[[package]]
2089
+name = "nodrop"
2090
+version = "0.1.14"
2091
+source = "registry+https://github.com/rust-lang/crates.io-index"
2092
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
2093
+
2094
+[[package]]
2095
+name = "num-conv"
2096
+version = "0.1.0"
2097
+source = "registry+https://github.com/rust-lang/crates.io-index"
2098
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
2099
+
2100
+[[package]]
2101
+name = "num-traits"
2102
+version = "0.2.19"
2103
+source = "registry+https://github.com/rust-lang/crates.io-index"
2104
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
2105
+dependencies = [
2106
+ "autocfg",
2107
+]
2108
+
2109
+[[package]]
2110
+name = "num_enum"
2111
+version = "0.7.4"
2112
+source = "registry+https://github.com/rust-lang/crates.io-index"
2113
+checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
2114
+dependencies = [
2115
+ "num_enum_derive",
2116
+ "rustversion",
2117
+]
2118
+
2119
+[[package]]
2120
+name = "num_enum_derive"
2121
+version = "0.7.4"
2122
+source = "registry+https://github.com/rust-lang/crates.io-index"
2123
+checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
2124
+dependencies = [
2125
+ "proc-macro-crate 3.4.0",
2126
+ "proc-macro2",
2127
+ "quote",
2128
+ "syn 2.0.106",
2129
+]
2130
+
2131
+[[package]]
2132
+name = "objc-sys"
2133
+version = "0.3.5"
2134
+source = "registry+https://github.com/rust-lang/crates.io-index"
2135
+checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
2136
+
2137
+[[package]]
2138
+name = "objc2"
2139
+version = "0.5.2"
2140
+source = "registry+https://github.com/rust-lang/crates.io-index"
2141
+checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
2142
+dependencies = [
2143
+ "objc-sys",
2144
+ "objc2-encode",
2145
+]
2146
+
2147
+[[package]]
2148
+name = "objc2"
2149
+version = "0.6.3"
2150
+source = "registry+https://github.com/rust-lang/crates.io-index"
2151
+checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
2152
+dependencies = [
2153
+ "objc2-encode",
2154
+ "objc2-exception-helper",
2155
+]
2156
+
2157
+[[package]]
2158
+name = "objc2-app-kit"
2159
+version = "0.3.2"
2160
+source = "registry+https://github.com/rust-lang/crates.io-index"
2161
+checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
2162
+dependencies = [
2163
+ "bitflags 2.9.4",
2164
+ "block2 0.6.2",
2165
+ "libc",
2166
+ "objc2 0.6.3",
2167
+ "objc2-cloud-kit",
2168
+ "objc2-core-data",
2169
+ "objc2-core-foundation",
2170
+ "objc2-core-graphics",
2171
+ "objc2-core-image",
2172
+ "objc2-core-text",
2173
+ "objc2-core-video",
2174
+ "objc2-foundation 0.3.2",
2175
+ "objc2-quartz-core 0.3.2",
2176
+]
2177
+
2178
+[[package]]
2179
+name = "objc2-cloud-kit"
2180
+version = "0.3.2"
2181
+source = "registry+https://github.com/rust-lang/crates.io-index"
2182
+checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
2183
+dependencies = [
2184
+ "bitflags 2.9.4",
2185
+ "objc2 0.6.3",
2186
+ "objc2-foundation 0.3.2",
2187
+]
2188
+
2189
+[[package]]
2190
+name = "objc2-core-data"
2191
+version = "0.3.2"
2192
+source = "registry+https://github.com/rust-lang/crates.io-index"
2193
+checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
2194
+dependencies = [
2195
+ "bitflags 2.9.4",
2196
+ "objc2 0.6.3",
2197
+ "objc2-foundation 0.3.2",
2198
+]
2199
+
2200
+[[package]]
2201
+name = "objc2-core-foundation"
2202
+version = "0.3.2"
2203
+source = "registry+https://github.com/rust-lang/crates.io-index"
2204
+checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
2205
+dependencies = [
2206
+ "bitflags 2.9.4",
2207
+ "dispatch2",
2208
+ "objc2 0.6.3",
2209
+]
2210
+
2211
+[[package]]
2212
+name = "objc2-core-graphics"
2213
+version = "0.3.2"
2214
+source = "registry+https://github.com/rust-lang/crates.io-index"
2215
+checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
2216
+dependencies = [
2217
+ "bitflags 2.9.4",
2218
+ "dispatch2",
2219
+ "objc2 0.6.3",
2220
+ "objc2-core-foundation",
2221
+ "objc2-io-surface",
2222
+]
2223
+
2224
+[[package]]
2225
+name = "objc2-core-image"
2226
+version = "0.3.2"
2227
+source = "registry+https://github.com/rust-lang/crates.io-index"
2228
+checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006"
2229
+dependencies = [
2230
+ "objc2 0.6.3",
2231
+ "objc2-foundation 0.3.2",
2232
+]
2233
+
2234
+[[package]]
2235
+name = "objc2-core-text"
2236
+version = "0.3.2"
2237
+source = "registry+https://github.com/rust-lang/crates.io-index"
2238
+checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
2239
+dependencies = [
2240
+ "bitflags 2.9.4",
2241
+ "objc2 0.6.3",
2242
+ "objc2-core-foundation",
2243
+ "objc2-core-graphics",
2244
+]
2245
+
2246
+[[package]]
2247
+name = "objc2-core-video"
2248
+version = "0.3.2"
2249
+source = "registry+https://github.com/rust-lang/crates.io-index"
2250
+checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
2251
+dependencies = [
2252
+ "bitflags 2.9.4",
2253
+ "objc2 0.6.3",
2254
+ "objc2-core-foundation",
2255
+ "objc2-core-graphics",
2256
+ "objc2-io-surface",
2257
+]
2258
+
2259
+[[package]]
2260
+name = "objc2-encode"
2261
+version = "4.1.0"
2262
+source = "registry+https://github.com/rust-lang/crates.io-index"
2263
+checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
2264
+
2265
+[[package]]
2266
+name = "objc2-exception-helper"
2267
+version = "0.1.1"
2268
+source = "registry+https://github.com/rust-lang/crates.io-index"
2269
+checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a"
2270
+dependencies = [
2271
+ "cc",
2272
+]
2273
+
2274
+[[package]]
2275
+name = "objc2-foundation"
2276
+version = "0.2.2"
2277
+source = "registry+https://github.com/rust-lang/crates.io-index"
2278
+checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2279
+dependencies = [
2280
+ "bitflags 2.9.4",
2281
+ "block2 0.5.1",
2282
+ "libc",
2283
+ "objc2 0.5.2",
2284
+]
2285
+
2286
+[[package]]
2287
+name = "objc2-foundation"
2288
+version = "0.3.2"
2289
+source = "registry+https://github.com/rust-lang/crates.io-index"
2290
+checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2291
+dependencies = [
2292
+ "bitflags 2.9.4",
2293
+ "block2 0.6.2",
2294
+ "libc",
2295
+ "objc2 0.6.3",
2296
+ "objc2-core-foundation",
2297
+]
2298
+
2299
+[[package]]
2300
+name = "objc2-io-surface"
2301
+version = "0.3.2"
2302
+source = "registry+https://github.com/rust-lang/crates.io-index"
2303
+checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2304
+dependencies = [
2305
+ "bitflags 2.9.4",
2306
+ "objc2 0.6.3",
2307
+ "objc2-core-foundation",
2308
+]
2309
+
2310
+[[package]]
2311
+name = "objc2-javascript-core"
2312
+version = "0.3.2"
2313
+source = "registry+https://github.com/rust-lang/crates.io-index"
2314
+checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586"
2315
+dependencies = [
2316
+ "objc2 0.6.3",
2317
+ "objc2-core-foundation",
2318
+]
2319
+
2320
+[[package]]
2321
+name = "objc2-metal"
2322
+version = "0.2.2"
2323
+source = "registry+https://github.com/rust-lang/crates.io-index"
2324
+checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2325
+dependencies = [
2326
+ "bitflags 2.9.4",
2327
+ "block2 0.5.1",
2328
+ "objc2 0.5.2",
2329
+ "objc2-foundation 0.2.2",
2330
+]
2331
+
2332
+[[package]]
2333
+name = "objc2-quartz-core"
2334
+version = "0.2.2"
2335
+source = "registry+https://github.com/rust-lang/crates.io-index"
2336
+checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2337
+dependencies = [
2338
+ "bitflags 2.9.4",
2339
+ "block2 0.5.1",
2340
+ "objc2 0.5.2",
2341
+ "objc2-foundation 0.2.2",
2342
+ "objc2-metal",
2343
+]
2344
+
2345
+[[package]]
2346
+name = "objc2-quartz-core"
2347
+version = "0.3.2"
2348
+source = "registry+https://github.com/rust-lang/crates.io-index"
2349
+checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
2350
+dependencies = [
2351
+ "bitflags 2.9.4",
2352
+ "objc2 0.6.3",
2353
+ "objc2-foundation 0.3.2",
2354
+]
2355
+
2356
+[[package]]
2357
+name = "objc2-security"
2358
+version = "0.3.2"
2359
+source = "registry+https://github.com/rust-lang/crates.io-index"
2360
+checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a"
2361
+dependencies = [
2362
+ "bitflags 2.9.4",
2363
+ "objc2 0.6.3",
2364
+ "objc2-core-foundation",
2365
+]
2366
+
2367
+[[package]]
2368
+name = "objc2-ui-kit"
2369
+version = "0.3.2"
2370
+source = "registry+https://github.com/rust-lang/crates.io-index"
2371
+checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
2372
+dependencies = [
2373
+ "bitflags 2.9.4",
2374
+ "objc2 0.6.3",
2375
+ "objc2-core-foundation",
2376
+ "objc2-foundation 0.3.2",
2377
+]
2378
+
2379
+[[package]]
2380
+name = "objc2-web-kit"
2381
+version = "0.3.2"
2382
+source = "registry+https://github.com/rust-lang/crates.io-index"
2383
+checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f"
2384
+dependencies = [
2385
+ "bitflags 2.9.4",
2386
+ "block2 0.6.2",
2387
+ "objc2 0.6.3",
2388
+ "objc2-app-kit",
2389
+ "objc2-core-foundation",
2390
+ "objc2-foundation 0.3.2",
2391
+ "objc2-javascript-core",
2392
+ "objc2-security",
2393
+]
2394
+
2395
+[[package]]
2396
+name = "object"
2397
+version = "0.37.3"
2398
+source = "registry+https://github.com/rust-lang/crates.io-index"
2399
+checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
2400
+dependencies = [
2401
+ "memchr",
2402
+]
2403
+
2404
+[[package]]
2405
+name = "once_cell"
2406
+version = "1.21.3"
2407
+source = "registry+https://github.com/rust-lang/crates.io-index"
2408
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
2409
+
2410
+[[package]]
2411
+name = "open"
2412
+version = "5.3.2"
2413
+source = "registry+https://github.com/rust-lang/crates.io-index"
2414
+checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95"
2415
+dependencies = [
2416
+ "dunce",
2417
+ "is-wsl",
2418
+ "libc",
2419
+ "pathdiff",
2420
+]
2421
+
2422
+[[package]]
2423
+name = "option-ext"
2424
+version = "0.2.0"
2425
+source = "registry+https://github.com/rust-lang/crates.io-index"
2426
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
2427
+
2428
+[[package]]
2429
+name = "ordered-stream"
2430
+version = "0.2.0"
2431
+source = "registry+https://github.com/rust-lang/crates.io-index"
2432
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
2433
+dependencies = [
2434
+ "futures-core",
2435
+ "pin-project-lite",
2436
+]
2437
+
2438
+[[package]]
2439
+name = "pango"
2440
+version = "0.18.3"
2441
+source = "registry+https://github.com/rust-lang/crates.io-index"
2442
+checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
2443
+dependencies = [
2444
+ "gio",
2445
+ "glib",
2446
+ "libc",
2447
+ "once_cell",
2448
+ "pango-sys",
2449
+]
2450
+
2451
+[[package]]
2452
+name = "pango-sys"
2453
+version = "0.18.0"
2454
+source = "registry+https://github.com/rust-lang/crates.io-index"
2455
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
2456
+dependencies = [
2457
+ "glib-sys",
2458
+ "gobject-sys",
2459
+ "libc",
2460
+ "system-deps",
2461
+]
2462
+
2463
+[[package]]
2464
+name = "parking"
2465
+version = "2.2.1"
2466
+source = "registry+https://github.com/rust-lang/crates.io-index"
2467
+checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
2468
+
2469
+[[package]]
2470
+name = "parking_lot"
2471
+version = "0.12.5"
2472
+source = "registry+https://github.com/rust-lang/crates.io-index"
2473
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
2474
+dependencies = [
2475
+ "lock_api",
2476
+ "parking_lot_core",
2477
+]
2478
+
2479
+[[package]]
2480
+name = "parking_lot_core"
2481
+version = "0.9.12"
2482
+source = "registry+https://github.com/rust-lang/crates.io-index"
2483
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
2484
+dependencies = [
2485
+ "cfg-if",
2486
+ "libc",
2487
+ "redox_syscall",
2488
+ "smallvec",
2489
+ "windows-link 0.2.1",
2490
+]
2491
+
2492
+[[package]]
2493
+name = "pathdiff"
2494
+version = "0.2.3"
2495
+source = "registry+https://github.com/rust-lang/crates.io-index"
2496
+checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
2497
+
2498
+[[package]]
2499
+name = "percent-encoding"
2500
+version = "2.3.2"
2501
+source = "registry+https://github.com/rust-lang/crates.io-index"
2502
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
2503
+
2504
+[[package]]
2505
+name = "phf"
2506
+version = "0.8.0"
2507
+source = "registry+https://github.com/rust-lang/crates.io-index"
2508
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
2509
+dependencies = [
2510
+ "phf_shared 0.8.0",
2511
+]
2512
+
2513
+[[package]]
2514
+name = "phf"
2515
+version = "0.10.1"
2516
+source = "registry+https://github.com/rust-lang/crates.io-index"
2517
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
2518
+dependencies = [
2519
+ "phf_macros 0.10.0",
2520
+ "phf_shared 0.10.0",
2521
+ "proc-macro-hack",
2522
+]
2523
+
2524
+[[package]]
2525
+name = "phf"
2526
+version = "0.11.3"
2527
+source = "registry+https://github.com/rust-lang/crates.io-index"
2528
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
2529
+dependencies = [
2530
+ "phf_macros 0.11.3",
2531
+ "phf_shared 0.11.3",
2532
+]
2533
+
2534
+[[package]]
2535
+name = "phf_codegen"
2536
+version = "0.8.0"
2537
+source = "registry+https://github.com/rust-lang/crates.io-index"
2538
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
2539
+dependencies = [
2540
+ "phf_generator 0.8.0",
2541
+ "phf_shared 0.8.0",
2542
+]
2543
+
2544
+[[package]]
2545
+name = "phf_codegen"
2546
+version = "0.11.3"
2547
+source = "registry+https://github.com/rust-lang/crates.io-index"
2548
+checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
2549
+dependencies = [
2550
+ "phf_generator 0.11.3",
2551
+ "phf_shared 0.11.3",
2552
+]
2553
+
2554
+[[package]]
2555
+name = "phf_generator"
2556
+version = "0.8.0"
2557
+source = "registry+https://github.com/rust-lang/crates.io-index"
2558
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
2559
+dependencies = [
2560
+ "phf_shared 0.8.0",
2561
+ "rand 0.7.3",
2562
+]
2563
+
2564
+[[package]]
2565
+name = "phf_generator"
2566
+version = "0.10.0"
2567
+source = "registry+https://github.com/rust-lang/crates.io-index"
2568
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
2569
+dependencies = [
2570
+ "phf_shared 0.10.0",
2571
+ "rand 0.8.5",
2572
+]
2573
+
2574
+[[package]]
2575
+name = "phf_generator"
2576
+version = "0.11.3"
2577
+source = "registry+https://github.com/rust-lang/crates.io-index"
2578
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
2579
+dependencies = [
2580
+ "phf_shared 0.11.3",
2581
+ "rand 0.8.5",
2582
+]
2583
+
2584
+[[package]]
2585
+name = "phf_macros"
2586
+version = "0.10.0"
2587
+source = "registry+https://github.com/rust-lang/crates.io-index"
2588
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
2589
+dependencies = [
2590
+ "phf_generator 0.10.0",
2591
+ "phf_shared 0.10.0",
2592
+ "proc-macro-hack",
2593
+ "proc-macro2",
2594
+ "quote",
2595
+ "syn 1.0.109",
2596
+]
2597
+
2598
+[[package]]
2599
+name = "phf_macros"
2600
+version = "0.11.3"
2601
+source = "registry+https://github.com/rust-lang/crates.io-index"
2602
+checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
2603
+dependencies = [
2604
+ "phf_generator 0.11.3",
2605
+ "phf_shared 0.11.3",
2606
+ "proc-macro2",
2607
+ "quote",
2608
+ "syn 2.0.106",
2609
+]
2610
+
2611
+[[package]]
2612
+name = "phf_shared"
2613
+version = "0.8.0"
2614
+source = "registry+https://github.com/rust-lang/crates.io-index"
2615
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
2616
+dependencies = [
2617
+ "siphasher 0.3.11",
2618
+]
2619
+
2620
+[[package]]
2621
+name = "phf_shared"
2622
+version = "0.10.0"
2623
+source = "registry+https://github.com/rust-lang/crates.io-index"
2624
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
2625
+dependencies = [
2626
+ "siphasher 0.3.11",
2627
+]
2628
+
2629
+[[package]]
2630
+name = "phf_shared"
2631
+version = "0.11.3"
2632
+source = "registry+https://github.com/rust-lang/crates.io-index"
2633
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
2634
+dependencies = [
2635
+ "siphasher 1.0.1",
2636
+]
2637
+
2638
+[[package]]
2639
+name = "pin-project-lite"
2640
+version = "0.2.16"
2641
+source = "registry+https://github.com/rust-lang/crates.io-index"
2642
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
2643
+
2644
+[[package]]
2645
+name = "pin-utils"
2646
+version = "0.1.0"
2647
+source = "registry+https://github.com/rust-lang/crates.io-index"
2648
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
2649
+
2650
+[[package]]
2651
+name = "piper"
2652
+version = "0.2.4"
2653
+source = "registry+https://github.com/rust-lang/crates.io-index"
2654
+checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
2655
+dependencies = [
2656
+ "atomic-waker",
2657
+ "fastrand",
2658
+ "futures-io",
2659
+]
2660
+
2661
+[[package]]
2662
+name = "pkg-config"
2663
+version = "0.3.32"
2664
+source = "registry+https://github.com/rust-lang/crates.io-index"
2665
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
2666
+
2667
+[[package]]
2668
+name = "plist"
2669
+version = "1.8.0"
2670
+source = "registry+https://github.com/rust-lang/crates.io-index"
2671
+checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
2672
+dependencies = [
2673
+ "base64 0.22.1",
2674
+ "indexmap 2.11.4",
2675
+ "quick-xml",
2676
+ "serde",
2677
+ "time",
2678
+]
2679
+
2680
+[[package]]
2681
+name = "png"
2682
+version = "0.17.16"
2683
+source = "registry+https://github.com/rust-lang/crates.io-index"
2684
+checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
2685
+dependencies = [
2686
+ "bitflags 1.3.2",
2687
+ "crc32fast",
2688
+ "fdeflate",
2689
+ "flate2",
2690
+ "miniz_oxide",
2691
+]
2692
+
2693
+[[package]]
2694
+name = "polling"
2695
+version = "3.11.0"
2696
+source = "registry+https://github.com/rust-lang/crates.io-index"
2697
+checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
2698
+dependencies = [
2699
+ "cfg-if",
2700
+ "concurrent-queue",
2701
+ "hermit-abi",
2702
+ "pin-project-lite",
2703
+ "rustix",
2704
+ "windows-sys 0.61.2",
2705
+]
2706
+
2707
+[[package]]
2708
+name = "potential_utf"
2709
+version = "0.1.3"
2710
+source = "registry+https://github.com/rust-lang/crates.io-index"
2711
+checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
2712
+dependencies = [
2713
+ "zerovec",
2714
+]
2715
+
2716
+[[package]]
2717
+name = "powerfmt"
2718
+version = "0.2.0"
2719
+source = "registry+https://github.com/rust-lang/crates.io-index"
2720
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
2721
+
2722
+[[package]]
2723
+name = "ppv-lite86"
2724
+version = "0.2.21"
2725
+source = "registry+https://github.com/rust-lang/crates.io-index"
2726
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
2727
+dependencies = [
2728
+ "zerocopy",
2729
+]
2730
+
2731
+[[package]]
2732
+name = "precomputed-hash"
2733
+version = "0.1.1"
2734
+source = "registry+https://github.com/rust-lang/crates.io-index"
2735
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
2736
+
2737
+[[package]]
2738
+name = "proc-macro-crate"
2739
+version = "1.3.1"
2740
+source = "registry+https://github.com/rust-lang/crates.io-index"
2741
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
2742
+dependencies = [
2743
+ "once_cell",
2744
+ "toml_edit 0.19.15",
2745
+]
2746
+
2747
+[[package]]
2748
+name = "proc-macro-crate"
2749
+version = "2.0.2"
2750
+source = "registry+https://github.com/rust-lang/crates.io-index"
2751
+checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
2752
+dependencies = [
2753
+ "toml_datetime 0.6.3",
2754
+ "toml_edit 0.20.2",
2755
+]
2756
+
2757
+[[package]]
2758
+name = "proc-macro-crate"
2759
+version = "3.4.0"
2760
+source = "registry+https://github.com/rust-lang/crates.io-index"
2761
+checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
2762
+dependencies = [
2763
+ "toml_edit 0.23.6",
2764
+]
2765
+
2766
+[[package]]
2767
+name = "proc-macro-error"
2768
+version = "1.0.4"
2769
+source = "registry+https://github.com/rust-lang/crates.io-index"
2770
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
2771
+dependencies = [
2772
+ "proc-macro-error-attr",
2773
+ "proc-macro2",
2774
+ "quote",
2775
+ "syn 1.0.109",
2776
+ "version_check",
2777
+]
2778
+
2779
+[[package]]
2780
+name = "proc-macro-error-attr"
2781
+version = "1.0.4"
2782
+source = "registry+https://github.com/rust-lang/crates.io-index"
2783
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
2784
+dependencies = [
2785
+ "proc-macro2",
2786
+ "quote",
2787
+ "version_check",
2788
+]
2789
+
2790
+[[package]]
2791
+name = "proc-macro-hack"
2792
+version = "0.5.20+deprecated"
2793
+source = "registry+https://github.com/rust-lang/crates.io-index"
2794
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2795
+
2796
+[[package]]
2797
+name = "proc-macro2"
2798
+version = "1.0.101"
2799
+source = "registry+https://github.com/rust-lang/crates.io-index"
2800
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
2801
+dependencies = [
2802
+ "unicode-ident",
2803
+]
2804
+
2805
+[[package]]
2806
+name = "quick-xml"
2807
+version = "0.38.3"
2808
+source = "registry+https://github.com/rust-lang/crates.io-index"
2809
+checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89"
2810
+dependencies = [
2811
+ "memchr",
2812
+]
2813
+
2814
+[[package]]
2815
+name = "quote"
2816
+version = "1.0.41"
2817
+source = "registry+https://github.com/rust-lang/crates.io-index"
2818
+checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
2819
+dependencies = [
2820
+ "proc-macro2",
2821
+]
2822
+
2823
+[[package]]
2824
+name = "r-efi"
2825
+version = "5.3.0"
2826
+source = "registry+https://github.com/rust-lang/crates.io-index"
2827
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
2828
+
2829
+[[package]]
2830
+name = "rand"
2831
+version = "0.7.3"
2832
+source = "registry+https://github.com/rust-lang/crates.io-index"
2833
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
2834
+dependencies = [
2835
+ "getrandom 0.1.16",
2836
+ "libc",
2837
+ "rand_chacha 0.2.2",
2838
+ "rand_core 0.5.1",
2839
+ "rand_hc",
2840
+ "rand_pcg",
2841
+]
2842
+
2843
+[[package]]
2844
+name = "rand"
2845
+version = "0.8.5"
2846
+source = "registry+https://github.com/rust-lang/crates.io-index"
2847
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
2848
+dependencies = [
2849
+ "libc",
2850
+ "rand_chacha 0.3.1",
2851
+ "rand_core 0.6.4",
2852
+]
2853
+
2854
+[[package]]
2855
+name = "rand_chacha"
2856
+version = "0.2.2"
2857
+source = "registry+https://github.com/rust-lang/crates.io-index"
2858
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
2859
+dependencies = [
2860
+ "ppv-lite86",
2861
+ "rand_core 0.5.1",
2862
+]
2863
+
2864
+[[package]]
2865
+name = "rand_chacha"
2866
+version = "0.3.1"
2867
+source = "registry+https://github.com/rust-lang/crates.io-index"
2868
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
2869
+dependencies = [
2870
+ "ppv-lite86",
2871
+ "rand_core 0.6.4",
2872
+]
2873
+
2874
+[[package]]
2875
+name = "rand_core"
2876
+version = "0.5.1"
2877
+source = "registry+https://github.com/rust-lang/crates.io-index"
2878
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
2879
+dependencies = [
2880
+ "getrandom 0.1.16",
2881
+]
2882
+
2883
+[[package]]
2884
+name = "rand_core"
2885
+version = "0.6.4"
2886
+source = "registry+https://github.com/rust-lang/crates.io-index"
2887
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2888
+dependencies = [
2889
+ "getrandom 0.2.16",
2890
+]
2891
+
2892
+[[package]]
2893
+name = "rand_hc"
2894
+version = "0.2.0"
2895
+source = "registry+https://github.com/rust-lang/crates.io-index"
2896
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
2897
+dependencies = [
2898
+ "rand_core 0.5.1",
2899
+]
2900
+
2901
+[[package]]
2902
+name = "rand_pcg"
2903
+version = "0.2.1"
2904
+source = "registry+https://github.com/rust-lang/crates.io-index"
2905
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
2906
+dependencies = [
2907
+ "rand_core 0.5.1",
2908
+]
2909
+
2910
+[[package]]
2911
+name = "raw-window-handle"
2912
+version = "0.6.2"
2913
+source = "registry+https://github.com/rust-lang/crates.io-index"
2914
+checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
2915
+
2916
+[[package]]
2917
+name = "redox_syscall"
2918
+version = "0.5.18"
2919
+source = "registry+https://github.com/rust-lang/crates.io-index"
2920
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2921
+dependencies = [
2922
+ "bitflags 2.9.4",
2923
+]
2924
+
2925
+[[package]]
2926
+name = "redox_users"
2927
+version = "0.5.2"
2928
+source = "registry+https://github.com/rust-lang/crates.io-index"
2929
+checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
2930
+dependencies = [
2931
+ "getrandom 0.2.16",
2932
+ "libredox",
2933
+ "thiserror 2.0.17",
2934
+]
2935
+
2936
+[[package]]
2937
+name = "ref-cast"
2938
+version = "1.0.25"
2939
+source = "registry+https://github.com/rust-lang/crates.io-index"
2940
+checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
2941
+dependencies = [
2942
+ "ref-cast-impl",
2943
+]
2944
+
2945
+[[package]]
2946
+name = "ref-cast-impl"
2947
+version = "1.0.25"
2948
+source = "registry+https://github.com/rust-lang/crates.io-index"
2949
+checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
2950
+dependencies = [
2951
+ "proc-macro2",
2952
+ "quote",
2953
+ "syn 2.0.106",
2954
+]
2955
+
2956
+[[package]]
2957
+name = "regex"
2958
+version = "1.11.3"
2959
+source = "registry+https://github.com/rust-lang/crates.io-index"
2960
+checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c"
2961
+dependencies = [
2962
+ "aho-corasick",
2963
+ "memchr",
2964
+ "regex-automata",
2965
+ "regex-syntax",
2966
+]
2967
+
2968
+[[package]]
2969
+name = "regex-automata"
2970
+version = "0.4.11"
2971
+source = "registry+https://github.com/rust-lang/crates.io-index"
2972
+checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad"
2973
+dependencies = [
2974
+ "aho-corasick",
2975
+ "memchr",
2976
+ "regex-syntax",
2977
+]
2978
+
2979
+[[package]]
2980
+name = "regex-syntax"
2981
+version = "0.8.6"
2982
+source = "registry+https://github.com/rust-lang/crates.io-index"
2983
+checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
2984
+
2985
+[[package]]
2986
+name = "reqwest"
2987
+version = "0.12.23"
2988
+source = "registry+https://github.com/rust-lang/crates.io-index"
2989
+checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
2990
+dependencies = [
2991
+ "base64 0.22.1",
2992
+ "bytes",
2993
+ "futures-core",
2994
+ "futures-util",
2995
+ "http",
2996
+ "http-body",
2997
+ "http-body-util",
2998
+ "hyper",
2999
+ "hyper-util",
3000
+ "js-sys",
3001
+ "log",
3002
+ "percent-encoding",
3003
+ "pin-project-lite",
3004
+ "serde",
3005
+ "serde_json",
3006
+ "serde_urlencoded",
3007
+ "sync_wrapper",
3008
+ "tokio",
3009
+ "tokio-util",
3010
+ "tower",
3011
+ "tower-http",
3012
+ "tower-service",
3013
+ "url",
3014
+ "wasm-bindgen",
3015
+ "wasm-bindgen-futures",
3016
+ "wasm-streams",
3017
+ "web-sys",
3018
+]
3019
+
3020
+[[package]]
3021
+name = "rustc-demangle"
3022
+version = "0.1.26"
3023
+source = "registry+https://github.com/rust-lang/crates.io-index"
3024
+checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
3025
+
3026
+[[package]]
3027
+name = "rustc_version"
3028
+version = "0.4.1"
3029
+source = "registry+https://github.com/rust-lang/crates.io-index"
3030
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
3031
+dependencies = [
3032
+ "semver",
3033
+]
3034
+
3035
+[[package]]
3036
+name = "rustix"
3037
+version = "1.1.2"
3038
+source = "registry+https://github.com/rust-lang/crates.io-index"
3039
+checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3040
+dependencies = [
3041
+ "bitflags 2.9.4",
3042
+ "errno",
3043
+ "libc",
3044
+ "linux-raw-sys",
3045
+ "windows-sys 0.61.2",
3046
+]
3047
+
3048
+[[package]]
3049
+name = "rustversion"
3050
+version = "1.0.22"
3051
+source = "registry+https://github.com/rust-lang/crates.io-index"
3052
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3053
+
3054
+[[package]]
3055
+name = "ryu"
3056
+version = "1.0.20"
3057
+source = "registry+https://github.com/rust-lang/crates.io-index"
3058
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
3059
+
3060
+[[package]]
3061
+name = "same-file"
3062
+version = "1.0.6"
3063
+source = "registry+https://github.com/rust-lang/crates.io-index"
3064
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
3065
+dependencies = [
3066
+ "winapi-util",
3067
+]
3068
+
3069
+[[package]]
3070
+name = "schemars"
3071
+version = "0.8.22"
3072
+source = "registry+https://github.com/rust-lang/crates.io-index"
3073
+checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
3074
+dependencies = [
3075
+ "dyn-clone",
3076
+ "indexmap 1.9.3",
3077
+ "schemars_derive",
3078
+ "serde",
3079
+ "serde_json",
3080
+ "url",
3081
+ "uuid",
3082
+]
3083
+
3084
+[[package]]
3085
+name = "schemars"
3086
+version = "0.9.0"
3087
+source = "registry+https://github.com/rust-lang/crates.io-index"
3088
+checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
3089
+dependencies = [
3090
+ "dyn-clone",
3091
+ "ref-cast",
3092
+ "serde",
3093
+ "serde_json",
3094
+]
3095
+
3096
+[[package]]
3097
+name = "schemars"
3098
+version = "1.0.4"
3099
+source = "registry+https://github.com/rust-lang/crates.io-index"
3100
+checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
3101
+dependencies = [
3102
+ "dyn-clone",
3103
+ "ref-cast",
3104
+ "serde",
3105
+ "serde_json",
3106
+]
3107
+
3108
+[[package]]
3109
+name = "schemars_derive"
3110
+version = "0.8.22"
3111
+source = "registry+https://github.com/rust-lang/crates.io-index"
3112
+checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
3113
+dependencies = [
3114
+ "proc-macro2",
3115
+ "quote",
3116
+ "serde_derive_internals",
3117
+ "syn 2.0.106",
3118
+]
3119
+
3120
+[[package]]
3121
+name = "scopeguard"
3122
+version = "1.2.0"
3123
+source = "registry+https://github.com/rust-lang/crates.io-index"
3124
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
3125
+
3126
+[[package]]
3127
+name = "selectors"
3128
+version = "0.24.0"
3129
+source = "registry+https://github.com/rust-lang/crates.io-index"
3130
+checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416"
3131
+dependencies = [
3132
+ "bitflags 1.3.2",
3133
+ "cssparser",
3134
+ "derive_more",
3135
+ "fxhash",
3136
+ "log",
3137
+ "phf 0.8.0",
3138
+ "phf_codegen 0.8.0",
3139
+ "precomputed-hash",
3140
+ "servo_arc",
3141
+ "smallvec",
3142
+]
3143
+
3144
+[[package]]
3145
+name = "semver"
3146
+version = "1.0.27"
3147
+source = "registry+https://github.com/rust-lang/crates.io-index"
3148
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
3149
+dependencies = [
3150
+ "serde",
3151
+ "serde_core",
3152
+]
3153
+
3154
+[[package]]
3155
+name = "serde"
3156
+version = "1.0.228"
3157
+source = "registry+https://github.com/rust-lang/crates.io-index"
3158
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
3159
+dependencies = [
3160
+ "serde_core",
3161
+ "serde_derive",
3162
+]
3163
+
3164
+[[package]]
3165
+name = "serde-untagged"
3166
+version = "0.1.9"
3167
+source = "registry+https://github.com/rust-lang/crates.io-index"
3168
+checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
3169
+dependencies = [
3170
+ "erased-serde",
3171
+ "serde",
3172
+ "serde_core",
3173
+ "typeid",
3174
+]
3175
+
3176
+[[package]]
3177
+name = "serde_core"
3178
+version = "1.0.228"
3179
+source = "registry+https://github.com/rust-lang/crates.io-index"
3180
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
3181
+dependencies = [
3182
+ "serde_derive",
3183
+]
3184
+
3185
+[[package]]
3186
+name = "serde_derive"
3187
+version = "1.0.228"
3188
+source = "registry+https://github.com/rust-lang/crates.io-index"
3189
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
3190
+dependencies = [
3191
+ "proc-macro2",
3192
+ "quote",
3193
+ "syn 2.0.106",
3194
+]
3195
+
3196
+[[package]]
3197
+name = "serde_derive_internals"
3198
+version = "0.29.1"
3199
+source = "registry+https://github.com/rust-lang/crates.io-index"
3200
+checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
3201
+dependencies = [
3202
+ "proc-macro2",
3203
+ "quote",
3204
+ "syn 2.0.106",
3205
+]
3206
+
3207
+[[package]]
3208
+name = "serde_json"
3209
+version = "1.0.145"
3210
+source = "registry+https://github.com/rust-lang/crates.io-index"
3211
+checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3212
+dependencies = [
3213
+ "itoa",
3214
+ "memchr",
3215
+ "ryu",
3216
+ "serde",
3217
+ "serde_core",
3218
+]
3219
+
3220
+[[package]]
3221
+name = "serde_repr"
3222
+version = "0.1.20"
3223
+source = "registry+https://github.com/rust-lang/crates.io-index"
3224
+checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
3225
+dependencies = [
3226
+ "proc-macro2",
3227
+ "quote",
3228
+ "syn 2.0.106",
3229
+]
3230
+
3231
+[[package]]
3232
+name = "serde_spanned"
3233
+version = "0.6.9"
3234
+source = "registry+https://github.com/rust-lang/crates.io-index"
3235
+checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
3236
+dependencies = [
3237
+ "serde",
3238
+]
3239
+
3240
+[[package]]
3241
+name = "serde_spanned"
3242
+version = "1.0.2"
3243
+source = "registry+https://github.com/rust-lang/crates.io-index"
3244
+checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee"
3245
+dependencies = [
3246
+ "serde_core",
3247
+]
3248
+
3249
+[[package]]
3250
+name = "serde_urlencoded"
3251
+version = "0.7.1"
3252
+source = "registry+https://github.com/rust-lang/crates.io-index"
3253
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
3254
+dependencies = [
3255
+ "form_urlencoded",
3256
+ "itoa",
3257
+ "ryu",
3258
+ "serde",
3259
+]
3260
+
3261
+[[package]]
3262
+name = "serde_with"
3263
+version = "3.15.0"
3264
+source = "registry+https://github.com/rust-lang/crates.io-index"
3265
+checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5"
3266
+dependencies = [
3267
+ "base64 0.22.1",
3268
+ "chrono",
3269
+ "hex",
3270
+ "indexmap 1.9.3",
3271
+ "indexmap 2.11.4",
3272
+ "schemars 0.9.0",
3273
+ "schemars 1.0.4",
3274
+ "serde_core",
3275
+ "serde_json",
3276
+ "serde_with_macros",
3277
+ "time",
3278
+]
3279
+
3280
+[[package]]
3281
+name = "serde_with_macros"
3282
+version = "3.15.0"
3283
+source = "registry+https://github.com/rust-lang/crates.io-index"
3284
+checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27"
3285
+dependencies = [
3286
+ "darling",
3287
+ "proc-macro2",
3288
+ "quote",
3289
+ "syn 2.0.106",
3290
+]
3291
+
3292
+[[package]]
3293
+name = "serialize-to-javascript"
3294
+version = "0.1.2"
3295
+source = "registry+https://github.com/rust-lang/crates.io-index"
3296
+checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
3297
+dependencies = [
3298
+ "serde",
3299
+ "serde_json",
3300
+ "serialize-to-javascript-impl",
3301
+]
3302
+
3303
+[[package]]
3304
+name = "serialize-to-javascript-impl"
3305
+version = "0.1.2"
3306
+source = "registry+https://github.com/rust-lang/crates.io-index"
3307
+checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
3308
+dependencies = [
3309
+ "proc-macro2",
3310
+ "quote",
3311
+ "syn 2.0.106",
3312
+]
3313
+
3314
+[[package]]
3315
+name = "servo_arc"
3316
+version = "0.2.0"
3317
+source = "registry+https://github.com/rust-lang/crates.io-index"
3318
+checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741"
3319
+dependencies = [
3320
+ "nodrop",
3321
+ "stable_deref_trait",
3322
+]
3323
+
3324
+[[package]]
3325
+name = "sha2"
3326
+version = "0.10.9"
3327
+source = "registry+https://github.com/rust-lang/crates.io-index"
3328
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
3329
+dependencies = [
3330
+ "cfg-if",
3331
+ "cpufeatures",
3332
+ "digest",
3333
+]
3334
+
3335
+[[package]]
3336
+name = "shlex"
3337
+version = "1.3.0"
3338
+source = "registry+https://github.com/rust-lang/crates.io-index"
3339
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
3340
+
3341
+[[package]]
3342
+name = "signal-hook-registry"
3343
+version = "1.4.6"
3344
+source = "registry+https://github.com/rust-lang/crates.io-index"
3345
+checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
3346
+dependencies = [
3347
+ "libc",
3348
+]
3349
+
3350
+[[package]]
3351
+name = "simd-adler32"
3352
+version = "0.3.7"
3353
+source = "registry+https://github.com/rust-lang/crates.io-index"
3354
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
3355
+
3356
+[[package]]
3357
+name = "siphasher"
3358
+version = "0.3.11"
3359
+source = "registry+https://github.com/rust-lang/crates.io-index"
3360
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
3361
+
3362
+[[package]]
3363
+name = "siphasher"
3364
+version = "1.0.1"
3365
+source = "registry+https://github.com/rust-lang/crates.io-index"
3366
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
3367
+
3368
+[[package]]
3369
+name = "slab"
3370
+version = "0.4.11"
3371
+source = "registry+https://github.com/rust-lang/crates.io-index"
3372
+checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
3373
+
3374
+[[package]]
3375
+name = "smallvec"
3376
+version = "1.15.1"
3377
+source = "registry+https://github.com/rust-lang/crates.io-index"
3378
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
3379
+
3380
+[[package]]
3381
+name = "socket2"
3382
+version = "0.6.0"
3383
+source = "registry+https://github.com/rust-lang/crates.io-index"
3384
+checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
3385
+dependencies = [
3386
+ "libc",
3387
+ "windows-sys 0.59.0",
3388
+]
3389
+
3390
+[[package]]
3391
+name = "softbuffer"
3392
+version = "0.4.6"
3393
+source = "registry+https://github.com/rust-lang/crates.io-index"
3394
+checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08"
3395
+dependencies = [
3396
+ "bytemuck",
3397
+ "cfg_aliases",
3398
+ "core-graphics",
3399
+ "foreign-types",
3400
+ "js-sys",
3401
+ "log",
3402
+ "objc2 0.5.2",
3403
+ "objc2-foundation 0.2.2",
3404
+ "objc2-quartz-core 0.2.2",
3405
+ "raw-window-handle",
3406
+ "redox_syscall",
3407
+ "wasm-bindgen",
3408
+ "web-sys",
3409
+ "windows-sys 0.59.0",
3410
+]
3411
+
3412
+[[package]]
3413
+name = "soup3"
3414
+version = "0.5.0"
3415
+source = "registry+https://github.com/rust-lang/crates.io-index"
3416
+checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f"
3417
+dependencies = [
3418
+ "futures-channel",
3419
+ "gio",
3420
+ "glib",
3421
+ "libc",
3422
+ "soup3-sys",
3423
+]
3424
+
3425
+[[package]]
3426
+name = "soup3-sys"
3427
+version = "0.5.0"
3428
+source = "registry+https://github.com/rust-lang/crates.io-index"
3429
+checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27"
3430
+dependencies = [
3431
+ "gio-sys",
3432
+ "glib-sys",
3433
+ "gobject-sys",
3434
+ "libc",
3435
+ "system-deps",
3436
+]
3437
+
3438
+[[package]]
3439
+name = "stable_deref_trait"
3440
+version = "1.2.1"
3441
+source = "registry+https://github.com/rust-lang/crates.io-index"
3442
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
3443
+
3444
+[[package]]
3445
+name = "static_assertions"
3446
+version = "1.1.0"
3447
+source = "registry+https://github.com/rust-lang/crates.io-index"
3448
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
3449
+
3450
+[[package]]
3451
+name = "streetcut"
3452
+version = "1.0.0"
3453
+dependencies = [
3454
+ "serde",
3455
+ "serde_json",
3456
+ "tauri",
3457
+ "tauri-build",
3458
+ "tauri-plugin-haptics",
3459
+ "tauri-plugin-opener",
3460
+]
3461
+
3462
+[[package]]
3463
+name = "string_cache"
3464
+version = "0.8.9"
3465
+source = "registry+https://github.com/rust-lang/crates.io-index"
3466
+checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
3467
+dependencies = [
3468
+ "new_debug_unreachable",
3469
+ "parking_lot",
3470
+ "phf_shared 0.11.3",
3471
+ "precomputed-hash",
3472
+ "serde",
3473
+]
3474
+
3475
+[[package]]
3476
+name = "string_cache_codegen"
3477
+version = "0.5.4"
3478
+source = "registry+https://github.com/rust-lang/crates.io-index"
3479
+checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
3480
+dependencies = [
3481
+ "phf_generator 0.11.3",
3482
+ "phf_shared 0.11.3",
3483
+ "proc-macro2",
3484
+ "quote",
3485
+]
3486
+
3487
+[[package]]
3488
+name = "strsim"
3489
+version = "0.11.1"
3490
+source = "registry+https://github.com/rust-lang/crates.io-index"
3491
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
3492
+
3493
+[[package]]
3494
+name = "swift-rs"
3495
+version = "1.0.7"
3496
+source = "registry+https://github.com/rust-lang/crates.io-index"
3497
+checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7"
3498
+dependencies = [
3499
+ "base64 0.21.7",
3500
+ "serde",
3501
+ "serde_json",
3502
+]
3503
+
3504
+[[package]]
3505
+name = "syn"
3506
+version = "1.0.109"
3507
+source = "registry+https://github.com/rust-lang/crates.io-index"
3508
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
3509
+dependencies = [
3510
+ "proc-macro2",
3511
+ "quote",
3512
+ "unicode-ident",
3513
+]
3514
+
3515
+[[package]]
3516
+name = "syn"
3517
+version = "2.0.106"
3518
+source = "registry+https://github.com/rust-lang/crates.io-index"
3519
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
3520
+dependencies = [
3521
+ "proc-macro2",
3522
+ "quote",
3523
+ "unicode-ident",
3524
+]
3525
+
3526
+[[package]]
3527
+name = "sync_wrapper"
3528
+version = "1.0.2"
3529
+source = "registry+https://github.com/rust-lang/crates.io-index"
3530
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
3531
+dependencies = [
3532
+ "futures-core",
3533
+]
3534
+
3535
+[[package]]
3536
+name = "synstructure"
3537
+version = "0.13.2"
3538
+source = "registry+https://github.com/rust-lang/crates.io-index"
3539
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
3540
+dependencies = [
3541
+ "proc-macro2",
3542
+ "quote",
3543
+ "syn 2.0.106",
3544
+]
3545
+
3546
+[[package]]
3547
+name = "system-deps"
3548
+version = "6.2.2"
3549
+source = "registry+https://github.com/rust-lang/crates.io-index"
3550
+checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
3551
+dependencies = [
3552
+ "cfg-expr",
3553
+ "heck 0.5.0",
3554
+ "pkg-config",
3555
+ "toml 0.8.2",
3556
+ "version-compare",
3557
+]
3558
+
3559
+[[package]]
3560
+name = "tao"
3561
+version = "0.34.3"
3562
+source = "registry+https://github.com/rust-lang/crates.io-index"
3563
+checksum = "959469667dbcea91e5485fc48ba7dd6023face91bb0f1a14681a70f99847c3f7"
3564
+dependencies = [
3565
+ "bitflags 2.9.4",
3566
+ "block2 0.6.2",
3567
+ "core-foundation",
3568
+ "core-graphics",
3569
+ "crossbeam-channel",
3570
+ "dispatch",
3571
+ "dlopen2",
3572
+ "dpi",
3573
+ "gdkwayland-sys",
3574
+ "gdkx11-sys",
3575
+ "gtk",
3576
+ "jni",
3577
+ "lazy_static",
3578
+ "libc",
3579
+ "log",
3580
+ "ndk",
3581
+ "ndk-context",
3582
+ "ndk-sys",
3583
+ "objc2 0.6.3",
3584
+ "objc2-app-kit",
3585
+ "objc2-foundation 0.3.2",
3586
+ "once_cell",
3587
+ "parking_lot",
3588
+ "raw-window-handle",
3589
+ "scopeguard",
3590
+ "tao-macros",
3591
+ "unicode-segmentation",
3592
+ "url",
3593
+ "windows",
3594
+ "windows-core 0.61.2",
3595
+ "windows-version",
3596
+ "x11-dl",
3597
+]
3598
+
3599
+[[package]]
3600
+name = "tao-macros"
3601
+version = "0.1.3"
3602
+source = "registry+https://github.com/rust-lang/crates.io-index"
3603
+checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
3604
+dependencies = [
3605
+ "proc-macro2",
3606
+ "quote",
3607
+ "syn 2.0.106",
3608
+]
3609
+
3610
+[[package]]
3611
+name = "target-lexicon"
3612
+version = "0.12.16"
3613
+source = "registry+https://github.com/rust-lang/crates.io-index"
3614
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
3615
+
3616
+[[package]]
3617
+name = "tauri"
3618
+version = "2.8.5"
3619
+source = "registry+https://github.com/rust-lang/crates.io-index"
3620
+checksum = "d4d1d3b3dc4c101ac989fd7db77e045cc6d91a25349cd410455cb5c57d510c1c"
3621
+dependencies = [
3622
+ "anyhow",
3623
+ "bytes",
3624
+ "cookie",
3625
+ "dirs",
3626
+ "dunce",
3627
+ "embed_plist",
3628
+ "getrandom 0.3.3",
3629
+ "glob",
3630
+ "gtk",
3631
+ "heck 0.5.0",
3632
+ "http",
3633
+ "jni",
3634
+ "libc",
3635
+ "log",
3636
+ "mime",
3637
+ "muda",
3638
+ "objc2 0.6.3",
3639
+ "objc2-app-kit",
3640
+ "objc2-foundation 0.3.2",
3641
+ "objc2-ui-kit",
3642
+ "objc2-web-kit",
3643
+ "percent-encoding",
3644
+ "plist",
3645
+ "raw-window-handle",
3646
+ "reqwest",
3647
+ "serde",
3648
+ "serde_json",
3649
+ "serde_repr",
3650
+ "serialize-to-javascript",
3651
+ "swift-rs",
3652
+ "tauri-build",
3653
+ "tauri-macros",
3654
+ "tauri-runtime",
3655
+ "tauri-runtime-wry",
3656
+ "tauri-utils",
3657
+ "thiserror 2.0.17",
3658
+ "tokio",
3659
+ "tray-icon",
3660
+ "url",
3661
+ "urlpattern",
3662
+ "webkit2gtk",
3663
+ "webview2-com",
3664
+ "window-vibrancy",
3665
+ "windows",
3666
+]
3667
+
3668
+[[package]]
3669
+name = "tauri-build"
3670
+version = "2.4.1"
3671
+source = "registry+https://github.com/rust-lang/crates.io-index"
3672
+checksum = "9c432ccc9ff661803dab74c6cd78de11026a578a9307610bbc39d3c55be7943f"
3673
+dependencies = [
3674
+ "anyhow",
3675
+ "cargo_toml",
3676
+ "dirs",
3677
+ "glob",
3678
+ "heck 0.5.0",
3679
+ "json-patch",
3680
+ "schemars 0.8.22",
3681
+ "semver",
3682
+ "serde",
3683
+ "serde_json",
3684
+ "tauri-utils",
3685
+ "tauri-winres",
3686
+ "toml 0.9.7",
3687
+ "walkdir",
3688
+]
3689
+
3690
+[[package]]
3691
+name = "tauri-codegen"
3692
+version = "2.4.0"
3693
+source = "registry+https://github.com/rust-lang/crates.io-index"
3694
+checksum = "1ab3a62cf2e6253936a8b267c2e95839674e7439f104fa96ad0025e149d54d8a"
3695
+dependencies = [
3696
+ "base64 0.22.1",
3697
+ "brotli",
3698
+ "ico",
3699
+ "json-patch",
3700
+ "plist",
3701
+ "png",
3702
+ "proc-macro2",
3703
+ "quote",
3704
+ "semver",
3705
+ "serde",
3706
+ "serde_json",
3707
+ "sha2",
3708
+ "syn 2.0.106",
3709
+ "tauri-utils",
3710
+ "thiserror 2.0.17",
3711
+ "time",
3712
+ "url",
3713
+ "uuid",
3714
+ "walkdir",
3715
+]
3716
+
3717
+[[package]]
3718
+name = "tauri-macros"
3719
+version = "2.4.0"
3720
+source = "registry+https://github.com/rust-lang/crates.io-index"
3721
+checksum = "4368ea8094e7045217edb690f493b55b30caf9f3e61f79b4c24b6db91f07995e"
3722
+dependencies = [
3723
+ "heck 0.5.0",
3724
+ "proc-macro2",
3725
+ "quote",
3726
+ "syn 2.0.106",
3727
+ "tauri-codegen",
3728
+ "tauri-utils",
3729
+]
3730
+
3731
+[[package]]
3732
+name = "tauri-plugin"
3733
+version = "2.4.0"
3734
+source = "registry+https://github.com/rust-lang/crates.io-index"
3735
+checksum = "9946a3cede302eac0c6eb6c6070ac47b1768e326092d32efbb91f21ed58d978f"
3736
+dependencies = [
3737
+ "anyhow",
3738
+ "glob",
3739
+ "plist",
3740
+ "schemars 0.8.22",
3741
+ "serde",
3742
+ "serde_json",
3743
+ "tauri-utils",
3744
+ "toml 0.9.7",
3745
+ "walkdir",
3746
+]
3747
+
3748
+[[package]]
3749
+name = "tauri-plugin-haptics"
3750
+version = "2.3.0"
3751
+source = "registry+https://github.com/rust-lang/crates.io-index"
3752
+checksum = "b60b57d4d3add75483c5ce448b82a3af50ebcaaed369f2856fb8290eb3a69294"
3753
+dependencies = [
3754
+ "log",
3755
+ "serde",
3756
+ "serde_json",
3757
+ "tauri",
3758
+ "tauri-plugin",
3759
+ "thiserror 2.0.17",
3760
+]
3761
+
3762
+[[package]]
3763
+name = "tauri-plugin-opener"
3764
+version = "2.5.0"
3765
+source = "registry+https://github.com/rust-lang/crates.io-index"
3766
+checksum = "786156aa8e89e03d271fbd3fe642207da8e65f3c961baa9e2930f332bf80a1f5"
3767
+dependencies = [
3768
+ "dunce",
3769
+ "glob",
3770
+ "objc2-app-kit",
3771
+ "objc2-foundation 0.3.2",
3772
+ "open",
3773
+ "schemars 0.8.22",
3774
+ "serde",
3775
+ "serde_json",
3776
+ "tauri",
3777
+ "tauri-plugin",
3778
+ "thiserror 2.0.17",
3779
+ "url",
3780
+ "windows",
3781
+ "zbus",
3782
+]
3783
+
3784
+[[package]]
3785
+name = "tauri-runtime"
3786
+version = "2.8.0"
3787
+source = "registry+https://github.com/rust-lang/crates.io-index"
3788
+checksum = "d4cfc9ad45b487d3fded5a4731a567872a4812e9552e3964161b08edabf93846"
3789
+dependencies = [
3790
+ "cookie",
3791
+ "dpi",
3792
+ "gtk",
3793
+ "http",
3794
+ "jni",
3795
+ "objc2 0.6.3",
3796
+ "objc2-ui-kit",
3797
+ "objc2-web-kit",
3798
+ "raw-window-handle",
3799
+ "serde",
3800
+ "serde_json",
3801
+ "tauri-utils",
3802
+ "thiserror 2.0.17",
3803
+ "url",
3804
+ "webkit2gtk",
3805
+ "webview2-com",
3806
+ "windows",
3807
+]
3808
+
3809
+[[package]]
3810
+name = "tauri-runtime-wry"
3811
+version = "2.8.1"
3812
+source = "registry+https://github.com/rust-lang/crates.io-index"
3813
+checksum = "c1fe9d48bd122ff002064e88cfcd7027090d789c4302714e68fcccba0f4b7807"
3814
+dependencies = [
3815
+ "gtk",
3816
+ "http",
3817
+ "jni",
3818
+ "log",
3819
+ "objc2 0.6.3",
3820
+ "objc2-app-kit",
3821
+ "objc2-foundation 0.3.2",
3822
+ "once_cell",
3823
+ "percent-encoding",
3824
+ "raw-window-handle",
3825
+ "softbuffer",
3826
+ "tao",
3827
+ "tauri-runtime",
3828
+ "tauri-utils",
3829
+ "url",
3830
+ "webkit2gtk",
3831
+ "webview2-com",
3832
+ "windows",
3833
+ "wry",
3834
+]
3835
+
3836
+[[package]]
3837
+name = "tauri-utils"
3838
+version = "2.7.0"
3839
+source = "registry+https://github.com/rust-lang/crates.io-index"
3840
+checksum = "41a3852fdf9a4f8fbeaa63dc3e9a85284dd6ef7200751f0bd66ceee30c93f212"
3841
+dependencies = [
3842
+ "anyhow",
3843
+ "brotli",
3844
+ "cargo_metadata",
3845
+ "ctor",
3846
+ "dunce",
3847
+ "glob",
3848
+ "html5ever",
3849
+ "http",
3850
+ "infer",
3851
+ "json-patch",
3852
+ "kuchikiki",
3853
+ "log",
3854
+ "memchr",
3855
+ "phf 0.11.3",
3856
+ "proc-macro2",
3857
+ "quote",
3858
+ "regex",
3859
+ "schemars 0.8.22",
3860
+ "semver",
3861
+ "serde",
3862
+ "serde-untagged",
3863
+ "serde_json",
3864
+ "serde_with",
3865
+ "swift-rs",
3866
+ "thiserror 2.0.17",
3867
+ "toml 0.9.7",
3868
+ "url",
3869
+ "urlpattern",
3870
+ "uuid",
3871
+ "walkdir",
3872
+]
3873
+
3874
+[[package]]
3875
+name = "tauri-winres"
3876
+version = "0.3.3"
3877
+source = "registry+https://github.com/rust-lang/crates.io-index"
3878
+checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074"
3879
+dependencies = [
3880
+ "embed-resource",
3881
+ "toml 0.9.7",
3882
+]
3883
+
3884
+[[package]]
3885
+name = "tempfile"
3886
+version = "3.23.0"
3887
+source = "registry+https://github.com/rust-lang/crates.io-index"
3888
+checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
3889
+dependencies = [
3890
+ "fastrand",
3891
+ "getrandom 0.3.3",
3892
+ "once_cell",
3893
+ "rustix",
3894
+ "windows-sys 0.61.2",
3895
+]
3896
+
3897
+[[package]]
3898
+name = "tendril"
3899
+version = "0.4.3"
3900
+source = "registry+https://github.com/rust-lang/crates.io-index"
3901
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
3902
+dependencies = [
3903
+ "futf",
3904
+ "mac",
3905
+ "utf-8",
3906
+]
3907
+
3908
+[[package]]
3909
+name = "thiserror"
3910
+version = "1.0.69"
3911
+source = "registry+https://github.com/rust-lang/crates.io-index"
3912
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
3913
+dependencies = [
3914
+ "thiserror-impl 1.0.69",
3915
+]
3916
+
3917
+[[package]]
3918
+name = "thiserror"
3919
+version = "2.0.17"
3920
+source = "registry+https://github.com/rust-lang/crates.io-index"
3921
+checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
3922
+dependencies = [
3923
+ "thiserror-impl 2.0.17",
3924
+]
3925
+
3926
+[[package]]
3927
+name = "thiserror-impl"
3928
+version = "1.0.69"
3929
+source = "registry+https://github.com/rust-lang/crates.io-index"
3930
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
3931
+dependencies = [
3932
+ "proc-macro2",
3933
+ "quote",
3934
+ "syn 2.0.106",
3935
+]
3936
+
3937
+[[package]]
3938
+name = "thiserror-impl"
3939
+version = "2.0.17"
3940
+source = "registry+https://github.com/rust-lang/crates.io-index"
3941
+checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
3942
+dependencies = [
3943
+ "proc-macro2",
3944
+ "quote",
3945
+ "syn 2.0.106",
3946
+]
3947
+
3948
+[[package]]
3949
+name = "time"
3950
+version = "0.3.44"
3951
+source = "registry+https://github.com/rust-lang/crates.io-index"
3952
+checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
3953
+dependencies = [
3954
+ "deranged",
3955
+ "itoa",
3956
+ "num-conv",
3957
+ "powerfmt",
3958
+ "serde",
3959
+ "time-core",
3960
+ "time-macros",
3961
+]
3962
+
3963
+[[package]]
3964
+name = "time-core"
3965
+version = "0.1.6"
3966
+source = "registry+https://github.com/rust-lang/crates.io-index"
3967
+checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
3968
+
3969
+[[package]]
3970
+name = "time-macros"
3971
+version = "0.2.24"
3972
+source = "registry+https://github.com/rust-lang/crates.io-index"
3973
+checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
3974
+dependencies = [
3975
+ "num-conv",
3976
+ "time-core",
3977
+]
3978
+
3979
+[[package]]
3980
+name = "tinystr"
3981
+version = "0.8.1"
3982
+source = "registry+https://github.com/rust-lang/crates.io-index"
3983
+checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
3984
+dependencies = [
3985
+ "displaydoc",
3986
+ "zerovec",
3987
+]
3988
+
3989
+[[package]]
3990
+name = "tokio"
3991
+version = "1.47.1"
3992
+source = "registry+https://github.com/rust-lang/crates.io-index"
3993
+checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
3994
+dependencies = [
3995
+ "backtrace",
3996
+ "bytes",
3997
+ "io-uring",
3998
+ "libc",
3999
+ "mio",
4000
+ "pin-project-lite",
4001
+ "slab",
4002
+ "socket2",
4003
+ "windows-sys 0.59.0",
4004
+]
4005
+
4006
+[[package]]
4007
+name = "tokio-util"
4008
+version = "0.7.16"
4009
+source = "registry+https://github.com/rust-lang/crates.io-index"
4010
+checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
4011
+dependencies = [
4012
+ "bytes",
4013
+ "futures-core",
4014
+ "futures-sink",
4015
+ "pin-project-lite",
4016
+ "tokio",
4017
+]
4018
+
4019
+[[package]]
4020
+name = "toml"
4021
+version = "0.8.2"
4022
+source = "registry+https://github.com/rust-lang/crates.io-index"
4023
+checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
4024
+dependencies = [
4025
+ "serde",
4026
+ "serde_spanned 0.6.9",
4027
+ "toml_datetime 0.6.3",
4028
+ "toml_edit 0.20.2",
4029
+]
4030
+
4031
+[[package]]
4032
+name = "toml"
4033
+version = "0.9.7"
4034
+source = "registry+https://github.com/rust-lang/crates.io-index"
4035
+checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0"
4036
+dependencies = [
4037
+ "indexmap 2.11.4",
4038
+ "serde_core",
4039
+ "serde_spanned 1.0.2",
4040
+ "toml_datetime 0.7.2",
4041
+ "toml_parser",
4042
+ "toml_writer",
4043
+ "winnow 0.7.13",
4044
+]
4045
+
4046
+[[package]]
4047
+name = "toml_datetime"
4048
+version = "0.6.3"
4049
+source = "registry+https://github.com/rust-lang/crates.io-index"
4050
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
4051
+dependencies = [
4052
+ "serde",
4053
+]
4054
+
4055
+[[package]]
4056
+name = "toml_datetime"
4057
+version = "0.7.2"
4058
+source = "registry+https://github.com/rust-lang/crates.io-index"
4059
+checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1"
4060
+dependencies = [
4061
+ "serde_core",
4062
+]
4063
+
4064
+[[package]]
4065
+name = "toml_edit"
4066
+version = "0.19.15"
4067
+source = "registry+https://github.com/rust-lang/crates.io-index"
4068
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
4069
+dependencies = [
4070
+ "indexmap 2.11.4",
4071
+ "toml_datetime 0.6.3",
4072
+ "winnow 0.5.40",
4073
+]
4074
+
4075
+[[package]]
4076
+name = "toml_edit"
4077
+version = "0.20.2"
4078
+source = "registry+https://github.com/rust-lang/crates.io-index"
4079
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
4080
+dependencies = [
4081
+ "indexmap 2.11.4",
4082
+ "serde",
4083
+ "serde_spanned 0.6.9",
4084
+ "toml_datetime 0.6.3",
4085
+ "winnow 0.5.40",
4086
+]
4087
+
4088
+[[package]]
4089
+name = "toml_edit"
4090
+version = "0.23.6"
4091
+source = "registry+https://github.com/rust-lang/crates.io-index"
4092
+checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b"
4093
+dependencies = [
4094
+ "indexmap 2.11.4",
4095
+ "toml_datetime 0.7.2",
4096
+ "toml_parser",
4097
+ "winnow 0.7.13",
4098
+]
4099
+
4100
+[[package]]
4101
+name = "toml_parser"
4102
+version = "1.0.3"
4103
+source = "registry+https://github.com/rust-lang/crates.io-index"
4104
+checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627"
4105
+dependencies = [
4106
+ "winnow 0.7.13",
4107
+]
4108
+
4109
+[[package]]
4110
+name = "toml_writer"
4111
+version = "1.0.3"
4112
+source = "registry+https://github.com/rust-lang/crates.io-index"
4113
+checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109"
4114
+
4115
+[[package]]
4116
+name = "tower"
4117
+version = "0.5.2"
4118
+source = "registry+https://github.com/rust-lang/crates.io-index"
4119
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
4120
+dependencies = [
4121
+ "futures-core",
4122
+ "futures-util",
4123
+ "pin-project-lite",
4124
+ "sync_wrapper",
4125
+ "tokio",
4126
+ "tower-layer",
4127
+ "tower-service",
4128
+]
4129
+
4130
+[[package]]
4131
+name = "tower-http"
4132
+version = "0.6.6"
4133
+source = "registry+https://github.com/rust-lang/crates.io-index"
4134
+checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
4135
+dependencies = [
4136
+ "bitflags 2.9.4",
4137
+ "bytes",
4138
+ "futures-util",
4139
+ "http",
4140
+ "http-body",
4141
+ "iri-string",
4142
+ "pin-project-lite",
4143
+ "tower",
4144
+ "tower-layer",
4145
+ "tower-service",
4146
+]
4147
+
4148
+[[package]]
4149
+name = "tower-layer"
4150
+version = "0.3.3"
4151
+source = "registry+https://github.com/rust-lang/crates.io-index"
4152
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
4153
+
4154
+[[package]]
4155
+name = "tower-service"
4156
+version = "0.3.3"
4157
+source = "registry+https://github.com/rust-lang/crates.io-index"
4158
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
4159
+
4160
+[[package]]
4161
+name = "tracing"
4162
+version = "0.1.41"
4163
+source = "registry+https://github.com/rust-lang/crates.io-index"
4164
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
4165
+dependencies = [
4166
+ "pin-project-lite",
4167
+ "tracing-attributes",
4168
+ "tracing-core",
4169
+]
4170
+
4171
+[[package]]
4172
+name = "tracing-attributes"
4173
+version = "0.1.30"
4174
+source = "registry+https://github.com/rust-lang/crates.io-index"
4175
+checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
4176
+dependencies = [
4177
+ "proc-macro2",
4178
+ "quote",
4179
+ "syn 2.0.106",
4180
+]
4181
+
4182
+[[package]]
4183
+name = "tracing-core"
4184
+version = "0.1.34"
4185
+source = "registry+https://github.com/rust-lang/crates.io-index"
4186
+checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
4187
+dependencies = [
4188
+ "once_cell",
4189
+]
4190
+
4191
+[[package]]
4192
+name = "tray-icon"
4193
+version = "0.21.1"
4194
+source = "registry+https://github.com/rust-lang/crates.io-index"
4195
+checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2"
4196
+dependencies = [
4197
+ "crossbeam-channel",
4198
+ "dirs",
4199
+ "libappindicator",
4200
+ "muda",
4201
+ "objc2 0.6.3",
4202
+ "objc2-app-kit",
4203
+ "objc2-core-foundation",
4204
+ "objc2-core-graphics",
4205
+ "objc2-foundation 0.3.2",
4206
+ "once_cell",
4207
+ "png",
4208
+ "serde",
4209
+ "thiserror 2.0.17",
4210
+ "windows-sys 0.59.0",
4211
+]
4212
+
4213
+[[package]]
4214
+name = "try-lock"
4215
+version = "0.2.5"
4216
+source = "registry+https://github.com/rust-lang/crates.io-index"
4217
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
4218
+
4219
+[[package]]
4220
+name = "typeid"
4221
+version = "1.0.3"
4222
+source = "registry+https://github.com/rust-lang/crates.io-index"
4223
+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
4224
+
4225
+[[package]]
4226
+name = "typenum"
4227
+version = "1.19.0"
4228
+source = "registry+https://github.com/rust-lang/crates.io-index"
4229
+checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
4230
+
4231
+[[package]]
4232
+name = "uds_windows"
4233
+version = "1.1.0"
4234
+source = "registry+https://github.com/rust-lang/crates.io-index"
4235
+checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
4236
+dependencies = [
4237
+ "memoffset",
4238
+ "tempfile",
4239
+ "winapi",
4240
+]
4241
+
4242
+[[package]]
4243
+name = "unic-char-property"
4244
+version = "0.9.0"
4245
+source = "registry+https://github.com/rust-lang/crates.io-index"
4246
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
4247
+dependencies = [
4248
+ "unic-char-range",
4249
+]
4250
+
4251
+[[package]]
4252
+name = "unic-char-range"
4253
+version = "0.9.0"
4254
+source = "registry+https://github.com/rust-lang/crates.io-index"
4255
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
4256
+
4257
+[[package]]
4258
+name = "unic-common"
4259
+version = "0.9.0"
4260
+source = "registry+https://github.com/rust-lang/crates.io-index"
4261
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
4262
+
4263
+[[package]]
4264
+name = "unic-ucd-ident"
4265
+version = "0.9.0"
4266
+source = "registry+https://github.com/rust-lang/crates.io-index"
4267
+checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987"
4268
+dependencies = [
4269
+ "unic-char-property",
4270
+ "unic-char-range",
4271
+ "unic-ucd-version",
4272
+]
4273
+
4274
+[[package]]
4275
+name = "unic-ucd-version"
4276
+version = "0.9.0"
4277
+source = "registry+https://github.com/rust-lang/crates.io-index"
4278
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
4279
+dependencies = [
4280
+ "unic-common",
4281
+]
4282
+
4283
+[[package]]
4284
+name = "unicode-ident"
4285
+version = "1.0.19"
4286
+source = "registry+https://github.com/rust-lang/crates.io-index"
4287
+checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
4288
+
4289
+[[package]]
4290
+name = "unicode-segmentation"
4291
+version = "1.12.0"
4292
+source = "registry+https://github.com/rust-lang/crates.io-index"
4293
+checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
4294
+
4295
+[[package]]
4296
+name = "url"
4297
+version = "2.5.7"
4298
+source = "registry+https://github.com/rust-lang/crates.io-index"
4299
+checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
4300
+dependencies = [
4301
+ "form_urlencoded",
4302
+ "idna",
4303
+ "percent-encoding",
4304
+ "serde",
4305
+]
4306
+
4307
+[[package]]
4308
+name = "urlpattern"
4309
+version = "0.3.0"
4310
+source = "registry+https://github.com/rust-lang/crates.io-index"
4311
+checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d"
4312
+dependencies = [
4313
+ "regex",
4314
+ "serde",
4315
+ "unic-ucd-ident",
4316
+ "url",
4317
+]
4318
+
4319
+[[package]]
4320
+name = "utf-8"
4321
+version = "0.7.6"
4322
+source = "registry+https://github.com/rust-lang/crates.io-index"
4323
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
4324
+
4325
+[[package]]
4326
+name = "utf8_iter"
4327
+version = "1.0.4"
4328
+source = "registry+https://github.com/rust-lang/crates.io-index"
4329
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
4330
+
4331
+[[package]]
4332
+name = "uuid"
4333
+version = "1.18.1"
4334
+source = "registry+https://github.com/rust-lang/crates.io-index"
4335
+checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
4336
+dependencies = [
4337
+ "getrandom 0.3.3",
4338
+ "js-sys",
4339
+ "serde",
4340
+ "wasm-bindgen",
4341
+]
4342
+
4343
+[[package]]
4344
+name = "version-compare"
4345
+version = "0.2.0"
4346
+source = "registry+https://github.com/rust-lang/crates.io-index"
4347
+checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
4348
+
4349
+[[package]]
4350
+name = "version_check"
4351
+version = "0.9.5"
4352
+source = "registry+https://github.com/rust-lang/crates.io-index"
4353
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
4354
+
4355
+[[package]]
4356
+name = "vswhom"
4357
+version = "0.1.0"
4358
+source = "registry+https://github.com/rust-lang/crates.io-index"
4359
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
4360
+dependencies = [
4361
+ "libc",
4362
+ "vswhom-sys",
4363
+]
4364
+
4365
+[[package]]
4366
+name = "vswhom-sys"
4367
+version = "0.1.3"
4368
+source = "registry+https://github.com/rust-lang/crates.io-index"
4369
+checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150"
4370
+dependencies = [
4371
+ "cc",
4372
+ "libc",
4373
+]
4374
+
4375
+[[package]]
4376
+name = "walkdir"
4377
+version = "2.5.0"
4378
+source = "registry+https://github.com/rust-lang/crates.io-index"
4379
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
4380
+dependencies = [
4381
+ "same-file",
4382
+ "winapi-util",
4383
+]
4384
+
4385
+[[package]]
4386
+name = "want"
4387
+version = "0.3.1"
4388
+source = "registry+https://github.com/rust-lang/crates.io-index"
4389
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
4390
+dependencies = [
4391
+ "try-lock",
4392
+]
4393
+
4394
+[[package]]
4395
+name = "wasi"
4396
+version = "0.9.0+wasi-snapshot-preview1"
4397
+source = "registry+https://github.com/rust-lang/crates.io-index"
4398
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
4399
+
4400
+[[package]]
4401
+name = "wasi"
4402
+version = "0.11.1+wasi-snapshot-preview1"
4403
+source = "registry+https://github.com/rust-lang/crates.io-index"
4404
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
4405
+
4406
+[[package]]
4407
+name = "wasi"
4408
+version = "0.14.7+wasi-0.2.4"
4409
+source = "registry+https://github.com/rust-lang/crates.io-index"
4410
+checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
4411
+dependencies = [
4412
+ "wasip2",
4413
+]
4414
+
4415
+[[package]]
4416
+name = "wasip2"
4417
+version = "1.0.1+wasi-0.2.4"
4418
+source = "registry+https://github.com/rust-lang/crates.io-index"
4419
+checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
4420
+dependencies = [
4421
+ "wit-bindgen",
4422
+]
4423
+
4424
+[[package]]
4425
+name = "wasm-bindgen"
4426
+version = "0.2.104"
4427
+source = "registry+https://github.com/rust-lang/crates.io-index"
4428
+checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
4429
+dependencies = [
4430
+ "cfg-if",
4431
+ "once_cell",
4432
+ "rustversion",
4433
+ "wasm-bindgen-macro",
4434
+ "wasm-bindgen-shared",
4435
+]
4436
+
4437
+[[package]]
4438
+name = "wasm-bindgen-backend"
4439
+version = "0.2.104"
4440
+source = "registry+https://github.com/rust-lang/crates.io-index"
4441
+checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
4442
+dependencies = [
4443
+ "bumpalo",
4444
+ "log",
4445
+ "proc-macro2",
4446
+ "quote",
4447
+ "syn 2.0.106",
4448
+ "wasm-bindgen-shared",
4449
+]
4450
+
4451
+[[package]]
4452
+name = "wasm-bindgen-futures"
4453
+version = "0.4.54"
4454
+source = "registry+https://github.com/rust-lang/crates.io-index"
4455
+checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c"
4456
+dependencies = [
4457
+ "cfg-if",
4458
+ "js-sys",
4459
+ "once_cell",
4460
+ "wasm-bindgen",
4461
+ "web-sys",
4462
+]
4463
+
4464
+[[package]]
4465
+name = "wasm-bindgen-macro"
4466
+version = "0.2.104"
4467
+source = "registry+https://github.com/rust-lang/crates.io-index"
4468
+checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
4469
+dependencies = [
4470
+ "quote",
4471
+ "wasm-bindgen-macro-support",
4472
+]
4473
+
4474
+[[package]]
4475
+name = "wasm-bindgen-macro-support"
4476
+version = "0.2.104"
4477
+source = "registry+https://github.com/rust-lang/crates.io-index"
4478
+checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
4479
+dependencies = [
4480
+ "proc-macro2",
4481
+ "quote",
4482
+ "syn 2.0.106",
4483
+ "wasm-bindgen-backend",
4484
+ "wasm-bindgen-shared",
4485
+]
4486
+
4487
+[[package]]
4488
+name = "wasm-bindgen-shared"
4489
+version = "0.2.104"
4490
+source = "registry+https://github.com/rust-lang/crates.io-index"
4491
+checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
4492
+dependencies = [
4493
+ "unicode-ident",
4494
+]
4495
+
4496
+[[package]]
4497
+name = "wasm-streams"
4498
+version = "0.4.2"
4499
+source = "registry+https://github.com/rust-lang/crates.io-index"
4500
+checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
4501
+dependencies = [
4502
+ "futures-util",
4503
+ "js-sys",
4504
+ "wasm-bindgen",
4505
+ "wasm-bindgen-futures",
4506
+ "web-sys",
4507
+]
4508
+
4509
+[[package]]
4510
+name = "web-sys"
4511
+version = "0.3.81"
4512
+source = "registry+https://github.com/rust-lang/crates.io-index"
4513
+checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
4514
+dependencies = [
4515
+ "js-sys",
4516
+ "wasm-bindgen",
4517
+]
4518
+
4519
+[[package]]
4520
+name = "webkit2gtk"
4521
+version = "2.0.1"
4522
+source = "registry+https://github.com/rust-lang/crates.io-index"
4523
+checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a"
4524
+dependencies = [
4525
+ "bitflags 1.3.2",
4526
+ "cairo-rs",
4527
+ "gdk",
4528
+ "gdk-sys",
4529
+ "gio",
4530
+ "gio-sys",
4531
+ "glib",
4532
+ "glib-sys",
4533
+ "gobject-sys",
4534
+ "gtk",
4535
+ "gtk-sys",
4536
+ "javascriptcore-rs",
4537
+ "libc",
4538
+ "once_cell",
4539
+ "soup3",
4540
+ "webkit2gtk-sys",
4541
+]
4542
+
4543
+[[package]]
4544
+name = "webkit2gtk-sys"
4545
+version = "2.0.1"
4546
+source = "registry+https://github.com/rust-lang/crates.io-index"
4547
+checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c"
4548
+dependencies = [
4549
+ "bitflags 1.3.2",
4550
+ "cairo-sys-rs",
4551
+ "gdk-sys",
4552
+ "gio-sys",
4553
+ "glib-sys",
4554
+ "gobject-sys",
4555
+ "gtk-sys",
4556
+ "javascriptcore-rs-sys",
4557
+ "libc",
4558
+ "pkg-config",
4559
+ "soup3-sys",
4560
+ "system-deps",
4561
+]
4562
+
4563
+[[package]]
4564
+name = "webview2-com"
4565
+version = "0.38.0"
4566
+source = "registry+https://github.com/rust-lang/crates.io-index"
4567
+checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4"
4568
+dependencies = [
4569
+ "webview2-com-macros",
4570
+ "webview2-com-sys",
4571
+ "windows",
4572
+ "windows-core 0.61.2",
4573
+ "windows-implement",
4574
+ "windows-interface",
4575
+]
4576
+
4577
+[[package]]
4578
+name = "webview2-com-macros"
4579
+version = "0.8.0"
4580
+source = "registry+https://github.com/rust-lang/crates.io-index"
4581
+checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
4582
+dependencies = [
4583
+ "proc-macro2",
4584
+ "quote",
4585
+ "syn 2.0.106",
4586
+]
4587
+
4588
+[[package]]
4589
+name = "webview2-com-sys"
4590
+version = "0.38.0"
4591
+source = "registry+https://github.com/rust-lang/crates.io-index"
4592
+checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c"
4593
+dependencies = [
4594
+ "thiserror 2.0.17",
4595
+ "windows",
4596
+ "windows-core 0.61.2",
4597
+]
4598
+
4599
+[[package]]
4600
+name = "winapi"
4601
+version = "0.3.9"
4602
+source = "registry+https://github.com/rust-lang/crates.io-index"
4603
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
4604
+dependencies = [
4605
+ "winapi-i686-pc-windows-gnu",
4606
+ "winapi-x86_64-pc-windows-gnu",
4607
+]
4608
+
4609
+[[package]]
4610
+name = "winapi-i686-pc-windows-gnu"
4611
+version = "0.4.0"
4612
+source = "registry+https://github.com/rust-lang/crates.io-index"
4613
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
4614
+
4615
+[[package]]
4616
+name = "winapi-util"
4617
+version = "0.1.11"
4618
+source = "registry+https://github.com/rust-lang/crates.io-index"
4619
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
4620
+dependencies = [
4621
+ "windows-sys 0.61.2",
4622
+]
4623
+
4624
+[[package]]
4625
+name = "winapi-x86_64-pc-windows-gnu"
4626
+version = "0.4.0"
4627
+source = "registry+https://github.com/rust-lang/crates.io-index"
4628
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
4629
+
4630
+[[package]]
4631
+name = "window-vibrancy"
4632
+version = "0.6.0"
4633
+source = "registry+https://github.com/rust-lang/crates.io-index"
4634
+checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
4635
+dependencies = [
4636
+ "objc2 0.6.3",
4637
+ "objc2-app-kit",
4638
+ "objc2-core-foundation",
4639
+ "objc2-foundation 0.3.2",
4640
+ "raw-window-handle",
4641
+ "windows-sys 0.59.0",
4642
+ "windows-version",
4643
+]
4644
+
4645
+[[package]]
4646
+name = "windows"
4647
+version = "0.61.3"
4648
+source = "registry+https://github.com/rust-lang/crates.io-index"
4649
+checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4650
+dependencies = [
4651
+ "windows-collections",
4652
+ "windows-core 0.61.2",
4653
+ "windows-future",
4654
+ "windows-link 0.1.3",
4655
+ "windows-numerics",
4656
+]
4657
+
4658
+[[package]]
4659
+name = "windows-collections"
4660
+version = "0.2.0"
4661
+source = "registry+https://github.com/rust-lang/crates.io-index"
4662
+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4663
+dependencies = [
4664
+ "windows-core 0.61.2",
4665
+]
4666
+
4667
+[[package]]
4668
+name = "windows-core"
4669
+version = "0.61.2"
4670
+source = "registry+https://github.com/rust-lang/crates.io-index"
4671
+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
4672
+dependencies = [
4673
+ "windows-implement",
4674
+ "windows-interface",
4675
+ "windows-link 0.1.3",
4676
+ "windows-result 0.3.4",
4677
+ "windows-strings 0.4.2",
4678
+]
4679
+
4680
+[[package]]
4681
+name = "windows-core"
4682
+version = "0.62.2"
4683
+source = "registry+https://github.com/rust-lang/crates.io-index"
4684
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
4685
+dependencies = [
4686
+ "windows-implement",
4687
+ "windows-interface",
4688
+ "windows-link 0.2.1",
4689
+ "windows-result 0.4.1",
4690
+ "windows-strings 0.5.1",
4691
+]
4692
+
4693
+[[package]]
4694
+name = "windows-future"
4695
+version = "0.2.1"
4696
+source = "registry+https://github.com/rust-lang/crates.io-index"
4697
+checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4698
+dependencies = [
4699
+ "windows-core 0.61.2",
4700
+ "windows-link 0.1.3",
4701
+ "windows-threading",
4702
+]
4703
+
4704
+[[package]]
4705
+name = "windows-implement"
4706
+version = "0.60.2"
4707
+source = "registry+https://github.com/rust-lang/crates.io-index"
4708
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
4709
+dependencies = [
4710
+ "proc-macro2",
4711
+ "quote",
4712
+ "syn 2.0.106",
4713
+]
4714
+
4715
+[[package]]
4716
+name = "windows-interface"
4717
+version = "0.59.3"
4718
+source = "registry+https://github.com/rust-lang/crates.io-index"
4719
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
4720
+dependencies = [
4721
+ "proc-macro2",
4722
+ "quote",
4723
+ "syn 2.0.106",
4724
+]
4725
+
4726
+[[package]]
4727
+name = "windows-link"
4728
+version = "0.1.3"
4729
+source = "registry+https://github.com/rust-lang/crates.io-index"
4730
+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4731
+
4732
+[[package]]
4733
+name = "windows-link"
4734
+version = "0.2.1"
4735
+source = "registry+https://github.com/rust-lang/crates.io-index"
4736
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
4737
+
4738
+[[package]]
4739
+name = "windows-numerics"
4740
+version = "0.2.0"
4741
+source = "registry+https://github.com/rust-lang/crates.io-index"
4742
+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4743
+dependencies = [
4744
+ "windows-core 0.61.2",
4745
+ "windows-link 0.1.3",
4746
+]
4747
+
4748
+[[package]]
4749
+name = "windows-result"
4750
+version = "0.3.4"
4751
+source = "registry+https://github.com/rust-lang/crates.io-index"
4752
+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4753
+dependencies = [
4754
+ "windows-link 0.1.3",
4755
+]
4756
+
4757
+[[package]]
4758
+name = "windows-result"
4759
+version = "0.4.1"
4760
+source = "registry+https://github.com/rust-lang/crates.io-index"
4761
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
4762
+dependencies = [
4763
+ "windows-link 0.2.1",
4764
+]
4765
+
4766
+[[package]]
4767
+name = "windows-strings"
4768
+version = "0.4.2"
4769
+source = "registry+https://github.com/rust-lang/crates.io-index"
4770
+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4771
+dependencies = [
4772
+ "windows-link 0.1.3",
4773
+]
4774
+
4775
+[[package]]
4776
+name = "windows-strings"
4777
+version = "0.5.1"
4778
+source = "registry+https://github.com/rust-lang/crates.io-index"
4779
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
4780
+dependencies = [
4781
+ "windows-link 0.2.1",
4782
+]
4783
+
4784
+[[package]]
4785
+name = "windows-sys"
4786
+version = "0.45.0"
4787
+source = "registry+https://github.com/rust-lang/crates.io-index"
4788
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
4789
+dependencies = [
4790
+ "windows-targets 0.42.2",
4791
+]
4792
+
4793
+[[package]]
4794
+name = "windows-sys"
4795
+version = "0.59.0"
4796
+source = "registry+https://github.com/rust-lang/crates.io-index"
4797
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
4798
+dependencies = [
4799
+ "windows-targets 0.52.6",
4800
+]
4801
+
4802
+[[package]]
4803
+name = "windows-sys"
4804
+version = "0.60.2"
4805
+source = "registry+https://github.com/rust-lang/crates.io-index"
4806
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
4807
+dependencies = [
4808
+ "windows-targets 0.53.5",
4809
+]
4810
+
4811
+[[package]]
4812
+name = "windows-sys"
4813
+version = "0.61.2"
4814
+source = "registry+https://github.com/rust-lang/crates.io-index"
4815
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
4816
+dependencies = [
4817
+ "windows-link 0.2.1",
4818
+]
4819
+
4820
+[[package]]
4821
+name = "windows-targets"
4822
+version = "0.42.2"
4823
+source = "registry+https://github.com/rust-lang/crates.io-index"
4824
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
4825
+dependencies = [
4826
+ "windows_aarch64_gnullvm 0.42.2",
4827
+ "windows_aarch64_msvc 0.42.2",
4828
+ "windows_i686_gnu 0.42.2",
4829
+ "windows_i686_msvc 0.42.2",
4830
+ "windows_x86_64_gnu 0.42.2",
4831
+ "windows_x86_64_gnullvm 0.42.2",
4832
+ "windows_x86_64_msvc 0.42.2",
4833
+]
4834
+
4835
+[[package]]
4836
+name = "windows-targets"
4837
+version = "0.52.6"
4838
+source = "registry+https://github.com/rust-lang/crates.io-index"
4839
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
4840
+dependencies = [
4841
+ "windows_aarch64_gnullvm 0.52.6",
4842
+ "windows_aarch64_msvc 0.52.6",
4843
+ "windows_i686_gnu 0.52.6",
4844
+ "windows_i686_gnullvm 0.52.6",
4845
+ "windows_i686_msvc 0.52.6",
4846
+ "windows_x86_64_gnu 0.52.6",
4847
+ "windows_x86_64_gnullvm 0.52.6",
4848
+ "windows_x86_64_msvc 0.52.6",
4849
+]
4850
+
4851
+[[package]]
4852
+name = "windows-targets"
4853
+version = "0.53.5"
4854
+source = "registry+https://github.com/rust-lang/crates.io-index"
4855
+checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
4856
+dependencies = [
4857
+ "windows-link 0.2.1",
4858
+ "windows_aarch64_gnullvm 0.53.1",
4859
+ "windows_aarch64_msvc 0.53.1",
4860
+ "windows_i686_gnu 0.53.1",
4861
+ "windows_i686_gnullvm 0.53.1",
4862
+ "windows_i686_msvc 0.53.1",
4863
+ "windows_x86_64_gnu 0.53.1",
4864
+ "windows_x86_64_gnullvm 0.53.1",
4865
+ "windows_x86_64_msvc 0.53.1",
4866
+]
4867
+
4868
+[[package]]
4869
+name = "windows-threading"
4870
+version = "0.1.0"
4871
+source = "registry+https://github.com/rust-lang/crates.io-index"
4872
+checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4873
+dependencies = [
4874
+ "windows-link 0.1.3",
4875
+]
4876
+
4877
+[[package]]
4878
+name = "windows-version"
4879
+version = "0.1.7"
4880
+source = "registry+https://github.com/rust-lang/crates.io-index"
4881
+checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
4882
+dependencies = [
4883
+ "windows-link 0.2.1",
4884
+]
4885
+
4886
+[[package]]
4887
+name = "windows_aarch64_gnullvm"
4888
+version = "0.42.2"
4889
+source = "registry+https://github.com/rust-lang/crates.io-index"
4890
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
4891
+
4892
+[[package]]
4893
+name = "windows_aarch64_gnullvm"
4894
+version = "0.52.6"
4895
+source = "registry+https://github.com/rust-lang/crates.io-index"
4896
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
4897
+
4898
+[[package]]
4899
+name = "windows_aarch64_gnullvm"
4900
+version = "0.53.1"
4901
+source = "registry+https://github.com/rust-lang/crates.io-index"
4902
+checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
4903
+
4904
+[[package]]
4905
+name = "windows_aarch64_msvc"
4906
+version = "0.42.2"
4907
+source = "registry+https://github.com/rust-lang/crates.io-index"
4908
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
4909
+
4910
+[[package]]
4911
+name = "windows_aarch64_msvc"
4912
+version = "0.52.6"
4913
+source = "registry+https://github.com/rust-lang/crates.io-index"
4914
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
4915
+
4916
+[[package]]
4917
+name = "windows_aarch64_msvc"
4918
+version = "0.53.1"
4919
+source = "registry+https://github.com/rust-lang/crates.io-index"
4920
+checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
4921
+
4922
+[[package]]
4923
+name = "windows_i686_gnu"
4924
+version = "0.42.2"
4925
+source = "registry+https://github.com/rust-lang/crates.io-index"
4926
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
4927
+
4928
+[[package]]
4929
+name = "windows_i686_gnu"
4930
+version = "0.52.6"
4931
+source = "registry+https://github.com/rust-lang/crates.io-index"
4932
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
4933
+
4934
+[[package]]
4935
+name = "windows_i686_gnu"
4936
+version = "0.53.1"
4937
+source = "registry+https://github.com/rust-lang/crates.io-index"
4938
+checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
4939
+
4940
+[[package]]
4941
+name = "windows_i686_gnullvm"
4942
+version = "0.52.6"
4943
+source = "registry+https://github.com/rust-lang/crates.io-index"
4944
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
4945
+
4946
+[[package]]
4947
+name = "windows_i686_gnullvm"
4948
+version = "0.53.1"
4949
+source = "registry+https://github.com/rust-lang/crates.io-index"
4950
+checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
4951
+
4952
+[[package]]
4953
+name = "windows_i686_msvc"
4954
+version = "0.42.2"
4955
+source = "registry+https://github.com/rust-lang/crates.io-index"
4956
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
4957
+
4958
+[[package]]
4959
+name = "windows_i686_msvc"
4960
+version = "0.52.6"
4961
+source = "registry+https://github.com/rust-lang/crates.io-index"
4962
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
4963
+
4964
+[[package]]
4965
+name = "windows_i686_msvc"
4966
+version = "0.53.1"
4967
+source = "registry+https://github.com/rust-lang/crates.io-index"
4968
+checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
4969
+
4970
+[[package]]
4971
+name = "windows_x86_64_gnu"
4972
+version = "0.42.2"
4973
+source = "registry+https://github.com/rust-lang/crates.io-index"
4974
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
4975
+
4976
+[[package]]
4977
+name = "windows_x86_64_gnu"
4978
+version = "0.52.6"
4979
+source = "registry+https://github.com/rust-lang/crates.io-index"
4980
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
4981
+
4982
+[[package]]
4983
+name = "windows_x86_64_gnu"
4984
+version = "0.53.1"
4985
+source = "registry+https://github.com/rust-lang/crates.io-index"
4986
+checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
4987
+
4988
+[[package]]
4989
+name = "windows_x86_64_gnullvm"
4990
+version = "0.42.2"
4991
+source = "registry+https://github.com/rust-lang/crates.io-index"
4992
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
4993
+
4994
+[[package]]
4995
+name = "windows_x86_64_gnullvm"
4996
+version = "0.52.6"
4997
+source = "registry+https://github.com/rust-lang/crates.io-index"
4998
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
4999
+
This file is too large to show in full.
src-tauri/Cargo.toml
new
+25
@@ -0,0 +1,25 @@
1
+[package]
2
+name = "streetcut"
3
+version = "1.0.0"
4
+description = "A Tauri App"
5
+authors = ["you"]
6
+edition = "2021"
7
+
8
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
9
+
10
+[lib]
11
+# The `_lib` suffix may seem redundant but it is necessary
12
+# to make the lib name unique and wouldn't conflict with the bin name.
13
+# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
14
+name = "streetcut_lib"
15
+crate-type = ["staticlib", "cdylib", "rlib"]
16
+
17
+[dependencies]
18
+serde = { version = "1", features = ["derive"] }
19
+serde_json = "1"
20
+tauri = { version = "2", features = [] }
21
+tauri-plugin-haptics = "2"
22
+tauri-plugin-opener = "2"
23
+
24
+[build-dependencies]
25
+tauri-build = { version = "2", features = [] }
src-tauri/Entitlements.plist
new
+14
@@ -0,0 +1,14 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+ <dict>
5
+ <key>com.apple.security.app-sandbox</key>
6
+ <true/>
7
+ <key>com.apple.application-identifier</key>
8
+ <string>2TQF86ZACD.xyz.smbcloud.streetcut</string>
9
+ <key>com.apple.developer.team-identifier</key>
10
+ <string>2TQF86ZACD</string>
11
+ <key>com.apple.security.network.client</key>
12
+ <true/>
13
+ </dict>
14
+</plist>
src-tauri/Info.plist
new
+10
@@ -0,0 +1,10 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+ <key>ITSAppUsesNonExemptEncryption</key>
6
+ <false/>
7
+ <key>LSApplicationCategoryType</key>
8
+ <string>public.app-category.education</string>
9
+</dict>
10
+</plist>
src-tauri/build.rs
new
+3
@@ -0,0 +1,3 @@
1
+fn main() {
2
+ tauri_build::build()
3
+}
src-tauri/capabilities/default.json
new
+14
@@ -0,0 +1,14 @@
1
+{
2
+ "$schema": "../gen/schemas/desktop-schema.json",
3
+ "identifier": "default",
4
+ "description": "Capability for the main window",
5
+ "windows": ["main"],
6
+ "permissions": [
7
+ "core:default",
8
+ "opener:default",
9
+ "haptics:allow-impact-feedback",
10
+ "haptics:allow-notification-feedback",
11
+ "haptics:allow-selection-feedback",
12
+ "haptics:allow-vibrate"
13
+ ]
14
+}
src-tauri/gen-override/.keep
src-tauri/gen-override/android/.keep
src-tauri/gen-override/android/app/build.gradle.kts
new
+86
@@ -0,0 +1,86 @@
1
+import java.io.FileInputStream
2
+import java.util.Properties
3
+
4
+plugins {
5
+ id("com.android.application")
6
+ id("org.jetbrains.kotlin.android")
7
+ id("rust")
8
+}
9
+
10
+val tauriProperties = Properties().apply {
11
+ val propFile = file("tauri.properties")
12
+ if (propFile.exists()) {
13
+ propFile.inputStream().use { load(it) }
14
+ }
15
+}
16
+
17
+android {
18
+ compileSdk = 36
19
+ namespace = "xyz.smbcloud.streetcut"
20
+ defaultConfig {
21
+ manifestPlaceholders["usesCleartextTraffic"] = "false"
22
+ applicationId = "xyz.smbcloud.streetcut"
23
+ minSdk = 24
24
+ targetSdk = 36
25
+ versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt()
26
+ versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0")
27
+ }
28
+ signingConfigs {
29
+ create("release") {
30
+ val keystorePropertiesFile = rootProject.file("keystore.properties")
31
+ val keystoreProperties = Properties()
32
+ if (keystorePropertiesFile.exists()) {
33
+ keystoreProperties.load(FileInputStream(keystorePropertiesFile))
34
+ }
35
+
36
+ keyAlias = keystoreProperties["keyAlias"] as String
37
+ keyPassword = keystoreProperties["password"] as String
38
+ storeFile = file(keystoreProperties["storeFile"] as String)
39
+ storePassword = keystoreProperties["password"] as String
40
+ }
41
+ }
42
+ buildTypes {
43
+ getByName("debug") {
44
+ manifestPlaceholders["usesCleartextTraffic"] = "true"
45
+ isDebuggable = true
46
+ isJniDebuggable = true
47
+ isMinifyEnabled = false
48
+ packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so")
49
+ jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so")
50
+ jniLibs.keepDebugSymbols.add("*/x86/*.so")
51
+ jniLibs.keepDebugSymbols.add("*/x86_64/*.so")
52
+ }
53
+ }
54
+ getByName("release") {
55
+ signingConfig = signingConfigs.getByName("release")
56
+ isMinifyEnabled = true
57
+ proguardFiles(
58
+ *fileTree(".") { include("**/*.pro") }
59
+ .plus(getDefaultProguardFile("proguard-android-optimize.txt"))
60
+ .toList().toTypedArray()
61
+ )
62
+ }
63
+ }
64
+ kotlinOptions {
65
+ jvmTarget = "1.8"
66
+ }
67
+ buildFeatures {
68
+ buildConfig = true
69
+ }
70
+}
71
+
72
+rust {
73
+ rootDirRel = "../../../"
74
+}
75
+
76
+dependencies {
77
+ implementation("androidx.webkit:webkit:1.14.0")
78
+ implementation("androidx.appcompat:appcompat:1.7.1")
79
+ implementation("androidx.activity:activity-ktx:1.10.1")
80
+ implementation("com.google.android.material:material:1.12.0")
81
+ testImplementation("junit:junit:4.13.2")
82
+ androidTestImplementation("androidx.test.ext:junit:1.1.4")
83
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
84
+}
85
+
86
+apply(from = "tauri.build.gradle.kts")
src-tauri/gen-override/android/app/src/.keep
src-tauri/gen-override/android/app/src/main/.keep
src-tauri/gen-override/android/app/src/main/AndroidManifest.xml
new
+47
@@ -0,0 +1,47 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <uses-permission android:name="android.permission.INTERNET" />
4
+
5
+ <!-- AndroidTV support -->
6
+ <uses-feature android:name="android.software.leanback" android:required="false" />
7
+ <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
8
+ <uses-feature android:name="android.hardware.faketouch" android:required="false"/>
9
+ <uses-feature android:name="android.hardware.telephony" android:required="false"/>
10
+ <uses-feature android:name="android.hardware.camera" android:required="false"/>
11
+ <uses-feature android:name="android.hardware.nfc" android:required="false"/>
12
+ <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
13
+ <uses-feature android:name="android.hardware.microphone" android:required="false"/>
14
+ <uses-feature android:name="android.hardware.sensor" android:required="false"/>
15
+ <!-- Some TV devices have an ethernet connection only -->
16
+ <uses-feature android:name="android.hardware.wifi" android:required="false"/>
17
+
18
+ <application
19
+ android:icon="@mipmap/ic_launcher"
20
+ android:label="@string/app_name"
21
+ android:theme="@style/Theme.streetcut"
22
+ android:usesCleartextTraffic="${usesCleartextTraffic}">
23
+ <activity
24
+ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
25
+ android:launchMode="singleTask"
26
+ android:label="@string/main_activity_title"
27
+ android:name=".MainActivity"
28
+ android:exported="true">
29
+ <intent-filter>
30
+ <action android:name="android.intent.action.MAIN" />
31
+ <category android:name="android.intent.category.LAUNCHER" />
32
+ <!-- AndroidTV support -->
33
+ <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
34
+ </intent-filter>
35
+ </activity>
36
+
37
+ <provider
38
+ android:name="androidx.core.content.FileProvider"
39
+ android:authorities="${applicationId}.fileprovider"
40
+ android:exported="false"
41
+ android:grantUriPermissions="true">
42
+ <meta-data
43
+ android:name="android.support.FILE_PROVIDER_PATHS"
44
+ android:resource="@xml/file_paths" />
45
+ </provider>
46
+ </application>
47
+</manifest>
src-tauri/gen-override/android/keystore.properties
new
+3
@@ -0,0 +1,3 @@
1
+password=123456
2
+keyAlias=upload
3
+storeFile=/Users/setoelkahfi/Repositories/google-certificates/upload-keystore.jks
src-tauri/icons/128x128.png
Binary files /dev/null and b/src-tauri/icons/128x128.png differ
src-tauri/icons/128x128@2x.png
Binary files /dev/null and b/src-tauri/icons/128x128@2x.png differ
src-tauri/icons/32x32.png
Binary files /dev/null and b/src-tauri/icons/32x32.png differ
src-tauri/icons/64x64.png
Binary files /dev/null and b/src-tauri/icons/64x64.png differ
src-tauri/icons/Square107x107Logo.png
Binary files /dev/null and b/src-tauri/icons/Square107x107Logo.png differ
src-tauri/icons/Square142x142Logo.png
Binary files /dev/null and b/src-tauri/icons/Square142x142Logo.png differ
src-tauri/icons/Square150x150Logo.png
Binary files /dev/null and b/src-tauri/icons/Square150x150Logo.png differ
src-tauri/icons/Square284x284Logo.png
Binary files /dev/null and b/src-tauri/icons/Square284x284Logo.png differ
src-tauri/icons/Square30x30Logo.png
Binary files /dev/null and b/src-tauri/icons/Square30x30Logo.png differ
src-tauri/icons/Square310x310Logo.png
Binary files /dev/null and b/src-tauri/icons/Square310x310Logo.png differ
src-tauri/icons/Square44x44Logo.png
Binary files /dev/null and b/src-tauri/icons/Square44x44Logo.png differ
src-tauri/icons/Square71x71Logo.png
Binary files /dev/null and b/src-tauri/icons/Square71x71Logo.png differ
src-tauri/icons/Square89x89Logo.png
Binary files /dev/null and b/src-tauri/icons/Square89x89Logo.png differ
src-tauri/icons/StoreLogo.png
Binary files /dev/null and b/src-tauri/icons/StoreLogo.png differ
src-tauri/icons/icon.icns
Binary files /dev/null and b/src-tauri/icons/icon.icns differ
src-tauri/icons/icon.ico
Binary files /dev/null and b/src-tauri/icons/icon.ico differ
src-tauri/icons/icon.png
Binary files /dev/null and b/src-tauri/icons/icon.png differ
src-tauri/src/lib.rs
new
+15
@@ -0,0 +1,15 @@
1
+// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
2
+#[tauri::command]
3
+fn greet(name: &str) -> String {
4
+ format!("Hello, {}! You've been greeted from Rust!", name)
5
+}
6
+
7
+#[cfg_attr(mobile, tauri::mobile_entry_point)]
8
+pub fn run() {
9
+ tauri::Builder::default()
10
+ .plugin(tauri_plugin_opener::init())
11
+ .plugin(tauri_plugin_haptics::init())
12
+ .invoke_handler(tauri::generate_handler![greet])
13
+ .run(tauri::generate_context!())
14
+ .expect("error while running tauri application");
15
+}
src-tauri/src/main.rs
new
+6
@@ -0,0 +1,6 @@
1
+// Prevents additional console window on Windows in release, DO NOT REMOVE!!
2
+#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3
+
4
+fn main() {
5
+ streetcut_lib::run()
6
+}
src-tauri/tauri.conf.json
new
+43
@@ -0,0 +1,43 @@
1
+{
2
+ "$schema": "https://schema.tauri.app/config/2",
3
+ "productName": "StreetCut",
4
+ "version": "1.0.0",
5
+ "identifier": "xyz.smbcloud.streetcut",
6
+ "build": {
7
+ "beforeDevCommand": "pnpm dev",
8
+ "devUrl": "http://localhost:1420",
9
+ "beforeBuildCommand": "pnpm build",
10
+ "frontendDist": "../dist"
11
+ },
12
+ "app": {
13
+ "windows": [
14
+ {
15
+ "title": "StreetCut",
16
+ "width": 800,
17
+ "height": 600
18
+ }
19
+ ],
20
+ "security": {
21
+ "csp": null
22
+ }
23
+ },
24
+ "bundle": {
25
+ "active": true,
26
+ "targets": "all",
27
+ "icon": [
28
+ "icons/32x32.png",
29
+ "icons/128x128.png",
30
+ "icons/128x128@2x.png",
31
+ "icons/icon.icns",
32
+ "icons/icon.ico"
33
+ ],
34
+ "android": {
35
+ "minSdkVersion": 24,
36
+ "versionCode": 1
37
+ },
38
+ "iOS": {
39
+ "developmentTeam": "2TQF86ZACD",
40
+ "minimumSystemVersion": "14.0"
41
+ }
42
+ }
43
+}
src-tauri/tauri.prod-macos-appstore.conf.json
new
+11
@@ -0,0 +1,11 @@
1
+{
2
+ "bundle": {
3
+ "macOS": {
4
+ "entitlements": "./Entitlements.plist",
5
+ "signingIdentity": "your_signing_identity_here",
6
+ "files": {
7
+ "embedded.provisionprofile": "/path/to/provisionprofile.provisionprofile"
8
+ }
9
+ }
10
+ }
11
+}
src/App.tsx
new
+47
@@ -0,0 +1,47 @@
1
+import { Routes, Route, useLocation } from "react-router-dom";
2
+import * as Tooltip from "@radix-ui/react-tooltip";
3
+
4
+import Navbar from "./components/Navbar";
5
+import AnimatedPage from "./components/AnimatedPage";
6
+import Home from "./pages/Home";
7
+import Lessons from "./pages/Lessons";
8
+import Profile from "./pages/Profile";
9
+
10
+export default function App() {
11
+ const location = useLocation();
12
+ return (
13
+ <Tooltip.Provider>
14
+ <div className="bg-gradient-to-tr from-fuchsia-100 to-sky-100 min-h-screen w-full font-sans relative safe-area">
15
+ <Navbar />
16
+ <main className="py-4 bottom-nav-safe max-w-2xl mx-auto px-4">
17
+ <Routes location={location} key={location.pathname}>
18
+ <Route
19
+ path="/"
20
+ element={
21
+ <AnimatedPage>
22
+ <Home />
23
+ </AnimatedPage>
24
+ }
25
+ />
26
+ <Route
27
+ path="/lessons"
28
+ element={
29
+ <AnimatedPage>
30
+ <Lessons />
31
+ </AnimatedPage>
32
+ }
33
+ />
34
+ <Route
35
+ path="/profile"
36
+ element={
37
+ <AnimatedPage>
38
+ <Profile />
39
+ </AnimatedPage>
40
+ }
41
+ />
42
+ </Routes>
43
+ </main>
44
+ </div>
45
+ </Tooltip.Provider>
46
+ );
47
+}
src/LanguageContext.tsx
new
+35
@@ -0,0 +1,35 @@
1
+import { createContext, useContext, useState, ReactNode } from "react";
2
+import { translations, SupportedLanguage, Translation } from "./i18n";
3
+
4
+interface LanguageContextType {
5
+ lang: SupportedLanguage;
6
+ setLang: (lang: SupportedLanguage) => void;
7
+ t: Translation;
8
+}
9
+
10
+const LanguageContext = createContext<LanguageContextType | undefined>(
11
+ undefined,
12
+);
13
+
14
+interface LanguageProviderProps {
15
+ children: ReactNode;
16
+}
17
+
18
+export function LanguageProvider({ children }: LanguageProviderProps) {
19
+ const [lang, setLang] = useState<SupportedLanguage>("fa");
20
+ const t = translations[lang];
21
+
22
+ return (
23
+ <LanguageContext.Provider value={{ lang, setLang, t }}>
24
+ {children}
25
+ </LanguageContext.Provider>
26
+ );
27
+}
28
+
29
+export function useLang(): LanguageContextType {
30
+ const context = useContext(LanguageContext);
31
+ if (context === undefined) {
32
+ throw new Error("useLang must be used within a LanguageProvider");
33
+ }
34
+ return context;
35
+}
src/components/AnimatedPage.tsx
new
+10
@@ -0,0 +1,10 @@
1
+import { ReactNode } from "react";
2
+
3
+interface AnimatedPageProps {
4
+ children: ReactNode;
5
+}
6
+
7
+export default function AnimatedPage({ children }: AnimatedPageProps) {
8
+ // Simple fade-in; use Framer Motion or React Spring for more advanced animation
9
+ return <div className="fade-in">{children}</div>;
10
+}
src/components/LessonCard.tsx
new
+41
@@ -0,0 +1,41 @@
1
+import * as Tooltip from "@radix-ui/react-tooltip";
2
+import { useLang } from "../LanguageContext";
3
+
4
+interface LessonCardProps {
5
+ title: string;
6
+ description: string;
7
+ onStart: () => void;
8
+}
9
+
10
+export default function LessonCard({
11
+ title,
12
+ description,
13
+ onStart,
14
+}: LessonCardProps) {
15
+ const { t, lang } = useLang();
16
+ const isRTL = lang === "fa";
17
+ const dir = isRTL ? "rtl" : "ltr";
18
+ const align = isRTL ? "text-right" : "text-left";
19
+ return (
20
+ <div
21
+ dir={dir}
22
+ className={`bg-white shadow rounded-xl p-6 flex flex-col gap-2 border hover:scale-105 transition-transform duration-200 ${align}`}
23
+ >
24
+ <h3 className="font-bold text-lg text-fuchsia-700">{title}</h3>
25
+ <p className="text-slate-600">{description}</p>
26
+ <Tooltip.Root>
27
+ <Tooltip.Trigger asChild>
28
+ <button
29
+ className="mt-2 self-end bg-fuchsia-500 hover:bg-fuchsia-600 text-white px-4 py-1.5 rounded-lg font-medium transition-all focus:ring-2 focus:ring-fuchsia-300"
30
+ onClick={onStart}
31
+ >
32
+ {t.startLesson}
33
+ </button>
34
+ </Tooltip.Trigger>
35
+ <Tooltip.Content className="text-xs bg-white border px-2 py-1 rounded shadow">
36
+ {t.startThisLesson}
37
+ </Tooltip.Content>
38
+ </Tooltip.Root>
39
+ </div>
40
+ );
41
+}
src/components/Navbar.tsx
new
+127
@@ -0,0 +1,127 @@
1
+import { Link, useLocation } from "react-router-dom";
2
+import * as Tooltip from "@radix-ui/react-tooltip";
3
+import { useLang } from "../LanguageContext";
4
+import { SupportedLanguage } from "../i18n";
5
+import haptics from "./../utils/haptics";
6
+
7
+interface NavItem {
8
+ path: string;
9
+ key: "home" | "lessons" | "profile";
10
+ icon: React.JSX.Element;
11
+}
12
+
13
+const navItems: NavItem[] = [
14
+ {
15
+ path: "/",
16
+ key: "home",
17
+ icon: (
18
+ <svg width="24" height="24" fill="none" viewBox="0 0 24 24">
19
+ <path
20
+ d="M3 10.5L12 4l9 6.5V20a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-4h-4v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V10.5z"
21
+ stroke="#a21caf"
22
+ strokeWidth="1.5"
23
+ strokeLinejoin="round"
24
+ />
25
+ </svg>
26
+ ),
27
+ },
28
+ {
29
+ path: "/lessons",
30
+ key: "lessons",
31
+ icon: (
32
+ <svg width="24" height="24" fill="none" viewBox="0 0 24 24">
33
+ <path
34
+ d="M4 19V6a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v13M9 6v13"
35
+ stroke="#a21caf"
36
+ strokeWidth="1.5"
37
+ strokeLinejoin="round"
38
+ />
39
+ </svg>
40
+ ),
41
+ },
42
+ {
43
+ path: "/profile",
44
+ key: "profile",
45
+ icon: (
46
+ <svg width="24" height="24" fill="none" viewBox="0 0 24 24">
47
+ <circle cx="12" cy="8" r="4" stroke="#a21caf" strokeWidth="1.5" />
48
+ <path
49
+ d="M4 20v-1a7 7 0 0 1 14 0v1"
50
+ stroke="#a21caf"
51
+ strokeWidth="1.5"
52
+ />
53
+ </svg>
54
+ ),
55
+ },
56
+];
57
+
58
+export default function Navbar() {
59
+ const location = useLocation();
60
+ const { t, lang, setLang } = useLang();
61
+ const isRTL = lang === "fa";
62
+
63
+ const handleNavClick = async () => {
64
+ await haptics.navigation();
65
+ };
66
+
67
+ return (
68
+ <>
69
+ {/* Top bar with app name and language switcher, matching bottom bar width */}
70
+ <div
71
+ className={`fixed top-0 left-0 w-full bg-white/70 backdrop-blur-lg z-50 shadow top-nav-safe`}
72
+ dir={isRTL ? "rtl" : "ltr"}
73
+ >
74
+ <div className="max-w-2xl mx-auto flex flex-row justify-between items-center px-4 py-3 w-full">
75
+ <span className="font-bold text-xl text-fuchsia-600">
76
+ {t.appName}
77
+ </span>
78
+ <select
79
+ className="rounded border px-2 py-1 bg-white text-sm text-fuchsia-700 cursor-pointer shadow"
80
+ value={lang}
81
+ onClick={handleNavClick}
82
+ onChange={(e) => setLang(e.target.value as SupportedLanguage)}
83
+ aria-label="Change language"
84
+ >
85
+ <option value="fa">فارسی</option>
86
+ <option value="en">English</option>
87
+ <option value="sv">Svenska</option>
88
+ </select>
89
+ </div>
90
+ </div>
91
+
92
+ {/* Bottom tab navigation */}
93
+ <nav className="fixed bottom-0 left-0 w-full bg-white/90 backdrop-blur-md border-t z-40 shadow-lg bottom-nav-safe">
94
+ <div className="max-w-2xl mx-auto flex justify-around items-center px-4 py-2 w-full">
95
+ {navItems.map((item) => (
96
+ <Tooltip.Root key={item.path} delayDuration={100}>
97
+ <Tooltip.Trigger asChild>
98
+ <Link
99
+ to={item.path}
100
+ onClick={handleNavClick}
101
+ className={`flex flex-col items-center justify-center gap-1 px-3 py-1 rounded transition-all duration-200
102
+ ${
103
+ location.pathname === item.path
104
+ ? "bg-fuchsia-100 text-fuchsia-900 shadow font-semibold"
105
+ : "hover:bg-fuchsia-50 text-slate-800"
106
+ }`}
107
+ style={{ minWidth: 60 }}
108
+ >
109
+ {item.icon}
110
+ <span className="text-xs">{t[item.key]}</span>
111
+ </Link>
112
+ </Tooltip.Trigger>
113
+ <Tooltip.Portal>
114
+ <Tooltip.Content className="text-xs bg-white border px-2 py-1 rounded shadow">
115
+ {t[item.key]}
116
+ <Tooltip.Arrow className="fill-white" />
117
+ </Tooltip.Content>
118
+ </Tooltip.Portal>
119
+ </Tooltip.Root>
120
+ ))}
121
+ </div>
122
+ </nav>
123
+ {/* Add top and bottom padding to main content to prevent overlap */}
124
+ <div className="h-16" aria-hidden="true"></div>
125
+ </>
126
+ );
127
+}
src/components/QuestionCard.tsx
new
+118
@@ -0,0 +1,118 @@
1
+import { useState } from "react";
2
+import { SupportedLanguage, Translation } from "../i18n";
3
+import haptics from "./../utils/haptics";
4
+
5
+interface Choice {
6
+ [key: string]: string;
7
+}
8
+
9
+interface Question {
10
+ q: { [key: string]: string };
11
+ choices: Choice[];
12
+ answer: number;
13
+}
14
+
15
+interface Lesson {
16
+ title: { [key: string]: string };
17
+ questions: Question[];
18
+}
19
+
20
+interface QuestionCardProps {
21
+ lesson: Lesson;
22
+ lang: SupportedLanguage;
23
+ t: Translation;
24
+ onBack: () => void;
25
+}
26
+
27
+export default function QuestionCard({
28
+ lesson,
29
+ lang,
30
+ t,
31
+ onBack,
32
+}: QuestionCardProps) {
33
+ const [step, setStep] = useState(0);
34
+ const [result, setResult] = useState<boolean | null>(null);
35
+ const [showResult, setShowResult] = useState(false);
36
+ const [animateBtn, setAnimateBtn] = useState(-1);
37
+
38
+ const isRTL = lang === "fa";
39
+ const dir = isRTL ? "rtl" : "ltr";
40
+ const align = isRTL ? "text-right" : "text-left";
41
+
42
+ const question = lesson.questions[step];
43
+
44
+ function handleChoice(idx: number) {
45
+ setAnimateBtn(idx);
46
+ setTimeout(() => setAnimateBtn(-1), 200);
47
+ const correct = idx === question.answer;
48
+ setResult(correct);
49
+ setShowResult(true);
50
+ setTimeout(() => {
51
+ setShowResult(false);
52
+ setResult(null);
53
+ if (step < lesson.questions.length - 1) {
54
+ setStep((s) => s + 1);
55
+ }
56
+ }, 950);
57
+ }
58
+
59
+ return (
60
+ <div
61
+ dir={dir}
62
+ className={`bg-white/80 rounded-xl shadow-lg p-6 mb-4 flex flex-col gap-3 ${align}`}
63
+ >
64
+ <div className="flex items-center justify-between mb-2">
65
+ <button className="text-fuchsia-600 hover:underline" onClick={onBack}>
66
+ {t.back}
67
+ </button>
68
+ <div className="text-slate-400 text-xs">
69
+ {lesson.title[lang]} • {t.question} {step + 1} {t.of}{" "}
70
+ {lesson.questions.length}
71
+ </div>
72
+ </div>
73
+ <div className="font-bold text-lg text-fuchsia-800 mb-2">
74
+ {question.q[lang]}
75
+ </div>
76
+ <div className="flex flex-col gap-2 mt-2">
77
+ {question.choices.map((choice, idx) => (
78
+ <button
79
+ key={idx}
80
+ className={`border px-4 py-2 rounded-lg transition-all duration-200 ${align} text-slate-700
81
+ ${animateBtn === idx ? "wiggle" : ""}
82
+ ${showResult && idx === question.answer ? "bg-green-200 border-green-400 font-bold" : ""}
83
+ ${showResult && idx !== question.answer && idx === animateBtn ? "bg-red-200 border-red-400" : ""}
84
+ hover:bg-fuchsia-100
85
+ `}
86
+ disabled={showResult}
87
+ onClick={async () => {
88
+ await haptics.selection();
89
+ handleChoice(idx);
90
+ }}
91
+ >
92
+ {choice[lang]}
93
+ </button>
94
+ ))}
95
+ </div>
96
+ {showResult && (
97
+ <div
98
+ className={`mt-4 font-semibold text-lg transition-all
99
+ ${result ? "text-green-700" : "text-red-600"}`}
100
+ >
101
+ {result ? t.correct : t.incorrect}
102
+ </div>
103
+ )}
104
+ {!showResult &&
105
+ step === lesson.questions.length - 1 &&
106
+ result === null && (
107
+ <div className="mt-6 text-slate-400 text-sm">{t.afterChoice}</div>
108
+ )}
109
+ {step === lesson.questions.length - 1 && showResult && (
110
+ <div className="mt-6 text-center">
111
+ <span className="inline-block bg-fuchsia-200 text-fuchsia-900 px-4 py-2 rounded-xl animate-bounce shadow">
112
+ {t.lessonCompleted}
113
+ </span>
114
+ </div>
115
+ )}
116
+ </div>
117
+ );
118
+}
src/i18n.ts
new
+93
@@ -0,0 +1,93 @@
1
+export interface Translation {
2
+ appName: string;
3
+ home: string;
4
+ lessons: string;
5
+ profile: string;
6
+ welcome: string;
7
+ homeDesc: string;
8
+ getStarted: string;
9
+ startLesson: string;
10
+ back: string;
11
+ lessonCompleted: string;
12
+ user: string;
13
+ guest: string;
14
+ progress: string;
15
+ completed: string;
16
+ question: string;
17
+ of: string;
18
+ afterChoice: string;
19
+ correct: string;
20
+ incorrect: string;
21
+ startThisLesson: string;
22
+}
23
+
24
+export type SupportedLanguage = "fa" | "en" | "sv";
25
+
26
+export const translations: Record<SupportedLanguage, Translation> = {
27
+ fa: {
28
+ appName: "رومی",
29
+ home: "خانه",
30
+ lessons: "درسها",
31
+ profile: "پروفایل",
32
+ welcome: "به رومی خوش آمدید!",
33
+ homeDesc: "روشی سرگرمکننده برای یادگیری زبان فارسی.",
34
+ getStarted: "شروع یادگیری",
35
+ startLesson: "شروع",
36
+ back: "← بازگشت",
37
+ lessonCompleted: "درس به پایان رسید! 🎉",
38
+ user: "نام کاربر",
39
+ guest: "مهمان",
40
+ progress: "پیشرفت",
41
+ completed: "درس تکمیل شده",
42
+ question: "سوال",
43
+ of: "از",
44
+ afterChoice: "پس از انتخاب، نتیجه نمایش داده میشود.",
45
+ correct: "درست!",
46
+ incorrect: "اشتباه!",
47
+ startThisLesson: "شروع درس",
48
+ },
49
+ en: {
50
+ appName: "StreetCut",
51
+ home: "Home",
52
+ lessons: "Lessons",
53
+ profile: "Profile",
54
+ welcome: "Welcome to StreetCut!",
55
+ homeDesc: "A fun way to get a fresh look.",
56
+ getStarted: "Start Learning",
57
+ startLesson: "Start",
58
+ back: "← Back",
59
+ lessonCompleted: "Lesson Complete! 🎉",
60
+ user: "Username",
61
+ guest: "Guest",
62
+ progress: "Progress",
63
+ completed: "lesson(s) completed",
64
+ question: "Question",
65
+ of: "of",
66
+ afterChoice: "The result will be shown after you select.",
67
+ correct: "Correct!",
68
+ incorrect: "Incorrect!",
69
+ startThisLesson: "Start Lesson",
70
+ },
71
+ sv: {
72
+ appName: "StreetCut",
73
+ home: "Hem",
74
+ lessons: "Lektioner",
75
+ profile: "Profil",
76
+ welcome: "Välkommen till StreetCut!",
77
+ homeDesc: "Ett roligt sätt att lära sig persiska.",
78
+ getStarted: "Börja lära",
79
+ startLesson: "Starta",
80
+ back: "← Tillbaka",
81
+ lessonCompleted: "Lektion klar! 🎉",
82
+ user: "Användarnamn",
83
+ guest: "Gäst",
84
+ progress: "Framsteg",
85
+ completed: "lektion(er) slutförda",
86
+ question: "Fråga",
87
+ of: "av",
88
+ afterChoice: "Resultatet visas när du har valt.",
89
+ correct: "Rätt!",
90
+ incorrect: "Fel!",
91
+ startThisLesson: "Starta lektionen",
92
+ },
93
+};
src/index.css
new
+68
@@ -0,0 +1,68 @@
1
+@tailwind base;
2
+@tailwind components;
3
+@tailwind utilities;
4
+
5
+::-webkit-scrollbar {
6
+ width: 0px;
7
+ display: none;
8
+}
9
+
10
+/* Disable zoom */
11
+:root {
12
+ touch-action: pan-x pan-y;
13
+ height: 100%;
14
+}
15
+
16
+/* Safe Area Support */
17
+.safe-area {
18
+ padding-top: env(safe-area-inset-top);
19
+ padding-bottom: env(safe-area-inset-bottom);
20
+ padding-left: env(safe-area-inset-left);
21
+ padding-right: env(safe-area-inset-right);
22
+}
23
+
24
+.top-nav-safe {
25
+ padding-top: max(0.5rem, env(safe-area-inset-top));
26
+}
27
+
28
+/* Optional: Give bottom nav extra safe-area padding */
29
+.bottom-nav-safe {
30
+ padding-bottom: max(0.5rem, env(safe-area-inset-bottom));
31
+}
32
+
33
+/* Animations */
34
+@layer utilities {
35
+ .fade-in {
36
+ animation: fadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1);
37
+ }
38
+ @keyframes fadeIn {
39
+ from {
40
+ opacity: 0;
41
+ transform: translateY(12px);
42
+ }
43
+ to {
44
+ opacity: 1;
45
+ transform: translateY(0);
46
+ }
47
+ }
48
+ .wiggle {
49
+ animation: wiggle 0.25s linear;
50
+ }
51
+ @keyframes wiggle {
52
+ 0% {
53
+ transform: rotate(-2deg);
54
+ }
55
+ 25% {
56
+ transform: rotate(2deg);
57
+ }
58
+ 50% {
59
+ transform: rotate(-2deg);
60
+ }
61
+ 75% {
62
+ transform: rotate(2deg);
63
+ }
64
+ 100% {
65
+ transform: rotate(0);
66
+ }
67
+ }
68
+}
src/main.tsx
new
+16
@@ -0,0 +1,16 @@
1
+import React from "react";
2
+import ReactDOM from "react-dom/client";
3
+import { BrowserRouter } from "react-router-dom";
4
+import App from "./App";
5
+import "./index.css";
6
+import { LanguageProvider } from "./LanguageContext";
7
+
8
+ReactDOM.createRoot(document.getElementById("root")!).render(
9
+ <React.StrictMode>
10
+ <LanguageProvider>
11
+ <BrowserRouter>
12
+ <App />
13
+ </BrowserRouter>
14
+ </LanguageProvider>
15
+ </React.StrictMode>,
16
+);
src/pages/Home.tsx
new
+43
@@ -0,0 +1,43 @@
1
+import { Link } from "react-router-dom";
2
+import { useLang } from "../LanguageContext";
3
+import haptics from "./../utils/haptics";
4
+
5
+export default function Home() {
6
+ const { t } = useLang();
7
+ return (
8
+ <section className="flex flex-col items-center justify-center min-h-[30vh]">
9
+ <svg
10
+ className="w-40 mb-8 animate-bounce"
11
+ viewBox="0 0 120 120"
12
+ fill="none"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ >
15
+ <circle cx="60" cy="60" r="60" fill="#f3e8ff" />
16
+ <text
17
+ x="50%"
18
+ y="55%"
19
+ textAnchor="middle"
20
+ fill="#a21caf"
21
+ fontSize="36"
22
+ fontFamily="Arial, sans-serif"
23
+ dy=".3em"
24
+ >
25
+ 🏵️
26
+ </text>
27
+ </svg>
28
+ <h1 className="text-3xl md:text-4xl font-bold text-center mb-4 text-fuchsia-700">
29
+ {t.welcome}
30
+ </h1>
31
+ <p className="text-lg text-center mb-8 text-slate-600">{t.homeDesc}</p>
32
+ <Link
33
+ to="/lessons"
34
+ onClick={async () => {
35
+ await haptics.buttonPress();
36
+ }}
37
+ className="bg-fuchsia-500 hover:bg-fuchsia-600 active:scale-95 transition transform text-white px-8 py-3 rounded-xl font-semibold shadow-lg hover:shadow-xl focus:ring-2 focus:ring-fuchsia-300 animate-pulse"
38
+ >
39
+ {t.getStarted}
40
+ </Link>
41
+ </section>
42
+ );
43
+}
src/pages/Lessons.tsx
new
+392
@@ -0,0 +1,392 @@
1
+import { useState } from "react";
2
+import LessonCard from "../components/LessonCard";
3
+import QuestionCard from "../components/QuestionCard";
4
+import { useLang } from "../LanguageContext";
5
+import haptics from "./../utils/haptics";
6
+
7
+interface Choice {
8
+ [key: string]: string;
9
+}
10
+
11
+interface Question {
12
+ q: { [key: string]: string };
13
+ choices: Choice[];
14
+ answer: number;
15
+}
16
+
17
+interface Lesson {
18
+ id: number;
19
+ title: { [key: string]: string };
20
+ description: { [key: string]: string };
21
+ questions: Question[];
22
+}
23
+
24
+// Multilingual lesson data with Swedish (sv) translations
25
+const LESSONS: Lesson[] = [
26
+ {
27
+ id: 1,
28
+ title: {
29
+ fa: "سلام و احوالپرسی",
30
+ en: "Greetings and Introductions",
31
+ sv: "Hälsningar och introduktioner",
32
+ },
33
+ description: {
34
+ fa: "کلمات و عبارات ابتدایی برای سلام، خداحافظی و معرفی.",
35
+ en: "Basic words and phrases for greeting, farewell, and introduction.",
36
+ sv: "Grundläggande ord och fraser för hälsning, avsked och introduktion.",
37
+ },
38
+ questions: [
39
+ {
40
+ q: {
41
+ fa: "سلام به فارسی چیست؟",
42
+ en: 'What is "Hello" in Persian?',
43
+ sv: 'Vad är "Hej" på persiska?',
44
+ },
45
+ choices: [
46
+ { fa: "سلام", en: "Salam", sv: "Salam" },
47
+ { fa: "خداحافظ", en: "Goodbye", sv: "Adjö" },
48
+ { fa: "ممنون", en: "Thank you", sv: "Tack" },
49
+ ],
50
+ answer: 0,
51
+ },
52
+ {
53
+ q: {
54
+ fa: "خداحافظ به فارسی چیست؟",
55
+ en: 'What is "Goodbye" in Persian?',
56
+ sv: 'Vad är "Adjö" på persiska?',
57
+ },
58
+ choices: [
59
+ { fa: "متشکرم", en: "Thank you", sv: "Tack" },
60
+ { fa: "خداحافظ", en: "Khodahafez", sv: "Khodahafez" },
61
+ { fa: "بله", en: "Yes", sv: "Ja" },
62
+ ],
63
+ answer: 1,
64
+ },
65
+ ],
66
+ },
67
+ {
68
+ id: 2,
69
+ title: {
70
+ fa: "اعداد",
71
+ en: "Numbers",
72
+ sv: "Siffror",
73
+ },
74
+ description: {
75
+ fa: "یادگیری اعداد ۱ تا ۱۰ به فارسی.",
76
+ en: "Learning numbers 1 to 10 in Persian.",
77
+ sv: "Lär dig siffrorna 1 till 10 på persiska.",
78
+ },
79
+ questions: [
80
+ {
81
+ q: {
82
+ fa: "عدد 3 به فارسی چیست؟",
83
+ en: "What is the number 3 in Persian?",
84
+ sv: "Vad är siffran 3 på persiska?",
85
+ },
86
+ choices: [
87
+ { fa: "سه", en: "Se", sv: "Se" },
88
+ { fa: "چهار", en: "Chahar", sv: "Chahar" },
89
+ { fa: "دو", en: "Do", sv: "Do" },
90
+ ],
91
+ answer: 0,
92
+ },
93
+ {
94
+ q: {
95
+ fa: "عدد ۵ به فارسی چیست؟",
96
+ en: "What is the number 5 in Persian?",
97
+ sv: "Vad är siffran 5 på persiska?",
98
+ },
99
+ choices: [
100
+ { fa: "نه", en: "Noh", sv: "Noh" },
101
+ { fa: "پنج", en: "Panj", sv: "Panj" },
102
+ { fa: "هشت", en: "Hasht", sv: "Hasht" },
103
+ ],
104
+ answer: 1,
105
+ },
106
+ ],
107
+ },
108
+ {
109
+ id: 3,
110
+ title: {
111
+ fa: "رنگها",
112
+ en: "Colors",
113
+ sv: "Färger",
114
+ },
115
+ description: {
116
+ fa: "کلمات مربوط به رنگهای اصلی.",
117
+ en: "Words for basic colors.",
118
+ sv: "Ord för grundläggande färger.",
119
+ },
120
+ questions: [
121
+ {
122
+ q: {
123
+ fa: "رنگ آبی به فارسی چیست؟",
124
+ en: 'What is "blue" in Persian?',
125
+ sv: 'Vad är "blå" på persiska?',
126
+ },
127
+ choices: [
128
+ { fa: "آبی", en: "Abi", sv: "Abi" },
129
+ { fa: "قرمز", en: "Ghermez", sv: "Ghermez" },
130
+ { fa: "سبز", en: "Sabz", sv: "Sabz" },
131
+ ],
132
+ answer: 0,
133
+ },
134
+ {
135
+ q: {
136
+ fa: "رنگ قرمز به فارسی چیست؟",
137
+ en: 'What is "red" in Persian?',
138
+ sv: 'Vad är "röd" på persiska?',
139
+ },
140
+ choices: [
141
+ { fa: "زرد", en: "Zard", sv: "Zard" },
142
+ { fa: "قرمز", en: "Ghermez", sv: "Ghermez" },
143
+ { fa: "آبی", en: "Abi", sv: "Abi" },
144
+ ],
145
+ answer: 1,
146
+ },
147
+ ],
148
+ },
149
+ {
150
+ id: 4,
151
+ title: {
152
+ fa: "روزهای هفته",
153
+ en: "Days of the Week",
154
+ sv: "Veckans dagar",
155
+ },
156
+ description: {
157
+ fa: "نام روزهای هفته به فارسی.",
158
+ en: "Names of the days of the week in Persian.",
159
+ sv: "Namnen på veckans dagar på persiska.",
160
+ },
161
+ questions: [
162
+ {
163
+ q: {
164
+ fa: "شنبه اولین روز هفته به فارسی است. درست یا غلط؟",
165
+ en: 'Is "Shanbeh" the first day of the week in Persian? True or False?',
166
+ sv: 'Är "Shanbeh" den första dagen i veckan på persiska? Sant eller falskt?',
167
+ },
168
+ choices: [
169
+ { fa: "درست", en: "True", sv: "Sant" },
170
+ { fa: "غلط", en: "False", sv: "Falskt" },
171
+ ],
172
+ answer: 0,
173
+ },
174
+ {
175
+ q: {
176
+ fa: "کدام یک روز سهشنبه است؟",
177
+ en: "Which one is Tuesday?",
178
+ sv: "Vilken dag är tisdag?",
179
+ },
180
+ choices: [
181
+ { fa: "دوشنبه", en: "Doshanbeh", sv: "Doshanbeh" },
182
+ { fa: "سهشنبه", en: "Seshanbeh", sv: "Seshanbeh" },
183
+ { fa: "چهارشنبه", en: "Chaharshanbeh", sv: "Chaharshanbeh" },
184
+ ],
185
+ answer: 1,
186
+ },
187
+ ],
188
+ },
189
+ {
190
+ id: 5,
191
+ title: {
192
+ fa: "میوهها",
193
+ en: "Fruits",
194
+ sv: "Frukter",
195
+ },
196
+ description: {
197
+ fa: "نام میوههای رایج به فارسی.",
198
+ en: "Names of common fruits in Persian.",
199
+ sv: "Namn på vanliga frukter på persiska.",
200
+ },
201
+ questions: [
202
+ {
203
+ q: {
204
+ fa: "سیب به انگلیسی چیست؟",
205
+ en: 'What is "Sib" in English?',
206
+ sv: 'Vad är "Sib" på engelska?',
207
+ },
208
+ choices: [
209
+ { fa: "Apple", en: "Apple", sv: "Äpple" },
210
+ { fa: "Banana", en: "Banana", sv: "Banan" },
211
+ { fa: "Orange", en: "Orange", sv: "Apelsin" },
212
+ ],
213
+ answer: 0,
214
+ },
215
+ {
216
+ q: {
217
+ fa: 'کدام یک معنی "Banana" است؟',
218
+ en: 'Which one means "Banana"?',
219
+ sv: 'Vilken betyder "Banan"?',
220
+ },
221
+ choices: [
222
+ { fa: "سیب", en: "Sib", sv: "Sib" },
223
+ { fa: "پرتقال", en: "Porteghal", sv: "Porteghal" },
224
+ { fa: "موز", en: "Mooz", sv: "Mooz" },
225
+ ],
226
+ answer: 2,
227
+ },
228
+ ],
229
+ },
230
+ {
231
+ id: 6,
232
+ title: {
233
+ fa: "اعضای خانواده",
234
+ en: "Family Members",
235
+ sv: "Familjemedlemmar",
236
+ },
237
+ description: {
238
+ fa: "نام اعضای خانواده به فارسی.",
239
+ en: "Names of family members in Persian.",
240
+ sv: "Namn på familjemedlemmar på persiska.",
241
+ },
242
+ questions: [
243
+ {
244
+ q: {
245
+ fa: "پدر به انگلیسی چیست؟",
246
+ en: 'What is "Pedar" in English?',
247
+ sv: 'Vad är "Pedar" på engelska?',
248
+ },
249
+ choices: [
250
+ { fa: "Father", en: "Father", sv: "Far" },
251
+ { fa: "Mother", en: "Mother", sv: "Mor" },
252
+ { fa: "Brother", en: "Brother", sv: "Bror" },
253
+ ],
254
+ answer: 0,
255
+ },
256
+ {
257
+ q: {
258
+ fa: 'کدام یک معنی "Mother" است؟',
259
+ en: 'Which one means "Mother"?',
260
+ sv: 'Vilken betyder "Mor"?',
261
+ },
262
+ choices: [
263
+ { fa: "پدر", en: "Pedar", sv: "Pedar" },
264
+ { fa: "مادر", en: "Madar", sv: "Madar" },
265
+ { fa: "خواهر", en: "Khahar", sv: "Khahar" },
266
+ ],
267
+ answer: 1,
268
+ },
269
+ ],
270
+ },
271
+ {
272
+ id: 7,
273
+ title: {
274
+ fa: "حیوانات",
275
+ en: "Animals",
276
+ sv: "Djur",
277
+ },
278
+ description: {
279
+ fa: "نام حیوانات معمولی به فارسی.",
280
+ en: "Names of common animals in Persian.",
281
+ sv: "Namn på vanliga djur på persiska.",
282
+ },
283
+ questions: [
284
+ {
285
+ q: {
286
+ fa: "سگ به انگلیسی چیست؟",
287
+ en: 'What is "Sag" in English?',
288
+ sv: 'Vad är "Sag" på engelska?',
289
+ },
290
+ choices: [
291
+ { fa: "Dog", en: "Dog", sv: "Hund" },
292
+ { fa: "Cat", en: "Cat", sv: "Katt" },
293
+ { fa: "Bird", en: "Bird", sv: "Fågel" },
294
+ ],
295
+ answer: 0,
296
+ },
297
+ {
298
+ q: {
299
+ fa: 'کدام یک معنی "Cat" است؟',
300
+ en: 'Which one means "Cat"?',
301
+ sv: 'Vilken betyder "Katt"?',
302
+ },
303
+ choices: [
304
+ { fa: "سگ", en: "Sag", sv: "Sag" },
305
+ { fa: "گربه", en: "Gorbeh", sv: "Gorbeh" },
306
+ { fa: "اسب", en: "Asb", sv: "Asb" },
307
+ ],
308
+ answer: 1,
309
+ },
310
+ ],
311
+ },
312
+ {
313
+ id: 8,
314
+ title: {
315
+ fa: "ضمیرها",
316
+ en: "Pronouns",
317
+ sv: "Pronomen",
318
+ },
319
+ description: {
320
+ fa: "ضمیرهای پایه در فارسی.",
321
+ en: "Basic pronouns in Persian.",
322
+ sv: "Grundläggande pronomen på persiska.",
323
+ },
324
+ questions: [
325
+ {
326
+ q: {
327
+ fa: '"من" به انگلیسی چیست؟',
328
+ en: 'What is "man" in English?',
329
+ sv: 'Vad är "man" på engelska?',
330
+ },
331
+ choices: [
332
+ { fa: "I", en: "I", sv: "Jag" },
333
+ { fa: "You", en: "You", sv: "Du" },
334
+ { fa: "He", en: "He", sv: "Han" },
335
+ ],
336
+ answer: 0,
337
+ },
338
+ {
339
+ q: {
340
+ fa: '"او" به انگلیسی چیست؟',
341
+ en: 'What is "ou" in English?',
342
+ sv: 'Vad är "ou" på engelska?',
343
+ },
344
+ choices: [
345
+ { fa: "We", en: "We", sv: "Vi" },
346
+ { fa: "They", en: "They", sv: "De" },
347
+ { fa: "He/She", en: "He/She", sv: "Han/Hon" },
348
+ ],
349
+ answer: 2,
350
+ },
351
+ ],
352
+ },
353
+];
354
+
355
+export default function Lessons() {
356
+ const [activeLesson, setActiveLesson] = useState<Lesson | null>(null);
357
+ const { t, lang } = useLang();
358
+ const isRTL = lang === "fa";
359
+ const dir = isRTL ? "rtl" : "ltr";
360
+ const align = isRTL ? "text-right" : "text-left";
361
+
362
+ return (
363
+ <section dir={dir} className={`pb-12 ` + align}>
364
+ <h2 className="text-2xl font-bold mb-2 text-fuchsia-700">{t.lessons}</h2>
365
+ {!activeLesson ? (
366
+ <div className="grid gap-4">
367
+ {LESSONS.map((lesson) => (
368
+ <LessonCard
369
+ key={lesson.id}
370
+ title={lesson.title[lang]}
371
+ description={lesson.description[lang]}
372
+ onStart={async () => {
373
+ await haptics.cardTap();
374
+ setActiveLesson(lesson);
375
+ }}
376
+ />
377
+ ))}
378
+ </div>
379
+ ) : (
380
+ <QuestionCard
381
+ lesson={activeLesson}
382
+ lang={lang}
383
+ t={t}
384
+ onBack={async () => {
385
+ await haptics.buttonPress();
386
+ setActiveLesson(null);
387
+ }}
388
+ />
389
+ )}
390
+ </section>
391
+ );
392
+}
src/pages/Profile.tsx
new
+27
@@ -0,0 +1,27 @@
1
+import { useLang } from "../LanguageContext";
2
+
3
+export default function Profile() {
4
+ const { t, lang } = useLang();
5
+ const isRTL = lang === "fa";
6
+ const dir = isRTL ? "rtl" : "ltr";
7
+ const align = isRTL ? "text-right" : "text-left";
8
+
9
+ return (
10
+ <section dir={dir} className={`flex flex-col items-center py-8 ${align}`}>
11
+ <img
12
+ src="https://api.dicebear.com/7.x/bottts/svg?seed=persian"
13
+ alt="Avatar"
14
+ className="w-24 h-24 mb-4 rounded-full border-4 border-fuchsia-300"
15
+ />
16
+ <h2 className="text-xl font-bold mb-2 text-fuchsia-700">{t.profile}</h2>
17
+ <div className="bg-white/80 shadow rounded-xl px-8 py-4 mt-2 w-full max-w-xs">
18
+ <div className="mb-2">
19
+ <span className="font-semibold">{t.user}:</span> {t.guest}
20
+ </div>
21
+ <div>
22
+ <span className="font-semibold">{t.progress}:</span> 2/2 {t.completed}
23
+ </div>
24
+ </div>
25
+ </section>
26
+ );
27
+}
src/utils/haptics.ts
new
+198
@@ -0,0 +1,198 @@
1
+import {
2
+ vibrate,
3
+ impactFeedback,
4
+ notificationFeedback,
5
+ selectionFeedback,
6
+} from "@tauri-apps/plugin-haptics";
7
+
8
+/**
9
+ * Haptic feedback utility for consistent haptic responses across the app
10
+ */
11
+export class HapticFeedback {
12
+ private static isEnabled = true;
13
+
14
+ /**
15
+ * Enable or disable haptic feedback globally
16
+ */
17
+ static setEnabled(enabled: boolean) {
18
+ this.isEnabled = enabled;
19
+ }
20
+
21
+ /**
22
+ * Check if haptic feedback is enabled
23
+ */
24
+ static getEnabled(): boolean {
25
+ return this.isEnabled;
26
+ }
27
+
28
+ /**
29
+ * Light haptic feedback for selections and navigation
30
+ * Use for: navigation taps, filter selections, toggle switches
31
+ */
32
+ static async selection(): Promise<void> {
33
+ if (!this.isEnabled) return;
34
+
35
+ try {
36
+ await selectionFeedback();
37
+ } catch (error) {
38
+ console.log("Selection haptic feedback not available:", error);
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Light impact feedback for UI interactions
44
+ * Use for: button taps, menu selections
45
+ */
46
+ static async light(): Promise<void> {
47
+ if (!this.isEnabled) return;
48
+
49
+ try {
50
+ await impactFeedback("light");
51
+ } catch (error) {
52
+ console.log("Light haptic feedback not available:", error);
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Medium impact feedback for important actions
58
+ * Use for: save/favorite actions, form submissions
59
+ */
60
+ static async medium(): Promise<void> {
61
+ if (!this.isEnabled) return;
62
+
63
+ try {
64
+ await impactFeedback("medium");
65
+ } catch (error) {
66
+ console.log("Medium haptic feedback not available:", error);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Heavy impact feedback for significant actions
72
+ * Use for: delete actions, important confirmations
73
+ */
74
+ static async heavy(): Promise<void> {
75
+ if (!this.isEnabled) return;
76
+
77
+ try {
78
+ await impactFeedback("heavy");
79
+ } catch (error) {
80
+ console.log("Heavy haptic feedback not available:", error);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Success notification feedback
86
+ * Use for: successful saves, completed actions
87
+ */
88
+ static async success(): Promise<void> {
89
+ if (!this.isEnabled) return;
90
+
91
+ try {
92
+ await notificationFeedback("success");
93
+ } catch (error) {
94
+ console.log("Success haptic feedback not available:", error);
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Warning notification feedback
100
+ * Use for: validation errors, warnings
101
+ */
102
+ static async warning(): Promise<void> {
103
+ if (!this.isEnabled) return;
104
+
105
+ try {
106
+ await notificationFeedback("warning");
107
+ } catch (error) {
108
+ console.log("Warning haptic feedback not available:", error);
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Error notification feedback
114
+ * Use for: errors, failed actions
115
+ */
116
+ static async error(): Promise<void> {
117
+ if (!this.isEnabled) return;
118
+
119
+ try {
120
+ await notificationFeedback("error");
121
+ } catch (error) {
122
+ console.log("Error haptic feedback not available:", error);
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Custom vibration pattern
128
+ * Use for: special interactions, custom feedback
129
+ */
130
+ static async vibrate(duration: number = 200): Promise<void> {
131
+ if (!this.isEnabled) return;
132
+
133
+ try {
134
+ await vibrate(duration);
135
+ } catch (error) {
136
+ console.log("Vibration haptic feedback not available:", error);
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Button press feedback - convenience method for button interactions
142
+ * Use for: most button presses and clickable elements
143
+ */
144
+ static async buttonPress(): Promise<void> {
145
+ return this.light();
146
+ }
147
+
148
+ /**
149
+ * Card tap feedback - convenience method for card interactions
150
+ * Use for: restaurant cards, list items
151
+ */
152
+ static async cardTap(): Promise<void> {
153
+ return this.selection();
154
+ }
155
+
156
+ /**
157
+ * Toggle feedback - convenience method for toggle actions
158
+ * Use for: favorite/unfavorite, like/unlike
159
+ */
160
+ static async toggle(): Promise<void> {
161
+ return this.medium();
162
+ }
163
+
164
+ /**
165
+ * Navigation feedback - convenience method for navigation actions
166
+ * Use for: tab switches, page navigation
167
+ */
168
+ static async navigation(): Promise<void> {
169
+ return this.selection();
170
+ }
171
+}
172
+
173
+/**
174
+ * Convenience functions for common haptic patterns
175
+ */
176
+export const haptics = {
177
+ // Basic interactions
178
+ selection: () => HapticFeedback.selection(),
179
+ light: () => HapticFeedback.light(),
180
+ medium: () => HapticFeedback.medium(),
181
+ heavy: () => HapticFeedback.heavy(),
182
+
183
+ // Notifications
184
+ success: () => HapticFeedback.success(),
185
+ warning: () => HapticFeedback.warning(),
186
+ error: () => HapticFeedback.error(),
187
+
188
+ // Custom
189
+ vibrate: (duration?: number) => HapticFeedback.vibrate(duration),
190
+
191
+ // Convenience methods
192
+ buttonPress: () => HapticFeedback.buttonPress(),
193
+ cardTap: () => HapticFeedback.cardTap(),
194
+ toggle: () => HapticFeedback.toggle(),
195
+ navigation: () => HapticFeedback.navigation(),
196
+};
197
+
198
+export default haptics;
tailwind.config.js
new
+11
@@ -0,0 +1,11 @@
1
+/** @type {import('tailwindcss').Config} */
2
+export default {
3
+ content: [
4
+ "./index.html",
5
+ "./src/**/*.{js,jsx,ts,tsx}",
6
+ ],
7
+ theme: {
8
+ extend: {},
9
+ },
10
+ plugins: [],
11
+}
\ No newline at end of file
tsconfig.json
new
+25
@@ -0,0 +1,25 @@
1
+{
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "noEmit": true,
15
+ "jsx": "react-jsx",
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true
22
+ },
23
+ "include": ["src"],
24
+ "references": [{ "path": "./tsconfig.node.json" }]
25
+}
tsconfig.node.json
new
+10
@@ -0,0 +1,10 @@
1
+{
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true
8
+ },
9
+ "include": ["vite.config.ts"]
10
+}
vite.config.ts
new
+32
@@ -0,0 +1,32 @@
1
+import { defineConfig } from "vite";
2
+import react from "@vitejs/plugin-react";
3
+
4
+// @ts-expect-error process is a nodejs global
5
+const host = process.env.TAURI_DEV_HOST;
6
+
7
+// https://vite.dev/config/
8
+export default defineConfig(async () => ({
9
+ plugins: [react()],
10
+
11
+ // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
12
+ //
13
+ // 1. prevent Vite from obscuring rust errors
14
+ clearScreen: false,
15
+ // 2. tauri expects a fixed port, fail if that port is not available
16
+ server: {
17
+ port: 1420,
18
+ strictPort: true,
19
+ host: host || false,
20
+ hmr: host
21
+ ? {
22
+ protocol: "ws",
23
+ host,
24
+ port: 1421,
25
+ }
26
+ : undefined,
27
+ watch: {
28
+ // 3. tell Vite to ignore watching `src-tauri`
29
+ ignored: ["**/src-tauri/**"],
30
+ },
31
+ },
32
+}));