├── .gitignore
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── public
└── vite.svg
├── src
├── App.css
├── App.tsx
├── assets
│ └── react.svg
├── index.css
├── main.tsx
├── react-query
│ ├── PostList.tsx
│ ├── TodoForm.tsx
│ └── TodoList.tsx
├── routing
│ ├── About.tsx
│ ├── ContactPage.tsx
│ ├── ErrorPage.tsx
│ ├── HomePage.tsx
│ ├── Layout.tsx
│ ├── LoginPage.tsx
│ ├── NavBar.tsx
│ ├── UserDetailPage.tsx
│ ├── UserListPage.tsx
│ └── hooks
│ │ └── useAuth.ts
├── state-management
│ ├── Counter.tsx
│ ├── HomePage.tsx
│ ├── LoginStatus.tsx
│ ├── NavBar.tsx
│ └── TaskList.tsx
└── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.gitignore:
--------------------------------------------------------------------------------
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?
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Playground Start
2 |
3 | This is the starter code for the playground project we use in part 2 of my React course.
4 |
5 | ## Getting Started
6 |
7 | To get started, follow these steps:
8 |
9 | 1. Clone this repository to your local machine.
10 | 2. Run `npm install` to install the required dependencies.
11 | 3. Run `npm run dev` to start the web server.
12 |
13 | ## About the Course
14 |
15 | This repository belongs to part 2 of my React course covering intermediate-level topics.
16 |
17 | - Fetching and updating data with React Query
18 | - All about reducers, context, and providers
19 | - Managing application state with Zustand
20 | - Routing with React Router
21 |
22 | You can find the course at https://codewithmosh.com
23 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-app-starter",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "react-app-starter",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "axios": "^1.3.4",
12 | "bootstrap": "^5.2.3",
13 | "react": "^18.2.0",
14 | "react-dom": "^18.2.0"
15 | },
16 | "devDependencies": {
17 | "@types/react": "^18.0.28",
18 | "@types/react-dom": "^18.0.11",
19 | "@vitejs/plugin-react": "^3.1.0",
20 | "typescript": "^4.9.3",
21 | "vite": "^4.2.0"
22 | }
23 | },
24 | "node_modules/@ampproject/remapping": {
25 | "version": "2.2.0",
26 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
27 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
28 | "dev": true,
29 | "dependencies": {
30 | "@jridgewell/gen-mapping": "^0.1.0",
31 | "@jridgewell/trace-mapping": "^0.3.9"
32 | },
33 | "engines": {
34 | "node": ">=6.0.0"
35 | }
36 | },
37 | "node_modules/@babel/code-frame": {
38 | "version": "7.18.6",
39 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
40 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
41 | "dev": true,
42 | "dependencies": {
43 | "@babel/highlight": "^7.18.6"
44 | },
45 | "engines": {
46 | "node": ">=6.9.0"
47 | }
48 | },
49 | "node_modules/@babel/compat-data": {
50 | "version": "7.21.0",
51 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
52 | "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
53 | "dev": true,
54 | "engines": {
55 | "node": ">=6.9.0"
56 | }
57 | },
58 | "node_modules/@babel/core": {
59 | "version": "7.21.3",
60 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
61 | "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
62 | "dev": true,
63 | "dependencies": {
64 | "@ampproject/remapping": "^2.2.0",
65 | "@babel/code-frame": "^7.18.6",
66 | "@babel/generator": "^7.21.3",
67 | "@babel/helper-compilation-targets": "^7.20.7",
68 | "@babel/helper-module-transforms": "^7.21.2",
69 | "@babel/helpers": "^7.21.0",
70 | "@babel/parser": "^7.21.3",
71 | "@babel/template": "^7.20.7",
72 | "@babel/traverse": "^7.21.3",
73 | "@babel/types": "^7.21.3",
74 | "convert-source-map": "^1.7.0",
75 | "debug": "^4.1.0",
76 | "gensync": "^1.0.0-beta.2",
77 | "json5": "^2.2.2",
78 | "semver": "^6.3.0"
79 | },
80 | "engines": {
81 | "node": ">=6.9.0"
82 | },
83 | "funding": {
84 | "type": "opencollective",
85 | "url": "https://opencollective.com/babel"
86 | }
87 | },
88 | "node_modules/@babel/generator": {
89 | "version": "7.21.3",
90 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz",
91 | "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==",
92 | "dev": true,
93 | "dependencies": {
94 | "@babel/types": "^7.21.3",
95 | "@jridgewell/gen-mapping": "^0.3.2",
96 | "@jridgewell/trace-mapping": "^0.3.17",
97 | "jsesc": "^2.5.1"
98 | },
99 | "engines": {
100 | "node": ">=6.9.0"
101 | }
102 | },
103 | "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
104 | "version": "0.3.2",
105 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
106 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
107 | "dev": true,
108 | "dependencies": {
109 | "@jridgewell/set-array": "^1.0.1",
110 | "@jridgewell/sourcemap-codec": "^1.4.10",
111 | "@jridgewell/trace-mapping": "^0.3.9"
112 | },
113 | "engines": {
114 | "node": ">=6.0.0"
115 | }
116 | },
117 | "node_modules/@babel/helper-compilation-targets": {
118 | "version": "7.20.7",
119 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
120 | "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
121 | "dev": true,
122 | "dependencies": {
123 | "@babel/compat-data": "^7.20.5",
124 | "@babel/helper-validator-option": "^7.18.6",
125 | "browserslist": "^4.21.3",
126 | "lru-cache": "^5.1.1",
127 | "semver": "^6.3.0"
128 | },
129 | "engines": {
130 | "node": ">=6.9.0"
131 | },
132 | "peerDependencies": {
133 | "@babel/core": "^7.0.0"
134 | }
135 | },
136 | "node_modules/@babel/helper-environment-visitor": {
137 | "version": "7.18.9",
138 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
139 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
140 | "dev": true,
141 | "engines": {
142 | "node": ">=6.9.0"
143 | }
144 | },
145 | "node_modules/@babel/helper-function-name": {
146 | "version": "7.21.0",
147 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
148 | "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
149 | "dev": true,
150 | "dependencies": {
151 | "@babel/template": "^7.20.7",
152 | "@babel/types": "^7.21.0"
153 | },
154 | "engines": {
155 | "node": ">=6.9.0"
156 | }
157 | },
158 | "node_modules/@babel/helper-hoist-variables": {
159 | "version": "7.18.6",
160 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
161 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
162 | "dev": true,
163 | "dependencies": {
164 | "@babel/types": "^7.18.6"
165 | },
166 | "engines": {
167 | "node": ">=6.9.0"
168 | }
169 | },
170 | "node_modules/@babel/helper-module-imports": {
171 | "version": "7.18.6",
172 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
173 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
174 | "dev": true,
175 | "dependencies": {
176 | "@babel/types": "^7.18.6"
177 | },
178 | "engines": {
179 | "node": ">=6.9.0"
180 | }
181 | },
182 | "node_modules/@babel/helper-module-transforms": {
183 | "version": "7.21.2",
184 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
185 | "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
186 | "dev": true,
187 | "dependencies": {
188 | "@babel/helper-environment-visitor": "^7.18.9",
189 | "@babel/helper-module-imports": "^7.18.6",
190 | "@babel/helper-simple-access": "^7.20.2",
191 | "@babel/helper-split-export-declaration": "^7.18.6",
192 | "@babel/helper-validator-identifier": "^7.19.1",
193 | "@babel/template": "^7.20.7",
194 | "@babel/traverse": "^7.21.2",
195 | "@babel/types": "^7.21.2"
196 | },
197 | "engines": {
198 | "node": ">=6.9.0"
199 | }
200 | },
201 | "node_modules/@babel/helper-plugin-utils": {
202 | "version": "7.20.2",
203 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
204 | "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
205 | "dev": true,
206 | "engines": {
207 | "node": ">=6.9.0"
208 | }
209 | },
210 | "node_modules/@babel/helper-simple-access": {
211 | "version": "7.20.2",
212 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
213 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
214 | "dev": true,
215 | "dependencies": {
216 | "@babel/types": "^7.20.2"
217 | },
218 | "engines": {
219 | "node": ">=6.9.0"
220 | }
221 | },
222 | "node_modules/@babel/helper-split-export-declaration": {
223 | "version": "7.18.6",
224 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
225 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
226 | "dev": true,
227 | "dependencies": {
228 | "@babel/types": "^7.18.6"
229 | },
230 | "engines": {
231 | "node": ">=6.9.0"
232 | }
233 | },
234 | "node_modules/@babel/helper-string-parser": {
235 | "version": "7.19.4",
236 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
237 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
238 | "dev": true,
239 | "engines": {
240 | "node": ">=6.9.0"
241 | }
242 | },
243 | "node_modules/@babel/helper-validator-identifier": {
244 | "version": "7.19.1",
245 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
246 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
247 | "dev": true,
248 | "engines": {
249 | "node": ">=6.9.0"
250 | }
251 | },
252 | "node_modules/@babel/helper-validator-option": {
253 | "version": "7.21.0",
254 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
255 | "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
256 | "dev": true,
257 | "engines": {
258 | "node": ">=6.9.0"
259 | }
260 | },
261 | "node_modules/@babel/helpers": {
262 | "version": "7.21.0",
263 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
264 | "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
265 | "dev": true,
266 | "dependencies": {
267 | "@babel/template": "^7.20.7",
268 | "@babel/traverse": "^7.21.0",
269 | "@babel/types": "^7.21.0"
270 | },
271 | "engines": {
272 | "node": ">=6.9.0"
273 | }
274 | },
275 | "node_modules/@babel/highlight": {
276 | "version": "7.18.6",
277 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
278 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
279 | "dev": true,
280 | "dependencies": {
281 | "@babel/helper-validator-identifier": "^7.18.6",
282 | "chalk": "^2.0.0",
283 | "js-tokens": "^4.0.0"
284 | },
285 | "engines": {
286 | "node": ">=6.9.0"
287 | }
288 | },
289 | "node_modules/@babel/parser": {
290 | "version": "7.21.3",
291 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz",
292 | "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
293 | "dev": true,
294 | "bin": {
295 | "parser": "bin/babel-parser.js"
296 | },
297 | "engines": {
298 | "node": ">=6.0.0"
299 | }
300 | },
301 | "node_modules/@babel/plugin-transform-react-jsx-self": {
302 | "version": "7.21.0",
303 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz",
304 | "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==",
305 | "dev": true,
306 | "dependencies": {
307 | "@babel/helper-plugin-utils": "^7.20.2"
308 | },
309 | "engines": {
310 | "node": ">=6.9.0"
311 | },
312 | "peerDependencies": {
313 | "@babel/core": "^7.0.0-0"
314 | }
315 | },
316 | "node_modules/@babel/plugin-transform-react-jsx-source": {
317 | "version": "7.19.6",
318 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz",
319 | "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==",
320 | "dev": true,
321 | "dependencies": {
322 | "@babel/helper-plugin-utils": "^7.19.0"
323 | },
324 | "engines": {
325 | "node": ">=6.9.0"
326 | },
327 | "peerDependencies": {
328 | "@babel/core": "^7.0.0-0"
329 | }
330 | },
331 | "node_modules/@babel/template": {
332 | "version": "7.20.7",
333 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
334 | "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
335 | "dev": true,
336 | "dependencies": {
337 | "@babel/code-frame": "^7.18.6",
338 | "@babel/parser": "^7.20.7",
339 | "@babel/types": "^7.20.7"
340 | },
341 | "engines": {
342 | "node": ">=6.9.0"
343 | }
344 | },
345 | "node_modules/@babel/traverse": {
346 | "version": "7.21.3",
347 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz",
348 | "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==",
349 | "dev": true,
350 | "dependencies": {
351 | "@babel/code-frame": "^7.18.6",
352 | "@babel/generator": "^7.21.3",
353 | "@babel/helper-environment-visitor": "^7.18.9",
354 | "@babel/helper-function-name": "^7.21.0",
355 | "@babel/helper-hoist-variables": "^7.18.6",
356 | "@babel/helper-split-export-declaration": "^7.18.6",
357 | "@babel/parser": "^7.21.3",
358 | "@babel/types": "^7.21.3",
359 | "debug": "^4.1.0",
360 | "globals": "^11.1.0"
361 | },
362 | "engines": {
363 | "node": ">=6.9.0"
364 | }
365 | },
366 | "node_modules/@babel/types": {
367 | "version": "7.21.3",
368 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz",
369 | "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==",
370 | "dev": true,
371 | "dependencies": {
372 | "@babel/helper-string-parser": "^7.19.4",
373 | "@babel/helper-validator-identifier": "^7.19.1",
374 | "to-fast-properties": "^2.0.0"
375 | },
376 | "engines": {
377 | "node": ">=6.9.0"
378 | }
379 | },
380 | "node_modules/@esbuild/android-arm": {
381 | "version": "0.17.12",
382 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz",
383 | "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==",
384 | "cpu": [
385 | "arm"
386 | ],
387 | "dev": true,
388 | "optional": true,
389 | "os": [
390 | "android"
391 | ],
392 | "engines": {
393 | "node": ">=12"
394 | }
395 | },
396 | "node_modules/@esbuild/android-arm64": {
397 | "version": "0.17.12",
398 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz",
399 | "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==",
400 | "cpu": [
401 | "arm64"
402 | ],
403 | "dev": true,
404 | "optional": true,
405 | "os": [
406 | "android"
407 | ],
408 | "engines": {
409 | "node": ">=12"
410 | }
411 | },
412 | "node_modules/@esbuild/android-x64": {
413 | "version": "0.17.12",
414 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz",
415 | "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==",
416 | "cpu": [
417 | "x64"
418 | ],
419 | "dev": true,
420 | "optional": true,
421 | "os": [
422 | "android"
423 | ],
424 | "engines": {
425 | "node": ">=12"
426 | }
427 | },
428 | "node_modules/@esbuild/darwin-arm64": {
429 | "version": "0.17.12",
430 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz",
431 | "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==",
432 | "cpu": [
433 | "arm64"
434 | ],
435 | "dev": true,
436 | "optional": true,
437 | "os": [
438 | "darwin"
439 | ],
440 | "engines": {
441 | "node": ">=12"
442 | }
443 | },
444 | "node_modules/@esbuild/darwin-x64": {
445 | "version": "0.17.12",
446 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz",
447 | "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==",
448 | "cpu": [
449 | "x64"
450 | ],
451 | "dev": true,
452 | "optional": true,
453 | "os": [
454 | "darwin"
455 | ],
456 | "engines": {
457 | "node": ">=12"
458 | }
459 | },
460 | "node_modules/@esbuild/freebsd-arm64": {
461 | "version": "0.17.12",
462 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz",
463 | "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==",
464 | "cpu": [
465 | "arm64"
466 | ],
467 | "dev": true,
468 | "optional": true,
469 | "os": [
470 | "freebsd"
471 | ],
472 | "engines": {
473 | "node": ">=12"
474 | }
475 | },
476 | "node_modules/@esbuild/freebsd-x64": {
477 | "version": "0.17.12",
478 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz",
479 | "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==",
480 | "cpu": [
481 | "x64"
482 | ],
483 | "dev": true,
484 | "optional": true,
485 | "os": [
486 | "freebsd"
487 | ],
488 | "engines": {
489 | "node": ">=12"
490 | }
491 | },
492 | "node_modules/@esbuild/linux-arm": {
493 | "version": "0.17.12",
494 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz",
495 | "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==",
496 | "cpu": [
497 | "arm"
498 | ],
499 | "dev": true,
500 | "optional": true,
501 | "os": [
502 | "linux"
503 | ],
504 | "engines": {
505 | "node": ">=12"
506 | }
507 | },
508 | "node_modules/@esbuild/linux-arm64": {
509 | "version": "0.17.12",
510 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz",
511 | "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==",
512 | "cpu": [
513 | "arm64"
514 | ],
515 | "dev": true,
516 | "optional": true,
517 | "os": [
518 | "linux"
519 | ],
520 | "engines": {
521 | "node": ">=12"
522 | }
523 | },
524 | "node_modules/@esbuild/linux-ia32": {
525 | "version": "0.17.12",
526 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz",
527 | "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==",
528 | "cpu": [
529 | "ia32"
530 | ],
531 | "dev": true,
532 | "optional": true,
533 | "os": [
534 | "linux"
535 | ],
536 | "engines": {
537 | "node": ">=12"
538 | }
539 | },
540 | "node_modules/@esbuild/linux-loong64": {
541 | "version": "0.17.12",
542 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz",
543 | "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==",
544 | "cpu": [
545 | "loong64"
546 | ],
547 | "dev": true,
548 | "optional": true,
549 | "os": [
550 | "linux"
551 | ],
552 | "engines": {
553 | "node": ">=12"
554 | }
555 | },
556 | "node_modules/@esbuild/linux-mips64el": {
557 | "version": "0.17.12",
558 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz",
559 | "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==",
560 | "cpu": [
561 | "mips64el"
562 | ],
563 | "dev": true,
564 | "optional": true,
565 | "os": [
566 | "linux"
567 | ],
568 | "engines": {
569 | "node": ">=12"
570 | }
571 | },
572 | "node_modules/@esbuild/linux-ppc64": {
573 | "version": "0.17.12",
574 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz",
575 | "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==",
576 | "cpu": [
577 | "ppc64"
578 | ],
579 | "dev": true,
580 | "optional": true,
581 | "os": [
582 | "linux"
583 | ],
584 | "engines": {
585 | "node": ">=12"
586 | }
587 | },
588 | "node_modules/@esbuild/linux-riscv64": {
589 | "version": "0.17.12",
590 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz",
591 | "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==",
592 | "cpu": [
593 | "riscv64"
594 | ],
595 | "dev": true,
596 | "optional": true,
597 | "os": [
598 | "linux"
599 | ],
600 | "engines": {
601 | "node": ">=12"
602 | }
603 | },
604 | "node_modules/@esbuild/linux-s390x": {
605 | "version": "0.17.12",
606 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz",
607 | "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==",
608 | "cpu": [
609 | "s390x"
610 | ],
611 | "dev": true,
612 | "optional": true,
613 | "os": [
614 | "linux"
615 | ],
616 | "engines": {
617 | "node": ">=12"
618 | }
619 | },
620 | "node_modules/@esbuild/linux-x64": {
621 | "version": "0.17.12",
622 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz",
623 | "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==",
624 | "cpu": [
625 | "x64"
626 | ],
627 | "dev": true,
628 | "optional": true,
629 | "os": [
630 | "linux"
631 | ],
632 | "engines": {
633 | "node": ">=12"
634 | }
635 | },
636 | "node_modules/@esbuild/netbsd-x64": {
637 | "version": "0.17.12",
638 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz",
639 | "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==",
640 | "cpu": [
641 | "x64"
642 | ],
643 | "dev": true,
644 | "optional": true,
645 | "os": [
646 | "netbsd"
647 | ],
648 | "engines": {
649 | "node": ">=12"
650 | }
651 | },
652 | "node_modules/@esbuild/openbsd-x64": {
653 | "version": "0.17.12",
654 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz",
655 | "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==",
656 | "cpu": [
657 | "x64"
658 | ],
659 | "dev": true,
660 | "optional": true,
661 | "os": [
662 | "openbsd"
663 | ],
664 | "engines": {
665 | "node": ">=12"
666 | }
667 | },
668 | "node_modules/@esbuild/sunos-x64": {
669 | "version": "0.17.12",
670 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz",
671 | "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==",
672 | "cpu": [
673 | "x64"
674 | ],
675 | "dev": true,
676 | "optional": true,
677 | "os": [
678 | "sunos"
679 | ],
680 | "engines": {
681 | "node": ">=12"
682 | }
683 | },
684 | "node_modules/@esbuild/win32-arm64": {
685 | "version": "0.17.12",
686 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz",
687 | "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==",
688 | "cpu": [
689 | "arm64"
690 | ],
691 | "dev": true,
692 | "optional": true,
693 | "os": [
694 | "win32"
695 | ],
696 | "engines": {
697 | "node": ">=12"
698 | }
699 | },
700 | "node_modules/@esbuild/win32-ia32": {
701 | "version": "0.17.12",
702 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz",
703 | "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==",
704 | "cpu": [
705 | "ia32"
706 | ],
707 | "dev": true,
708 | "optional": true,
709 | "os": [
710 | "win32"
711 | ],
712 | "engines": {
713 | "node": ">=12"
714 | }
715 | },
716 | "node_modules/@esbuild/win32-x64": {
717 | "version": "0.17.12",
718 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz",
719 | "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==",
720 | "cpu": [
721 | "x64"
722 | ],
723 | "dev": true,
724 | "optional": true,
725 | "os": [
726 | "win32"
727 | ],
728 | "engines": {
729 | "node": ">=12"
730 | }
731 | },
732 | "node_modules/@jridgewell/gen-mapping": {
733 | "version": "0.1.1",
734 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
735 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
736 | "dev": true,
737 | "dependencies": {
738 | "@jridgewell/set-array": "^1.0.0",
739 | "@jridgewell/sourcemap-codec": "^1.4.10"
740 | },
741 | "engines": {
742 | "node": ">=6.0.0"
743 | }
744 | },
745 | "node_modules/@jridgewell/resolve-uri": {
746 | "version": "3.1.0",
747 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
748 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
749 | "dev": true,
750 | "engines": {
751 | "node": ">=6.0.0"
752 | }
753 | },
754 | "node_modules/@jridgewell/set-array": {
755 | "version": "1.1.2",
756 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
757 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
758 | "dev": true,
759 | "engines": {
760 | "node": ">=6.0.0"
761 | }
762 | },
763 | "node_modules/@jridgewell/sourcemap-codec": {
764 | "version": "1.4.14",
765 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
766 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
767 | "dev": true
768 | },
769 | "node_modules/@jridgewell/trace-mapping": {
770 | "version": "0.3.17",
771 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
772 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
773 | "dev": true,
774 | "dependencies": {
775 | "@jridgewell/resolve-uri": "3.1.0",
776 | "@jridgewell/sourcemap-codec": "1.4.14"
777 | }
778 | },
779 | "node_modules/@popperjs/core": {
780 | "version": "2.11.6",
781 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
782 | "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
783 | "peer": true,
784 | "funding": {
785 | "type": "opencollective",
786 | "url": "https://opencollective.com/popperjs"
787 | }
788 | },
789 | "node_modules/@types/prop-types": {
790 | "version": "15.7.5",
791 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
792 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
793 | "dev": true
794 | },
795 | "node_modules/@types/react": {
796 | "version": "18.0.28",
797 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz",
798 | "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==",
799 | "dev": true,
800 | "dependencies": {
801 | "@types/prop-types": "*",
802 | "@types/scheduler": "*",
803 | "csstype": "^3.0.2"
804 | }
805 | },
806 | "node_modules/@types/react-dom": {
807 | "version": "18.0.11",
808 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz",
809 | "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==",
810 | "dev": true,
811 | "dependencies": {
812 | "@types/react": "*"
813 | }
814 | },
815 | "node_modules/@types/scheduler": {
816 | "version": "0.16.2",
817 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
818 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
819 | "dev": true
820 | },
821 | "node_modules/@vitejs/plugin-react": {
822 | "version": "3.1.0",
823 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz",
824 | "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==",
825 | "dev": true,
826 | "dependencies": {
827 | "@babel/core": "^7.20.12",
828 | "@babel/plugin-transform-react-jsx-self": "^7.18.6",
829 | "@babel/plugin-transform-react-jsx-source": "^7.19.6",
830 | "magic-string": "^0.27.0",
831 | "react-refresh": "^0.14.0"
832 | },
833 | "engines": {
834 | "node": "^14.18.0 || >=16.0.0"
835 | },
836 | "peerDependencies": {
837 | "vite": "^4.1.0-beta.0"
838 | }
839 | },
840 | "node_modules/ansi-styles": {
841 | "version": "3.2.1",
842 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
843 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
844 | "dev": true,
845 | "dependencies": {
846 | "color-convert": "^1.9.0"
847 | },
848 | "engines": {
849 | "node": ">=4"
850 | }
851 | },
852 | "node_modules/asynckit": {
853 | "version": "0.4.0",
854 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
855 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
856 | },
857 | "node_modules/axios": {
858 | "version": "1.3.4",
859 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
860 | "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
861 | "dependencies": {
862 | "follow-redirects": "^1.15.0",
863 | "form-data": "^4.0.0",
864 | "proxy-from-env": "^1.1.0"
865 | }
866 | },
867 | "node_modules/bootstrap": {
868 | "version": "5.2.3",
869 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
870 | "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
871 | "funding": [
872 | {
873 | "type": "github",
874 | "url": "https://github.com/sponsors/twbs"
875 | },
876 | {
877 | "type": "opencollective",
878 | "url": "https://opencollective.com/bootstrap"
879 | }
880 | ],
881 | "peerDependencies": {
882 | "@popperjs/core": "^2.11.6"
883 | }
884 | },
885 | "node_modules/browserslist": {
886 | "version": "4.21.5",
887 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
888 | "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
889 | "dev": true,
890 | "funding": [
891 | {
892 | "type": "opencollective",
893 | "url": "https://opencollective.com/browserslist"
894 | },
895 | {
896 | "type": "tidelift",
897 | "url": "https://tidelift.com/funding/github/npm/browserslist"
898 | }
899 | ],
900 | "dependencies": {
901 | "caniuse-lite": "^1.0.30001449",
902 | "electron-to-chromium": "^1.4.284",
903 | "node-releases": "^2.0.8",
904 | "update-browserslist-db": "^1.0.10"
905 | },
906 | "bin": {
907 | "browserslist": "cli.js"
908 | },
909 | "engines": {
910 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
911 | }
912 | },
913 | "node_modules/caniuse-lite": {
914 | "version": "1.0.30001469",
915 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz",
916 | "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==",
917 | "dev": true,
918 | "funding": [
919 | {
920 | "type": "opencollective",
921 | "url": "https://opencollective.com/browserslist"
922 | },
923 | {
924 | "type": "tidelift",
925 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
926 | }
927 | ]
928 | },
929 | "node_modules/chalk": {
930 | "version": "2.4.2",
931 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
932 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
933 | "dev": true,
934 | "dependencies": {
935 | "ansi-styles": "^3.2.1",
936 | "escape-string-regexp": "^1.0.5",
937 | "supports-color": "^5.3.0"
938 | },
939 | "engines": {
940 | "node": ">=4"
941 | }
942 | },
943 | "node_modules/color-convert": {
944 | "version": "1.9.3",
945 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
946 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
947 | "dev": true,
948 | "dependencies": {
949 | "color-name": "1.1.3"
950 | }
951 | },
952 | "node_modules/color-name": {
953 | "version": "1.1.3",
954 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
955 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
956 | "dev": true
957 | },
958 | "node_modules/combined-stream": {
959 | "version": "1.0.8",
960 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
961 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
962 | "dependencies": {
963 | "delayed-stream": "~1.0.0"
964 | },
965 | "engines": {
966 | "node": ">= 0.8"
967 | }
968 | },
969 | "node_modules/convert-source-map": {
970 | "version": "1.9.0",
971 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
972 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
973 | "dev": true
974 | },
975 | "node_modules/csstype": {
976 | "version": "3.1.1",
977 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
978 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
979 | "dev": true
980 | },
981 | "node_modules/debug": {
982 | "version": "4.3.4",
983 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
984 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
985 | "dev": true,
986 | "dependencies": {
987 | "ms": "2.1.2"
988 | },
989 | "engines": {
990 | "node": ">=6.0"
991 | },
992 | "peerDependenciesMeta": {
993 | "supports-color": {
994 | "optional": true
995 | }
996 | }
997 | },
998 | "node_modules/delayed-stream": {
999 | "version": "1.0.0",
1000 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1001 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1002 | "engines": {
1003 | "node": ">=0.4.0"
1004 | }
1005 | },
1006 | "node_modules/electron-to-chromium": {
1007 | "version": "1.4.335",
1008 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.335.tgz",
1009 | "integrity": "sha512-l/eowQqTnrq3gu+WSrdfkhfNHnPgYqlKAwxz7MTOj6mom19vpEDHNXl6dxDxyTiYuhemydprKr/HCrHfgk+OfQ==",
1010 | "dev": true
1011 | },
1012 | "node_modules/esbuild": {
1013 | "version": "0.17.12",
1014 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz",
1015 | "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==",
1016 | "dev": true,
1017 | "hasInstallScript": true,
1018 | "bin": {
1019 | "esbuild": "bin/esbuild"
1020 | },
1021 | "engines": {
1022 | "node": ">=12"
1023 | },
1024 | "optionalDependencies": {
1025 | "@esbuild/android-arm": "0.17.12",
1026 | "@esbuild/android-arm64": "0.17.12",
1027 | "@esbuild/android-x64": "0.17.12",
1028 | "@esbuild/darwin-arm64": "0.17.12",
1029 | "@esbuild/darwin-x64": "0.17.12",
1030 | "@esbuild/freebsd-arm64": "0.17.12",
1031 | "@esbuild/freebsd-x64": "0.17.12",
1032 | "@esbuild/linux-arm": "0.17.12",
1033 | "@esbuild/linux-arm64": "0.17.12",
1034 | "@esbuild/linux-ia32": "0.17.12",
1035 | "@esbuild/linux-loong64": "0.17.12",
1036 | "@esbuild/linux-mips64el": "0.17.12",
1037 | "@esbuild/linux-ppc64": "0.17.12",
1038 | "@esbuild/linux-riscv64": "0.17.12",
1039 | "@esbuild/linux-s390x": "0.17.12",
1040 | "@esbuild/linux-x64": "0.17.12",
1041 | "@esbuild/netbsd-x64": "0.17.12",
1042 | "@esbuild/openbsd-x64": "0.17.12",
1043 | "@esbuild/sunos-x64": "0.17.12",
1044 | "@esbuild/win32-arm64": "0.17.12",
1045 | "@esbuild/win32-ia32": "0.17.12",
1046 | "@esbuild/win32-x64": "0.17.12"
1047 | }
1048 | },
1049 | "node_modules/escalade": {
1050 | "version": "3.1.1",
1051 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1052 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1053 | "dev": true,
1054 | "engines": {
1055 | "node": ">=6"
1056 | }
1057 | },
1058 | "node_modules/escape-string-regexp": {
1059 | "version": "1.0.5",
1060 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1061 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1062 | "dev": true,
1063 | "engines": {
1064 | "node": ">=0.8.0"
1065 | }
1066 | },
1067 | "node_modules/follow-redirects": {
1068 | "version": "1.15.2",
1069 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
1070 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
1071 | "funding": [
1072 | {
1073 | "type": "individual",
1074 | "url": "https://github.com/sponsors/RubenVerborgh"
1075 | }
1076 | ],
1077 | "engines": {
1078 | "node": ">=4.0"
1079 | },
1080 | "peerDependenciesMeta": {
1081 | "debug": {
1082 | "optional": true
1083 | }
1084 | }
1085 | },
1086 | "node_modules/form-data": {
1087 | "version": "4.0.0",
1088 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
1089 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
1090 | "dependencies": {
1091 | "asynckit": "^0.4.0",
1092 | "combined-stream": "^1.0.8",
1093 | "mime-types": "^2.1.12"
1094 | },
1095 | "engines": {
1096 | "node": ">= 6"
1097 | }
1098 | },
1099 | "node_modules/fsevents": {
1100 | "version": "2.3.2",
1101 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1102 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1103 | "dev": true,
1104 | "hasInstallScript": true,
1105 | "optional": true,
1106 | "os": [
1107 | "darwin"
1108 | ],
1109 | "engines": {
1110 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1111 | }
1112 | },
1113 | "node_modules/function-bind": {
1114 | "version": "1.1.1",
1115 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1116 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1117 | "dev": true
1118 | },
1119 | "node_modules/gensync": {
1120 | "version": "1.0.0-beta.2",
1121 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1122 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1123 | "dev": true,
1124 | "engines": {
1125 | "node": ">=6.9.0"
1126 | }
1127 | },
1128 | "node_modules/globals": {
1129 | "version": "11.12.0",
1130 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1131 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1132 | "dev": true,
1133 | "engines": {
1134 | "node": ">=4"
1135 | }
1136 | },
1137 | "node_modules/has": {
1138 | "version": "1.0.3",
1139 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1140 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1141 | "dev": true,
1142 | "dependencies": {
1143 | "function-bind": "^1.1.1"
1144 | },
1145 | "engines": {
1146 | "node": ">= 0.4.0"
1147 | }
1148 | },
1149 | "node_modules/has-flag": {
1150 | "version": "3.0.0",
1151 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1152 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1153 | "dev": true,
1154 | "engines": {
1155 | "node": ">=4"
1156 | }
1157 | },
1158 | "node_modules/is-core-module": {
1159 | "version": "2.11.0",
1160 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
1161 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
1162 | "dev": true,
1163 | "dependencies": {
1164 | "has": "^1.0.3"
1165 | },
1166 | "funding": {
1167 | "url": "https://github.com/sponsors/ljharb"
1168 | }
1169 | },
1170 | "node_modules/js-tokens": {
1171 | "version": "4.0.0",
1172 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1173 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1174 | },
1175 | "node_modules/jsesc": {
1176 | "version": "2.5.2",
1177 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
1178 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
1179 | "dev": true,
1180 | "bin": {
1181 | "jsesc": "bin/jsesc"
1182 | },
1183 | "engines": {
1184 | "node": ">=4"
1185 | }
1186 | },
1187 | "node_modules/json5": {
1188 | "version": "2.2.3",
1189 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1190 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1191 | "dev": true,
1192 | "bin": {
1193 | "json5": "lib/cli.js"
1194 | },
1195 | "engines": {
1196 | "node": ">=6"
1197 | }
1198 | },
1199 | "node_modules/loose-envify": {
1200 | "version": "1.4.0",
1201 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1202 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1203 | "dependencies": {
1204 | "js-tokens": "^3.0.0 || ^4.0.0"
1205 | },
1206 | "bin": {
1207 | "loose-envify": "cli.js"
1208 | }
1209 | },
1210 | "node_modules/lru-cache": {
1211 | "version": "5.1.1",
1212 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1213 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1214 | "dev": true,
1215 | "dependencies": {
1216 | "yallist": "^3.0.2"
1217 | }
1218 | },
1219 | "node_modules/magic-string": {
1220 | "version": "0.27.0",
1221 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
1222 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
1223 | "dev": true,
1224 | "dependencies": {
1225 | "@jridgewell/sourcemap-codec": "^1.4.13"
1226 | },
1227 | "engines": {
1228 | "node": ">=12"
1229 | }
1230 | },
1231 | "node_modules/mime-db": {
1232 | "version": "1.52.0",
1233 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1234 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1235 | "engines": {
1236 | "node": ">= 0.6"
1237 | }
1238 | },
1239 | "node_modules/mime-types": {
1240 | "version": "2.1.35",
1241 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1242 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1243 | "dependencies": {
1244 | "mime-db": "1.52.0"
1245 | },
1246 | "engines": {
1247 | "node": ">= 0.6"
1248 | }
1249 | },
1250 | "node_modules/ms": {
1251 | "version": "2.1.2",
1252 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1253 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1254 | "dev": true
1255 | },
1256 | "node_modules/nanoid": {
1257 | "version": "3.3.4",
1258 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
1259 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
1260 | "dev": true,
1261 | "bin": {
1262 | "nanoid": "bin/nanoid.cjs"
1263 | },
1264 | "engines": {
1265 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1266 | }
1267 | },
1268 | "node_modules/node-releases": {
1269 | "version": "2.0.10",
1270 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
1271 | "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
1272 | "dev": true
1273 | },
1274 | "node_modules/path-parse": {
1275 | "version": "1.0.7",
1276 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1277 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1278 | "dev": true
1279 | },
1280 | "node_modules/picocolors": {
1281 | "version": "1.0.0",
1282 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1283 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1284 | "dev": true
1285 | },
1286 | "node_modules/postcss": {
1287 | "version": "8.4.21",
1288 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
1289 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
1290 | "dev": true,
1291 | "funding": [
1292 | {
1293 | "type": "opencollective",
1294 | "url": "https://opencollective.com/postcss/"
1295 | },
1296 | {
1297 | "type": "tidelift",
1298 | "url": "https://tidelift.com/funding/github/npm/postcss"
1299 | }
1300 | ],
1301 | "dependencies": {
1302 | "nanoid": "^3.3.4",
1303 | "picocolors": "^1.0.0",
1304 | "source-map-js": "^1.0.2"
1305 | },
1306 | "engines": {
1307 | "node": "^10 || ^12 || >=14"
1308 | }
1309 | },
1310 | "node_modules/proxy-from-env": {
1311 | "version": "1.1.0",
1312 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1313 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1314 | },
1315 | "node_modules/react": {
1316 | "version": "18.2.0",
1317 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
1318 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
1319 | "dependencies": {
1320 | "loose-envify": "^1.1.0"
1321 | },
1322 | "engines": {
1323 | "node": ">=0.10.0"
1324 | }
1325 | },
1326 | "node_modules/react-dom": {
1327 | "version": "18.2.0",
1328 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
1329 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
1330 | "dependencies": {
1331 | "loose-envify": "^1.1.0",
1332 | "scheduler": "^0.23.0"
1333 | },
1334 | "peerDependencies": {
1335 | "react": "^18.2.0"
1336 | }
1337 | },
1338 | "node_modules/react-refresh": {
1339 | "version": "0.14.0",
1340 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
1341 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
1342 | "dev": true,
1343 | "engines": {
1344 | "node": ">=0.10.0"
1345 | }
1346 | },
1347 | "node_modules/resolve": {
1348 | "version": "1.22.1",
1349 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1350 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1351 | "dev": true,
1352 | "dependencies": {
1353 | "is-core-module": "^2.9.0",
1354 | "path-parse": "^1.0.7",
1355 | "supports-preserve-symlinks-flag": "^1.0.0"
1356 | },
1357 | "bin": {
1358 | "resolve": "bin/resolve"
1359 | },
1360 | "funding": {
1361 | "url": "https://github.com/sponsors/ljharb"
1362 | }
1363 | },
1364 | "node_modules/rollup": {
1365 | "version": "3.20.0",
1366 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz",
1367 | "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==",
1368 | "dev": true,
1369 | "bin": {
1370 | "rollup": "dist/bin/rollup"
1371 | },
1372 | "engines": {
1373 | "node": ">=14.18.0",
1374 | "npm": ">=8.0.0"
1375 | },
1376 | "optionalDependencies": {
1377 | "fsevents": "~2.3.2"
1378 | }
1379 | },
1380 | "node_modules/scheduler": {
1381 | "version": "0.23.0",
1382 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
1383 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
1384 | "dependencies": {
1385 | "loose-envify": "^1.1.0"
1386 | }
1387 | },
1388 | "node_modules/semver": {
1389 | "version": "6.3.0",
1390 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1391 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1392 | "dev": true,
1393 | "bin": {
1394 | "semver": "bin/semver.js"
1395 | }
1396 | },
1397 | "node_modules/source-map-js": {
1398 | "version": "1.0.2",
1399 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1400 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1401 | "dev": true,
1402 | "engines": {
1403 | "node": ">=0.10.0"
1404 | }
1405 | },
1406 | "node_modules/supports-color": {
1407 | "version": "5.5.0",
1408 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1409 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1410 | "dev": true,
1411 | "dependencies": {
1412 | "has-flag": "^3.0.0"
1413 | },
1414 | "engines": {
1415 | "node": ">=4"
1416 | }
1417 | },
1418 | "node_modules/supports-preserve-symlinks-flag": {
1419 | "version": "1.0.0",
1420 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1421 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1422 | "dev": true,
1423 | "engines": {
1424 | "node": ">= 0.4"
1425 | },
1426 | "funding": {
1427 | "url": "https://github.com/sponsors/ljharb"
1428 | }
1429 | },
1430 | "node_modules/to-fast-properties": {
1431 | "version": "2.0.0",
1432 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
1433 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
1434 | "dev": true,
1435 | "engines": {
1436 | "node": ">=4"
1437 | }
1438 | },
1439 | "node_modules/typescript": {
1440 | "version": "4.9.5",
1441 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
1442 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
1443 | "dev": true,
1444 | "bin": {
1445 | "tsc": "bin/tsc",
1446 | "tsserver": "bin/tsserver"
1447 | },
1448 | "engines": {
1449 | "node": ">=4.2.0"
1450 | }
1451 | },
1452 | "node_modules/update-browserslist-db": {
1453 | "version": "1.0.10",
1454 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
1455 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
1456 | "dev": true,
1457 | "funding": [
1458 | {
1459 | "type": "opencollective",
1460 | "url": "https://opencollective.com/browserslist"
1461 | },
1462 | {
1463 | "type": "tidelift",
1464 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1465 | }
1466 | ],
1467 | "dependencies": {
1468 | "escalade": "^3.1.1",
1469 | "picocolors": "^1.0.0"
1470 | },
1471 | "bin": {
1472 | "browserslist-lint": "cli.js"
1473 | },
1474 | "peerDependencies": {
1475 | "browserslist": ">= 4.21.0"
1476 | }
1477 | },
1478 | "node_modules/vite": {
1479 | "version": "4.2.1",
1480 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz",
1481 | "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==",
1482 | "dev": true,
1483 | "dependencies": {
1484 | "esbuild": "^0.17.5",
1485 | "postcss": "^8.4.21",
1486 | "resolve": "^1.22.1",
1487 | "rollup": "^3.18.0"
1488 | },
1489 | "bin": {
1490 | "vite": "bin/vite.js"
1491 | },
1492 | "engines": {
1493 | "node": "^14.18.0 || >=16.0.0"
1494 | },
1495 | "optionalDependencies": {
1496 | "fsevents": "~2.3.2"
1497 | },
1498 | "peerDependencies": {
1499 | "@types/node": ">= 14",
1500 | "less": "*",
1501 | "sass": "*",
1502 | "stylus": "*",
1503 | "sugarss": "*",
1504 | "terser": "^5.4.0"
1505 | },
1506 | "peerDependenciesMeta": {
1507 | "@types/node": {
1508 | "optional": true
1509 | },
1510 | "less": {
1511 | "optional": true
1512 | },
1513 | "sass": {
1514 | "optional": true
1515 | },
1516 | "stylus": {
1517 | "optional": true
1518 | },
1519 | "sugarss": {
1520 | "optional": true
1521 | },
1522 | "terser": {
1523 | "optional": true
1524 | }
1525 | }
1526 | },
1527 | "node_modules/yallist": {
1528 | "version": "3.1.1",
1529 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1530 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
1531 | "dev": true
1532 | }
1533 | }
1534 | }
1535 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-app-starter",
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 | "axios": "^1.3.4",
13 | "bootstrap": "^5.2.3",
14 | "react": "^18.2.0",
15 | "react-dom": "^18.2.0"
16 | },
17 | "devDependencies": {
18 | "@types/react": "^18.0.28",
19 | "@types/react-dom": "^18.0.11",
20 | "@vitejs/plugin-react": "^3.1.0",
21 | "typescript": "^4.9.3",
22 | "vite": "^4.2.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mosh-hamedani/react-course-part2-starter/5493d81846c711c658691b615a720c00067d637e/src/App.css
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import './App.css';
2 |
3 | function App() {
4 | return React Starter Project
;
5 | }
6 |
7 | export default App;
8 |
--------------------------------------------------------------------------------
/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 1rem;
3 | }
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import 'bootstrap/dist/css/bootstrap.css';
2 | import React from 'react';
3 | import ReactDOM from 'react-dom/client';
4 | import App from './App';
5 | import './index.css';
6 |
7 | ReactDOM.createRoot(
8 | document.getElementById('root') as HTMLElement
9 | ).render(
10 |
11 |
12 |
13 | );
14 |
--------------------------------------------------------------------------------
/src/react-query/PostList.tsx:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import { useEffect, useState } from 'react';
3 |
4 | interface Post {
5 | id: number;
6 | title: string;
7 | body: string;
8 | userId: number;
9 | }
10 |
11 | const PostList = () => {
12 | const [posts, setPosts] = useState([]);
13 | const [error, setError] = useState('');
14 |
15 | useEffect(() => {
16 | axios
17 | .get('https://jsonplaceholder.typicode.com/posts')
18 | .then((res) => setPosts(res.data))
19 | .catch((error) => setError(error));
20 | }, []);
21 |
22 | if (error) return {error}
;
23 |
24 | return (
25 |
26 | {posts.map((post) => (
27 | -
28 | {post.title}
29 |
30 | ))}
31 |
32 | );
33 | };
34 |
35 | export default PostList;
36 |
--------------------------------------------------------------------------------
/src/react-query/TodoForm.tsx:
--------------------------------------------------------------------------------
1 | import { useRef } from 'react';
2 |
3 | const TodoForm = () => {
4 | const ref = useRef(null);
5 |
6 | return (
7 |
15 | );
16 | };
17 |
18 | export default TodoForm;
19 |
--------------------------------------------------------------------------------
/src/react-query/TodoList.tsx:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import React, { useEffect, useState } from 'react';
3 |
4 | interface Todo {
5 | id: number;
6 | title: string;
7 | userId: number;
8 | completed: boolean;
9 | }
10 |
11 | const TodoList = () => {
12 | const [todos, setTodos] = useState([]);
13 | const [error, setError] = useState('');
14 |
15 | useEffect(() => {
16 | axios
17 | .get('https://jsonplaceholder.typicode.com/todos')
18 | .then((res) => setTodos(res.data))
19 | .catch((error) => setError(error));
20 | }, []);
21 |
22 | if (error) return {error}
;
23 |
24 | return (
25 |
26 | {todos.map((todo) => (
27 | -
28 | {todo.title}
29 |
30 | ))}
31 |
32 | );
33 | };
34 |
35 | export default TodoList;
36 |
--------------------------------------------------------------------------------
/src/routing/About.tsx:
--------------------------------------------------------------------------------
1 | const About = () => {
2 | return About
;
3 | };
4 |
5 | export default About;
6 |
--------------------------------------------------------------------------------
/src/routing/ContactPage.tsx:
--------------------------------------------------------------------------------
1 | const ContactPage = () => {
2 | return (
3 |
11 | );
12 | };
13 |
14 | export default ContactPage;
15 |
--------------------------------------------------------------------------------
/src/routing/ErrorPage.tsx:
--------------------------------------------------------------------------------
1 | const ErrorPage = () => {
2 | return (
3 | <>
4 | Oops...
5 | Sorry, an unexpected error has occurred.
6 | >
7 | );
8 | };
9 |
10 | export default ErrorPage;
11 |
--------------------------------------------------------------------------------
/src/routing/HomePage.tsx:
--------------------------------------------------------------------------------
1 | const HomePage = () => {
2 | return (
3 | <>
4 |
5 | Lorem ipsum dolor sit amet consectetur, adipisicing elit.
6 | Incidunt, mollitia!
7 |
8 | Users
9 | >
10 | );
11 | };
12 |
13 | export default HomePage;
14 |
--------------------------------------------------------------------------------
/src/routing/Layout.tsx:
--------------------------------------------------------------------------------
1 | import NavBar from './NavBar';
2 |
3 | const Layout = () => {
4 | return (
5 | <>
6 |
7 |
8 | >
9 | );
10 | };
11 |
12 | export default Layout;
13 |
--------------------------------------------------------------------------------
/src/routing/LoginPage.tsx:
--------------------------------------------------------------------------------
1 | const LoginPage = () => {
2 | return Login
;
3 | };
4 |
5 | export default LoginPage;
6 |
--------------------------------------------------------------------------------
/src/routing/NavBar.tsx:
--------------------------------------------------------------------------------
1 | const NavBar = () => {
2 | return (
3 |
27 | );
28 | };
29 |
30 | export default NavBar;
31 |
--------------------------------------------------------------------------------
/src/routing/UserDetailPage.tsx:
--------------------------------------------------------------------------------
1 | const UserDetailPage = () => {
2 | return User
;
3 | };
4 |
5 | export default UserDetailPage;
6 |
--------------------------------------------------------------------------------
/src/routing/UserListPage.tsx:
--------------------------------------------------------------------------------
1 | const UserListPage = () => {
2 | const users = [
3 | { id: 1, name: 'Mosh' },
4 | { id: 2, name: 'John' },
5 | { id: 3, name: 'Alice' },
6 | ];
7 | return (
8 |
9 | {users.map((user) => (
10 | -
11 | {user.name}
12 |
13 | ))}
14 |
15 | );
16 | };
17 |
18 | export default UserListPage;
19 |
--------------------------------------------------------------------------------
/src/routing/hooks/useAuth.ts:
--------------------------------------------------------------------------------
1 | const useAuth = () => ({ user: { id: 1, name: 'Mosh' } });
2 |
3 | // const useAuth = () => ({ user: null });
4 |
5 | export default useAuth;
6 |
--------------------------------------------------------------------------------
/src/state-management/Counter.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | const Counter = () => {
4 | const [value, setValue] = useState(0);
5 |
6 | return (
7 |
8 | Counter ({value})
9 |
15 |
21 |
22 | );
23 | };
24 |
25 | export default Counter;
26 |
--------------------------------------------------------------------------------
/src/state-management/HomePage.tsx:
--------------------------------------------------------------------------------
1 | import TaskList from './TaskList';
2 |
3 | const HomePage = () => {
4 | return ;
5 | };
6 |
7 | export default HomePage;
8 |
--------------------------------------------------------------------------------
/src/state-management/LoginStatus.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | const LoginStatus = () => {
4 | const [user, setUser] = useState('');
5 |
6 | if (user)
7 | return (
8 | <>
9 |
15 | >
16 | );
17 | return (
18 |
23 | );
24 | };
25 |
26 | export default LoginStatus;
27 |
--------------------------------------------------------------------------------
/src/state-management/NavBar.tsx:
--------------------------------------------------------------------------------
1 | import LoginStatus from './LoginStatus';
2 |
3 | const NavBar = () => {
4 | return (
5 |
9 | );
10 | };
11 |
12 | export default NavBar;
13 |
--------------------------------------------------------------------------------
/src/state-management/TaskList.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | interface Task {
4 | id: number;
5 | title: string;
6 | }
7 |
8 | const TaskList = () => {
9 | const [tasks, setTasks] = useState([]);
10 |
11 | return (
12 | <>
13 |
24 |
25 | {tasks.map((task) => (
26 | -
30 | {task.title}
31 |
39 |
40 | ))}
41 |
42 | >
43 | );
44 | };
45 |
46 | export default TaskList;
47 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
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 | }
22 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------