├── .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 |
56 |

My Task List

57 |
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 |
24 |
25 | setTask(e.target.value)} 31 | required 32 | autoFocus 33 | maxLength={60} 34 | placeholder="Enter Task" 35 | /> 36 | 40 |
41 | 48 |
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 |
36 |
37 | setUpdatedTaskName(e.target.value)} 43 | required 44 | autoFocus 45 | maxLength={60} 46 | placeholder="Update Task" 47 | /> 48 | 52 |
53 | 60 |
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 | 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 | --------------------------------------------------------------------------------