aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/.gitignore24
-rw-r--r--frontend/index.html13
-rw-r--r--frontend/package-lock.json1373
-rw-r--r--frontend/package.json22
-rw-r--r--frontend/public/vite.svg1
-rw-r--r--frontend/src/App.css41
-rw-r--r--frontend/src/App.tsx34
-rw-r--r--frontend/src/assets/react.svg1
-rw-r--r--frontend/src/index.css70
-rw-r--r--frontend/src/main.tsx10
-rw-r--r--frontend/src/vite-env.d.ts1
-rw-r--r--frontend/tsconfig.json21
-rw-r--r--frontend/tsconfig.node.json9
-rw-r--r--frontend/vite.config.ts7
14 files changed, 1627 insertions, 0 deletions
diff --git a/frontend/.gitignore b/frontend/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/frontend/.gitignore
@@ -0,0 +1,24 @@
1# Logs
2logs
3*.log
4npm-debug.log*
5yarn-debug.log*
6yarn-error.log*
7pnpm-debug.log*
8lerna-debug.log*
9
10node_modules
11dist
12dist-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?
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..921e721
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,13 @@
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 name="viewport" content="width=device-width, initial-scale=1.0" />
7 <title>Least Portals</title>
8 </head>
9 <body>
10 <div id="root"></div>
11 <script type="module" src="/src/main.tsx"></script>
12 </body>
13</html>
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
new file mode 100644
index 0000000..5e4fc50
--- /dev/null
+++ b/frontend/package-lock.json
@@ -0,0 +1,1373 @@
1{
2 "name": "frontend",
3 "version": "0.0.0",
4 "lockfileVersion": 2,
5 "requires": true,
6 "packages": {
7 "": {
8 "name": "frontend",
9 "version": "0.0.0",
10 "dependencies": {
11 "react": "^18.2.0",
12 "react-dom": "^18.2.0"
13 },
14 "devDependencies": {
15 "@types/react": "^18.0.26",
16 "@types/react-dom": "^18.0.9",
17 "@vitejs/plugin-react-swc": "^3.0.0",
18 "typescript": "^4.9.3",
19 "vite": "^4.0.0"
20 }
21 },
22 "node_modules/@esbuild/android-arm": {
23 "version": "0.16.15",
24 "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.15.tgz",
25 "integrity": "sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==",
26 "cpu": [
27 "arm"
28 ],
29 "dev": true,
30 "optional": true,
31 "os": [
32 "android"
33 ],
34 "engines": {
35 "node": ">=12"
36 }
37 },
38 "node_modules/@esbuild/android-arm64": {
39 "version": "0.16.15",
40 "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.15.tgz",
41 "integrity": "sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==",
42 "cpu": [
43 "arm64"
44 ],
45 "dev": true,
46 "optional": true,
47 "os": [
48 "android"
49 ],
50 "engines": {
51 "node": ">=12"
52 }
53 },
54 "node_modules/@esbuild/android-x64": {
55 "version": "0.16.15",
56 "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.15.tgz",
57 "integrity": "sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==",
58 "cpu": [
59 "x64"
60 ],
61 "dev": true,
62 "optional": true,
63 "os": [
64 "android"
65 ],
66 "engines": {
67 "node": ">=12"
68 }
69 },
70 "node_modules/@esbuild/darwin-arm64": {
71 "version": "0.16.15",
72 "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.15.tgz",
73 "integrity": "sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==",
74 "cpu": [
75 "arm64"
76 ],
77 "dev": true,
78 "optional": true,
79 "os": [
80 "darwin"
81 ],
82 "engines": {
83 "node": ">=12"
84 }
85 },
86 "node_modules/@esbuild/darwin-x64": {
87 "version": "0.16.15",
88 "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.15.tgz",
89 "integrity": "sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==",
90 "cpu": [
91 "x64"
92 ],
93 "dev": true,
94 "optional": true,
95 "os": [
96 "darwin"
97 ],
98 "engines": {
99 "node": ">=12"
100 }
101 },
102 "node_modules/@esbuild/freebsd-arm64": {
103 "version": "0.16.15",
104 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.15.tgz",
105 "integrity": "sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==",
106 "cpu": [
107 "arm64"
108 ],
109 "dev": true,
110 "optional": true,
111 "os": [
112 "freebsd"
113 ],
114 "engines": {
115 "node": ">=12"
116 }
117 },
118 "node_modules/@esbuild/freebsd-x64": {
119 "version": "0.16.15",
120 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.15.tgz",
121 "integrity": "sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==",
122 "cpu": [
123 "x64"
124 ],
125 "dev": true,
126 "optional": true,
127 "os": [
128 "freebsd"
129 ],
130 "engines": {
131 "node": ">=12"
132 }
133 },
134 "node_modules/@esbuild/linux-arm": {
135 "version": "0.16.15",
136 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.15.tgz",
137 "integrity": "sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==",
138 "cpu": [
139 "arm"
140 ],
141 "dev": true,
142 "optional": true,
143 "os": [
144 "linux"
145 ],
146 "engines": {
147 "node": ">=12"
148 }
149 },
150 "node_modules/@esbuild/linux-arm64": {
151 "version": "0.16.15",
152 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.15.tgz",
153 "integrity": "sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==",
154 "cpu": [
155 "arm64"
156 ],
157 "dev": true,
158 "optional": true,
159 "os": [
160 "linux"
161 ],
162 "engines": {
163 "node": ">=12"
164 }
165 },
166 "node_modules/@esbuild/linux-ia32": {
167 "version": "0.16.15",
168 "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.15.tgz",
169 "integrity": "sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==",
170 "cpu": [
171 "ia32"
172 ],
173 "dev": true,
174 "optional": true,
175 "os": [
176 "linux"
177 ],
178 "engines": {
179 "node": ">=12"
180 }
181 },
182 "node_modules/@esbuild/linux-loong64": {
183 "version": "0.16.15",
184 "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.15.tgz",
185 "integrity": "sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==",
186 "cpu": [
187 "loong64"
188 ],
189 "dev": true,
190 "optional": true,
191 "os": [
192 "linux"
193 ],
194 "engines": {
195 "node": ">=12"
196 }
197 },
198 "node_modules/@esbuild/linux-mips64el": {
199 "version": "0.16.15",
200 "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.15.tgz",
201 "integrity": "sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==",
202 "cpu": [
203 "mips64el"
204 ],
205 "dev": true,
206 "optional": true,
207 "os": [
208 "linux"
209 ],
210 "engines": {
211 "node": ">=12"
212 }
213 },
214 "node_modules/@esbuild/linux-ppc64": {
215 "version": "0.16.15",
216 "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.15.tgz",
217 "integrity": "sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==",
218 "cpu": [
219 "ppc64"
220 ],
221 "dev": true,
222 "optional": true,
223 "os": [
224 "linux"
225 ],
226 "engines": {
227 "node": ">=12"
228 }
229 },
230 "node_modules/@esbuild/linux-riscv64": {
231 "version": "0.16.15",
232 "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.15.tgz",
233 "integrity": "sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==",
234 "cpu": [
235 "riscv64"
236 ],
237 "dev": true,
238 "optional": true,
239 "os": [
240 "linux"
241 ],
242 "engines": {
243 "node": ">=12"
244 }
245 },
246 "node_modules/@esbuild/linux-s390x": {
247 "version": "0.16.15",
248 "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.15.tgz",
249 "integrity": "sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==",
250 "cpu": [
251 "s390x"
252 ],
253 "dev": true,
254 "optional": true,
255 "os": [
256 "linux"
257 ],
258 "engines": {
259 "node": ">=12"
260 }
261 },
262 "node_modules/@esbuild/linux-x64": {
263 "version": "0.16.15",
264 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.15.tgz",
265 "integrity": "sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==",
266 "cpu": [
267 "x64"
268 ],
269 "dev": true,
270 "optional": true,
271 "os": [
272 "linux"
273 ],
274 "engines": {
275 "node": ">=12"
276 }
277 },
278 "node_modules/@esbuild/netbsd-x64": {
279 "version": "0.16.15",
280 "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.15.tgz",
281 "integrity": "sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==",
282 "cpu": [
283 "x64"
284 ],
285 "dev": true,
286 "optional": true,
287 "os": [
288 "netbsd"
289 ],
290 "engines": {
291 "node": ">=12"
292 }
293 },
294 "node_modules/@esbuild/openbsd-x64": {
295 "version": "0.16.15",
296 "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.15.tgz",
297 "integrity": "sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==",
298 "cpu": [
299 "x64"
300 ],
301 "dev": true,
302 "optional": true,
303 "os": [
304 "openbsd"
305 ],
306 "engines": {
307 "node": ">=12"
308 }
309 },
310 "node_modules/@esbuild/sunos-x64": {
311 "version": "0.16.15",
312 "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.15.tgz",
313 "integrity": "sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==",
314 "cpu": [
315 "x64"
316 ],
317 "dev": true,
318 "optional": true,
319 "os": [
320 "sunos"
321 ],
322 "engines": {
323 "node": ">=12"
324 }
325 },
326 "node_modules/@esbuild/win32-arm64": {
327 "version": "0.16.15",
328 "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.15.tgz",
329 "integrity": "sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==",
330 "cpu": [
331 "arm64"
332 ],
333 "dev": true,
334 "optional": true,
335 "os": [
336 "win32"
337 ],
338 "engines": {
339 "node": ">=12"
340 }
341 },
342 "node_modules/@esbuild/win32-ia32": {
343 "version": "0.16.15",
344 "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.15.tgz",
345 "integrity": "sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==",
346 "cpu": [
347 "ia32"
348 ],
349 "dev": true,
350 "optional": true,
351 "os": [
352 "win32"
353 ],
354 "engines": {
355 "node": ">=12"
356 }
357 },
358 "node_modules/@esbuild/win32-x64": {
359 "version": "0.16.15",
360 "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.15.tgz",
361 "integrity": "sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==",
362 "cpu": [
363 "x64"
364 ],
365 "dev": true,
366 "optional": true,
367 "os": [
368 "win32"
369 ],
370 "engines": {
371 "node": ">=12"
372 }
373 },
374 "node_modules/@swc/core": {
375 "version": "1.3.25",
376 "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.25.tgz",
377 "integrity": "sha512-wqzvM/wu6OsTVYPMStOpm7kIQcPX3GoZ0sC85qzDdsCxmJ1rmItLAD91sXPUmmdk0XqPYjLgT9MRDEIP5woz4g==",
378 "dev": true,
379 "hasInstallScript": true,
380 "engines": {
381 "node": ">=10"
382 },
383 "funding": {
384 "type": "opencollective",
385 "url": "https://opencollective.com/swc"
386 },
387 "optionalDependencies": {
388 "@swc/core-darwin-arm64": "1.3.25",
389 "@swc/core-darwin-x64": "1.3.25",
390 "@swc/core-linux-arm-gnueabihf": "1.3.25",
391 "@swc/core-linux-arm64-gnu": "1.3.25",
392 "@swc/core-linux-arm64-musl": "1.3.25",
393 "@swc/core-linux-x64-gnu": "1.3.25",
394 "@swc/core-linux-x64-musl": "1.3.25",
395 "@swc/core-win32-arm64-msvc": "1.3.25",
396 "@swc/core-win32-ia32-msvc": "1.3.25",
397 "@swc/core-win32-x64-msvc": "1.3.25"
398 }
399 },
400 "node_modules/@swc/core-darwin-arm64": {
401 "version": "1.3.25",
402 "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.25.tgz",
403 "integrity": "sha512-8PWAVcjTJyj2VrqPBFOIi2w2P0Z8kOCbzHW3+pe+bSXxfGMG0MKPl5U2IXhsEL0ovm4xSFlqW0yygpoP3MmRPw==",
404 "cpu": [
405 "arm64"
406 ],
407 "dev": true,
408 "optional": true,
409 "os": [
410 "darwin"
411 ],
412 "engines": {
413 "node": ">=10"
414 }
415 },
416 "node_modules/@swc/core-darwin-x64": {
417 "version": "1.3.25",
418 "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.25.tgz",
419 "integrity": "sha512-5DHGiMYFEj5aa208tCjo7Sn5tiG4xPz+4gUiWVlglxqXFptkNim5xu/1G6VYm5Zk7dI5jJkjTU76GQG7IRvPug==",
420 "cpu": [
421 "x64"
422 ],
423 "dev": true,
424 "optional": true,
425 "os": [
426 "darwin"
427 ],
428 "engines": {
429 "node": ">=10"
430 }
431 },
432 "node_modules/@swc/core-linux-arm-gnueabihf": {
433 "version": "1.3.25",
434 "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.25.tgz",
435 "integrity": "sha512-YNfLxv9PhZk+jrJbpR1mMrYBUkufo0hiFv3S1OrX3l8edsIP4wPND5w9ZH0Oi898f6Jg9DBrY2zXJMQ+gWkbvA==",
436 "cpu": [
437 "arm"
438 ],
439 "dev": true,
440 "optional": true,
441 "os": [
442 "linux"
443 ],
444 "engines": {
445 "node": ">=10"
446 }
447 },
448 "node_modules/@swc/core-linux-arm64-gnu": {
449 "version": "1.3.25",
450 "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.25.tgz",
451 "integrity": "sha512-kS+spM5/xQ6QvWF1ms3byfjnhUlpjTfFwgCyHnIKgjvsYkDa+vkAIhKq6HuEdaTPaCRCjts0Zarhub1nClUU0g==",
452 "cpu": [
453 "arm64"
454 ],
455 "dev": true,
456 "optional": true,
457 "os": [
458 "linux"
459 ],
460 "engines": {
461 "node": ">=10"
462 }
463 },
464 "node_modules/@swc/core-linux-arm64-musl": {
465 "version": "1.3.25",
466 "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.25.tgz",
467 "integrity": "sha512-vM3D7LWmjotUAJ2D4F+L+dspFeWrcPNVh0o8TCoTOYCt8DPD5YsUKTpIgOsZ+gReeWUAnNTh0Btx5pGGVfajGA==",
468 "cpu": [
469 "arm64"
470 ],
471 "dev": true,
472 "optional": true,
473 "os": [
474 "linux"
475 ],
476 "engines": {
477 "node": ">=10"
478 }
479 },
480 "node_modules/@swc/core-linux-x64-gnu": {
481 "version": "1.3.25",
482 "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.25.tgz",
483 "integrity": "sha512-xUCLLMDlYa/zB8BftVa4SrxuVpcDxkltCfmBg5r2pZPVskhC5ZJsQZ/AvWNChoAB11shRhjTaWDlmxJEsa7TIg==",
484 "cpu": [
485 "x64"
486 ],
487 "dev": true,
488 "optional": true,
489 "os": [
490 "linux"
491 ],
492 "engines": {
493 "node": ">=10"
494 }
495 },
496 "node_modules/@swc/core-linux-x64-musl": {
497 "version": "1.3.25",
498 "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.25.tgz",
499 "integrity": "sha512-QzHU3BIaUVRSFNsUn3Qxx1vgtF/f5NqsFMAAPSq9Y8Yq5nrlc2t7cNuOROxHLbUqE+NPUp6+RglleJMoeWz5mA==",
500 "cpu": [
501 "x64"
502 ],
503 "dev": true,
504 "optional": true,
505 "os": [
506 "linux"
507 ],
508 "engines": {
509 "node": ">=10"
510 }
511 },
512 "node_modules/@swc/core-win32-arm64-msvc": {
513 "version": "1.3.25",
514 "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.25.tgz",
515 "integrity": "sha512-77VSVtneVOAUL4zkRyQZ6pWVpTsVVdqwly/DKnRnloglGKxYuk5DG5MUBsL72Nnfv4OCHjZ27eI3NUrpLsUb2Q==",
516 "cpu": [
517 "arm64"
518 ],
519 "dev": true,
520 "optional": true,
521 "os": [
522 "win32"
523 ],
524 "engines": {
525 "node": ">=10"
526 }
527 },
528 "node_modules/@swc/core-win32-ia32-msvc": {
529 "version": "1.3.25",
530 "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.25.tgz",
531 "integrity": "sha512-kz0v3K3H6OPEZR3ry72Ad/6C5GrZBRRUk69K58LORQ8tZXQD3UGl85pUbQqyHl8fR5NU76Muxgovj9CI9iTHGA==",
532 "cpu": [
533 "ia32"
534 ],
535 "dev": true,
536 "optional": true,
537 "os": [
538 "win32"
539 ],
540 "engines": {
541 "node": ">=10"
542 }
543 },
544 "node_modules/@swc/core-win32-x64-msvc": {
545 "version": "1.3.25",
546 "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.25.tgz",
547 "integrity": "sha512-nmQOAzIpNRRnupWzkenJmW4i+h1M76cVNUqEU2MjmtesEkRZEGqv//jefXiyCP2zcbeLNLKiB2ptVJhpd1BvRA==",
548 "cpu": [
549 "x64"
550 ],
551 "dev": true,
552 "optional": true,
553 "os": [
554 "win32"
555 ],
556 "engines": {
557 "node": ">=10"
558 }
559 },
560 "node_modules/@types/prop-types": {
561 "version": "15.7.5",
562 "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
563 "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
564 "dev": true
565 },
566 "node_modules/@types/react": {
567 "version": "18.0.26",
568 "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz",
569 "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==",
570 "dev": true,
571 "dependencies": {
572 "@types/prop-types": "*",
573 "@types/scheduler": "*",
574 "csstype": "^3.0.2"
575 }
576 },
577 "node_modules/@types/react-dom": {
578 "version": "18.0.10",
579 "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz",
580 "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==",
581 "dev": true,
582 "dependencies": {
583 "@types/react": "*"
584 }
585 },
586 "node_modules/@types/scheduler": {
587 "version": "0.16.2",
588 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
589 "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
590 "dev": true
591 },
592 "node_modules/@vitejs/plugin-react-swc": {
593 "version": "3.0.1",
594 "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.0.1.tgz",
595 "integrity": "sha512-3GQ2oruZO9j8dSHcI0MUeOZQBhjYyDQsF/pKY4Px+CJxn0M16OhgFeEzUjeuwci4zhhjoNIDE9aFNaV5GMQ09g==",
596 "dev": true,
597 "dependencies": {
598 "@swc/core": "^1.3.22"
599 },
600 "peerDependencies": {
601 "vite": "^4"
602 }
603 },
604 "node_modules/csstype": {
605 "version": "3.1.1",
606 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
607 "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
608 "dev": true
609 },
610 "node_modules/esbuild": {
611 "version": "0.16.15",
612 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz",
613 "integrity": "sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==",
614 "dev": true,
615 "hasInstallScript": true,
616 "bin": {
617 "esbuild": "bin/esbuild"
618 },
619 "engines": {
620 "node": ">=12"
621 },
622 "optionalDependencies": {
623 "@esbuild/android-arm": "0.16.15",
624 "@esbuild/android-arm64": "0.16.15",
625 "@esbuild/android-x64": "0.16.15",
626 "@esbuild/darwin-arm64": "0.16.15",
627 "@esbuild/darwin-x64": "0.16.15",
628 "@esbuild/freebsd-arm64": "0.16.15",
629 "@esbuild/freebsd-x64": "0.16.15",
630 "@esbuild/linux-arm": "0.16.15",
631 "@esbuild/linux-arm64": "0.16.15",
632 "@esbuild/linux-ia32": "0.16.15",
633 "@esbuild/linux-loong64": "0.16.15",
634 "@esbuild/linux-mips64el": "0.16.15",
635 "@esbuild/linux-ppc64": "0.16.15",
636 "@esbuild/linux-riscv64": "0.16.15",
637 "@esbuild/linux-s390x": "0.16.15",
638 "@esbuild/linux-x64": "0.16.15",
639 "@esbuild/netbsd-x64": "0.16.15",
640 "@esbuild/openbsd-x64": "0.16.15",
641 "@esbuild/sunos-x64": "0.16.15",
642 "@esbuild/win32-arm64": "0.16.15",
643 "@esbuild/win32-ia32": "0.16.15",
644 "@esbuild/win32-x64": "0.16.15"
645 }
646 },
647 "node_modules/fsevents": {
648 "version": "2.3.2",
649 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
650 "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
651 "dev": true,
652 "hasInstallScript": true,
653 "optional": true,
654 "os": [
655 "darwin"
656 ],
657 "engines": {
658 "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
659 }
660 },
661 "node_modules/function-bind": {
662 "version": "1.1.1",
663 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
664 "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
665 "dev": true
666 },
667 "node_modules/has": {
668 "version": "1.0.3",
669 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
670 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
671 "dev": true,
672 "dependencies": {
673 "function-bind": "^1.1.1"
674 },
675 "engines": {
676 "node": ">= 0.4.0"
677 }
678 },
679 "node_modules/is-core-module": {
680 "version": "2.11.0",
681 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
682 "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
683 "dev": true,
684 "dependencies": {
685 "has": "^1.0.3"
686 },
687 "funding": {
688 "url": "https://github.com/sponsors/ljharb"
689 }
690 },
691 "node_modules/js-tokens": {
692 "version": "4.0.0",
693 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
694 "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
695 },
696 "node_modules/loose-envify": {
697 "version": "1.4.0",
698 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
699 "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
700 "dependencies": {
701 "js-tokens": "^3.0.0 || ^4.0.0"
702 },
703 "bin": {
704 "loose-envify": "cli.js"
705 }
706 },
707 "node_modules/nanoid": {
708 "version": "3.3.4",
709 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
710 "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
711 "dev": true,
712 "bin": {
713 "nanoid": "bin/nanoid.cjs"
714 },
715 "engines": {
716 "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
717 }
718 },
719 "node_modules/path-parse": {
720 "version": "1.0.7",
721 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
722 "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
723 "dev": true
724 },
725 "node_modules/picocolors": {
726 "version": "1.0.0",
727 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
728 "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
729 "dev": true
730 },
731 "node_modules/postcss": {
732 "version": "8.4.21",
733 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
734 "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
735 "dev": true,
736 "funding": [
737 {
738 "type": "opencollective",
739 "url": "https://opencollective.com/postcss/"
740 },
741 {
742 "type": "tidelift",
743 "url": "https://tidelift.com/funding/github/npm/postcss"
744 }
745 ],
746 "dependencies": {
747 "nanoid": "^3.3.4",
748 "picocolors": "^1.0.0",
749 "source-map-js": "^1.0.2"
750 },
751 "engines": {
752 "node": "^10 || ^12 || >=14"
753 }
754 },
755 "node_modules/react": {
756 "version": "18.2.0",
757 "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
758 "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
759 "dependencies": {
760 "loose-envify": "^1.1.0"
761 },
762 "engines": {
763 "node": ">=0.10.0"
764 }
765 },
766 "node_modules/react-dom": {
767 "version": "18.2.0",
768 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
769 "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
770 "dependencies": {
771 "loose-envify": "^1.1.0",
772 "scheduler": "^0.23.0"
773 },
774 "peerDependencies": {
775 "react": "^18.2.0"
776 }
777 },
778 "node_modules/resolve": {
779 "version": "1.22.1",
780 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
781 "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
782 "dev": true,
783 "dependencies": {
784 "is-core-module": "^2.9.0",
785 "path-parse": "^1.0.7",
786 "supports-preserve-symlinks-flag": "^1.0.0"
787 },
788 "bin": {
789 "resolve": "bin/resolve"
790 },
791 "funding": {
792 "url": "https://github.com/sponsors/ljharb"
793 }
794 },
795 "node_modules/rollup": {
796 "version": "3.9.1",
797 "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz",
798 "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==",
799 "dev": true,
800 "bin": {
801 "rollup": "dist/bin/rollup"
802 },
803 "engines": {
804 "node": ">=14.18.0",
805 "npm": ">=8.0.0"
806 },
807 "optionalDependencies": {
808 "fsevents": "~2.3.2"
809 }
810 },
811 "node_modules/scheduler": {
812 "version": "0.23.0",
813 "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
814 "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
815 "dependencies": {
816 "loose-envify": "^1.1.0"
817 }
818 },
819 "node_modules/source-map-js": {
820 "version": "1.0.2",
821 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
822 "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
823 "dev": true,
824 "engines": {
825 "node": ">=0.10.0"
826 }
827 },
828 "node_modules/supports-preserve-symlinks-flag": {
829 "version": "1.0.0",
830 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
831 "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
832 "dev": true,
833 "engines": {
834 "node": ">= 0.4"
835 },
836 "funding": {
837 "url": "https://github.com/sponsors/ljharb"
838 }
839 },
840 "node_modules/typescript": {
841 "version": "4.9.4",
842 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
843 "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
844 "dev": true,
845 "bin": {
846 "tsc": "bin/tsc",
847 "tsserver": "bin/tsserver"
848 },
849 "engines": {
850 "node": ">=4.2.0"
851 }
852 },
853 "node_modules/vite": {
854 "version": "4.0.4",
855 "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz",
856 "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==",
857 "dev": true,
858 "dependencies": {
859 "esbuild": "^0.16.3",
860 "postcss": "^8.4.20",
861 "resolve": "^1.22.1",
862 "rollup": "^3.7.0"
863 },
864 "bin": {
865 "vite": "bin/vite.js"
866 },
867 "engines": {
868 "node": "^14.18.0 || >=16.0.0"
869 },
870 "optionalDependencies": {
871 "fsevents": "~2.3.2"
872 },
873 "peerDependencies": {
874 "@types/node": ">= 14",
875 "less": "*",
876 "sass": "*",
877 "stylus": "*",
878 "sugarss": "*",
879 "terser": "^5.4.0"
880 },
881 "peerDependenciesMeta": {
882 "@types/node": {
883 "optional": true
884 },
885 "less": {
886 "optional": true
887 },
888 "sass": {
889 "optional": true
890 },
891 "stylus": {
892 "optional": true
893 },
894 "sugarss": {
895 "optional": true
896 },
897 "terser": {
898 "optional": true
899 }
900 }
901 }
902 },
903 "dependencies": {
904 "@esbuild/android-arm": {
905 "version": "0.16.15",
906 "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.15.tgz",
907 "integrity": "sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==",
908 "dev": true,
909 "optional": true
910 },
911 "@esbuild/android-arm64": {
912 "version": "0.16.15",
913 "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.15.tgz",
914 "integrity": "sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==",
915 "dev": true,
916 "optional": true
917 },
918 "@esbuild/android-x64": {
919 "version": "0.16.15",
920 "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.15.tgz",
921 "integrity": "sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==",
922 "dev": true,
923 "optional": true
924 },
925 "@esbuild/darwin-arm64": {
926 "version": "0.16.15",
927 "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.15.tgz",
928 "integrity": "sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==",
929 "dev": true,
930 "optional": true
931 },
932 "@esbuild/darwin-x64": {
933 "version": "0.16.15",
934 "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.15.tgz",
935 "integrity": "sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==",
936 "dev": true,
937 "optional": true
938 },
939 "@esbuild/freebsd-arm64": {
940 "version": "0.16.15",
941 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.15.tgz",
942 "integrity": "sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==",
943 "dev": true,
944 "optional": true
945 },
946 "@esbuild/freebsd-x64": {
947 "version": "0.16.15",
948 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.15.tgz",
949 "integrity": "sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==",
950 "dev": true,
951 "optional": true
952 },
953 "@esbuild/linux-arm": {
954 "version": "0.16.15",
955 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.15.tgz",
956 "integrity": "sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==",
957 "dev": true,
958 "optional": true
959 },
960 "@esbuild/linux-arm64": {
961 "version": "0.16.15",
962 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.15.tgz",
963 "integrity": "sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==",
964 "dev": true,
965 "optional": true
966 },
967 "@esbuild/linux-ia32": {
968 "version": "0.16.15",
969 "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.15.tgz",
970 "integrity": "sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==",
971 "dev": true,
972 "optional": true
973 },
974 "@esbuild/linux-loong64": {
975 "version": "0.16.15",
976 "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.15.tgz",
977 "integrity": "sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==",
978 "dev": true,
979 "optional": true
980 },
981 "@esbuild/linux-mips64el": {
982 "version": "0.16.15",
983 "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.15.tgz",
984 "integrity": "sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==",
985 "dev": true,
986 "optional": true
987 },
988 "@esbuild/linux-ppc64": {
989 "version": "0.16.15",
990 "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.15.tgz",
991 "integrity": "sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==",
992 "dev": true,
993 "optional": true
994 },
995 "@esbuild/linux-riscv64": {
996 "version": "0.16.15",
997 "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.15.tgz",
998 "integrity": "sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==",
999 "dev": true,
1000 "optional": true
1001 },
1002 "@esbuild/linux-s390x": {
1003 "version": "0.16.15",
1004 "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.15.tgz",
1005 "integrity": "sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==",
1006 "dev": true,
1007 "optional": true
1008 },
1009 "@esbuild/linux-x64": {
1010 "version": "0.16.15",
1011 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.15.tgz",
1012 "integrity": "sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==",
1013 "dev": true,
1014 "optional": true
1015 },
1016 "@esbuild/netbsd-x64": {
1017 "version": "0.16.15",
1018 "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.15.tgz",
1019 "integrity": "sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==",
1020 "dev": true,
1021 "optional": true
1022 },
1023 "@esbuild/openbsd-x64": {
1024 "version": "0.16.15",
1025 "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.15.tgz",
1026 "integrity": "sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==",
1027 "dev": true,
1028 "optional": true
1029 },
1030 "@esbuild/sunos-x64": {
1031 "version": "0.16.15",
1032 "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.15.tgz",
1033 "integrity": "sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==",
1034 "dev": true,
1035 "optional": true
1036 },
1037 "@esbuild/win32-arm64": {
1038 "version": "0.16.15",
1039 "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.15.tgz",
1040 "integrity": "sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==",
1041 "dev": true,
1042 "optional": true
1043 },
1044 "@esbuild/win32-ia32": {
1045 "version": "0.16.15",
1046 "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.15.tgz",
1047 "integrity": "sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==",
1048 "dev": true,
1049 "optional": true
1050 },
1051 "@esbuild/win32-x64": {
1052 "version": "0.16.15",
1053 "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.15.tgz",
1054 "integrity": "sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==",
1055 "dev": true,
1056 "optional": true
1057 },
1058 "@swc/core": {
1059 "version": "1.3.25",
1060 "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.25.tgz",
1061 "integrity": "sha512-wqzvM/wu6OsTVYPMStOpm7kIQcPX3GoZ0sC85qzDdsCxmJ1rmItLAD91sXPUmmdk0XqPYjLgT9MRDEIP5woz4g==",
1062 "dev": true,
1063 "requires": {
1064 "@swc/core-darwin-arm64": "1.3.25",
1065 "@swc/core-darwin-x64": "1.3.25",
1066 "@swc/core-linux-arm-gnueabihf": "1.3.25",
1067 "@swc/core-linux-arm64-gnu": "1.3.25",
1068 "@swc/core-linux-arm64-musl": "1.3.25",
1069 "@swc/core-linux-x64-gnu": "1.3.25",
1070 "@swc/core-linux-x64-musl": "1.3.25",
1071 "@swc/core-win32-arm64-msvc": "1.3.25",
1072 "@swc/core-win32-ia32-msvc": "1.3.25",
1073 "@swc/core-win32-x64-msvc": "1.3.25"
1074 }
1075 },
1076 "@swc/core-darwin-arm64": {
1077 "version": "1.3.25",
1078 "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.25.tgz",
1079 "integrity": "sha512-8PWAVcjTJyj2VrqPBFOIi2w2P0Z8kOCbzHW3+pe+bSXxfGMG0MKPl5U2IXhsEL0ovm4xSFlqW0yygpoP3MmRPw==",
1080 "dev": true,
1081 "optional": true
1082 },
1083 "@swc/core-darwin-x64": {
1084 "version": "1.3.25",
1085 "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.25.tgz",
1086 "integrity": "sha512-5DHGiMYFEj5aa208tCjo7Sn5tiG4xPz+4gUiWVlglxqXFptkNim5xu/1G6VYm5Zk7dI5jJkjTU76GQG7IRvPug==",
1087 "dev": true,
1088 "optional": true
1089 },
1090 "@swc/core-linux-arm-gnueabihf": {
1091 "version": "1.3.25",
1092 "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.25.tgz",
1093 "integrity": "sha512-YNfLxv9PhZk+jrJbpR1mMrYBUkufo0hiFv3S1OrX3l8edsIP4wPND5w9ZH0Oi898f6Jg9DBrY2zXJMQ+gWkbvA==",
1094 "dev": true,
1095 "optional": true
1096 },
1097 "@swc/core-linux-arm64-gnu": {
1098 "version": "1.3.25",
1099 "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.25.tgz",
1100 "integrity": "sha512-kS+spM5/xQ6QvWF1ms3byfjnhUlpjTfFwgCyHnIKgjvsYkDa+vkAIhKq6HuEdaTPaCRCjts0Zarhub1nClUU0g==",
1101 "dev": true,
1102 "optional": true
1103 },
1104 "@swc/core-linux-arm64-musl": {
1105 "version": "1.3.25",
1106 "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.25.tgz",
1107 "integrity": "sha512-vM3D7LWmjotUAJ2D4F+L+dspFeWrcPNVh0o8TCoTOYCt8DPD5YsUKTpIgOsZ+gReeWUAnNTh0Btx5pGGVfajGA==",
1108 "dev": true,
1109 "optional": true
1110 },
1111 "@swc/core-linux-x64-gnu": {
1112 "version": "1.3.25",
1113 "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.25.tgz",
1114 "integrity": "sha512-xUCLLMDlYa/zB8BftVa4SrxuVpcDxkltCfmBg5r2pZPVskhC5ZJsQZ/AvWNChoAB11shRhjTaWDlmxJEsa7TIg==",
1115 "dev": true,
1116 "optional": true
1117 },
1118 "@swc/core-linux-x64-musl": {
1119 "version": "1.3.25",
1120 "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.25.tgz",
1121 "integrity": "sha512-QzHU3BIaUVRSFNsUn3Qxx1vgtF/f5NqsFMAAPSq9Y8Yq5nrlc2t7cNuOROxHLbUqE+NPUp6+RglleJMoeWz5mA==",
1122 "dev": true,
1123 "optional": true
1124 },
1125 "@swc/core-win32-arm64-msvc": {
1126 "version": "1.3.25",
1127 "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.25.tgz",
1128 "integrity": "sha512-77VSVtneVOAUL4zkRyQZ6pWVpTsVVdqwly/DKnRnloglGKxYuk5DG5MUBsL72Nnfv4OCHjZ27eI3NUrpLsUb2Q==",
1129 "dev": true,
1130 "optional": true
1131 },
1132 "@swc/core-win32-ia32-msvc": {
1133 "version": "1.3.25",
1134 "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.25.tgz",
1135 "integrity": "sha512-kz0v3K3H6OPEZR3ry72Ad/6C5GrZBRRUk69K58LORQ8tZXQD3UGl85pUbQqyHl8fR5NU76Muxgovj9CI9iTHGA==",
1136 "dev": true,
1137 "optional": true
1138 },
1139 "@swc/core-win32-x64-msvc": {
1140 "version": "1.3.25",
1141 "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.25.tgz",
1142 "integrity": "sha512-nmQOAzIpNRRnupWzkenJmW4i+h1M76cVNUqEU2MjmtesEkRZEGqv//jefXiyCP2zcbeLNLKiB2ptVJhpd1BvRA==",
1143 "dev": true,
1144 "optional": true
1145 },
1146 "@types/prop-types": {
1147 "version": "15.7.5",
1148 "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
1149 "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
1150 "dev": true
1151 },
1152 "@types/react": {
1153 "version": "18.0.26",
1154 "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz",
1155 "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==",
1156 "dev": true,
1157 "requires": {
1158 "@types/prop-types": "*",
1159 "@types/scheduler": "*",
1160 "csstype": "^3.0.2"
1161 }
1162 },
1163 "@types/react-dom": {
1164 "version": "18.0.10",
1165 "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz",
1166 "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==",
1167 "dev": true,
1168 "requires": {
1169 "@types/react": "*"
1170 }
1171 },
1172 "@types/scheduler": {
1173 "version": "0.16.2",
1174 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
1175 "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
1176 "dev": true
1177 },
1178 "@vitejs/plugin-react-swc": {
1179 "version": "3.0.1",
1180 "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.0.1.tgz",
1181 "integrity": "sha512-3GQ2oruZO9j8dSHcI0MUeOZQBhjYyDQsF/pKY4Px+CJxn0M16OhgFeEzUjeuwci4zhhjoNIDE9aFNaV5GMQ09g==",
1182 "dev": true,
1183 "requires": {
1184 "@swc/core": "^1.3.22"
1185 }
1186 },
1187 "csstype": {
1188 "version": "3.1.1",
1189 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
1190 "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
1191 "dev": true
1192 },
1193 "esbuild": {
1194 "version": "0.16.15",
1195 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz",
1196 "integrity": "sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==",
1197 "dev": true,
1198 "requires": {
1199 "@esbuild/android-arm": "0.16.15",
1200 "@esbuild/android-arm64": "0.16.15",
1201 "@esbuild/android-x64": "0.16.15",
1202 "@esbuild/darwin-arm64": "0.16.15",
1203 "@esbuild/darwin-x64": "0.16.15",
1204 "@esbuild/freebsd-arm64": "0.16.15",
1205 "@esbuild/freebsd-x64": "0.16.15",
1206 "@esbuild/linux-arm": "0.16.15",
1207 "@esbuild/linux-arm64": "0.16.15",
1208 "@esbuild/linux-ia32": "0.16.15",
1209 "@esbuild/linux-loong64": "0.16.15",
1210 "@esbuild/linux-mips64el": "0.16.15",
1211 "@esbuild/linux-ppc64": "0.16.15",
1212 "@esbuild/linux-riscv64": "0.16.15",
1213 "@esbuild/linux-s390x": "0.16.15",
1214 "@esbuild/linux-x64": "0.16.15",
1215 "@esbuild/netbsd-x64": "0.16.15",
1216 "@esbuild/openbsd-x64": "0.16.15",
1217 "@esbuild/sunos-x64": "0.16.15",
1218 "@esbuild/win32-arm64": "0.16.15",
1219 "@esbuild/win32-ia32": "0.16.15",
1220 "@esbuild/win32-x64": "0.16.15"
1221 }
1222 },
1223 "fsevents": {
1224 "version": "2.3.2",
1225 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1226 "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1227 "dev": true,
1228 "optional": true
1229 },
1230 "function-bind": {
1231 "version": "1.1.1",
1232 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1233 "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1234 "dev": true
1235 },
1236 "has": {
1237 "version": "1.0.3",
1238 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1239 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1240 "dev": true,
1241 "requires": {
1242 "function-bind": "^1.1.1"
1243 }
1244 },
1245 "is-core-module": {
1246 "version": "2.11.0",
1247 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
1248 "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
1249 "dev": true,
1250 "requires": {
1251 "has": "^1.0.3"
1252 }
1253 },
1254 "js-tokens": {
1255 "version": "4.0.0",
1256 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1257 "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1258 },
1259 "loose-envify": {
1260 "version": "1.4.0",
1261 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1262 "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1263 "requires": {
1264 "js-tokens": "^3.0.0 || ^4.0.0"
1265 }
1266 },
1267 "nanoid": {
1268 "version": "3.3.4",
1269 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
1270 "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
1271 "dev": true
1272 },
1273 "path-parse": {
1274 "version": "1.0.7",
1275 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1276 "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1277 "dev": true
1278 },
1279 "picocolors": {
1280 "version": "1.0.0",
1281 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1282 "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1283 "dev": true
1284 },
1285 "postcss": {
1286 "version": "8.4.21",
1287 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
1288 "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
1289 "dev": true,
1290 "requires": {
1291 "nanoid": "^3.3.4",
1292 "picocolors": "^1.0.0",
1293 "source-map-js": "^1.0.2"
1294 }
1295 },
1296 "react": {
1297 "version": "18.2.0",
1298 "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
1299 "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
1300 "requires": {
1301 "loose-envify": "^1.1.0"
1302 }
1303 },
1304 "react-dom": {
1305 "version": "18.2.0",
1306 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
1307 "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
1308 "requires": {
1309 "loose-envify": "^1.1.0",
1310 "scheduler": "^0.23.0"
1311 }
1312 },
1313 "resolve": {
1314 "version": "1.22.1",
1315 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1316 "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1317 "dev": true,
1318 "requires": {
1319 "is-core-module": "^2.9.0",
1320 "path-parse": "^1.0.7",
1321 "supports-preserve-symlinks-flag": "^1.0.0"
1322 }
1323 },
1324 "rollup": {
1325 "version": "3.9.1",
1326 "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz",
1327 "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==",
1328 "dev": true,
1329 "requires": {
1330 "fsevents": "~2.3.2"
1331 }
1332 },
1333 "scheduler": {
1334 "version": "0.23.0",
1335 "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
1336 "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
1337 "requires": {
1338 "loose-envify": "^1.1.0"
1339 }
1340 },
1341 "source-map-js": {
1342 "version": "1.0.2",
1343 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1344 "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1345 "dev": true
1346 },
1347 "supports-preserve-symlinks-flag": {
1348 "version": "1.0.0",
1349 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1350 "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1351 "dev": true
1352 },
1353 "typescript": {
1354 "version": "4.9.4",
1355 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
1356 "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
1357 "dev": true
1358 },
1359 "vite": {
1360 "version": "4.0.4",
1361 "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz",
1362 "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==",
1363 "dev": true,
1364 "requires": {
1365 "esbuild": "^0.16.3",
1366 "fsevents": "~2.3.2",
1367 "postcss": "^8.4.20",
1368 "resolve": "^1.22.1",
1369 "rollup": "^3.7.0"
1370 }
1371 }
1372 }
1373}
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100644
index 0000000..26dc1bc
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,22 @@
1{
2 "name": "frontend",
3 "private": true,
4 "version": "0.0.0",
5 "type": "module",
6 "scripts": {
7 "dev": "vite",
8 "build": "tsc && vite build",
9 "preview": "vite preview"
10 },
11 "dependencies": {
12 "react": "^18.2.0",
13 "react-dom": "^18.2.0"
14 },
15 "devDependencies": {
16 "@types/react": "^18.0.26",
17 "@types/react-dom": "^18.0.9",
18 "@vitejs/plugin-react-swc": "^3.0.0",
19 "typescript": "^4.9.3",
20 "vite": "^4.0.0"
21 }
22} \ No newline at end of file
diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/frontend/public/vite.svg
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg> \ No newline at end of file
diff --git a/frontend/src/App.css b/frontend/src/App.css
new file mode 100644
index 0000000..2c5e2ef
--- /dev/null
+++ b/frontend/src/App.css
@@ -0,0 +1,41 @@
1#root {
2 max-width: 1280px;
3 margin: 0 auto;
4 padding: 2rem;
5 text-align: center;
6}
7
8.logo {
9 height: 6em;
10 padding: 1.5em;
11 will-change: filter;
12}
13.logo:hover {
14 filter: drop-shadow(0 0 2em #646cffaa);
15}
16.logo.react:hover {
17 filter: drop-shadow(0 0 2em #61dafbaa);
18}
19
20@keyframes logo-spin {
21 from {
22 transform: rotate(0deg);
23 }
24 to {
25 transform: rotate(360deg);
26 }
27}
28
29@media (prefers-reduced-motion: no-preference) {
30 a:nth-of-type(2) .logo {
31 animation: logo-spin infinite 20s linear;
32 }
33}
34
35.card {
36 padding: 2em;
37}
38
39.read-the-docs {
40 color: #888;
41}
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
new file mode 100644
index 0000000..cd20136
--- /dev/null
+++ b/frontend/src/App.tsx
@@ -0,0 +1,34 @@
1import { useState } from 'react'
2import reactLogo from './assets/react.svg'
3import './App.css'
4
5function App() {
6 const [count, setCount] = useState(0)
7
8 return (
9 <div className="App">
10 <div>
11 <a href="https://vitejs.dev" target="_blank">
12 <img src="/vite.svg" className="logo" alt="Vite logo" />
13 </a>
14 <a href="https://reactjs.org" target="_blank">
15 <img src={reactLogo} className="logo react" alt="React logo" />
16 </a>
17 </div>
18 <h1>Vite + React</h1>
19 <div className="card">
20 <button onClick={() => setCount((count) => count + 1)}>
21 count is {count}
22 </button>
23 <p>
24 Edit <code>src/App.tsx</code> and save to test HMR
25 </p>
26 </div>
27 <p className="read-the-docs">
28 Click on the Vite and React logos to learn more
29 </p>
30 </div>
31 )
32}
33
34export default App
diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg
new file mode 100644
index 0000000..6c87de9
--- /dev/null
+++ b/frontend/src/assets/react.svg
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg> \ No newline at end of file
diff --git a/frontend/src/index.css b/frontend/src/index.css
new file mode 100644
index 0000000..917888c
--- /dev/null
+++ b/frontend/src/index.css
@@ -0,0 +1,70 @@
1:root {
2 font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
3 font-size: 16px;
4 line-height: 24px;
5 font-weight: 400;
6
7 color-scheme: light dark;
8 color: rgba(255, 255, 255, 0.87);
9 background-color: #242424;
10
11 font-synthesis: none;
12 text-rendering: optimizeLegibility;
13 -webkit-font-smoothing: antialiased;
14 -moz-osx-font-smoothing: grayscale;
15 -webkit-text-size-adjust: 100%;
16}
17
18a {
19 font-weight: 500;
20 color: #646cff;
21 text-decoration: inherit;
22}
23a:hover {
24 color: #535bf2;
25}
26
27body {
28 margin: 0;
29 display: flex;
30 place-items: center;
31 min-width: 320px;
32 min-height: 100vh;
33}
34
35h1 {
36 font-size: 3.2em;
37 line-height: 1.1;
38}
39
40button {
41 border-radius: 8px;
42 border: 1px solid transparent;
43 padding: 0.6em 1.2em;
44 font-size: 1em;
45 font-weight: 500;
46 font-family: inherit;
47 background-color: #1a1a1a;
48 cursor: pointer;
49 transition: border-color 0.25s;
50}
51button:hover {
52 border-color: #646cff;
53}
54button:focus,
55button:focus-visible {
56 outline: 4px auto -webkit-focus-ring-color;
57}
58
59@media (prefers-color-scheme: light) {
60 :root {
61 color: #213547;
62 background-color: #ffffff;
63 }
64 a:hover {
65 color: #747bff;
66 }
67 button {
68 background-color: #f9f9f9;
69 }
70}
diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx
new file mode 100644
index 0000000..791f139
--- /dev/null
+++ b/frontend/src/main.tsx
@@ -0,0 +1,10 @@
1import React from 'react'
2import ReactDOM from 'react-dom/client'
3import App from './App'
4import './index.css'
5
6ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
7 <React.StrictMode>
8 <App />
9 </React.StrictMode>,
10)
diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/frontend/src/vite-env.d.ts
@@ -0,0 +1 @@
/// <reference types="vite/client" />
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
new file mode 100644
index 0000000..3d0a51a
--- /dev/null
+++ b/frontend/tsconfig.json
@@ -0,0 +1,21 @@
1{
2 "compilerOptions": {
3 "target": "ESNext",
4 "useDefineForClassFields": true,
5 "lib": ["DOM", "DOM.Iterable", "ESNext"],
6 "allowJs": false,
7 "skipLibCheck": true,
8 "esModuleInterop": false,
9 "allowSyntheticDefaultImports": true,
10 "strict": true,
11 "forceConsistentCasingInFileNames": true,
12 "module": "ESNext",
13 "moduleResolution": "Node",
14 "resolveJsonModule": true,
15 "isolatedModules": true,
16 "noEmit": true,
17 "jsx": "react-jsx"
18 },
19 "include": ["src"],
20 "references": [{ "path": "./tsconfig.node.json" }]
21}
diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json
new file mode 100644
index 0000000..9d31e2a
--- /dev/null
+++ b/frontend/tsconfig.node.json
@@ -0,0 +1,9 @@
1{
2 "compilerOptions": {
3 "composite": true,
4 "module": "ESNext",
5 "moduleResolution": "Node",
6 "allowSyntheticDefaultImports": true
7 },
8 "include": ["vite.config.ts"]
9}
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
new file mode 100644
index 0000000..861b04b
--- /dev/null
+++ b/frontend/vite.config.ts
@@ -0,0 +1,7 @@
1import { defineConfig } from 'vite'
2import react from '@vitejs/plugin-react-swc'
3
4// https://vitejs.dev/config/
5export default defineConfig({
6 plugins: [react()],
7})