├── .gitattributes
├── .gitignore
├── index.html
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── public
└── vite.svg
├── src
├── App.jsx
├── assets
│ └── react.svg
├── components
│ ├── CustomForm.jsx
│ ├── EditForm.jsx
│ ├── TaskItem.jsx
│ ├── TaskItem.module.css
│ ├── TaskList.jsx
│ └── TaskList.module.css
├── hooks
│ └── useLocalStorage.jsx
├── index.css
└── main.jsx
└── vite.config.js
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | My Todo List
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-todo",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "react-todo",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "@heroicons/react": "^2.0.8",
12 | "react": "^18.2.0",
13 | "react-dom": "^18.2.0"
14 | },
15 | "devDependencies": {
16 | "@types/react": "^18.0.17",
17 | "@types/react-dom": "^18.0.6",
18 | "@vitejs/plugin-react": "^2.0.1",
19 | "vite": "^3.0.7"
20 | }
21 | },
22 | "node_modules/@ampproject/remapping": {
23 | "version": "2.2.1",
24 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
25 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
26 | "dev": true,
27 | "dependencies": {
28 | "@jridgewell/gen-mapping": "^0.3.0",
29 | "@jridgewell/trace-mapping": "^0.3.9"
30 | },
31 | "engines": {
32 | "node": ">=6.0.0"
33 | }
34 | },
35 | "node_modules/@babel/code-frame": {
36 | "version": "7.22.5",
37 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
38 | "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
39 | "dev": true,
40 | "dependencies": {
41 | "@babel/highlight": "^7.22.5"
42 | },
43 | "engines": {
44 | "node": ">=6.9.0"
45 | }
46 | },
47 | "node_modules/@babel/compat-data": {
48 | "version": "7.22.5",
49 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz",
50 | "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==",
51 | "dev": true,
52 | "engines": {
53 | "node": ">=6.9.0"
54 | }
55 | },
56 | "node_modules/@babel/core": {
57 | "version": "7.22.5",
58 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz",
59 | "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==",
60 | "dev": true,
61 | "dependencies": {
62 | "@ampproject/remapping": "^2.2.0",
63 | "@babel/code-frame": "^7.22.5",
64 | "@babel/generator": "^7.22.5",
65 | "@babel/helper-compilation-targets": "^7.22.5",
66 | "@babel/helper-module-transforms": "^7.22.5",
67 | "@babel/helpers": "^7.22.5",
68 | "@babel/parser": "^7.22.5",
69 | "@babel/template": "^7.22.5",
70 | "@babel/traverse": "^7.22.5",
71 | "@babel/types": "^7.22.5",
72 | "convert-source-map": "^1.7.0",
73 | "debug": "^4.1.0",
74 | "gensync": "^1.0.0-beta.2",
75 | "json5": "^2.2.2",
76 | "semver": "^6.3.0"
77 | },
78 | "engines": {
79 | "node": ">=6.9.0"
80 | },
81 | "funding": {
82 | "type": "opencollective",
83 | "url": "https://opencollective.com/babel"
84 | }
85 | },
86 | "node_modules/@babel/generator": {
87 | "version": "7.22.5",
88 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
89 | "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
90 | "dev": true,
91 | "dependencies": {
92 | "@babel/types": "^7.22.5",
93 | "@jridgewell/gen-mapping": "^0.3.2",
94 | "@jridgewell/trace-mapping": "^0.3.17",
95 | "jsesc": "^2.5.1"
96 | },
97 | "engines": {
98 | "node": ">=6.9.0"
99 | }
100 | },
101 | "node_modules/@babel/helper-annotate-as-pure": {
102 | "version": "7.22.5",
103 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
104 | "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
105 | "dev": true,
106 | "dependencies": {
107 | "@babel/types": "^7.22.5"
108 | },
109 | "engines": {
110 | "node": ">=6.9.0"
111 | }
112 | },
113 | "node_modules/@babel/helper-compilation-targets": {
114 | "version": "7.22.5",
115 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz",
116 | "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==",
117 | "dev": true,
118 | "dependencies": {
119 | "@babel/compat-data": "^7.22.5",
120 | "@babel/helper-validator-option": "^7.22.5",
121 | "browserslist": "^4.21.3",
122 | "lru-cache": "^5.1.1",
123 | "semver": "^6.3.0"
124 | },
125 | "engines": {
126 | "node": ">=6.9.0"
127 | },
128 | "peerDependencies": {
129 | "@babel/core": "^7.0.0"
130 | }
131 | },
132 | "node_modules/@babel/helper-environment-visitor": {
133 | "version": "7.22.5",
134 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
135 | "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
136 | "dev": true,
137 | "engines": {
138 | "node": ">=6.9.0"
139 | }
140 | },
141 | "node_modules/@babel/helper-function-name": {
142 | "version": "7.22.5",
143 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
144 | "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
145 | "dev": true,
146 | "dependencies": {
147 | "@babel/template": "^7.22.5",
148 | "@babel/types": "^7.22.5"
149 | },
150 | "engines": {
151 | "node": ">=6.9.0"
152 | }
153 | },
154 | "node_modules/@babel/helper-hoist-variables": {
155 | "version": "7.22.5",
156 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
157 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
158 | "dev": true,
159 | "dependencies": {
160 | "@babel/types": "^7.22.5"
161 | },
162 | "engines": {
163 | "node": ">=6.9.0"
164 | }
165 | },
166 | "node_modules/@babel/helper-module-imports": {
167 | "version": "7.22.5",
168 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
169 | "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
170 | "dev": true,
171 | "dependencies": {
172 | "@babel/types": "^7.22.5"
173 | },
174 | "engines": {
175 | "node": ">=6.9.0"
176 | }
177 | },
178 | "node_modules/@babel/helper-module-transforms": {
179 | "version": "7.22.5",
180 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
181 | "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
182 | "dev": true,
183 | "dependencies": {
184 | "@babel/helper-environment-visitor": "^7.22.5",
185 | "@babel/helper-module-imports": "^7.22.5",
186 | "@babel/helper-simple-access": "^7.22.5",
187 | "@babel/helper-split-export-declaration": "^7.22.5",
188 | "@babel/helper-validator-identifier": "^7.22.5",
189 | "@babel/template": "^7.22.5",
190 | "@babel/traverse": "^7.22.5",
191 | "@babel/types": "^7.22.5"
192 | },
193 | "engines": {
194 | "node": ">=6.9.0"
195 | }
196 | },
197 | "node_modules/@babel/helper-plugin-utils": {
198 | "version": "7.22.5",
199 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
200 | "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
201 | "dev": true,
202 | "engines": {
203 | "node": ">=6.9.0"
204 | }
205 | },
206 | "node_modules/@babel/helper-simple-access": {
207 | "version": "7.22.5",
208 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
209 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
210 | "dev": true,
211 | "dependencies": {
212 | "@babel/types": "^7.22.5"
213 | },
214 | "engines": {
215 | "node": ">=6.9.0"
216 | }
217 | },
218 | "node_modules/@babel/helper-split-export-declaration": {
219 | "version": "7.22.5",
220 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz",
221 | "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==",
222 | "dev": true,
223 | "dependencies": {
224 | "@babel/types": "^7.22.5"
225 | },
226 | "engines": {
227 | "node": ">=6.9.0"
228 | }
229 | },
230 | "node_modules/@babel/helper-string-parser": {
231 | "version": "7.22.5",
232 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
233 | "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
234 | "dev": true,
235 | "engines": {
236 | "node": ">=6.9.0"
237 | }
238 | },
239 | "node_modules/@babel/helper-validator-identifier": {
240 | "version": "7.22.5",
241 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
242 | "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
243 | "dev": true,
244 | "engines": {
245 | "node": ">=6.9.0"
246 | }
247 | },
248 | "node_modules/@babel/helper-validator-option": {
249 | "version": "7.22.5",
250 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
251 | "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
252 | "dev": true,
253 | "engines": {
254 | "node": ">=6.9.0"
255 | }
256 | },
257 | "node_modules/@babel/helpers": {
258 | "version": "7.22.5",
259 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz",
260 | "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==",
261 | "dev": true,
262 | "dependencies": {
263 | "@babel/template": "^7.22.5",
264 | "@babel/traverse": "^7.22.5",
265 | "@babel/types": "^7.22.5"
266 | },
267 | "engines": {
268 | "node": ">=6.9.0"
269 | }
270 | },
271 | "node_modules/@babel/highlight": {
272 | "version": "7.22.5",
273 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
274 | "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
275 | "dev": true,
276 | "dependencies": {
277 | "@babel/helper-validator-identifier": "^7.22.5",
278 | "chalk": "^2.0.0",
279 | "js-tokens": "^4.0.0"
280 | },
281 | "engines": {
282 | "node": ">=6.9.0"
283 | }
284 | },
285 | "node_modules/@babel/parser": {
286 | "version": "7.22.5",
287 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
288 | "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
289 | "dev": true,
290 | "bin": {
291 | "parser": "bin/babel-parser.js"
292 | },
293 | "engines": {
294 | "node": ">=6.0.0"
295 | }
296 | },
297 | "node_modules/@babel/plugin-syntax-jsx": {
298 | "version": "7.22.5",
299 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
300 | "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
301 | "dev": true,
302 | "dependencies": {
303 | "@babel/helper-plugin-utils": "^7.22.5"
304 | },
305 | "engines": {
306 | "node": ">=6.9.0"
307 | },
308 | "peerDependencies": {
309 | "@babel/core": "^7.0.0-0"
310 | }
311 | },
312 | "node_modules/@babel/plugin-transform-react-jsx": {
313 | "version": "7.22.5",
314 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz",
315 | "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==",
316 | "dev": true,
317 | "dependencies": {
318 | "@babel/helper-annotate-as-pure": "^7.22.5",
319 | "@babel/helper-module-imports": "^7.22.5",
320 | "@babel/helper-plugin-utils": "^7.22.5",
321 | "@babel/plugin-syntax-jsx": "^7.22.5",
322 | "@babel/types": "^7.22.5"
323 | },
324 | "engines": {
325 | "node": ">=6.9.0"
326 | },
327 | "peerDependencies": {
328 | "@babel/core": "^7.0.0-0"
329 | }
330 | },
331 | "node_modules/@babel/plugin-transform-react-jsx-development": {
332 | "version": "7.22.5",
333 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
334 | "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
335 | "dev": true,
336 | "dependencies": {
337 | "@babel/plugin-transform-react-jsx": "^7.22.5"
338 | },
339 | "engines": {
340 | "node": ">=6.9.0"
341 | },
342 | "peerDependencies": {
343 | "@babel/core": "^7.0.0-0"
344 | }
345 | },
346 | "node_modules/@babel/plugin-transform-react-jsx-self": {
347 | "version": "7.22.5",
348 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz",
349 | "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==",
350 | "dev": true,
351 | "dependencies": {
352 | "@babel/helper-plugin-utils": "^7.22.5"
353 | },
354 | "engines": {
355 | "node": ">=6.9.0"
356 | },
357 | "peerDependencies": {
358 | "@babel/core": "^7.0.0-0"
359 | }
360 | },
361 | "node_modules/@babel/plugin-transform-react-jsx-source": {
362 | "version": "7.22.5",
363 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz",
364 | "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==",
365 | "dev": true,
366 | "dependencies": {
367 | "@babel/helper-plugin-utils": "^7.22.5"
368 | },
369 | "engines": {
370 | "node": ">=6.9.0"
371 | },
372 | "peerDependencies": {
373 | "@babel/core": "^7.0.0-0"
374 | }
375 | },
376 | "node_modules/@babel/template": {
377 | "version": "7.22.5",
378 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
379 | "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
380 | "dev": true,
381 | "dependencies": {
382 | "@babel/code-frame": "^7.22.5",
383 | "@babel/parser": "^7.22.5",
384 | "@babel/types": "^7.22.5"
385 | },
386 | "engines": {
387 | "node": ">=6.9.0"
388 | }
389 | },
390 | "node_modules/@babel/traverse": {
391 | "version": "7.22.5",
392 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz",
393 | "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==",
394 | "dev": true,
395 | "dependencies": {
396 | "@babel/code-frame": "^7.22.5",
397 | "@babel/generator": "^7.22.5",
398 | "@babel/helper-environment-visitor": "^7.22.5",
399 | "@babel/helper-function-name": "^7.22.5",
400 | "@babel/helper-hoist-variables": "^7.22.5",
401 | "@babel/helper-split-export-declaration": "^7.22.5",
402 | "@babel/parser": "^7.22.5",
403 | "@babel/types": "^7.22.5",
404 | "debug": "^4.1.0",
405 | "globals": "^11.1.0"
406 | },
407 | "engines": {
408 | "node": ">=6.9.0"
409 | }
410 | },
411 | "node_modules/@babel/types": {
412 | "version": "7.22.5",
413 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
414 | "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
415 | "dev": true,
416 | "dependencies": {
417 | "@babel/helper-string-parser": "^7.22.5",
418 | "@babel/helper-validator-identifier": "^7.22.5",
419 | "to-fast-properties": "^2.0.0"
420 | },
421 | "engines": {
422 | "node": ">=6.9.0"
423 | }
424 | },
425 | "node_modules/@esbuild/android-arm": {
426 | "version": "0.15.18",
427 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
428 | "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
429 | "cpu": [
430 | "arm"
431 | ],
432 | "dev": true,
433 | "optional": true,
434 | "os": [
435 | "android"
436 | ],
437 | "engines": {
438 | "node": ">=12"
439 | }
440 | },
441 | "node_modules/@esbuild/linux-loong64": {
442 | "version": "0.15.18",
443 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
444 | "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
445 | "cpu": [
446 | "loong64"
447 | ],
448 | "dev": true,
449 | "optional": true,
450 | "os": [
451 | "linux"
452 | ],
453 | "engines": {
454 | "node": ">=12"
455 | }
456 | },
457 | "node_modules/@heroicons/react": {
458 | "version": "2.0.18",
459 | "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.18.tgz",
460 | "integrity": "sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==",
461 | "peerDependencies": {
462 | "react": ">= 16"
463 | }
464 | },
465 | "node_modules/@jridgewell/gen-mapping": {
466 | "version": "0.3.3",
467 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
468 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
469 | "dev": true,
470 | "dependencies": {
471 | "@jridgewell/set-array": "^1.0.1",
472 | "@jridgewell/sourcemap-codec": "^1.4.10",
473 | "@jridgewell/trace-mapping": "^0.3.9"
474 | },
475 | "engines": {
476 | "node": ">=6.0.0"
477 | }
478 | },
479 | "node_modules/@jridgewell/resolve-uri": {
480 | "version": "3.1.0",
481 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
482 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
483 | "dev": true,
484 | "engines": {
485 | "node": ">=6.0.0"
486 | }
487 | },
488 | "node_modules/@jridgewell/set-array": {
489 | "version": "1.1.2",
490 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
491 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
492 | "dev": true,
493 | "engines": {
494 | "node": ">=6.0.0"
495 | }
496 | },
497 | "node_modules/@jridgewell/sourcemap-codec": {
498 | "version": "1.4.15",
499 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
500 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
501 | "dev": true
502 | },
503 | "node_modules/@jridgewell/trace-mapping": {
504 | "version": "0.3.18",
505 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
506 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
507 | "dev": true,
508 | "dependencies": {
509 | "@jridgewell/resolve-uri": "3.1.0",
510 | "@jridgewell/sourcemap-codec": "1.4.14"
511 | }
512 | },
513 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
514 | "version": "1.4.14",
515 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
516 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
517 | "dev": true
518 | },
519 | "node_modules/@types/prop-types": {
520 | "version": "15.7.5",
521 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
522 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
523 | "dev": true
524 | },
525 | "node_modules/@types/react": {
526 | "version": "18.2.14",
527 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz",
528 | "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==",
529 | "dev": true,
530 | "dependencies": {
531 | "@types/prop-types": "*",
532 | "@types/scheduler": "*",
533 | "csstype": "^3.0.2"
534 | }
535 | },
536 | "node_modules/@types/react-dom": {
537 | "version": "18.2.6",
538 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz",
539 | "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==",
540 | "dev": true,
541 | "dependencies": {
542 | "@types/react": "*"
543 | }
544 | },
545 | "node_modules/@types/scheduler": {
546 | "version": "0.16.3",
547 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
548 | "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==",
549 | "dev": true
550 | },
551 | "node_modules/@vitejs/plugin-react": {
552 | "version": "2.2.0",
553 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz",
554 | "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==",
555 | "dev": true,
556 | "dependencies": {
557 | "@babel/core": "^7.19.6",
558 | "@babel/plugin-transform-react-jsx": "^7.19.0",
559 | "@babel/plugin-transform-react-jsx-development": "^7.18.6",
560 | "@babel/plugin-transform-react-jsx-self": "^7.18.6",
561 | "@babel/plugin-transform-react-jsx-source": "^7.19.6",
562 | "magic-string": "^0.26.7",
563 | "react-refresh": "^0.14.0"
564 | },
565 | "engines": {
566 | "node": "^14.18.0 || >=16.0.0"
567 | },
568 | "peerDependencies": {
569 | "vite": "^3.0.0"
570 | }
571 | },
572 | "node_modules/ansi-styles": {
573 | "version": "3.2.1",
574 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
575 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
576 | "dev": true,
577 | "dependencies": {
578 | "color-convert": "^1.9.0"
579 | },
580 | "engines": {
581 | "node": ">=4"
582 | }
583 | },
584 | "node_modules/browserslist": {
585 | "version": "4.21.9",
586 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
587 | "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
588 | "dev": true,
589 | "funding": [
590 | {
591 | "type": "opencollective",
592 | "url": "https://opencollective.com/browserslist"
593 | },
594 | {
595 | "type": "tidelift",
596 | "url": "https://tidelift.com/funding/github/npm/browserslist"
597 | },
598 | {
599 | "type": "github",
600 | "url": "https://github.com/sponsors/ai"
601 | }
602 | ],
603 | "dependencies": {
604 | "caniuse-lite": "^1.0.30001503",
605 | "electron-to-chromium": "^1.4.431",
606 | "node-releases": "^2.0.12",
607 | "update-browserslist-db": "^1.0.11"
608 | },
609 | "bin": {
610 | "browserslist": "cli.js"
611 | },
612 | "engines": {
613 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
614 | }
615 | },
616 | "node_modules/caniuse-lite": {
617 | "version": "1.0.30001509",
618 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz",
619 | "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==",
620 | "dev": true,
621 | "funding": [
622 | {
623 | "type": "opencollective",
624 | "url": "https://opencollective.com/browserslist"
625 | },
626 | {
627 | "type": "tidelift",
628 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
629 | },
630 | {
631 | "type": "github",
632 | "url": "https://github.com/sponsors/ai"
633 | }
634 | ]
635 | },
636 | "node_modules/chalk": {
637 | "version": "2.4.2",
638 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
639 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
640 | "dev": true,
641 | "dependencies": {
642 | "ansi-styles": "^3.2.1",
643 | "escape-string-regexp": "^1.0.5",
644 | "supports-color": "^5.3.0"
645 | },
646 | "engines": {
647 | "node": ">=4"
648 | }
649 | },
650 | "node_modules/color-convert": {
651 | "version": "1.9.3",
652 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
653 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
654 | "dev": true,
655 | "dependencies": {
656 | "color-name": "1.1.3"
657 | }
658 | },
659 | "node_modules/color-name": {
660 | "version": "1.1.3",
661 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
662 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
663 | "dev": true
664 | },
665 | "node_modules/convert-source-map": {
666 | "version": "1.9.0",
667 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
668 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
669 | "dev": true
670 | },
671 | "node_modules/csstype": {
672 | "version": "3.1.2",
673 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
674 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
675 | "dev": true
676 | },
677 | "node_modules/debug": {
678 | "version": "4.3.4",
679 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
680 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
681 | "dev": true,
682 | "dependencies": {
683 | "ms": "2.1.2"
684 | },
685 | "engines": {
686 | "node": ">=6.0"
687 | },
688 | "peerDependenciesMeta": {
689 | "supports-color": {
690 | "optional": true
691 | }
692 | }
693 | },
694 | "node_modules/electron-to-chromium": {
695 | "version": "1.4.447",
696 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz",
697 | "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==",
698 | "dev": true
699 | },
700 | "node_modules/esbuild": {
701 | "version": "0.15.18",
702 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
703 | "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
704 | "dev": true,
705 | "hasInstallScript": true,
706 | "bin": {
707 | "esbuild": "bin/esbuild"
708 | },
709 | "engines": {
710 | "node": ">=12"
711 | },
712 | "optionalDependencies": {
713 | "@esbuild/android-arm": "0.15.18",
714 | "@esbuild/linux-loong64": "0.15.18",
715 | "esbuild-android-64": "0.15.18",
716 | "esbuild-android-arm64": "0.15.18",
717 | "esbuild-darwin-64": "0.15.18",
718 | "esbuild-darwin-arm64": "0.15.18",
719 | "esbuild-freebsd-64": "0.15.18",
720 | "esbuild-freebsd-arm64": "0.15.18",
721 | "esbuild-linux-32": "0.15.18",
722 | "esbuild-linux-64": "0.15.18",
723 | "esbuild-linux-arm": "0.15.18",
724 | "esbuild-linux-arm64": "0.15.18",
725 | "esbuild-linux-mips64le": "0.15.18",
726 | "esbuild-linux-ppc64le": "0.15.18",
727 | "esbuild-linux-riscv64": "0.15.18",
728 | "esbuild-linux-s390x": "0.15.18",
729 | "esbuild-netbsd-64": "0.15.18",
730 | "esbuild-openbsd-64": "0.15.18",
731 | "esbuild-sunos-64": "0.15.18",
732 | "esbuild-windows-32": "0.15.18",
733 | "esbuild-windows-64": "0.15.18",
734 | "esbuild-windows-arm64": "0.15.18"
735 | }
736 | },
737 | "node_modules/esbuild-android-64": {
738 | "version": "0.15.18",
739 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
740 | "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
741 | "cpu": [
742 | "x64"
743 | ],
744 | "dev": true,
745 | "optional": true,
746 | "os": [
747 | "android"
748 | ],
749 | "engines": {
750 | "node": ">=12"
751 | }
752 | },
753 | "node_modules/esbuild-android-arm64": {
754 | "version": "0.15.18",
755 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
756 | "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
757 | "cpu": [
758 | "arm64"
759 | ],
760 | "dev": true,
761 | "optional": true,
762 | "os": [
763 | "android"
764 | ],
765 | "engines": {
766 | "node": ">=12"
767 | }
768 | },
769 | "node_modules/esbuild-darwin-64": {
770 | "version": "0.15.18",
771 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
772 | "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
773 | "cpu": [
774 | "x64"
775 | ],
776 | "dev": true,
777 | "optional": true,
778 | "os": [
779 | "darwin"
780 | ],
781 | "engines": {
782 | "node": ">=12"
783 | }
784 | },
785 | "node_modules/esbuild-darwin-arm64": {
786 | "version": "0.15.18",
787 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
788 | "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
789 | "cpu": [
790 | "arm64"
791 | ],
792 | "dev": true,
793 | "optional": true,
794 | "os": [
795 | "darwin"
796 | ],
797 | "engines": {
798 | "node": ">=12"
799 | }
800 | },
801 | "node_modules/esbuild-freebsd-64": {
802 | "version": "0.15.18",
803 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
804 | "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
805 | "cpu": [
806 | "x64"
807 | ],
808 | "dev": true,
809 | "optional": true,
810 | "os": [
811 | "freebsd"
812 | ],
813 | "engines": {
814 | "node": ">=12"
815 | }
816 | },
817 | "node_modules/esbuild-freebsd-arm64": {
818 | "version": "0.15.18",
819 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
820 | "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
821 | "cpu": [
822 | "arm64"
823 | ],
824 | "dev": true,
825 | "optional": true,
826 | "os": [
827 | "freebsd"
828 | ],
829 | "engines": {
830 | "node": ">=12"
831 | }
832 | },
833 | "node_modules/esbuild-linux-32": {
834 | "version": "0.15.18",
835 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
836 | "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
837 | "cpu": [
838 | "ia32"
839 | ],
840 | "dev": true,
841 | "optional": true,
842 | "os": [
843 | "linux"
844 | ],
845 | "engines": {
846 | "node": ">=12"
847 | }
848 | },
849 | "node_modules/esbuild-linux-64": {
850 | "version": "0.15.18",
851 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
852 | "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
853 | "cpu": [
854 | "x64"
855 | ],
856 | "dev": true,
857 | "optional": true,
858 | "os": [
859 | "linux"
860 | ],
861 | "engines": {
862 | "node": ">=12"
863 | }
864 | },
865 | "node_modules/esbuild-linux-arm": {
866 | "version": "0.15.18",
867 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
868 | "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
869 | "cpu": [
870 | "arm"
871 | ],
872 | "dev": true,
873 | "optional": true,
874 | "os": [
875 | "linux"
876 | ],
877 | "engines": {
878 | "node": ">=12"
879 | }
880 | },
881 | "node_modules/esbuild-linux-arm64": {
882 | "version": "0.15.18",
883 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
884 | "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
885 | "cpu": [
886 | "arm64"
887 | ],
888 | "dev": true,
889 | "optional": true,
890 | "os": [
891 | "linux"
892 | ],
893 | "engines": {
894 | "node": ">=12"
895 | }
896 | },
897 | "node_modules/esbuild-linux-mips64le": {
898 | "version": "0.15.18",
899 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
900 | "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
901 | "cpu": [
902 | "mips64el"
903 | ],
904 | "dev": true,
905 | "optional": true,
906 | "os": [
907 | "linux"
908 | ],
909 | "engines": {
910 | "node": ">=12"
911 | }
912 | },
913 | "node_modules/esbuild-linux-ppc64le": {
914 | "version": "0.15.18",
915 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
916 | "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
917 | "cpu": [
918 | "ppc64"
919 | ],
920 | "dev": true,
921 | "optional": true,
922 | "os": [
923 | "linux"
924 | ],
925 | "engines": {
926 | "node": ">=12"
927 | }
928 | },
929 | "node_modules/esbuild-linux-riscv64": {
930 | "version": "0.15.18",
931 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
932 | "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
933 | "cpu": [
934 | "riscv64"
935 | ],
936 | "dev": true,
937 | "optional": true,
938 | "os": [
939 | "linux"
940 | ],
941 | "engines": {
942 | "node": ">=12"
943 | }
944 | },
945 | "node_modules/esbuild-linux-s390x": {
946 | "version": "0.15.18",
947 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
948 | "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
949 | "cpu": [
950 | "s390x"
951 | ],
952 | "dev": true,
953 | "optional": true,
954 | "os": [
955 | "linux"
956 | ],
957 | "engines": {
958 | "node": ">=12"
959 | }
960 | },
961 | "node_modules/esbuild-netbsd-64": {
962 | "version": "0.15.18",
963 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
964 | "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
965 | "cpu": [
966 | "x64"
967 | ],
968 | "dev": true,
969 | "optional": true,
970 | "os": [
971 | "netbsd"
972 | ],
973 | "engines": {
974 | "node": ">=12"
975 | }
976 | },
977 | "node_modules/esbuild-openbsd-64": {
978 | "version": "0.15.18",
979 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
980 | "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
981 | "cpu": [
982 | "x64"
983 | ],
984 | "dev": true,
985 | "optional": true,
986 | "os": [
987 | "openbsd"
988 | ],
989 | "engines": {
990 | "node": ">=12"
991 | }
992 | },
993 | "node_modules/esbuild-sunos-64": {
994 | "version": "0.15.18",
995 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
996 | "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
997 | "cpu": [
998 | "x64"
999 | ],
1000 | "dev": true,
1001 | "optional": true,
1002 | "os": [
1003 | "sunos"
1004 | ],
1005 | "engines": {
1006 | "node": ">=12"
1007 | }
1008 | },
1009 | "node_modules/esbuild-windows-32": {
1010 | "version": "0.15.18",
1011 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
1012 | "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
1013 | "cpu": [
1014 | "ia32"
1015 | ],
1016 | "dev": true,
1017 | "optional": true,
1018 | "os": [
1019 | "win32"
1020 | ],
1021 | "engines": {
1022 | "node": ">=12"
1023 | }
1024 | },
1025 | "node_modules/esbuild-windows-64": {
1026 | "version": "0.15.18",
1027 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
1028 | "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
1029 | "cpu": [
1030 | "x64"
1031 | ],
1032 | "dev": true,
1033 | "optional": true,
1034 | "os": [
1035 | "win32"
1036 | ],
1037 | "engines": {
1038 | "node": ">=12"
1039 | }
1040 | },
1041 | "node_modules/esbuild-windows-arm64": {
1042 | "version": "0.15.18",
1043 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
1044 | "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
1045 | "cpu": [
1046 | "arm64"
1047 | ],
1048 | "dev": true,
1049 | "optional": true,
1050 | "os": [
1051 | "win32"
1052 | ],
1053 | "engines": {
1054 | "node": ">=12"
1055 | }
1056 | },
1057 | "node_modules/escalade": {
1058 | "version": "3.1.1",
1059 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1060 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1061 | "dev": true,
1062 | "engines": {
1063 | "node": ">=6"
1064 | }
1065 | },
1066 | "node_modules/escape-string-regexp": {
1067 | "version": "1.0.5",
1068 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1069 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1070 | "dev": true,
1071 | "engines": {
1072 | "node": ">=0.8.0"
1073 | }
1074 | },
1075 | "node_modules/fsevents": {
1076 | "version": "2.3.2",
1077 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1078 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1079 | "dev": true,
1080 | "hasInstallScript": true,
1081 | "optional": true,
1082 | "os": [
1083 | "darwin"
1084 | ],
1085 | "engines": {
1086 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1087 | }
1088 | },
1089 | "node_modules/function-bind": {
1090 | "version": "1.1.1",
1091 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1092 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1093 | "dev": true
1094 | },
1095 | "node_modules/gensync": {
1096 | "version": "1.0.0-beta.2",
1097 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1098 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1099 | "dev": true,
1100 | "engines": {
1101 | "node": ">=6.9.0"
1102 | }
1103 | },
1104 | "node_modules/globals": {
1105 | "version": "11.12.0",
1106 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1107 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1108 | "dev": true,
1109 | "engines": {
1110 | "node": ">=4"
1111 | }
1112 | },
1113 | "node_modules/has": {
1114 | "version": "1.0.3",
1115 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1116 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1117 | "dev": true,
1118 | "dependencies": {
1119 | "function-bind": "^1.1.1"
1120 | },
1121 | "engines": {
1122 | "node": ">= 0.4.0"
1123 | }
1124 | },
1125 | "node_modules/has-flag": {
1126 | "version": "3.0.0",
1127 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1128 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1129 | "dev": true,
1130 | "engines": {
1131 | "node": ">=4"
1132 | }
1133 | },
1134 | "node_modules/is-core-module": {
1135 | "version": "2.12.1",
1136 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
1137 | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
1138 | "dev": true,
1139 | "dependencies": {
1140 | "has": "^1.0.3"
1141 | },
1142 | "funding": {
1143 | "url": "https://github.com/sponsors/ljharb"
1144 | }
1145 | },
1146 | "node_modules/js-tokens": {
1147 | "version": "4.0.0",
1148 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1149 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1150 | },
1151 | "node_modules/jsesc": {
1152 | "version": "2.5.2",
1153 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
1154 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
1155 | "dev": true,
1156 | "bin": {
1157 | "jsesc": "bin/jsesc"
1158 | },
1159 | "engines": {
1160 | "node": ">=4"
1161 | }
1162 | },
1163 | "node_modules/json5": {
1164 | "version": "2.2.3",
1165 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1166 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1167 | "dev": true,
1168 | "bin": {
1169 | "json5": "lib/cli.js"
1170 | },
1171 | "engines": {
1172 | "node": ">=6"
1173 | }
1174 | },
1175 | "node_modules/loose-envify": {
1176 | "version": "1.4.0",
1177 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1178 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1179 | "dependencies": {
1180 | "js-tokens": "^3.0.0 || ^4.0.0"
1181 | },
1182 | "bin": {
1183 | "loose-envify": "cli.js"
1184 | }
1185 | },
1186 | "node_modules/lru-cache": {
1187 | "version": "5.1.1",
1188 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1189 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1190 | "dev": true,
1191 | "dependencies": {
1192 | "yallist": "^3.0.2"
1193 | }
1194 | },
1195 | "node_modules/magic-string": {
1196 | "version": "0.26.7",
1197 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz",
1198 | "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==",
1199 | "dev": true,
1200 | "dependencies": {
1201 | "sourcemap-codec": "^1.4.8"
1202 | },
1203 | "engines": {
1204 | "node": ">=12"
1205 | }
1206 | },
1207 | "node_modules/ms": {
1208 | "version": "2.1.2",
1209 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1210 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1211 | "dev": true
1212 | },
1213 | "node_modules/nanoid": {
1214 | "version": "3.3.6",
1215 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
1216 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
1217 | "dev": true,
1218 | "funding": [
1219 | {
1220 | "type": "github",
1221 | "url": "https://github.com/sponsors/ai"
1222 | }
1223 | ],
1224 | "bin": {
1225 | "nanoid": "bin/nanoid.cjs"
1226 | },
1227 | "engines": {
1228 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1229 | }
1230 | },
1231 | "node_modules/node-releases": {
1232 | "version": "2.0.12",
1233 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
1234 | "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
1235 | "dev": true
1236 | },
1237 | "node_modules/path-parse": {
1238 | "version": "1.0.7",
1239 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1240 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1241 | "dev": true
1242 | },
1243 | "node_modules/picocolors": {
1244 | "version": "1.0.0",
1245 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1246 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1247 | "dev": true
1248 | },
1249 | "node_modules/postcss": {
1250 | "version": "8.4.24",
1251 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
1252 | "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
1253 | "dev": true,
1254 | "funding": [
1255 | {
1256 | "type": "opencollective",
1257 | "url": "https://opencollective.com/postcss/"
1258 | },
1259 | {
1260 | "type": "tidelift",
1261 | "url": "https://tidelift.com/funding/github/npm/postcss"
1262 | },
1263 | {
1264 | "type": "github",
1265 | "url": "https://github.com/sponsors/ai"
1266 | }
1267 | ],
1268 | "dependencies": {
1269 | "nanoid": "^3.3.6",
1270 | "picocolors": "^1.0.0",
1271 | "source-map-js": "^1.0.2"
1272 | },
1273 | "engines": {
1274 | "node": "^10 || ^12 || >=14"
1275 | }
1276 | },
1277 | "node_modules/react": {
1278 | "version": "18.2.0",
1279 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
1280 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
1281 | "dependencies": {
1282 | "loose-envify": "^1.1.0"
1283 | },
1284 | "engines": {
1285 | "node": ">=0.10.0"
1286 | }
1287 | },
1288 | "node_modules/react-dom": {
1289 | "version": "18.2.0",
1290 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
1291 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
1292 | "dependencies": {
1293 | "loose-envify": "^1.1.0",
1294 | "scheduler": "^0.23.0"
1295 | },
1296 | "peerDependencies": {
1297 | "react": "^18.2.0"
1298 | }
1299 | },
1300 | "node_modules/react-refresh": {
1301 | "version": "0.14.0",
1302 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
1303 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
1304 | "dev": true,
1305 | "engines": {
1306 | "node": ">=0.10.0"
1307 | }
1308 | },
1309 | "node_modules/resolve": {
1310 | "version": "1.22.2",
1311 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
1312 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
1313 | "dev": true,
1314 | "dependencies": {
1315 | "is-core-module": "^2.11.0",
1316 | "path-parse": "^1.0.7",
1317 | "supports-preserve-symlinks-flag": "^1.0.0"
1318 | },
1319 | "bin": {
1320 | "resolve": "bin/resolve"
1321 | },
1322 | "funding": {
1323 | "url": "https://github.com/sponsors/ljharb"
1324 | }
1325 | },
1326 | "node_modules/rollup": {
1327 | "version": "2.79.1",
1328 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
1329 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
1330 | "dev": true,
1331 | "bin": {
1332 | "rollup": "dist/bin/rollup"
1333 | },
1334 | "engines": {
1335 | "node": ">=10.0.0"
1336 | },
1337 | "optionalDependencies": {
1338 | "fsevents": "~2.3.2"
1339 | }
1340 | },
1341 | "node_modules/scheduler": {
1342 | "version": "0.23.0",
1343 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
1344 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
1345 | "dependencies": {
1346 | "loose-envify": "^1.1.0"
1347 | }
1348 | },
1349 | "node_modules/semver": {
1350 | "version": "6.3.0",
1351 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1352 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1353 | "dev": true,
1354 | "bin": {
1355 | "semver": "bin/semver.js"
1356 | }
1357 | },
1358 | "node_modules/source-map-js": {
1359 | "version": "1.0.2",
1360 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1361 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1362 | "dev": true,
1363 | "engines": {
1364 | "node": ">=0.10.0"
1365 | }
1366 | },
1367 | "node_modules/sourcemap-codec": {
1368 | "version": "1.4.8",
1369 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1370 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
1371 | "deprecated": "Please use @jridgewell/sourcemap-codec instead",
1372 | "dev": true
1373 | },
1374 | "node_modules/supports-color": {
1375 | "version": "5.5.0",
1376 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1377 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1378 | "dev": true,
1379 | "dependencies": {
1380 | "has-flag": "^3.0.0"
1381 | },
1382 | "engines": {
1383 | "node": ">=4"
1384 | }
1385 | },
1386 | "node_modules/supports-preserve-symlinks-flag": {
1387 | "version": "1.0.0",
1388 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1389 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1390 | "dev": true,
1391 | "engines": {
1392 | "node": ">= 0.4"
1393 | },
1394 | "funding": {
1395 | "url": "https://github.com/sponsors/ljharb"
1396 | }
1397 | },
1398 | "node_modules/to-fast-properties": {
1399 | "version": "2.0.0",
1400 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
1401 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
1402 | "dev": true,
1403 | "engines": {
1404 | "node": ">=4"
1405 | }
1406 | },
1407 | "node_modules/update-browserslist-db": {
1408 | "version": "1.0.11",
1409 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
1410 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
1411 | "dev": true,
1412 | "funding": [
1413 | {
1414 | "type": "opencollective",
1415 | "url": "https://opencollective.com/browserslist"
1416 | },
1417 | {
1418 | "type": "tidelift",
1419 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1420 | },
1421 | {
1422 | "type": "github",
1423 | "url": "https://github.com/sponsors/ai"
1424 | }
1425 | ],
1426 | "dependencies": {
1427 | "escalade": "^3.1.1",
1428 | "picocolors": "^1.0.0"
1429 | },
1430 | "bin": {
1431 | "update-browserslist-db": "cli.js"
1432 | },
1433 | "peerDependencies": {
1434 | "browserslist": ">= 4.21.0"
1435 | }
1436 | },
1437 | "node_modules/vite": {
1438 | "version": "3.2.7",
1439 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz",
1440 | "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==",
1441 | "dev": true,
1442 | "dependencies": {
1443 | "esbuild": "^0.15.9",
1444 | "postcss": "^8.4.18",
1445 | "resolve": "^1.22.1",
1446 | "rollup": "^2.79.1"
1447 | },
1448 | "bin": {
1449 | "vite": "bin/vite.js"
1450 | },
1451 | "engines": {
1452 | "node": "^14.18.0 || >=16.0.0"
1453 | },
1454 | "optionalDependencies": {
1455 | "fsevents": "~2.3.2"
1456 | },
1457 | "peerDependencies": {
1458 | "@types/node": ">= 14",
1459 | "less": "*",
1460 | "sass": "*",
1461 | "stylus": "*",
1462 | "sugarss": "*",
1463 | "terser": "^5.4.0"
1464 | },
1465 | "peerDependenciesMeta": {
1466 | "@types/node": {
1467 | "optional": true
1468 | },
1469 | "less": {
1470 | "optional": true
1471 | },
1472 | "sass": {
1473 | "optional": true
1474 | },
1475 | "stylus": {
1476 | "optional": true
1477 | },
1478 | "sugarss": {
1479 | "optional": true
1480 | },
1481 | "terser": {
1482 | "optional": true
1483 | }
1484 | }
1485 | },
1486 | "node_modules/yallist": {
1487 | "version": "3.1.1",
1488 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1489 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
1490 | "dev": true
1491 | }
1492 | }
1493 | }
1494 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-todo",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "@heroicons/react": "^2.0.8",
13 | "react": "^18.2.0",
14 | "react-dom": "^18.2.0"
15 | },
16 | "devDependencies": {
17 | "@types/react": "^18.0.17",
18 | "@types/react-dom": "^18.0.6",
19 | "@vitejs/plugin-react": "^2.0.1",
20 | "vite": "^3.0.7"
21 | }
22 | }
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@heroicons/react': ^2.0.8
5 | '@types/react': ^18.0.17
6 | '@types/react-dom': ^18.0.6
7 | '@vitejs/plugin-react': ^2.0.1
8 | react: ^18.2.0
9 | react-dom: ^18.2.0
10 | vite: ^3.0.7
11 |
12 | dependencies:
13 | '@heroicons/react': 2.0.8_react@18.2.0
14 | react: 18.2.0
15 | react-dom: 18.2.0_react@18.2.0
16 |
17 | devDependencies:
18 | '@types/react': 18.0.17
19 | '@types/react-dom': 18.0.6
20 | '@vitejs/plugin-react': 2.0.1_vite@3.0.9
21 | vite: 3.0.9
22 |
23 | packages:
24 |
25 | /@ampproject/remapping/2.2.0:
26 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
27 | engines: {node: '>=6.0.0'}
28 | dependencies:
29 | '@jridgewell/gen-mapping': 0.1.1
30 | '@jridgewell/trace-mapping': 0.3.15
31 | dev: true
32 |
33 | /@babel/code-frame/7.18.6:
34 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
35 | engines: {node: '>=6.9.0'}
36 | dependencies:
37 | '@babel/highlight': 7.18.6
38 | dev: true
39 |
40 | /@babel/compat-data/7.18.13:
41 | resolution: {integrity: sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==}
42 | engines: {node: '>=6.9.0'}
43 | dev: true
44 |
45 | /@babel/core/7.18.13:
46 | resolution: {integrity: sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==}
47 | engines: {node: '>=6.9.0'}
48 | dependencies:
49 | '@ampproject/remapping': 2.2.0
50 | '@babel/code-frame': 7.18.6
51 | '@babel/generator': 7.18.13
52 | '@babel/helper-compilation-targets': 7.18.9_@babel+core@7.18.13
53 | '@babel/helper-module-transforms': 7.18.9
54 | '@babel/helpers': 7.18.9
55 | '@babel/parser': 7.18.13
56 | '@babel/template': 7.18.10
57 | '@babel/traverse': 7.18.13
58 | '@babel/types': 7.18.13
59 | convert-source-map: 1.8.0
60 | debug: 4.3.4
61 | gensync: 1.0.0-beta.2
62 | json5: 2.2.1
63 | semver: 6.3.0
64 | transitivePeerDependencies:
65 | - supports-color
66 | dev: true
67 |
68 | /@babel/generator/7.18.13:
69 | resolution: {integrity: sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==}
70 | engines: {node: '>=6.9.0'}
71 | dependencies:
72 | '@babel/types': 7.18.13
73 | '@jridgewell/gen-mapping': 0.3.2
74 | jsesc: 2.5.2
75 | dev: true
76 |
77 | /@babel/helper-annotate-as-pure/7.18.6:
78 | resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
79 | engines: {node: '>=6.9.0'}
80 | dependencies:
81 | '@babel/types': 7.18.13
82 | dev: true
83 |
84 | /@babel/helper-compilation-targets/7.18.9_@babel+core@7.18.13:
85 | resolution: {integrity: sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==}
86 | engines: {node: '>=6.9.0'}
87 | peerDependencies:
88 | '@babel/core': ^7.0.0
89 | dependencies:
90 | '@babel/compat-data': 7.18.13
91 | '@babel/core': 7.18.13
92 | '@babel/helper-validator-option': 7.18.6
93 | browserslist: 4.21.3
94 | semver: 6.3.0
95 | dev: true
96 |
97 | /@babel/helper-environment-visitor/7.18.9:
98 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
99 | engines: {node: '>=6.9.0'}
100 | dev: true
101 |
102 | /@babel/helper-function-name/7.18.9:
103 | resolution: {integrity: sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==}
104 | engines: {node: '>=6.9.0'}
105 | dependencies:
106 | '@babel/template': 7.18.10
107 | '@babel/types': 7.18.13
108 | dev: true
109 |
110 | /@babel/helper-hoist-variables/7.18.6:
111 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
112 | engines: {node: '>=6.9.0'}
113 | dependencies:
114 | '@babel/types': 7.18.13
115 | dev: true
116 |
117 | /@babel/helper-module-imports/7.18.6:
118 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
119 | engines: {node: '>=6.9.0'}
120 | dependencies:
121 | '@babel/types': 7.18.13
122 | dev: true
123 |
124 | /@babel/helper-module-transforms/7.18.9:
125 | resolution: {integrity: sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==}
126 | engines: {node: '>=6.9.0'}
127 | dependencies:
128 | '@babel/helper-environment-visitor': 7.18.9
129 | '@babel/helper-module-imports': 7.18.6
130 | '@babel/helper-simple-access': 7.18.6
131 | '@babel/helper-split-export-declaration': 7.18.6
132 | '@babel/helper-validator-identifier': 7.18.6
133 | '@babel/template': 7.18.10
134 | '@babel/traverse': 7.18.13
135 | '@babel/types': 7.18.13
136 | transitivePeerDependencies:
137 | - supports-color
138 | dev: true
139 |
140 | /@babel/helper-plugin-utils/7.18.9:
141 | resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==}
142 | engines: {node: '>=6.9.0'}
143 | dev: true
144 |
145 | /@babel/helper-simple-access/7.18.6:
146 | resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==}
147 | engines: {node: '>=6.9.0'}
148 | dependencies:
149 | '@babel/types': 7.18.13
150 | dev: true
151 |
152 | /@babel/helper-split-export-declaration/7.18.6:
153 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
154 | engines: {node: '>=6.9.0'}
155 | dependencies:
156 | '@babel/types': 7.18.13
157 | dev: true
158 |
159 | /@babel/helper-string-parser/7.18.10:
160 | resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==}
161 | engines: {node: '>=6.9.0'}
162 | dev: true
163 |
164 | /@babel/helper-validator-identifier/7.18.6:
165 | resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==}
166 | engines: {node: '>=6.9.0'}
167 | dev: true
168 |
169 | /@babel/helper-validator-option/7.18.6:
170 | resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
171 | engines: {node: '>=6.9.0'}
172 | dev: true
173 |
174 | /@babel/helpers/7.18.9:
175 | resolution: {integrity: sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==}
176 | engines: {node: '>=6.9.0'}
177 | dependencies:
178 | '@babel/template': 7.18.10
179 | '@babel/traverse': 7.18.13
180 | '@babel/types': 7.18.13
181 | transitivePeerDependencies:
182 | - supports-color
183 | dev: true
184 |
185 | /@babel/highlight/7.18.6:
186 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
187 | engines: {node: '>=6.9.0'}
188 | dependencies:
189 | '@babel/helper-validator-identifier': 7.18.6
190 | chalk: 2.4.2
191 | js-tokens: 4.0.0
192 | dev: true
193 |
194 | /@babel/parser/7.18.13:
195 | resolution: {integrity: sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==}
196 | engines: {node: '>=6.0.0'}
197 | hasBin: true
198 | dependencies:
199 | '@babel/types': 7.18.13
200 | dev: true
201 |
202 | /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.18.13:
203 | resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
204 | engines: {node: '>=6.9.0'}
205 | peerDependencies:
206 | '@babel/core': ^7.0.0-0
207 | dependencies:
208 | '@babel/core': 7.18.13
209 | '@babel/helper-plugin-utils': 7.18.9
210 | dev: true
211 |
212 | /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.18.13:
213 | resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==}
214 | engines: {node: '>=6.9.0'}
215 | peerDependencies:
216 | '@babel/core': ^7.0.0-0
217 | dependencies:
218 | '@babel/core': 7.18.13
219 | '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.18.13
220 | dev: true
221 |
222 | /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.18.13:
223 | resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==}
224 | engines: {node: '>=6.9.0'}
225 | peerDependencies:
226 | '@babel/core': ^7.0.0-0
227 | dependencies:
228 | '@babel/core': 7.18.13
229 | '@babel/helper-plugin-utils': 7.18.9
230 | dev: true
231 |
232 | /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.18.13:
233 | resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==}
234 | engines: {node: '>=6.9.0'}
235 | peerDependencies:
236 | '@babel/core': ^7.0.0-0
237 | dependencies:
238 | '@babel/core': 7.18.13
239 | '@babel/helper-plugin-utils': 7.18.9
240 | dev: true
241 |
242 | /@babel/plugin-transform-react-jsx/7.18.10_@babel+core@7.18.13:
243 | resolution: {integrity: sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==}
244 | engines: {node: '>=6.9.0'}
245 | peerDependencies:
246 | '@babel/core': ^7.0.0-0
247 | dependencies:
248 | '@babel/core': 7.18.13
249 | '@babel/helper-annotate-as-pure': 7.18.6
250 | '@babel/helper-module-imports': 7.18.6
251 | '@babel/helper-plugin-utils': 7.18.9
252 | '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.13
253 | '@babel/types': 7.18.13
254 | dev: true
255 |
256 | /@babel/template/7.18.10:
257 | resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==}
258 | engines: {node: '>=6.9.0'}
259 | dependencies:
260 | '@babel/code-frame': 7.18.6
261 | '@babel/parser': 7.18.13
262 | '@babel/types': 7.18.13
263 | dev: true
264 |
265 | /@babel/traverse/7.18.13:
266 | resolution: {integrity: sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==}
267 | engines: {node: '>=6.9.0'}
268 | dependencies:
269 | '@babel/code-frame': 7.18.6
270 | '@babel/generator': 7.18.13
271 | '@babel/helper-environment-visitor': 7.18.9
272 | '@babel/helper-function-name': 7.18.9
273 | '@babel/helper-hoist-variables': 7.18.6
274 | '@babel/helper-split-export-declaration': 7.18.6
275 | '@babel/parser': 7.18.13
276 | '@babel/types': 7.18.13
277 | debug: 4.3.4
278 | globals: 11.12.0
279 | transitivePeerDependencies:
280 | - supports-color
281 | dev: true
282 |
283 | /@babel/types/7.18.13:
284 | resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==}
285 | engines: {node: '>=6.9.0'}
286 | dependencies:
287 | '@babel/helper-string-parser': 7.18.10
288 | '@babel/helper-validator-identifier': 7.18.6
289 | to-fast-properties: 2.0.0
290 | dev: true
291 |
292 | /@esbuild/linux-loong64/0.14.54:
293 | resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
294 | engines: {node: '>=12'}
295 | cpu: [loong64]
296 | os: [linux]
297 | requiresBuild: true
298 | dev: true
299 | optional: true
300 |
301 | /@heroicons/react/2.0.8_react@18.2.0:
302 | resolution: {integrity: sha512-nJNOMjXQH0Ngk6Y7QllYBH5VLB3+HMJyGBVQPZYUXGalYmN9kgEcVIxMjOiVjwuzee0GvZzmMRB0VQRJPHe8eg==}
303 | peerDependencies:
304 | react: '>= 16'
305 | dependencies:
306 | react: 18.2.0
307 | dev: false
308 |
309 | /@jridgewell/gen-mapping/0.1.1:
310 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
311 | engines: {node: '>=6.0.0'}
312 | dependencies:
313 | '@jridgewell/set-array': 1.1.2
314 | '@jridgewell/sourcemap-codec': 1.4.14
315 | dev: true
316 |
317 | /@jridgewell/gen-mapping/0.3.2:
318 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
319 | engines: {node: '>=6.0.0'}
320 | dependencies:
321 | '@jridgewell/set-array': 1.1.2
322 | '@jridgewell/sourcemap-codec': 1.4.14
323 | '@jridgewell/trace-mapping': 0.3.15
324 | dev: true
325 |
326 | /@jridgewell/resolve-uri/3.1.0:
327 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
328 | engines: {node: '>=6.0.0'}
329 | dev: true
330 |
331 | /@jridgewell/set-array/1.1.2:
332 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
333 | engines: {node: '>=6.0.0'}
334 | dev: true
335 |
336 | /@jridgewell/sourcemap-codec/1.4.14:
337 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
338 | dev: true
339 |
340 | /@jridgewell/trace-mapping/0.3.15:
341 | resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==}
342 | dependencies:
343 | '@jridgewell/resolve-uri': 3.1.0
344 | '@jridgewell/sourcemap-codec': 1.4.14
345 | dev: true
346 |
347 | /@types/prop-types/15.7.5:
348 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
349 | dev: true
350 |
351 | /@types/react-dom/18.0.6:
352 | resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==}
353 | dependencies:
354 | '@types/react': 18.0.17
355 | dev: true
356 |
357 | /@types/react/18.0.17:
358 | resolution: {integrity: sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==}
359 | dependencies:
360 | '@types/prop-types': 15.7.5
361 | '@types/scheduler': 0.16.2
362 | csstype: 3.1.0
363 | dev: true
364 |
365 | /@types/scheduler/0.16.2:
366 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
367 | dev: true
368 |
369 | /@vitejs/plugin-react/2.0.1_vite@3.0.9:
370 | resolution: {integrity: sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA==}
371 | engines: {node: ^14.18.0 || >=16.0.0}
372 | peerDependencies:
373 | vite: ^3.0.0
374 | dependencies:
375 | '@babel/core': 7.18.13
376 | '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.18.13
377 | '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.18.13
378 | '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.18.13
379 | '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.18.13
380 | magic-string: 0.26.3
381 | react-refresh: 0.14.0
382 | vite: 3.0.9
383 | transitivePeerDependencies:
384 | - supports-color
385 | dev: true
386 |
387 | /ansi-styles/3.2.1:
388 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
389 | engines: {node: '>=4'}
390 | dependencies:
391 | color-convert: 1.9.3
392 | dev: true
393 |
394 | /browserslist/4.21.3:
395 | resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==}
396 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
397 | hasBin: true
398 | dependencies:
399 | caniuse-lite: 1.0.30001385
400 | electron-to-chromium: 1.4.235
401 | node-releases: 2.0.6
402 | update-browserslist-db: 1.0.5_browserslist@4.21.3
403 | dev: true
404 |
405 | /caniuse-lite/1.0.30001385:
406 | resolution: {integrity: sha512-MpiCqJGhBkHgpyimE9GWmZTnyHyEEM35u115bD3QBrXpjvL/JgcP8cUhKJshfmg4OtEHFenifcK5sZayEw5tvQ==}
407 | dev: true
408 |
409 | /chalk/2.4.2:
410 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
411 | engines: {node: '>=4'}
412 | dependencies:
413 | ansi-styles: 3.2.1
414 | escape-string-regexp: 1.0.5
415 | supports-color: 5.5.0
416 | dev: true
417 |
418 | /color-convert/1.9.3:
419 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
420 | dependencies:
421 | color-name: 1.1.3
422 | dev: true
423 |
424 | /color-name/1.1.3:
425 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
426 | dev: true
427 |
428 | /convert-source-map/1.8.0:
429 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
430 | dependencies:
431 | safe-buffer: 5.1.2
432 | dev: true
433 |
434 | /csstype/3.1.0:
435 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==}
436 | dev: true
437 |
438 | /debug/4.3.4:
439 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
440 | engines: {node: '>=6.0'}
441 | peerDependencies:
442 | supports-color: '*'
443 | peerDependenciesMeta:
444 | supports-color:
445 | optional: true
446 | dependencies:
447 | ms: 2.1.2
448 | dev: true
449 |
450 | /electron-to-chromium/1.4.235:
451 | resolution: {integrity: sha512-eNU2SmVZYTzYVA5aAWmhAJbdVil5/8H5nMq6kGD0Yxd4k2uKIuT8YmS46I0QXY7iOoPPcb6jjem9/2xyuH5+XQ==}
452 | dev: true
453 |
454 | /esbuild-android-64/0.14.54:
455 | resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
456 | engines: {node: '>=12'}
457 | cpu: [x64]
458 | os: [android]
459 | requiresBuild: true
460 | dev: true
461 | optional: true
462 |
463 | /esbuild-android-arm64/0.14.54:
464 | resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
465 | engines: {node: '>=12'}
466 | cpu: [arm64]
467 | os: [android]
468 | requiresBuild: true
469 | dev: true
470 | optional: true
471 |
472 | /esbuild-darwin-64/0.14.54:
473 | resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
474 | engines: {node: '>=12'}
475 | cpu: [x64]
476 | os: [darwin]
477 | requiresBuild: true
478 | dev: true
479 | optional: true
480 |
481 | /esbuild-darwin-arm64/0.14.54:
482 | resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
483 | engines: {node: '>=12'}
484 | cpu: [arm64]
485 | os: [darwin]
486 | requiresBuild: true
487 | dev: true
488 | optional: true
489 |
490 | /esbuild-freebsd-64/0.14.54:
491 | resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
492 | engines: {node: '>=12'}
493 | cpu: [x64]
494 | os: [freebsd]
495 | requiresBuild: true
496 | dev: true
497 | optional: true
498 |
499 | /esbuild-freebsd-arm64/0.14.54:
500 | resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
501 | engines: {node: '>=12'}
502 | cpu: [arm64]
503 | os: [freebsd]
504 | requiresBuild: true
505 | dev: true
506 | optional: true
507 |
508 | /esbuild-linux-32/0.14.54:
509 | resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
510 | engines: {node: '>=12'}
511 | cpu: [ia32]
512 | os: [linux]
513 | requiresBuild: true
514 | dev: true
515 | optional: true
516 |
517 | /esbuild-linux-64/0.14.54:
518 | resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
519 | engines: {node: '>=12'}
520 | cpu: [x64]
521 | os: [linux]
522 | requiresBuild: true
523 | dev: true
524 | optional: true
525 |
526 | /esbuild-linux-arm/0.14.54:
527 | resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
528 | engines: {node: '>=12'}
529 | cpu: [arm]
530 | os: [linux]
531 | requiresBuild: true
532 | dev: true
533 | optional: true
534 |
535 | /esbuild-linux-arm64/0.14.54:
536 | resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
537 | engines: {node: '>=12'}
538 | cpu: [arm64]
539 | os: [linux]
540 | requiresBuild: true
541 | dev: true
542 | optional: true
543 |
544 | /esbuild-linux-mips64le/0.14.54:
545 | resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
546 | engines: {node: '>=12'}
547 | cpu: [mips64el]
548 | os: [linux]
549 | requiresBuild: true
550 | dev: true
551 | optional: true
552 |
553 | /esbuild-linux-ppc64le/0.14.54:
554 | resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
555 | engines: {node: '>=12'}
556 | cpu: [ppc64]
557 | os: [linux]
558 | requiresBuild: true
559 | dev: true
560 | optional: true
561 |
562 | /esbuild-linux-riscv64/0.14.54:
563 | resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
564 | engines: {node: '>=12'}
565 | cpu: [riscv64]
566 | os: [linux]
567 | requiresBuild: true
568 | dev: true
569 | optional: true
570 |
571 | /esbuild-linux-s390x/0.14.54:
572 | resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
573 | engines: {node: '>=12'}
574 | cpu: [s390x]
575 | os: [linux]
576 | requiresBuild: true
577 | dev: true
578 | optional: true
579 |
580 | /esbuild-netbsd-64/0.14.54:
581 | resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
582 | engines: {node: '>=12'}
583 | cpu: [x64]
584 | os: [netbsd]
585 | requiresBuild: true
586 | dev: true
587 | optional: true
588 |
589 | /esbuild-openbsd-64/0.14.54:
590 | resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
591 | engines: {node: '>=12'}
592 | cpu: [x64]
593 | os: [openbsd]
594 | requiresBuild: true
595 | dev: true
596 | optional: true
597 |
598 | /esbuild-sunos-64/0.14.54:
599 | resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
600 | engines: {node: '>=12'}
601 | cpu: [x64]
602 | os: [sunos]
603 | requiresBuild: true
604 | dev: true
605 | optional: true
606 |
607 | /esbuild-windows-32/0.14.54:
608 | resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
609 | engines: {node: '>=12'}
610 | cpu: [ia32]
611 | os: [win32]
612 | requiresBuild: true
613 | dev: true
614 | optional: true
615 |
616 | /esbuild-windows-64/0.14.54:
617 | resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
618 | engines: {node: '>=12'}
619 | cpu: [x64]
620 | os: [win32]
621 | requiresBuild: true
622 | dev: true
623 | optional: true
624 |
625 | /esbuild-windows-arm64/0.14.54:
626 | resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
627 | engines: {node: '>=12'}
628 | cpu: [arm64]
629 | os: [win32]
630 | requiresBuild: true
631 | dev: true
632 | optional: true
633 |
634 | /esbuild/0.14.54:
635 | resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
636 | engines: {node: '>=12'}
637 | hasBin: true
638 | requiresBuild: true
639 | optionalDependencies:
640 | '@esbuild/linux-loong64': 0.14.54
641 | esbuild-android-64: 0.14.54
642 | esbuild-android-arm64: 0.14.54
643 | esbuild-darwin-64: 0.14.54
644 | esbuild-darwin-arm64: 0.14.54
645 | esbuild-freebsd-64: 0.14.54
646 | esbuild-freebsd-arm64: 0.14.54
647 | esbuild-linux-32: 0.14.54
648 | esbuild-linux-64: 0.14.54
649 | esbuild-linux-arm: 0.14.54
650 | esbuild-linux-arm64: 0.14.54
651 | esbuild-linux-mips64le: 0.14.54
652 | esbuild-linux-ppc64le: 0.14.54
653 | esbuild-linux-riscv64: 0.14.54
654 | esbuild-linux-s390x: 0.14.54
655 | esbuild-netbsd-64: 0.14.54
656 | esbuild-openbsd-64: 0.14.54
657 | esbuild-sunos-64: 0.14.54
658 | esbuild-windows-32: 0.14.54
659 | esbuild-windows-64: 0.14.54
660 | esbuild-windows-arm64: 0.14.54
661 | dev: true
662 |
663 | /escalade/3.1.1:
664 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
665 | engines: {node: '>=6'}
666 | dev: true
667 |
668 | /escape-string-regexp/1.0.5:
669 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
670 | engines: {node: '>=0.8.0'}
671 | dev: true
672 |
673 | /fsevents/2.3.2:
674 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
675 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
676 | os: [darwin]
677 | requiresBuild: true
678 | dev: true
679 | optional: true
680 |
681 | /function-bind/1.1.1:
682 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
683 | dev: true
684 |
685 | /gensync/1.0.0-beta.2:
686 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
687 | engines: {node: '>=6.9.0'}
688 | dev: true
689 |
690 | /globals/11.12.0:
691 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
692 | engines: {node: '>=4'}
693 | dev: true
694 |
695 | /has-flag/3.0.0:
696 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
697 | engines: {node: '>=4'}
698 | dev: true
699 |
700 | /has/1.0.3:
701 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
702 | engines: {node: '>= 0.4.0'}
703 | dependencies:
704 | function-bind: 1.1.1
705 | dev: true
706 |
707 | /is-core-module/2.10.0:
708 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
709 | dependencies:
710 | has: 1.0.3
711 | dev: true
712 |
713 | /js-tokens/4.0.0:
714 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
715 |
716 | /jsesc/2.5.2:
717 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
718 | engines: {node: '>=4'}
719 | hasBin: true
720 | dev: true
721 |
722 | /json5/2.2.1:
723 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
724 | engines: {node: '>=6'}
725 | hasBin: true
726 | dev: true
727 |
728 | /loose-envify/1.4.0:
729 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
730 | hasBin: true
731 | dependencies:
732 | js-tokens: 4.0.0
733 | dev: false
734 |
735 | /magic-string/0.26.3:
736 | resolution: {integrity: sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==}
737 | engines: {node: '>=12'}
738 | dependencies:
739 | sourcemap-codec: 1.4.8
740 | dev: true
741 |
742 | /ms/2.1.2:
743 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
744 | dev: true
745 |
746 | /nanoid/3.3.4:
747 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
748 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
749 | hasBin: true
750 | dev: true
751 |
752 | /node-releases/2.0.6:
753 | resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
754 | dev: true
755 |
756 | /path-parse/1.0.7:
757 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
758 | dev: true
759 |
760 | /picocolors/1.0.0:
761 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
762 | dev: true
763 |
764 | /postcss/8.4.16:
765 | resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==}
766 | engines: {node: ^10 || ^12 || >=14}
767 | dependencies:
768 | nanoid: 3.3.4
769 | picocolors: 1.0.0
770 | source-map-js: 1.0.2
771 | dev: true
772 |
773 | /react-dom/18.2.0_react@18.2.0:
774 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
775 | peerDependencies:
776 | react: ^18.2.0
777 | dependencies:
778 | loose-envify: 1.4.0
779 | react: 18.2.0
780 | scheduler: 0.23.0
781 | dev: false
782 |
783 | /react-refresh/0.14.0:
784 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
785 | engines: {node: '>=0.10.0'}
786 | dev: true
787 |
788 | /react/18.2.0:
789 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
790 | engines: {node: '>=0.10.0'}
791 | dependencies:
792 | loose-envify: 1.4.0
793 | dev: false
794 |
795 | /resolve/1.22.1:
796 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
797 | hasBin: true
798 | dependencies:
799 | is-core-module: 2.10.0
800 | path-parse: 1.0.7
801 | supports-preserve-symlinks-flag: 1.0.0
802 | dev: true
803 |
804 | /rollup/2.77.3:
805 | resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==}
806 | engines: {node: '>=10.0.0'}
807 | hasBin: true
808 | optionalDependencies:
809 | fsevents: 2.3.2
810 | dev: true
811 |
812 | /safe-buffer/5.1.2:
813 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
814 | dev: true
815 |
816 | /scheduler/0.23.0:
817 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
818 | dependencies:
819 | loose-envify: 1.4.0
820 | dev: false
821 |
822 | /semver/6.3.0:
823 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
824 | hasBin: true
825 | dev: true
826 |
827 | /source-map-js/1.0.2:
828 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
829 | engines: {node: '>=0.10.0'}
830 | dev: true
831 |
832 | /sourcemap-codec/1.4.8:
833 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
834 | dev: true
835 |
836 | /supports-color/5.5.0:
837 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
838 | engines: {node: '>=4'}
839 | dependencies:
840 | has-flag: 3.0.0
841 | dev: true
842 |
843 | /supports-preserve-symlinks-flag/1.0.0:
844 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
845 | engines: {node: '>= 0.4'}
846 | dev: true
847 |
848 | /to-fast-properties/2.0.0:
849 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
850 | engines: {node: '>=4'}
851 | dev: true
852 |
853 | /update-browserslist-db/1.0.5_browserslist@4.21.3:
854 | resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==}
855 | hasBin: true
856 | peerDependencies:
857 | browserslist: '>= 4.21.0'
858 | dependencies:
859 | browserslist: 4.21.3
860 | escalade: 3.1.1
861 | picocolors: 1.0.0
862 | dev: true
863 |
864 | /vite/3.0.9:
865 | resolution: {integrity: sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==}
866 | engines: {node: ^14.18.0 || >=16.0.0}
867 | hasBin: true
868 | peerDependencies:
869 | less: '*'
870 | sass: '*'
871 | stylus: '*'
872 | terser: ^5.4.0
873 | peerDependenciesMeta:
874 | less:
875 | optional: true
876 | sass:
877 | optional: true
878 | stylus:
879 | optional: true
880 | terser:
881 | optional: true
882 | dependencies:
883 | esbuild: 0.14.54
884 | postcss: 8.4.16
885 | resolve: 1.22.1
886 | rollup: 2.77.3
887 | optionalDependencies:
888 | fsevents: 2.3.2
889 | dev: true
890 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react'
2 |
3 | // custom hooks
4 | import useLocalStorage from './hooks/useLocalStorage'
5 |
6 | // custom components
7 | import CustomForm from './components/CustomForm'
8 | import EditForm from './components/EditForm'
9 | import TaskList from './components/TaskList'
10 |
11 | function App() {
12 | const [tasks, setTasks] = useLocalStorage('react-todo.tasks', []);
13 | const [previousFocusEl, setPreviousFocusEl] = useState(null);
14 | const [editedTask, setEditedTask] = useState(null);
15 | const [isEditing, setIsEditing] = useState(false);
16 |
17 | const addTask = (task) => {
18 | setTasks(prevState => [...prevState, task])
19 | }
20 |
21 | const deleteTask = (id) => {
22 | setTasks(prevState => prevState.filter(t => t.id !== id));
23 | }
24 |
25 | const toggleTask = (id) => {
26 | setTasks(prevState => prevState.map(t => (
27 | t.id === id
28 | ? { ...t, checked: !t.checked }
29 | : t
30 | )))
31 | }
32 |
33 | const updateTask = (task) => {
34 | setTasks(prevState => prevState.map(t => (
35 | t.id === task.id
36 | ? { ...t, name: task.name }
37 | : t
38 | )))
39 | closeEditMode();
40 | }
41 |
42 | const closeEditMode = () => {
43 | setIsEditing(false);
44 | previousFocusEl.focus();
45 | }
46 |
47 | const enterEditMode = (task) => {
48 | setEditedTask(task);
49 | setIsEditing(true);
50 | setPreviousFocusEl(document.activeElement);
51 | }
52 |
53 | return (
54 |
55 |
58 | {
59 | isEditing && (
60 |
65 | )
66 | }
67 |
68 | {tasks && (
69 |
75 | )}
76 |
77 | )
78 | }
79 |
80 | export default App
81 |
--------------------------------------------------------------------------------
/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/CustomForm.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | // library imports
4 | import { PlusIcon } from '@heroicons/react/24/solid'
5 |
6 | const CustomForm = ({ addTask }) => {
7 | const [task, setTask] = useState("");
8 |
9 | const handleFormSubmit = (e) => {
10 | e.preventDefault();
11 | addTask({
12 | name: task,
13 | checked: false,
14 | id: Date.now()
15 | })
16 | setTask("")
17 | }
18 |
19 | return (
20 |
49 | )
50 | }
51 | export default CustomForm
--------------------------------------------------------------------------------
/src/components/EditForm.jsx:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from 'react';
2 |
3 | // library imports
4 | import { CheckIcon } from '@heroicons/react/24/solid'
5 |
6 | const EditForm = ({ editedTask, updateTask, closeEditMode }) => {
7 | const [updatedTaskName, setUpdatedTaskName] = useState(editedTask.name);
8 |
9 | useEffect(()=> {
10 | const closeModalIfEscaped = (e) => {
11 | e.key === "Escape" && closeEditMode();
12 | }
13 |
14 | window.addEventListener('keydown', closeModalIfEscaped)
15 |
16 | return () => {
17 | window.removeEventListener('keydown', closeModalIfEscaped)
18 | }
19 | }, [closeEditMode])
20 |
21 | const handleFormSubmit = (e) => {
22 | e.preventDefault();
23 | updateTask({...editedTask, name: updatedTaskName})
24 | }
25 |
26 | return (
27 | {e.target === e.currentTarget && closeEditMode()}}
31 | >
32 |
61 |
62 | )
63 | }
64 | export default EditForm
--------------------------------------------------------------------------------
/src/components/TaskItem.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | // styles
4 | import styles from './TaskItem.module.css';
5 |
6 | // Library imports
7 | import { CheckIcon } from '@heroicons/react/24/outline';
8 | import { PencilSquareIcon } from '@heroicons/react/24/outline';
9 | import { TrashIcon } from '@heroicons/react/24/outline';
10 |
11 | const TaskItem = ({ task, deleteTask, toggleTask, enterEditMode }) => {
12 | const [isChecked, setIsChecked ] = useState(task.checked);
13 |
14 | const handleCheckboxChange = (e) =>{
15 | setIsChecked(!isChecked);
16 | toggleTask(task.id);
17 | }
18 |
19 | return (
20 |
21 |
22 |
30 |
39 |
40 |
41 |
48 |
49 |
56 |
57 |
58 |
59 | )
60 | }
61 | export default TaskItem
--------------------------------------------------------------------------------
/src/components/TaskItem.module.css:
--------------------------------------------------------------------------------
1 | .task {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 | gap: .6em;
6 | font-size: var(--_size);
7 | border: .2em solid hsl(var(--muted) / 0.8);
8 | padding: .6em;
9 | border-radius: calc(var(--_radius) * 2);
10 | }
11 |
12 | .task-group {
13 | display: flex;
14 | align-items: center;
15 | --taskgroup-gap: .5em;
16 | gap: var(--taskgroup-gap);
17 | }
18 |
19 | .label {
20 | position: relative;
21 | cursor: pointer;
22 | text-align: left;
23 | line-height: 1.4;
24 | }
25 |
26 | .checkbox {
27 | flex-shrink: 0;
28 | appearance: none;
29 | -webkit-appearance: none;
30 | border-radius: var(--_radius);
31 | width: 1em;
32 | height: 1em;
33 | background-color: hsl(var(--muted));
34 | border-radius: var(--_radius);
35 | box-shadow:
36 | 0 0 .5em hsl(var(--accent) / .1),
37 | 0 0 0 0.05em hsl(var(--accent) / .5),
38 | 0 0 0 -0.2em hsl(var(--accent));
39 | transition: box-shadow var(--_tspeed_fast) ease-in-out,
40 | background-color 80ms ease-in-out;
41 | }
42 |
43 | .checkbox:focus {
44 | outline: none;
45 | }
46 |
47 | .checkbox:is(:focus-visible, :hover) {
48 | box-shadow:
49 | 0 0 0 hsl(var(--bg)),
50 | 0 0 0 .05em hsl(var(--accent)),
51 | 0 0 0 .225em hsl(var(--accent) / .3);
52 | }
53 |
54 | .checkmark {
55 | content: '';
56 | position: absolute;
57 | width: 1em;
58 | height: 1em;
59 | display: grid;
60 | place-items: center;
61 | top: 50%;
62 | color: hsl(var(--muted));
63 | border-radius: var(--_radius);
64 | transform: translate3d(calc(-100% - var(--taskgroup-gap)), -50%, 0);
65 | transition: background-color 80ms ease-in-out;
66 | }
67 |
68 | .checkmark svg {
69 | width: .75em;
70 | height: .75em;
71 | }
72 |
73 | .checkbox:checked {
74 | background-color: hsl(var(--accent));
75 | }
76 |
77 | .checkbox:checked+label {
78 | text-decoration: line-through;
79 | }
80 |
81 | .delete {
82 | --accent: var(--accent1);
83 | }
84 |
85 | .loading {
86 | color: hsl(var(--accent));
87 | font-size: var(--_size);
88 | font-weight: bold;
89 | animation: pulse 2s infinite ease-in-out;
90 | }
91 |
92 | @keyframes pulse {
93 |
94 | 0%,
95 | 100% {
96 | opacity: 1;
97 | }
98 |
99 | 50% {
100 | opacity: 0.5;
101 | }
102 | }
103 |
104 | .error {
105 | color: hsl(var(--accent1));
106 | font-size: var(--_size);
107 | text-align: center;
108 | }
--------------------------------------------------------------------------------
/src/components/TaskList.jsx:
--------------------------------------------------------------------------------
1 | // component import
2 | import TaskItem from './TaskItem';
3 |
4 | // styles
5 | import styles from './TaskList.module.css';
6 |
7 | const TaskList = ({ tasks, deleteTask, toggleTask, enterEditMode }) => {
8 | return (
9 |
10 | {tasks.sort((a, b) => b.id - a.id).map(task => (
11 |
18 | ))
19 | }
20 |
21 | )
22 | }
23 | export default TaskList
--------------------------------------------------------------------------------
/src/components/TaskList.module.css:
--------------------------------------------------------------------------------
1 | .tasks {
2 | display: grid;
3 | list-style-type: none;
4 | gap: 1.5em;
5 | }
--------------------------------------------------------------------------------
/src/hooks/useLocalStorage.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from "react";
2 | import { useState } from "react"
3 |
4 | const useLocalStorage = (key, initialValue) => {
5 | const [value, setValue] = useState(() => {
6 | try {
7 | const localValue = window.localStorage.getItem(key);
8 | return localValue ? JSON.parse(localValue) : initialValue;
9 | } catch (err) {
10 | console.log(err)
11 | return initialValue;
12 | }
13 | })
14 |
15 | useEffect(() => {
16 | window.localStorage.setItem(key, JSON.stringify(value))
17 | }, [key, value])
18 |
19 | return [value, setValue]
20 | }
21 | export default useLocalStorage
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | *,
2 | *::after,
3 | *::before {
4 | box-sizing: border-box;
5 | margin: 0;
6 | padding: 0;
7 | }
8 |
9 | button {
10 | font: inherit;
11 | border: none;
12 | cursor: pointer;
13 | }
14 |
15 | input,
16 | label {
17 | font: inherit;
18 | }
19 |
20 | :root {
21 | --_hue: 245;
22 | --_size: 1.8rem;
23 | --_radius: 0.2em;
24 | --_tspeed_fast: 180ms;
25 | --_tspeed_slow: 300ms;
26 | --_ttype_squish: cubic-bezier(0.86, -0.1, 0.27, 1.15);
27 |
28 | /* Light Mode */
29 | --bg--light: var(--_hue) 30% 94%;
30 | --txt--light: var(--_hue) 40% 5%;
31 | --accent--light: var(--_hue) 55% 50%;
32 | --accent1--light: 10 80% 60%;
33 | --muted--light: var(--_hue) 30% 99%;
34 | /* Dark Mode */
35 | --bg--dark: var(--_hue) 15% 10%;
36 | --txt--dark: var(--_hue) 30% 88%;
37 | --accent--dark: var(--_hue) 50% 50%;
38 | --accent1--dark: 10 55% 50%;
39 | --muted--dark: var(--_hue) 20% 4%;
40 | }
41 |
42 | @media (prefers-color-scheme: dark) {
43 | :root {
44 | --bg: var(--bg--dark);
45 | --txt: var(--txt--dark);
46 | --accent: var(--accent--dark);
47 | --accent1: var(--accent1--dark);
48 | --muted: var(--muted--dark);
49 | color-scheme: dark;
50 | }
51 | }
52 |
53 | @media (prefers-color-scheme: light) {
54 | :root {
55 | --bg: var(--bg--light);
56 | --txt: var(--txt--light);
57 | --accent: var(--accent--light);
58 | --accent1: var(--accent1--light);
59 | --muted: var(--muted--light);
60 | color-scheme: light;
61 | }
62 | }
63 |
64 | [color-scheme="dark"] {
65 | --bg: var(--bg--dark);
66 | --txt: var(--txt--dark);
67 | --accent: var(--accent--dark);
68 | --accent1: var(--accent1--dark);
69 | --muted: var(--muted--dark);
70 | color-scheme: dark;
71 | }
72 |
73 | [color-scheme="light"] {
74 | --bg: var(--bg--light);
75 | --txt: var(--txt--light);
76 | --accent: var(--accent--light);
77 | --accent1: var(--accent1--light);
78 | --muted: var(--muted--light);
79 | color-scheme: light;
80 | }
81 |
82 | @media screen and (max-width: 768px) {
83 | :root {
84 | --_size: 1.3rem;
85 | }
86 | }
87 |
88 | /* prefers reduced motion */
89 | @media (prefers-reduced-motion: reduce) {
90 | :root {
91 | --_tspeed_slow: 50ms;
92 | --_tspeed_fast: 50ms;
93 | }
94 | }
95 |
96 | body {
97 | min-height: 100vh;
98 | display: grid;
99 | justify-items: center;
100 | font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
101 | Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
102 | background-color: hsl(var(--bg));
103 | color: hsl(var(--txt));
104 | }
105 |
106 | ::selection {
107 | background: hsl(var(--accent) / 0.8);
108 | color: hsl(var(--bg));
109 | }
110 |
111 | h1 {
112 | font-size: calc(var(--_size) * 1.3);
113 | text-align: center;
114 | }
115 |
116 | .container {
117 | margin: 4vmax max(calc((100vw - 70rem) / 2), 1.5rem) 6em;
118 | display: grid;
119 | gap: clamp(2rem, 3.5vmax, 8rem);
120 | text-align: center;
121 | }
122 |
123 | hr {
124 | border: 0;
125 | height: 0.4em;
126 | background-color: hsl(var(--accent) / 0.5);
127 | border-radius: var(--_radius);
128 | }
129 |
130 | .btn {
131 | max-width: fit-content;
132 | display: flex;
133 | place-items: center;
134 | gap: 0.5em;
135 | background-color: hsl(var(--accent));
136 | color: hsl(var(--bg));
137 | text-decoration: none;
138 | padding: 0.5em;
139 | border-radius: var(--_radius);
140 | box-shadow: 0.05em 0.1em 0.9em hsl(var(--accent) / 0.3),
141 | 0 0 0 -0.1em hsl(var(--bg)), 0 0 0 -0.2em hsl(var(--accent));
142 | transition: box-shadow var(--_tspeed_fast) var(--_ttype_squish),
143 | background-color var(--_tspeed_fast) var(--_ttype_squish);
144 | }
145 |
146 | .btn :where(svg, img, span) {
147 | pointer-events: none;
148 | }
149 |
150 | .btn :where(svg, img) {
151 | width: var(--_size);
152 | height: var(--_size);
153 | }
154 |
155 | .btn:where(:active, :hover) {
156 | background-color: hsl(var(--accent) / 0.7);
157 | box-shadow: 0 0 0 hsl(var(--accent) / 0.3), 0 0 0 -0.1em hsl(var(--bg)),
158 | 0 0 0 -0.2em hsl(var(--accent));
159 | }
160 |
161 | .btn:focus {
162 | outline: none;
163 | }
164 |
165 | .btn:focus-visible {
166 | box-shadow: 0 0 0 hsl(var(--accent) / 0.3), 0 0 0 0.2em hsl(var(--bg)),
167 | 0 0 0 0.4em hsl(var(--accent) / 0.7);
168 | }
169 |
170 | .todo {
171 | display: flex;
172 | gap: 0.5em;
173 | font-size: var(--_size);
174 | text-align: left;
175 | }
176 |
177 | .wrapper {
178 | flex: 1 1 100%;
179 | position: relative;
180 | display: grid;
181 | gap: 0.2em;
182 | }
183 |
184 | .label {
185 | text-transform: uppercase;
186 | font-size: 0.7em;
187 | pointer-events: none;
188 | letter-spacing: 0.05em;
189 | margin-inline: 0.45em;
190 | position: absolute;
191 | top: 50%;
192 | transform: translateY(-50%);
193 | padding: 0.1em 0.35em;
194 | background-color: hsl(var(--muted));
195 | transition: transform var(--_tspeed_fast) var(--_ttype_squish),
196 | background-color var(--_tspeed_fast) var(--_ttype_squish);
197 | }
198 |
199 | .input {
200 | border: none;
201 | border-radius: var(--_radius);
202 | padding: 0.35em 0.55em;
203 | width: 100%;
204 | background-color: hsl(var(--muted));
205 | caret-color: hsl(var(--accent));
206 | box-shadow: 0 0 0 -0.1em hsl(var(--bg)), 0 0 0 -0.2em hsl(var(--accent) / 0.8);
207 | transition: box-shadow var(--_tspeed_fast) var(--_ttype_squish);
208 | }
209 |
210 | .input:focus {
211 | outline: none;
212 | box-shadow: 0 0 0 0.2em hsl(var(--bg)), 0 0 0 0.4em hsl(var(--accent) / 0.8);
213 | }
214 |
215 | .input:focus~.label,
216 | .input:not(:placeholder-shown)~.label {
217 | transform: translate3d(0, -3em, 0);
218 | background-color: hsl(var(--bg));
219 | color: hsl(var(--accent) / 0.8);
220 | }
221 |
222 | .input::placeholder {
223 | opacity: 0;
224 | }
225 |
226 | [role="dialog"] {
227 | position: fixed;
228 | z-index: 100;
229 | inset: 0;
230 | padding-inline: 2vmax;
231 | display: grid;
232 | place-items: center;
233 | background-color: hsl(var(--bg) / 0.7);
234 | }
235 |
236 | [role="dialog"] .todo {
237 | max-width: 40ch;
238 | padding: 2em 1.3em 1.3em;
239 | background-color: hsl(var(--bg));
240 | border-radius: var(--_radius);
241 | border: 0.1em solid hsl(var(--accent) / 0.3);
242 | box-shadow: 0 -1em 3em hsl(var(--muted)), 0 1em 3em hsl(var(--accent) / 0.2);
243 | }
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root')).render(
7 |
8 |
9 |
10 | )
11 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------