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 +}));